Dieser Artikel führt hauptsächlich in das Verständnis des Unterschieds zwischen Abhängigkeit, Assoziation und Aggregation ein. Dies ist die schwächste Kopplung. Das Folgende ist eine sehr detaillierte Einführung Schauen Sie zusammen
Schauen Sie sich zunächst die Definitionen dieser vier Beziehungen im Buch an:
Abhängigkeitsbeziehung ist die Verbindung zwischen Klassen. Eine Abhängigkeitsbeziehung gibt an, dass eine Klasse von der Definition einer anderen Klasse abhängt. Beispielsweise kann eine Person (Person) ein Auto (Car) und ein Haus (House) kaufen. Die Personenklasse hängt von der Definition der Car-Klasse und der House-Klasse ab, da die Person-Klasse auf Car und House verweist. Anders als bei der Assoziation gibt es in der Person-Klasse keine Attribute vom Typ „Auto“ und „Haus“. Die Instanzen von „Auto“ und „Haus“ werden als Parameter an die Methode „buy()“ übergeben. Im Allgemeinen spiegeln sich Abhängigkeiten in der Java-Sprache als lokale Variablen, formale Parameter von Methoden oder Aufrufe statischer Methoden wider.
Die Assoziationsbeziehung ist eine Verbindung zwischen Klassen, die es einer Klasse ermöglicht, die Attribute und Methoden einer anderen Klasse zu kennen. Assoziationen können bidirektional oder unidirektional sein. In der Java-Sprache werden Assoziationsbeziehungen im Allgemeinen mithilfe von Mitgliedsvariablen implementiert.
Aggregationsbeziehung ist eine Art Assoziationsbeziehung und eine starke Assoziationsbeziehung. Aggregation ist die Beziehung zwischen einem Ganzen und einem Individuum. Beispielsweise ist die Beziehung zwischen der Automobilkategorie und der Motorkategorie, der Reifenkategorie und anderen Teilekategorien die Beziehung zwischen dem Ganzen und dem Einzelnen. Wie Assoziationsbeziehungen werden auch Aggregationsbeziehungen durch Instanzvariablen implementiert. Allerdings befinden sich die beiden an der Assoziationsbeziehung beteiligten Klassen auf derselben Ebene, während sich die beiden Klassen in der Aggregationsbeziehung auf unterschiedlichen Ebenen befinden, wobei eine das Ganze und die andere einen Teil darstellt.
Kompositionsbeziehung ist eine Art Assoziationsbeziehung und eine stärkere Beziehung als Aggregationsbeziehung. Es erfordert, dass das Objekt, das das Ganze in einer gewöhnlichen Aggregationsbeziehung darstellt, für die Darstellung des Lebenszyklus eines Teils des Objekts verantwortlich ist und die Kombinationsbeziehung nicht gemeinsam genutzt werden kann. Das Objekt, das das Ganze darstellt, muss dafür verantwortlich sein, das Teilobjekt am Leben zu erhalten und in einigen Fällen das Objekt, das für den Teil verantwortlich ist, zu vernichten. Ein Objekt, das ein Ganzes darstellt, kann ein Objekt, das einen Teil darstellt, an ein anderes Objekt übergeben, das für den Lebenszyklus dieses Objekts verantwortlich ist. Mit anderen Worten, das den Teil darstellende Objekt kann zu jedem Zeitpunkt nur mit einem Objekt kombiniert werden, und dieses ist ausschließlich für den Lebenszyklus verantwortlich. Teile haben den gleichen Lebenszyklus wie Ganze.
- Auszug aus „Java Object-Oriented Programming“
Der Kopplungsgrad der oben genannten Beziehungen wird schrittweise verbessert (das Konzept des Kopplungsgrades wird später ausführlich besprochen). , Sie können es hier vorübergehend verstehen. Es ist der Grad der Auswirkung, wenn sich eine Klasse ändert. Je kleiner die Auswirkung, desto schwächer die Kopplung. Aus der Definition wissen wir bereits, dass Abhängigkeit tatsächlich eine relativ schwache Assoziation, Aggregation eine relativ starke Assoziation und Kombination eine stärkere Assoziation ist. Wenn wir sie also allgemein unterscheiden, sind diese vier Beziehungen tatsächlich alle verwandte Beziehungen.
Abhängigkeit ist leicht zu unterscheiden. Sie ist die schwächste Kopplung in Java und wird in Form von lokalen Variablen, formalen Parametern von Methoden oder Aufrufen statischer Methoden ausgedrückt, wie im folgenden Beispiel: Der Treiber Die Klasse hängt von der Klasse Car ab, und die drei Methoden von Driver zeigen drei verschiedene Formen von Abhängigkeitsbeziehungen.
class Car { public static void run(){ System.out.println("汽车在奔跑"); } } class Driver { //使用形参方式发生依赖关系 public void drive1(Car car){ car.run(); } //使用局部变量发生依赖关系 public void drive2(){ Car car = new Car(); car.run(); } //使用静态变量发生依赖关系 public void drive3(){ Car.run(); } }
Assoziationsbeziehungen werden in Java im Allgemeinen mithilfe von Mitgliedsvariablen und manchmal in Form von Methodenparametern implementiert. Unter Verwendung der Beispiele „Fahrer“ und „Auto“ kann die Methodenparameterform verwendet werden, um Abhängigkeiten oder Assoziationen auszudrücken. Schließlich können wir die Semantik im Programm nicht genau genug ausdrücken. In diesem Beispiel werden Mitgliedsvariablen verwendet, um diese Bedeutung auszudrücken: Das Auto ist mein eigenes Auto, und dieses Auto „besitzt“ ich. Verwenden Sie Methodenparameter, um auszudrücken: Das Auto gehört nicht mir, ich bin nur ein Fahrer, ich fahre jedes Auto, das mir andere geben, und ich benutze dieses Auto.
class Driver { //使用成员变量形式实现关联 Car mycar; public void drive(){ mycar.run(); } ... //使用方法参数形式实现关联 public void drive(Car car){ car.run(); } }
Die Aggregationsbeziehung ist eine relativ starke Assoziationsbeziehung, die in Java im Allgemeinen in Form von Mitgliedsvariablen implementiert wird. Es gibt eine Beziehung zwischen Ganzen und Teilen zwischen Objekten. Zum Beispiel im obigen Beispiel
class Driver { //使用成员变量形式实现聚合关系 Car mycar; public void drive(){ mycar.run(); } }
Wenn dem obigen Code die folgende Semantik gegeben ist: Das Auto ist ein Privatwagen und gehört zum Eigentum des Fahrers. Dann stellt derselbe Code eine Aggregationsbeziehung dar. Aggregationsbeziehungen verwenden im Allgemeinen die Setter-Methode, um Mitgliedsvariablen Werte zuzuweisen.
Angenommen, die folgende Semantik ist gegeben: Ein Auto ist ein Muss für einen Fahrer. Um Fahrer zu werden, muss man zuerst ein Auto haben. Wenn das Auto weg ist, wird der Fahrer es nicht tun leben möchte. Und wenn der Fahrer aufhört, Fahrer zu sein, wird das Auto zerstört und niemand anderes kann es benutzen. Das bedeutet eine Kombinationsbeziehung. Um die Kombinationsbeziehung auszudrücken, werden im Allgemeinen häufig Konstruktoren verwendet, um den Zweck der Initialisierung zu erreichen. Im obigen Beispiel wird beispielsweise ein Konstruktor mit Car als Parameter hinzugefügt
public Driver(Car car){ mycar = car; }
所以,关联、聚合、组合只能配合语义,结合上下文才能够判断出来,而只给出一段代码让我们判断是关联,聚合,还是组合关系,则是无法判断的。
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Unterschiede zwischen Abhängigkeiten, Assoziationen, Aggregationen und Kombinationen in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!