OOPs-Konzepte für Anfänger: Polymorphismus erklärt
Veröffentlicht: 2021-12-10In Hochsprachen wie Python und Java bezieht sich OOP oder objektorientierte Programmierung eher auf die Organisation des Softwaredesigns um Daten und Objekte als um Logik und Funktionen. Ein Objekt ist als Datenfeld mit eindeutigen Attributen und Verhalten definiert. Mit anderen Worten, OOP konzentriert sich eher auf Objekte als auf Logik. Ein solches Programmiermodell ist ideal für große und komplexe Programme, die aktive Updates und Wartung erfordern. Außerdem bringt es die zusätzlichen Vorteile der Skalierbarkeit, Effizienz und Wiederverwendbarkeit von Code auf den Tisch.
OOP hat vier grundlegende Bausteine – Polymorphismus, Kapselung, Abstraktion und Vererbung. Da der Umfang unseres Artikels auf Polymorphismus in OOPs beschränkt ist, werden wir Polymorphismus im Detail diskutieren, einschließlich Beispielen für Polymorphismus in Java und Polymorphismus in Python.
Lernen Sie Softwarekurse online von den besten Universitäten der Welt. Verdienen Sie Executive PG-Programme, Advanced Certificate-Programme oder Master-Programme, um Ihre Karriere zu beschleunigen.
Inhaltsverzeichnis
Polymorphismus-Definition
Die einfachste Definition von Polymorphismus wäre, dass Polymorphismus bedeutet, in verschiedenen Formen zu existieren. Es hat seine Wurzeln in zwei griechischen Begriffen – „poly“, was „zahlreich“ bedeutet, und „morph“, was übersetzt „Formen“ bedeutet.
Um das Konzept besser zu verstehen, nehmen wir zunächst ein einfaches Beispiel. Nehmen Sie das Beispiel des Cursorverhaltens, genau denselben Cursor, den Sie jedes Mal auf dem Bildschirm bewegen sehen, wenn Sie eine Maus oder ein Trackpad verwenden. Abhängig von den Aktionen des Benutzers oder dem Programmmodus kann der Cursor unterschiedliche Formen annehmen, wie beispielsweise ein Pfeil, ein Kreuz, eine Linie oder ein Zeigefinger.
Polymorphismus ist eines der wichtigsten Merkmale von OOP. In Java und Python können Variablen, Objekte und Funktionen in vielen Formen existieren. Beim Polymorphismus definiert eine Unterklasse oder Methode ihre Attribute und Verhaltensweisen, während einige der Funktionalitäten ihrer Elternklasse beibehalten werden. Das bringt uns zur Vererbung, mit der Sie Klassenhierarchien erstellen können, in denen eine Basisklasse ihre Attribute und ihr Verhalten an eine abgeleitete Klasse übergibt. Anschließend können die Funktionalitäten der abgeleiteten Klasse beliebig modifiziert oder erweitert werden. Zu diesem Zweck stellt Polymorphismus sicher, dass die richtige Methode basierend auf dem Typ des aufrufenden Objekts ausgeführt wird.
Um es ins rechte Licht zu rücken, nehmen Sie an, Sie haben eine Klasse, die das Datum und die Uhrzeit anzeigt. Jetzt erstellen Sie eine Methode, die die Klasse erbt und die Meldung „Hallo!“ anzeigt. zusammen mit Datum und Uhrzeit.
Beispiel für Polymorphismus in Java
Betrachten Sie die Oberklasse „Shapes“, die eine Methode „area()“ hat. Unterklassen unter „Form“ können „Rechteck“, „Kreis“, „Dreieck“ usw. sein, und jede Unterklasse hat ihre eigene Methode zur Flächenberechnung. Unter Anwendung der Konzepte der Vererbung und Polymorphie verwenden die Unterklassen die Methode „area()“, um die Formel zur Berechnung der Fläche der jeweiligen Form zu finden.
Klasse Formen {
öffentlicher leerer Bereich () {
System.out.println(“Die Formel für den Bereich von“);
}
}
Klasse Dreieck erweitert Formen {
öffentlicher leerer Bereich () {
System.out.println(“Dreieck ist 1/2 * Basis * Höhe “);
}
}
Klasse Kreis erweitert Formen {
öffentlicher leerer Bereich () {
System.out.println("Kreis ist 3,14 * Radius * Radius ");
}
}
Klasse Haupt {
public static void main(String[] args) {
Formen myShape = new Shapes(); // Ein Shapes-Objekt erstellen
Formen myTriangle = new Triangle(); // Erstellen Sie ein Triangle-Objekt
Formen myCircle = new Circle(); // Erstellen Sie ein Circle-Objekt
meineForm.area();
myTriangle.area();
meineForm.area();
meinKreis.area();
}
}
Die Ausgabe des obigen Programmcodes sieht wie folgt aus:
Die Formel für die Fläche des Dreiecks ist 1/2 * Basis * Höhe
Die Formel für die Fläche des Kreises lautet 3,14 * Radius * Radius
Arten von Polymorphismus in OOPs
Es gibt zwei Arten von Polymorphismus in OOPs – statisch (Polymorphismus zur Kompilierzeit) und dynamisch (Polymorphismus zur Laufzeit).
1. Statischer Polymorphismus
In Java ist das Überladen von Methoden die häufigste Art von statischem Polymorphismus. Es kann mehrere Methoden mit demselben Namen innerhalb derselben Klasse, aber mit unterschiedlichen Parametern erstellen. Die Parametersätze müssen sich in mindestens einem der folgenden drei Kriterien unterscheiden:
- Die Methoden müssen eine unterschiedliche Anzahl von Parametern haben.
- Die Parametertypen müssen unterschiedlich sein. Wenn beispielsweise eine Methode einen Long akzeptiert, akzeptiert die andere einen String.
- Die Methoden sollten die Parameter in unterschiedlicher Reihenfolge annehmen. Wenn beispielsweise Methode 1 einen Long und einen String akzeptiert, muss Methode 2 einen String und dann einen Long akzeptieren.
Beim Überladen von Methoden wählt der Compiler beim Aufrufen der Methode basierend auf den beim Aufruf übergebenen Parametern aus, welche Methode aufgerufen werden soll. Dies findet zur Kompilierzeit statt, und daher wird diese Art von Polymorphismus auch als Kompilierzeit-Polymorphismus bezeichnet.
Es folgt ein Java-Codebeispiel, um den Polymorphismus zur Kompilierzeit zu zeigen. In diesem Beispiel wird die Methode added() mit zwei verschiedenen Arten von Parametern überladen.
Paket staticPolymorphism;
öffentliche Klasse Zusatz
{
ungültige Summe (int x, int y)
{
int c = x+y;
System.out.println(“ Addition von zwei Zahlen :” +c); }
void sum(int x, int y, int z)
{
int c = x+y+z;
System.out.println(“ Addition von drei Zahlen :” +c); }
public static void main(String[] args)
{
Addition obj = new Addition();
obj.summe ( 45,34);
obj.summe(60, 32, 11);
}
}
Die Ausgabe des obigen Programms wird sein:
Addition von zwei Zahlen: 79
Addition von drei Zahlen: 103
2. Dynamischer Polymorphismus
Dynamischer oder Laufzeitpolymorphismus wird durch Methodenüberschreibung erreicht. Hier befinden sich Methoden in verschiedenen Formen in verschiedenen Klassen (Methodenüberschreibung), und statt zur Kompilierzeit wird der Aufruf einer überschriebenen Methode zur Laufzeit aufgelöst. Wenn Sie nun ein Objekt einer Klassenreferenz zuweisen und eine Methode aufrufen, wird die Methode in der Klasse des Objekts ausgeführt. Da das Objekt zur Laufzeit erstellt wird, wird erst zur Laufzeit entschieden, welche Form der Methode (im Objekt) ausgeführt werden soll.
Es folgt ein Java-Codebeispiel, um Laufzeitpolymorphismus zu zeigen . Im Beispiel gibt es eine Oberklasse „Tier“ und drei Unterklassen „Känguru“, „Tiger“ und „Fisch“. Unterklassen erweitern die Oberklasse und überschreiben ihre „move()“-Methode. Die Methode „move()“ wird von der Referenzvariablen der übergeordneten Klasse „Animal“ aufgerufen.
Klasse Tier{
Leere Bewegung () {
System.out.println("Tiere bewegen sich");
}
}
Klasse Känguru erweitert Tier{
Leere Bewegung () {
System.out.println("Kängurus springen");
}
}
Klasse Tiger verlängert Tier{
Leere Bewegung () {
System.out.println("Tigers walk");
}
}
Klasse Fisch erweitert Tier{
Leere Bewegung () {
System.out.println(“Fische schwimmen”);
}
}
Klasse Haupt{
public static void main(String args[]){
Tier A = neues Tier();
Tier k = neues Känguru(); // upcasting
Tier t = neuer Tiger(); // upcasting
Tier f = neuer Fisch (); // upcasting
Ein Schritt();
k.move();
t.move();
f.move();
}
}
Die Ausgabe des obigen Programms wird sein:
Tiere bewegen sich
Kängurus springen
Tiger gehen
Fische schwimmen
Polymorphismus in Python
Es gibt drei Arten von Polymorphismus in Python – Operatorpolymorphismus, Funktionspolymorphismus und Klassenpolymorphismus. Python erlaubt auch das Überschreiben von Methoden, aber nicht das Überladen von Methoden.
1. Operatorpolymorphismus
In Python hat der Operator „+“ eine doppelte Verwendung. Er wird für arithmetische Additionsoperationen bei ganzzahligen Datentypen verwendet, und bei Zeichenfolgen führt der '+'-Operator Verkettungen durch.
Im Folgenden finden Sie ein Python-Codebeispiel, in dem der Operator „+“ eine Addition für ganzzahlige Datentypen ausführt:
num1 = 4
num2 = 5
print(num1+num2)
Die Ausgabe des obigen Programmcodes ist '9'.
Es folgt ein Python-Codebeispiel, in dem der Operator „+“ eine Verkettung von Zeichenfolgendatentypen durchführt:
str1 = „Gut“
str2 = „Abend“
print(str1+“ „+str2)
Die Ausgabe des obigen Programms wird "Guten Abend" sein.
2. Funktionspolymorphismus
Die Funktion „len()“ in Python ist mit verschiedenen Datentypen wie Liste, Zeichenfolge, Tupel, Wörterbuch und Set kompatibel, gibt jedoch spezifische Informationen für jeden Datentyp zurück. Hier ist ein Beispiel:
print(len("Programmierer"))
print(len([„Python“, „Java“, „C“]))
print(len({"Name": "Kathy", "Adresse": "Texas"}))
Das obige Programm wird die folgende Ausgabe haben:
9
3
2
3. Klassenpolymorphismus
Python erweitert das Konzept des Polymorphismus und ermöglicht es mehreren Klassen, Methoden mit demselben Namen zu haben. Unten ist ein Beispiel, um Polymorphismus in Klassenmethoden in Python zu zeigen. In dem Beispiel gibt es zwei Klassen, „Katze“ und „Hund“. Sie haben eine ähnliche Struktur und die gleichen Methodennamen ‚make_sound()‘ und ‚info()‘.
Klasse Katze:
def __init__(selbst, Name, Alter):
self.name = name
self.age = Alter
def info(selbst):
print(f"Ich bin eine Katze. Mein Name ist {self.name}. Ich bin {self.age} Jahre alt.")
def make_sound(self):
drucken ("Miau")
Klasse Hund:
def __init__(selbst, Name, Alter):
self.name = name
self.age = Alter
def info(selbst):
print(f"Ich bin ein Hund. Mein Name ist {self.name}. Ich bin {self.age} Jahre alt.")
def make_sound(self):
print("Barke")
cat1 = Katze („Minnie“, 3)
Hund1 = Hund („Tom“, 6)
für Tier in (Katze1, Hund1):
animal.make_sound()
tier.info()
animal.make_sound()
Die Ausgabe wird wie folgt sein:
Miau
Ich bin eine Katze. Mein Name ist Minni. Ich bin 3 Jahre alt.
Miau
Rinde
Ich bin ein Hund. Mein Name ist Tom. Ich bin 6 Jahre alt.
Rinde
4. Methodenüberschreibung
Python erlaubt auch untergeordneten Klassen, Attribute und Methoden von der übergeordneten Klasse zu erben. Bestimmte Methoden und Attribute können neu definiert werden, um sie an die untergeordnete Klasse anzupassen (Methodenüberschreibung). Der Polymorphismus ermöglicht dann den Zugriff auf die überschriebenen Methoden und Attribute mit demselben Namen wie die übergeordnete Klasse.
Im Folgenden finden Sie ein Python-Codebeispiel, um das Überschreiben von Methoden zu veranschaulichen:
von math import pi
Klasse Form:
def __init__(selbst, Name):
self.name = name
def Bereich (selbst):
passieren
de facto (selbst):
return „Ich bin eine geschlossene Figur.“
def __str__(selbst):
self.name zurückgeben
Klasse Quadrat (Form):
def __init__(selbst, Länge):
super().__init__(“Quadrat”)
self.length = Länge
def Bereich (selbst):
Rückgabe selbst.Länge**2
de facto (selbst):
return „Jeder Winkel in einem Quadrat ist gleich 90 Grad.“
Klasse Kreis (Form):
def __init__(selbst, Radius):
super().__init__(“Kreis”)
self.radius = Radius
def Bereich (selbst):
gib pi*self.radius**2 zurück
a = Quadrat(4)
b = Kreis(7)
drucken(b)
print(b.fakt())
print(a.fact())
print(b.Bereich())
Das obige Programm wird die folgende Ausgabe haben:
Kreis
Ich bin eine geschlossene Figur.
Jeder Winkel in einem Quadrat ist gleich 90 Grad.
153.93804002589985
Erfahren Sie mehr über das Überschreiben von Methoden.
Vorteile des Polymorphismus in OOPs
Polymorphismus in OOPs hat drei signifikante Vorteile. Sie sind wie folgt:
- Polymorphismus ermöglicht die Wiederverwendbarkeit von Code. Sobald die Klassen also geschrieben, getestet und implementiert sind, können Sie sie immer wieder verwenden. Außerdem kann der Code geändert werden, ohne den ursprünglichen Code zu beeinflussen. All dies spart dem Programmierer viel Zeit.
- Beim Polymorphismus können mehrere Datenwerte in einer einzigen Variablen gespeichert werden. Darüber hinaus kann der Wert einer Variablen, der von einer Oberklasse in eine Unterklasse geerbt wurde, modifiziert werden, ohne den Wert der Variablen in der Oberklasse oder irgendeiner Unterklasse zu ändern.
- Schließlich arbeitet Polymorphismus mit weniger Codezeilen, was wiederum das Debuggen für den Programmierer erleichtert.
Weg nach vorn
upGrad bietet in Partnerschaft mit der renommierten Liverpool John Moores University ein strenges Online -Programm zum Master of Science in Data Science an für Berufstätige, die eine Karriere in der Datenwissenschaft anstreben. Der Kurs endet mit einem Master-Abschluss der LJMU und einer Executive PG Program-Zertifizierung des IIIT Bangalore.
Programm-Highlights:
- Über 500 Stunden Inhalt, über 60 Fallstudien und Projekte, über 20 Live-Sitzungen
- Umfassende Abdeckung von über 14 Tools und Software wie Python, AWS, MySQL und mehr
- Coaching-Sessions mit Branchenexperten
- Peer-Learning und Branchen-Networking
- 360-Grad-Karrierehilfe
upGrad ist heute eine der besten höheren EdTech-Plattformen und inspiriert und bereitet Lernende weiterhin durch eine Kombination aus modernster Technologie, der neuesten Pädagogik, Industriepartnerschaften und einer erstklassigen Fakultät vor.
Lernen Sie Data Science-Kurse online von den besten Universitäten der Welt. Verdienen Sie Executive PG-Programme, Advanced Certificate-Programme oder Master-Programme, um Ihre Karriere zu beschleunigen.
Warum wird Polymorphismus in OOPs verwendet?
In OOPs ist Polymorphismus die Methode, die verschiedene Aufgaben basierend auf der Klasse des Objekts ausführt, die sie aufruft. Somit wird eine Nachricht an Objekte mehrerer Klassen gesendet, und jedes Objekt antwortet gemäß den Eigenschaften der Klasse.
Was ist Methodenüberladung in Java?
In Java können sich zwei oder mehr Methoden mit demselben Namen in ihren Parametern unterscheiden (unterschiedliche Arten von Parametern, unterschiedliche Anzahl von Parametern oder beides). Solche Methoden werden als überladene Methoden bezeichnet, und die Funktion wird als Methodenüberladung bezeichnet.
Was ist der Unterschied zwischen Überladen und Überschreiben?
Wenn zwei oder mehr Methoden in derselben Klasse unterschiedliche Parameter, aber denselben Namen haben, wird dies als Überladen bezeichnet. Auf der anderen Seite wird überschrieben, wenn die Oberklasse und die untergeordnete Klasse dieselbe Methodensignatur (Name und Parameter) haben.