Ich dachte, diese Antwort von stackoverflow Community zu suchen, wie man entscheidet, für Zusammensetzung oder Generalisierung zu gehen, wenn wir Klassen entwerfen.Wie kann man beim Entwerfen von Objekten und ihren Beziehungen zwischen Komposition und Generalisierung entscheiden?
Antwort
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.
sich fragen, ob die Beziehung zwischen den beiden Klassen von A „ist-a“ oder „hat-ein“ Typ
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.
Ah, aber ist eine Linie eine Erweiterung eines Punktes (Generalisierung) oder zwei Punkte (Zusammensetzung)? – CarneyCode