Generizität vs Polymorphismus



  • die beiden Varianten sind eng miteinander verbunden doch was sind die vor u Nachteile, was ist effizienter, wann soll ich welche variante verwenden.....?



  • Hallo,

    naja, Generizität (in C++ durch Templates realisiert) muss auf jeden Fall zur Compilezeit feststehen, während bei Polymorphismus ja gerade zur Laufzeit entschieden wird, wie das Objekt reagieren soll.

    wann soll ich welche variante verwenden.....?

    Die Frage stellt sich imho gar nicht, weil es zwei verschiedene Dinge sind.



  • Hallo,
    nur um das mal klarzustellen: Templates sind eine Form von Polymorphismus.
    Peter Wegner hat z.B. 1987 in seinem Paper "Dimensions of Object-Based Language Design" vier Arten von Polymorphie charakterisiert, die sich in zwei Gruppen einteilen lassen:
    1. Ad hoc-Polymorphie umfasst Overloading und coercion (casting)
    2. Universal-Polymorphie umfasst Inclusion- und Paraemtric-Polymorphism

    Andere haben andere Namen verwendet, die Kategorien sind aber prinzipiell die Gleichen.

    C++ unterstützt alle vier Formen der Polymorphie. Vererbung + virtuelle Funktionen sind das Mittel für Inclusion-(oder Subtype)-Polymorphie. Templates erlauben parametrische Polymorphie.

    Die Frage stellt sich imho gar nicht, weil es zwei verschiedene Dinge sind.

    Die Frage stellt sich sehr wohl. Da du in C++ verschiedene Werkzeuge in deiner "solution domain" hast und da es im Design nun mal darum geht, welche Anforderungen du wie umsetzt (letztlich also auch welche Sprachmittel du verwendest), muss man sich zwangsläufig auch die Frage stellen, ob man X nun über Templates oder eine Klassenhierarchie löst.

    Wann man was benutzen sollte wird z.B. ausführlich in James Copliens "Multiparadigm-Design for C++" disktuiert.

    Generizität (in C++ durch Templates realisiert) muss auf jeden Fall zur Compilezeit feststehen, während bei Polymorphismus ja gerade zur Laufzeit entschieden wird, wie das Objekt reagieren soll.

    Richtig. "Binding Time" ist deshabl z.B. auch ein sehr wichtiges Entscheidungsmerkmal. Welchen Character-Set ein String benutzen soll oder von welchem Typ die Elemente einer Liste sind usw., steht z.B. in der Regel schon zur Compile-Zeit fest. Hier sind Templates eine gute Wahl.
    Für andere Dinge hat man aber erst zur Laufzeit alle wichtigen Informationen zusammen (ein gutes Beispiel wäre z.B. die dynamische Änderung des Look&Feels eines GUI-Frameworks) oder, auch sehr wichtig, man möchte das Verhalten zur Laufzeit ändern können (siehe State-Pattern). In diesem Fall bieten sich virtuelle Funktionen an.

    Letzlich wird die Auswahl aber immer durch das konkrete Problem und die benötigte Flexibilität bestimmt.



  • Hi,

    ah, das wusste ich nicht. Man lernt ja zum Glück nie aus. 😉


Anmelden zum Antworten