About SW-Quality Safety SW-Entwicklung UML Nachschlagen Programme
UML Basics
UML Diagramme
UML Tools
UML Interna
Class Vererbung1
Vererbung2
Überladung/Platzhalter
Interface
Beispiel
Association
Association2
Association3
Association4
Component
Package
Abhängigkeiten
Stereotypes/Tagged Values
Vererbung
  • Gleichbedeutende Bezeichnungen für diese Beziehung:
    • Vererbung / Inheritance
    • Generalisierung / Generalization
    • Spezialisierung / Specialization 
  • Eine Klasse A vererbt ihr Verhalten und/oder ihre Struktur an die Kinder B.
  • A wird bezeichnet als:
    • superclass
    • parent
    • ancestor 
  • B wird bezeichnet als 
    • supclass
    • child / Kind
    • descendent
  • Die public und protected deklarierten Methoden und Attribute der Superklasse werden an die Kindklassen vererbt. D.h. diese stehen dort zur Verfügung und können verwendet werden. 
  • Beziehungen der SuperClass werden ebenfalls vererbt. Insbesondere kann die SuperClass selbst Kindklasse einer anderen SuperClass sein.
  • Private Methoden/Attribute werden nicht vererbt. Diese stehen weiterhin nur Methoden der Superklasse zur Verfügung. 
  • Im Beispiel: 
    • m1() wird nicht vererbt, da private;
    • m2() wird vererbt;
    • Child1 erweitert die Funktionalität um die Methode void m3().
    • Child1 hat also die Methoden m3() und m2().
    • Kind2 definiert die Methode m2() neu (redefine). Die neue m2() Methode kann erweitere Funktionalität oder gänzlich  veränderte Funktionalität aufweisen. 
    • Kind2 kann die Methode m2() aus der Superklasse weiterhin verwenden (super.m2() in Java).
    void demo(SuperClass abc) {
      return(  abc.m2() );
    }
    ....
    Kind2 k = new Kind2();
    demo(k);
  • Wo immer Objekte der Superklasse erwartet werden, können auch Objekte der Kindklassen angegeben werden.
  • Wo Kindklassen erwartet werden kann jedoch nicht die SuperKlasse verwendet werden.
  • Die Methode demo() wird hier die neu definierte Methode m2() aus Kind2 aufrufen. (Also nicht m2() der Superklasse!)
  • Achtung: Die C++ Implementierung weicht hier von der JAVA Implementierung ab. Bei C++ wird m2() der Superklasse aufgerufen! 
  • Achtung:

  • UML bietet keinen Schutz gegenüber unlogischer Modellierung. Dies muss von den Autoren des Modells überprüft werden!
      ist ein ... /  is kind of 
    • Eine sinnvolle Vererbungsbeziehung kann überprüft werden, indem die "ist ein" Beziehung überprüft wird.
    • Beispiel: Superclass Fahrzeug, Child Auto, Child Rad.
      • Ein Auto ist ein Fahrzeug. 
      • Jedoch: Ein Rad ist kein Fahrzeug. Rad kann eine andere Beziehung zu Fahrzeug oder Auto haben (Association, Dependency), eine  Vererbungsbeziehung ist hier jedoch unlogisch.
  • multiple inheritance
    • Hat ein Child mehrere Superklassen, so spricht man von Mehrfachvererbung. 
    • Diese kann jedoch zu Inkonsistenz führen und wird von Java nicht unterstützt.(Lösung dafür siehe Interfaces)
    • Mehrfachvererbung kann nützlich sein um das Modell darzulegen, sollte jedoch vermieden werden.
  • Inheritance vs Generalization (für Insider)
    •  
    • Generalization ist der Name der Beziehung zwischen den Klassen.
    • Inheritance ist der Mechanismus welcher durch die Generalization-Beziehung dargestellt wird.
    ©; created Mon Aug 07 22:31:53 CEST 2006; eMail