Dieser Artikel stellt hauptsächlich die Prinzipien der Synthese, Aggregation und Wiederverwendung vor. Der Herausgeber ist der Meinung, dass er jetzt mit Ihnen geteilt wird und als Referenz dient. Folgen wir dem Herausgeber und werfen wir einen Blick darauf
Prinzip der Synthese, Aggregation und Wiederverwendung
Das Prinzip der Synthese und Wiederverwendung wird auch als Prinzip der Kombination bezeichnet/ Aggregation und Wiederverwendung (Composition/ Aggregate Reuse Principle (CARP), das wie folgt definiert ist:
Composite Reuse Principle (CRP): Versuchen Sie, Objektkombination anstelle von Vererbung zu verwenden, um den Zweck der Wiederverwendung zu erreichen.
Das Prinzip der Synthese und Wiederverwendung besteht darin, einige vorhandene Objekte durch Assoziationsbeziehungen (einschließlich Kombinationsbeziehungen und Aggregationsbeziehungen) in einem neuen Objekt zu verwenden, um sie zu einem Teil des neuen Objekts zu machen Das Objekt erreicht den Zweck der Wiederverwendung von Funktionen, indem es Methoden vorhandener Objekte durch Delegation aufruft. Kurz gesagt: Versuchen Sie bei der Wiederverwendung, Kombinations-/Aggregationsbeziehungen (Assoziationsbeziehungen) zu verwenden und weniger Vererbung zu verwenden.
Im objektorientierten Design gibt es zwei Möglichkeiten, vorhandene Designs und Implementierungen in unterschiedlichen Umgebungen wiederzuverwenden, nämlich durch Kompositions-/Aggregationsbeziehungen oder durch Vererbung, aber Sie sollten zunächst die Verwendung von Kompositions-/Aggregationskombinationen in Betracht ziehen /aggregation kann das System flexibler machen, die Kopplung zwischen Klassen reduzieren und Änderungen in einer Klasse haben relativ geringe Auswirkungen auf andere Klassen. Zweitens müssen Sie bei der Verwendung der Vererbung die Regeln strikt befolgen Durch Ersetzen hilft die effektive Nutzung der Vererbung, das Problem zu verstehen und die Komplexität zu verringern, während der Missbrauch der Vererbung die Schwierigkeit des Systemaufbaus und der Systemwartung sowie die Komplexität des Systems erhöht. Daher muss die Wiederverwendung der Vererbung mit Vorsicht angewendet werden.
Das Hauptproblem bei der Wiederverwendung durch Vererbung besteht darin, dass die Wiederverwendung der Vererbung die Kapselung des Systems zerstört, da die Vererbung die Implementierungsdetails der Basisklasse für die Unterklasse offenlegt, da dies normalerweise die internen Details der Basisklasse sind Nicht sichtbar für die Unterklasse, daher wird diese Art der Wiederverwendung auch als „White-Box“-Wiederverwendung bezeichnet. Wenn sich die Basisklasse ändert, muss sich auch die von der Basisklasse geerbte Implementierung ändern und nicht. Es kann sich zur Laufzeit ändern und ist nicht flexibel genug. Die Vererbung kann nur unter bestimmten Umständen verwendet werden (z. B. wird eine Klasse nicht als nicht vererbbar deklariert).
Erweiterung
Für ein tieferes Verständnis der Vererbung können Sie sich auf den Artikel von Herrn Wen Yu beziehen, dem Autor des Buch „Software Architecture Design“ – „Die Berge zu sehen ist nur Berge und das Wasser zu sehen ist nur Wasser – Verbesserung des Verständnisses der Vererbung“.
Da die Kombinations- oder Aggregationsbeziehung vorhandene Objekte (auch Mitgliedsobjekte genannt) in neue Objekte integrieren und zu einem Teil des neuen Objekts machen kann, kann das neue Objekt die Funktionen der vorhandenen Objekte aufrufen Die internen Implementierungsdetails des Mitgliedsobjekts sind für das neue Objekt unsichtbar. Daher wird diese Art der Wiederverwendung auch als „Black-Box“-Wiederverwendung bezeichnet. Im Vergleich zur Vererbungsbeziehung ist der Kopplungsgrad relativ gering und Änderungen am Mitgliedsobjekt haben keine Auswirkungen Die Auswirkungen auf das neue Objekt sind nicht groß, und die Operationen von Mitgliedsobjekten können je nach tatsächlichem Bedarf dynamisch in neuen Objekten aufgerufen werden, und neue Objekte können dynamisch auf andere Objekte desselben Typs verweisen als Mitgliedsobjekte.
Im Allgemeinen gilt: Wenn die Beziehung zwischen zwei Klassen „Hat-A“ ist, sollte Zusammensetzung oder Aggregation verwendet werden, und wenn es sich um eine „Ist-A“-Beziehung handelt, kann Vererbung verwendet werden . „Is-A“ ist eine strenge taxonomische Definition, was bedeutet, dass eine Klasse „eine Art“ einer anderen Klasse ist; „Has-A“ bedeutet, dass eine bestimmte Rolle eine bestimmte Verantwortung hat.
Das Folgende ist ein einfaches Beispiel, um das Verständnis des Prinzips der Synthese und Wiederverwendung zu vertiefen:
Beim anfänglichen Design des CRM-Systems haben die Entwickler der Sunny Software Company berücksichtigt Berücksichtigen Sie die geringe Anzahl von Kunden, die sich auf Datenbankoperationen beziehen, z. B. die Klasse CustomerDAO. Die Methode getConnection() ist in der Klasse DBUtil gekapselt Die getConnection()-Methode der DBUtil-Klasse muss wiederverwendet werden. Der Designer verwendet CustomerDAO als Unterklasse der DBUtil-Klasse. Die ursprüngliche Entwurfsplanstruktur ist in Abbildung 1 dargestellt:
Abbildung 1 Strukturdiagramm des anfänglichen Entwurfsplans
Als Kunden Da die Anzahl zunimmt, entscheidet sich das System für ein Upgrade auf die Oracle-Datenbank. Daher muss eine neue OracleDBUtil-Klasse hinzugefügt werden, um eine Verbindung zur Oracle-Datenbank herzustellen Da im ursprünglichen Entwurfsplan eine Vererbungsbeziehung besteht, muss die CustomerDAO-Klasse geändert werden, wenn die Datenbankverbindungsmethode geändert wird. Der Quellcode verwendet CustomerDAO als Unterklasse von OracleDBUtil, was gegen das Open-Close-Prinzip verstößt . [Natürlich können Sie auch den Quellcode der DBUtil-Klasse ändern, was ebenfalls gegen das Öffnungs- und Schließprinzip verstößt. 】
Nun nutzen Sie das Prinzip der Synthese und Wiederverwendung, um es zu rekonstruieren.
Gemäß dem Prinzip der Zusammensetzung und Wiederverwendung sollten wir bei der Implementierung der Wiederverwendung mehr Assoziationen und weniger Vererbung verwenden . Daher können wir in diesem Beispiel die assoziative Wiederverwendung verwenden, um die Wiederverwendung der Vererbung zu ersetzen. Die rekonstruierte Struktur ist in Abbildung 2 dargestellt:
Abbildung 2 Bild der rekonstruierten Struktur
In Abbildung 2 wird die Beziehung zwischen CustomerDAO und DBUtil von der Vererbung zur Assoziation geändert, um das DBUtil-Objekt in CustomerDAO einzufügen. Sie können die Konstruktorinjektion oder die Setter-Injektion verwenden. Wenn Sie die Funktionen von DBUtil erweitern müssen, können Sie dies über seine Unterklassen tun, z. B. indem Sie über die Unterklasse OracleDBUtil eine Verbindung zur Oracle-Datenbank herstellen. Da CustomerDAO für DBUtil programmiert ist, kann das Objekt der DBUtil-Unterklasse das DBUtil-Objekt überschreiben. Sie müssen nur das Unterklassenobjekt in CustomerDAO einfügen, um die von der Unterklasse erweiterten Methoden zu verwenden. Durch das Einfügen des OracleDBUtil-Objekts in CustomerDAO kann beispielsweise eine Oracle-Datenbankverbindung realisiert werden. Der ursprüngliche Code muss nicht geändert werden und neue Datenbankverbindungsmethoden können flexibel hinzugefügt werden.
Das obige ist der detaillierte Inhalt vonDetaillierte grafische Erläuterung der Prinzipien der Zusammensetzung, Aggregation und Wiederverwendung in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!