Polymorphism in der objektorientierten Programmierung

Subtyp polymorphism, fast allgemein genannter polymorphism im Zusammenhang der objektorientierten Programmierung, ist die Fähigkeit, eine Variable, eine Funktion oder einen Gegenstand zu schaffen, der mehr als eine Form hat. Im Prinzip kann polymorphism in anderen Rechenzusammenhängen entstehen und teilt wichtige Ähnlichkeiten mit dem Konzept der Entartung in der Biologie.

Der Zweck von polymorphism ist, einen Stil durchzuführen, genannt Nachrichtenübergang in der Literatur zu programmieren, in der Gegenstände von verschiedenen Typen eine allgemeine Schnittstelle von Operationen wegen Benutzer definieren. Auf stark getippten Sprachen, polymorphism bedeutet gewöhnlich, dass Typ A irgendwie auf Typ B zurückzuführen ist, oder Typ C eine Schnittstelle durchführt, die Typ B vertritt. Auf schwach getippten Sprachen sind Typen implizit polymorph.

Die Maschinenbediener-Überbelastung der numerischen Maschinenbediener (+, - *, und/) erlaubt polymorphe Behandlung der verschiedenen numerischen Typen: ganze Zahl, nicht unterzeichnete ganze Zahl, Hin- und Herbewegung, Dezimalzahl, usw.; von denen jeder verschiedene Reihen, Bit-Muster und Darstellungen haben. Ein anderes allgemeines Beispiel ist der Gebrauch "+" Maschinenbediener, der ähnliche oder polymorphe Behandlung von Zahlen (Hinzufügung), Schnur-(Verkettung) und Listen (Verhaftung) erlaubt. Das ist eine kleinere verwendete Eigenschaft von polymorphism.

Der primäre Gebrauch von polymorphism in der Industrie (objektorientierte Programmiertheorie) ist die Fähigkeit von Gegenständen, die verschiedenen Typen gehören, um auf die Methode, das Feld oder die Eigentumsanrufe desselben Namens, jedes gemäß einem passenden mit dem Typ spezifischen Verhalten zu antworten. Der Programmierer (und das Programm) muss den genauen Typ des Gegenstands im Voraus nicht wissen, und so wird das genaue Verhalten an der Durchlaufzeit bestimmt (das wird spät genannt bindend oder dynamische Schwergängigkeit).

Die verschiedenen Gegenstände haben nur Bedürfnis eingeschlossen, eine vereinbare Schnittstelle den Kunden zu präsentieren (Routinen nennend). D. h. es muss öffentliche oder innere Methoden, Felder, Ereignisse und Eigenschaften mit demselben Namen und denselben Parameter-Sätzen in allen Superklassen, Unterklassen und Schnittstellen geben. Im Prinzip können die Objektarten ohne Beziehung sein, aber da sie eine allgemeine Schnittstelle teilen, werden sie häufig als Unterklassen derselben Superklasse durchgeführt. Obwohl es nicht erforderlich ist, wird es verstanden, dass die verschiedenen Methoden auch ähnliche Ergebnisse (zum Beispiel erzeugen werden, Werte desselben Typs zurückgebend).

(Subtyp) polymorphism ist nicht dasselbe als Methode-Überbelastung oder das Methode-Überlaufen, (der stattdessen als ad hoc polymorphism bekannt ist). Polymorphism ist nur mit der Anwendung spezifischer Durchführungen zu einer Schnittstelle oder einer allgemeineren Grundklasse beschäftigt. Methode-Überbelastung bezieht sich auf Methoden, die denselben Namen, aber verschiedene Unterschriften innerhalb derselben Klasse haben. Das Methode-Überlaufen besteht darin, wo eine Unterklasse die Durchführung ein oder mehr von den Methoden seines Elternteils ersetzt. Weder Methode-Überbelastung noch das Methode-Überlaufen sind durch sich Durchführungen von polymorphism.

Beispiele

Java

//von der Datei Animal.java

Paket org.wikipedia.examples;

öffentliches Schnittstelle-Tier {\

öffentliches Schnur-Gespräch ;

}\

//von der Datei Cat.java

Paket org.wikipedia.examples;

öffentliche Klasse Cat führt Tier {\durch

öffentliches Schnur-Gespräch {\

geben Sie "Cat zurück sagt Miauen!";

}\

}\

//von der Datei Dog.java

Paket org.wikipedia.examples;

