2010-08-09 23 views

Antwort

49

Zusammensetzung bezieht sich auf die Kombination einfacher Typen, um komplexere zu machen. In Ihrem Beispiel könnte Zusammensetzung sein:

Animal: 
    Skin animalSkin 
    Organs animalOrgans 


Mammal::Animal: 
    Hair/fur mammalFur 
    warm-blooded-based_cirulation_system heartAndStuff 

Person::Mammal: 
    string firstName 
    string lastName 

Wenn Sie völlig Zusammensetzung gehen wollte (und aller Erbe loszuwerden) es würde wie folgt aussehen:

Animal: 
    Skin animalSkin 
    Organs animalOrgans 

Mammal: 
    private Animal _animalRef 
    Hair/fur mammalFur 
    warm-blooded-based_cirulation_system heartAndStuff 

Person: 
    private Mammal _mammalRef 
    string firstName 
    string lastName 

Der Vorteil dieses Ansatzes ist, dass Die Typen Mammal und Person müssen nicht der Schnittstelle ihres vorherigen Elternteils entsprechen. Diese könnte eine gute Sache sein, weil manchmal eine Änderung der Oberklasse schwerwiegende Auswirkungen auf die Unterklassen haben kann. Sie können weiterhin über ihre privaten Instanzen dieser Klassen auf die Eigenschaften und Verhaltensweisen dieser Klassen zugreifen. Wenn sie diese Verhaltensweisen der ehemaligen Oberklasse aufdecken möchten, können sie sie einfach in eine öffentliche Methode einbinden.

fand ich eine gute Verbindung mit guten Beispielen hier: http://www.artima.com/designtechniques/compoinh.html

+4

Also kann ich sagen: "Zusammensetzung ist, wenn ich ein Objekt der' Klasse A' in 'Klasse B' (statt Klassen' B' von 'KlasseA') unterscheide." ? – thesummersign

+0

oh. ok, hab 'w69rdy' es später beantwortet. JA, das kann ich sagen. – thesummersign

31

Zusammensetzung ist einfach die Teile, die das Ganze ausmachen. Ein Auto hat Räder, einen Motor und Sitze. Vererbung ist eine "ist a" -Beziehung. Zusammensetzung ist eine "hat eine" Beziehung.

+2

Und Aggregation ist eine ... Beziehung. –

+1

Aggregation kann eine einfache Zusammensetzung sein, oder wenn es sich um eine Sammlung ähnlicher Dinge handelt (z. B. Räder an einem Auto), kann es als eine Sammlung behandelt werden.Ein Auto kann vier einzelne Räder haben, eindeutig identifiziert, oder es kann eine Sammlung von Rädern haben. Es hängt von der Verwendung ab. Wenn Sie eine Auflistungsklasse verwenden, ist die Auflistung selbst eine Aggregation. –

2

Ein Beispiel der Zusammensetzung ist, wo Sie eine Instanz einer Klasse in eine andere Klasse, statt von ihm erben

This Seite hat einen guten Artikel zu erklären, warum die Leute sagen, „für Komposition der Vererbung“ mit einigen Beispielen von Warum.

+1

Nicht wirklich * eine Instanz einer Klasse [C2] in einer anderen Klasse [C1] *, aber * eine ** Instanz ** einer Klasse in ** Instanz ** einer anderen Klasse *. Ersteres könnte missverstanden werden, als ob Sie C2 bei der Definition von C1 instanziiert hätten, was nicht üblich sein sollte. –

14

Es gibt drei Möglichkeiten, das Verhalten einer Klasse zu geben. Sie können dieses Verhalten in die Klasse schreiben; Sie können von einer Klasse erben, die das gewünschte Verhalten aufweist. oder Sie können eine Klasse mit dem gewünschten Verhalten als Feld oder Elementvariable in Ihre Klasse integrieren. Die letzten beiden stellen Formen der Wiederverwendung von Code dar, und die letzte - Zusammensetzung - wird im Allgemeinen bevorzugt. Es gibt Ihrer Klasse nicht das gewünschte Verhalten - Sie müssen die Methode immer noch auf dem Feld aufrufen -, aber Ihr Klassen-Design wird dadurch weniger eingeschränkt, und Sie können den Code leichter testen und leichter debuggen. Die Vererbung hat ihren Platz, aber die Zusammensetzung sollte bevorzugt werden.

+1

+1: Zusammensetzung ist König. –

11
class Engine 
{ 

} 

class Automobile 
{ 

} 


class Car extends Automobile // car "is a" automobile //inheritance here 
{ 
Engine engine; // car "has a" engine //composition here 

} 

Zusammensetzung - Funktionalität eines Objekts besteht aus einem Aggregat aus verschiedenen Klassen gemacht. In der Praxis bedeutet dies, einen Zeiger auf eine andere Klasse zu halten, auf die die Arbeit zurückgestellt wird.

Vererbung - Die Funktionalität eines Objekts besteht aus seiner eigenen Funktionalität plus Funktionalität von seinen übergeordneten Klassen.

Warum die Zusammensetzung der Vererbung vorzuziehen ist, werfen Sie einen Blick auf die Circle-ellipse problem.

Verwandte Themen