Heim >Java >javaLernprogramm >Detaillierte Erläuterung der zehn Designprinzipien für Java-Programmierer, um sich mit der Objektorientierung vertraut zu machen
In diesem Artikel werden hauptsächlich die 10 Objektorientierten Designprinzipien vorgestellt, die Java-Programmierer kennen sollten. Interessierte Freunde können sich darauf beziehen
Objektorientiertes Design Prinzipien sind der Kern der OOPS-Programmierung, aber die meisten Java-Programmierer, die ich gesehen habe, sind von Entwurfsmustern wie Singleton (Einzelfall), Decorator (Dekorator), Observer (Beobachter) usw. begeistert, legen aber nicht genug Wert darauf zum Erlernen objektorientierter Analyse und Gestaltung. Es ist wichtig, die Grundlagen der objektorientierten Programmierung wie „Abstraktion“, „Kapselung“, „Polymorphismus“ und „Vererbung“ zu erlernen, aber es ist ebenso wichtig, diese Designprinzipien zu verstehen, um prägnante, modulare Designs zu erstellen. Ich sehe oft Java-Programmierer mit unterschiedlichem Erfahrungsniveau, die entweder diese OOPS- und SOLID-Designprinzipien nicht kennen, oder sie wissen einfach nicht, welche Vorteile ein bestimmtes Designprinzip hat oder wie man es beim Codieren verwendet.
(Designprinzipien) Das Endergebnis ist, Codierung oder Design immer mit hoher Kohäsion und geringer Kopplung zu verfolgen. Der Open-Source-Code von Apache und Sun sind gute Beispiele für das Erlernen der Java- und OOPS-Designprinzipien. Sie zeigen uns, wie Designprinzipien in der Java-Programmierung verwendet werden. Java JDK verwendet einige Designprinzipien: Factory-Muster in der BorderFactory-Klasse, Singleton-Muster in der Runtime-Klasse und Dekoratormuster in der Klasse java.io. Wenn Sie sich übrigens wirklich für Java-Codierungsprinzipien interessieren, lesen Sie „Effective Java“ von Joshua Bloch, dem Autor der Java-API. Mein persönlicher Favorit zu objektorientierten Designmustern ist „Head First Design Pattern“ von Kathy Sierra sowie andere Bücher über objektorientierte Analyse und Design in einfachen Worten. Diese Bücher sind eine große Hilfe beim Schreiben von besserem Code, der die Vorteile verschiedener objektorientierter und SOLID-Entwurfsmuster voll ausnutzt.
Obwohl der beste Weg, Designmuster (Prinzipien) zu erlernen, darin besteht, Beispiele aus der Praxis zu verwenden und die Unannehmlichkeiten zu verstehen, die durch Verstöße gegen Designprinzipien entstehen, besteht der Zweck dieses Artikels darin, Java-Programmierer zu schulen, die noch nicht mit oder in Berührung gekommen sind befinden sich in der Lernphase. Eine Einführung in objektorientierte Designprinzipien. Ich persönlich denke, dass OOPS- und SOLID-Designprinzipien einen Artikel benötigen, um sie klar vorzustellen. Ich werde mein Bestes geben, um dies hier zu tun, aber jetzt bereiten Sie sich bitte darauf vor, die folgenden Designmuster (Prinzipien) zu durchsuchen :)
DRY – Nicht Wiederholen Sie sich
Unser erstes objektorientiertes Designprinzip ist: DRY Wie Sie am Namen erkennen können, bedeutet DRY (nicht wiederholen) nicht, wiederholten Code zu schreiben, sondern ihn in wiederverwendbare Codeblöcke zu abstrahieren . Wenn Sie über zwei oder mehr identische Codeblöcke verfügen, sollten Sie diese in eine separate Methode abstrahieren. Wenn Sie hartcodierte Werte mehrmals verwenden, machen Sie sie zu öffentlichen Konstanten. Der Vorteil dieses objektorientierten Designprinzips liegt in der Wartungsfreundlichkeit. Es ist wichtig, dieses Prinzip nicht zu missbrauchen, denn bei der Duplizierung geht es nicht um Code, sondern um Funktionalität. Das bedeutet, dass die Verwendung eines gemeinsamen Codes zur Überprüfung von OrderID und SSN nicht bedeutet, dass sie gleich sind oder in Zukunft gleich bleiben werden. Wenn Sie gemeinsamen Code verwenden, um zwei unterschiedliche Funktionen zu implementieren, oder wenn Sie diese beiden unterschiedlichen Funktionen eng miteinander verknüpfen, wird Ihr SSN-Verifizierungscode ungültig, wenn sich Ihr OrderID-Format ändert. Seien Sie also bei dieser Kopplung vorsichtig und kombinieren Sie keinen ähnlichen Code, der nichts miteinander zu tun hat. Kapseln Sie, was sich ändert. Kapseln Sie Code, der in Zukunft geändert werden soll. Der Vorteil dieses objektorientierten Entwurfsmusters besteht darin, dass es einfach ist, ordnungsgemäß gekapselten Code zu testen und zu warten. Wenn Sie in Java programmieren, beachten Sie bitte die folgenden Grundsätze:
Die Zugriffsrechte von Variablenund Methoden sind standardmäßig auf privat eingestellt und ihre Zugriffsrechte werden schrittweise freigegeben, z. B. von „privat“ auf „ geschützt“, „nicht öffentlich“. Einige Entwurfsmuster in Java verwenden Kapselung. Das Fabrikentwurfsmuster ist ein Beispiel. Es kapselt den Code, der Objekte erstellt und bietet die folgende Flexibilität: Die nachfolgende Generierung neuer Objekte hat keine Auswirkungen auf vorhandenen Code.
Open/Close-DesignprinzipOpenClosed-DesignprinzipKlassen, Methoden/Funktionen sollten offen für Erweiterungen (neue Funktionen) und geschlossen für Änderungen sein . Dies ist ein weiteres elegantes SOLID-Designprinzip, um zu verhindern, dass jemand den Code ändert, der den Test besteht. Wenn Sie neue Funktionen hinzufügen, wird Ihr Code im Idealfall getestet, was das Ziel des On/Off-Designprinzips ist. Der Buchstabe „O“ in SOLID verweist übrigens auf das offene/geschlossene Designprinzip.
Prinzip der Einzelverantwortung
Prinzip der Einzelverantwortung (SRP)
Das Single-Responsibility-Prinzip ist ein weiteres SOLID-Designprinzip, auf das sich der Buchstabe „S“ in SOLID bezieht. Laut SRP sollte es einen und nur einen Grund für eine Klassenänderung geben, oder eine Klasse sollte immer eine einzelne Funktion implementieren. Wenn eine Klasse in Java mehrere Funktionen implementiert, wird eine Kopplungsbeziehung zwischen diesen Funktionen erstellt. Wenn Sie eine der Funktionen ändern, können Sie die Kopplungsbeziehung unterbrechen und dann eine weitere Runde testen, um neue Probleme zu vermeiden.
Abhängigkeitsinjektion/Inversionsprinzip
Abhängigkeitsinjektion oder Inversionsprinzip
Fragen Sie nicht, was die Funktion der Abhängigkeitsinjektion ist Welche Vorteile bringt es Ihnen? Die Abhängigkeitsinjektionsfunktion wurde im Spring-Framework gut implementiert. Die Eleganz dieses Designprinzips besteht darin, dass jede vom DI-Framework injizierte Klasse problemlos mit Scheinobjekten getestet werden kann ist einfacher zu warten, da der Code, der Objekte erstellt, innerhalb des Frameworks zentralisiert und vom Client-Code isoliert ist. Es gibt viele Möglichkeiten, die Abhängigkeitsinjektion zu implementieren, z. B. die Verwendung von Bytecode-Tools, einigen AOP-Frameworks (Aspektorientierte Programmierung) wie Pointcut-Ausdrücken oder im Frühjahr verwendeten Proxys. Weitere Informationen zu diesem SOLID-Designprinzip finden Sie in den Beispielen in den IOC- und DI-Designmustern. Der Buchstabe „D“ in SOLID verweist auf dieses Gestaltungsprinzip.
Komposition der Vererbung vorziehen
Komposition der Vererbung vorziehen
Wenn möglich, Komposition der Vererbung vorziehen. Einige von Ihnen mögen darüber streiten, aber ich finde, dass die Komposition flexibler ist als die Vererbung. Mit der Komposition können Sie das Verhalten einer Klasse zur Laufzeit ändern, indem Sie Eigenschaften festlegen. Durch die Verwendung von Polymorphismus können Sie die Kompositionsbeziehung zwischen Klassen in Form einer Schnittstelle implementieren und Flexibilität für die Änderung der Kompositionsbeziehung bieten. Sogar Effective Java empfiehlt die Verwendung von Komposition gegenüber Vererbung.
Liskov-Substitutionsprinzip
Liskov-Substitutionsprinzip LSP
Gemäß dem Liskov-Substitutionsprinzip kann der Ort, an dem die übergeordnete Klasse erscheint, durch a ersetzt werden Beispielsweise sollte es kein Problem geben, wenn eine Methode oder Funktion einer übergeordneten Klasse durch ein Unterklassenobjekt ersetzt wird. LSP ist eng mit dem Single-Responsibility-Prinzip und dem Interface-Isolation-Prinzip verbunden. Wenn eine übergeordnete Klasse über mehr Funktionalität verfügt als ihre untergeordnete Klasse, unterstützt sie diese Funktionalität möglicherweise nicht und verstößt gegen die LSP-Designprinzipien. Um den LSP SOLID-Designprinzipien zu folgen, müssen abgeleitete Klassen oder Unterklassen (relativ zu übergeordneten Klassen) die Funktionalität verbessern, anstatt sie zu reduzieren. Der Buchstabe „L“ in SOLID bezieht sich auf das LSP-Designprinzip.
Interface-Isolation-Prinzip
Das Interface-Isolation-Prinzip bedeutet, dass, wenn die Funktion einer Schnittstelle nicht benötigt wird, diese Schnittstelle nicht implementiert werden sollte. Dies geschieht meist, wenn eine Schnittstelle mehrere Funktionen enthält, die implementierende Klasse jedoch nur eine davon benötigt. Schnittstellendesign ist eine heikle Angelegenheit, denn sobald eine Schnittstelle veröffentlicht ist, können Sie sie nicht mehr ändern, ohne Auswirkungen auf die Klassen zu haben, die sie implementieren. Ein weiterer Vorteil dieses Designprinzips in Java besteht darin, dass Schnittstellen die Eigenschaft haben, dass alle Methoden der Schnittstelle implementiert werden müssen, bevor eine Klasse sie verwenden kann. Die Verwendung einer Schnittstelle mit nur einer Funktion bedeutet also, dass weniger Methoden implementiert werden müssen.
Bei der Programmierung stehen immer Schnittstellen im Mittelpunkt (und nicht Implementierungsobjekte).
Bei der Programmierung stehen immer Schnittstellen im Mittelpunkt (und nicht Implementierungsobjekte), die die Struktur des Codes bestimmen flexibel und jedes neue Schnittstellenimplementierungsobjekt ist mit der vorhandenen Codestruktur kompatibel. Verwenden Sie daher in Java bitte Schnittstellen für Datentypen von Variablen, Methodenrückgabewerten und Methodenparametern. Dies ist der Rat vieler Java-Programmierer, ebenso wie der Rat von Büchern wie „Effective Java“ und „Head First Design Patterns“.
Agenturprinzip
Erwarten Sie nicht, dass eine Klasse alle Funktionen ausführt. Sie können einige Funktionen entsprechend an Proxy-Klassen zur Implementierung delegieren. Beispiele für das Proxy-Prinzip sind: die Methoden equal() und hashCode() in Java. Um zu vergleichen, ob der Inhalt zweier Objekte gleich ist, überlassen wir die Vergleichsarbeit den Vergleichsklassen selbst und nicht ihren Aufrufern. Die Vorteile dieses Entwurfsprinzips sind: Es gibt keine doppelte Codierung und das Verhalten der Klasse lässt sich leicht ändern.
Zusammenfassung
Alle oben genannten objektorientierten Designprinzipien können Ihnen beim Schreiben flexiblen und eleganten Codes helfen: eine Codestruktur mit hoher Kohäsion und geringer Kopplung. Die Theorie ist nur der erste Schritt. Wichtiger ist für uns, die Fähigkeit zu erwerben, herauszufinden, wann wir diese Gestaltungsprinzipien anwenden sollten. Um herauszufinden, ob wir gegen Designprinzipien verstoßen und die Flexibilität des Codes beeinträchtigt haben, können wir bei der Lösung von Problemen nicht immer Designmuster und Designprinzipien verwenden. Große Unternehmensprojekte.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der zehn Designprinzipien für Java-Programmierer, um sich mit der Objektorientierung vertraut zu machen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!