öffentlicher Klassenhund führt Tier {\durch

öffentliches Schnur-Gespräch {\

geben Sie "Hund zurück sagt Einschlag! Einschlag!";

}\}\

//von der Datei PolymorphismExample.java

Paket org.wikipedia.examples;

importieren Sie java.util. *;

öffentliche Klasse PolymorphismExample {\

öffentliche statische leere Hauptsache (Schnur [] args) {\

Sammlung

animals.add (neue Cat );

animals.add (neuer Hund );

für (Tier a: Tiere) {\

System.out.println (a.talk );

}\

}\}\

//Wenn Sie das führen, ist die Produktion:

//Cat sagt Miauen!

//Hund sagt Einschlag! Einschlag!

</Quelle>

Pythonschlange

Klassentier:

def __ init __ (selbst, Name): # Konstrukteur der Klasse

self.name = nennen

Def-Gespräch (selbst): # Abstrakte Methode, die durch die Tagung nur definiert ist

erziehen Sie NotImplementedError ("Unterklasse muss abstrakte Methode" durchführen)

Klasse Cat (Tier):

Def-Gespräch (selbst):

geben Sie 'Miauen zurück!'

Klassenhund (Tier):

Def-Gespräch (selbst):

geben Sie 'Einschlag zurück! Einschlag!'

Tiere = [Cat ('Missy'),

Hund ('Mädchen')]

für das Tier in Tieren:

drucken Sie animal.name + ':' + animal.talk

  1. druckt den folgenden:
  2. Missy: Miauen Sie!
  3. Mädchen: Einschlag! Einschlag!
</Quelle>

Parametrischer Polymorphism

In der Informatik hat der Begriff polymorphism mehrere verschiedene, aber zusammenhängende Bedeutungen; einer von diesen, bekannt als parametrischer polymorphism in der Typ-Systemtheorie und den funktionellen Programmiersprachen, ist als allgemeine Programmierung im Gegenstand Orientierte Programmiergemeinschaft bekannt und wird durch viele Sprachen einschließlich C ++, C# und Java unterstützt.

Generics erlauben Übersetzungszeit-Typ-Sicherheit und andere Vorteile und/oder Nachteile abhängig von der Durchführung der Sprache.

C ++ führt parametrischen polymorphism durch Schablonen durch. Der Gebrauch von Schablonen verlangt, dass der Bearbeiter ein getrenntes Beispiel der templated Klasse oder Funktion für jede Versetzung von damit verwendeten Typ-Rahmen erzeugt, der führen kann, um bloat und das Schwierigkeitsbeseitigen zu codieren. Ein Vorteil C ++ haben Schablonen über Java, und C# ist, dass sie Schablone metaprogramming berücksichtigen, der eine Weise ist, etwas vom Code während der Übersetzung aber nicht der Durchlaufzeit zu vorbewerten. Jedoch, seitdem C ++ erlaubt Schablonen, so spezialisiert zu werden, sie, benehmen sich verschieden wenn verwendet, mit verschiedenen Typen, parametricity wird nicht beachtet.

Java parametrischer polymorphism wird generics genannt und durch die Typ-Ausradierung durchgeführt. Diese Designentscheidung wurde getroffen, um umgekehrt Vereinbarkeit zu sichern und sicherzustellen, dass Java generics mit dem spezifischen Code zwischendurchführbar ist.

C# wird parametrischer polymorphism generics genannt und durch reification durchgeführt, C# die einzige Sprache der drei machend, die parametrischen polymorphism als ein Mitglied der ersten Klasse der Sprache unterstützt. Diese Designwahl wird gestärkt, um zusätzliche Funktionalität, wie das Erlauben des Nachdenkens mit der Bewahrung von allgemeinen Typen, sowie dem Vermindern von einigen der Beschränkungen der Ausradierung (solcher als unfähig seiend zur Verfügung zu stellen, allgemeine Reihe zu schaffen). Das bedeutet auch, dass es keinen Leistungserfolg von Laufzeitwürfen und normalerweise teuren boxenden Konvertierungen gibt. Wenn primitiv und Werttypen als allgemeine Argumente verwendet werden, bekommen sie Spezialdurchführungen, effiziente allgemeine Sammlungen und Methoden berücksichtigend.

Siehe auch

  • Ente, die tippt
  • Erbe (Informatik)
  • Polymorphism
  • Polymorphe Vereinigung
  • Virtuelle Funktion

Links

..


PC-FX / Psychotherapie
Impressum & Datenschutz