2009-03-02 3 views

Antwort

2

Sie Zusammensetzung verwenden, wenn Sie eine Klasse, die eine Reihe von weiteren Objekten hat, in jede Menge. Verwenden Sie die Generalisierung, wenn Sie eine Klasse mit gemeinsamen Eigenschaften für eine Gruppe von Objekten haben, aber auch andere Eigenschaften oder Verhaltensweisen haben.

Zum Beispiel hat ein Auto Komponenten wie der Motor, Räder usw. Dies ist eine Zusammensetzung Beziehung. Aber ein Fahrzeug ist eine Verallgemeinerung eines Autos, weil Sie andere Arten von Fahrzeugen mit verschiedenen Eigenschaften haben können, wie ein LKW. Auto und LKW sind abgeleitete Fahrzeugklassen.

2

sich fragen, ob die Beziehung zwischen den beiden Klassen von A „ist-a“ oder „hat-ein“ Typ

+0

Ah, aber ist eine Linie eine Erweiterung eines Punktes (Generalisierung) oder zwei Punkte (Zusammensetzung)? – CarneyCode

1

Wenn es um die öffentliche Vererbung (IS_A) geht, ist der Schlüssel das Verständnis des Liskow-Substitutionsprinzips und was es in Bezug auf Vererbung bedeutet. Insbesondere bedeutet dies, dass die IS-A-Beziehung kontextabhängig ist, was ein oft übersehener Aspekt der öffentlichen Vererbung ist. Um das obige Beispiel zu verwenden, sollten die Car- und Truck-Klassen nur dann vom Fahrzeug abgeleitet werden, wenn sie die Fahrzeugklasse in jedem Programm ersetzen können, das für die Verwendung der Fahrzeugklasse geschrieben wurde, ohne den aufrufenden Code zu beeinflussen.

Wenn es um Implementierungsvererbung geht (aka, private Vererbung in C++), sollten Sie die Komposition als Vererbung als Wiederverwendungsmechanismus bevorzugen.