Objektorientiertes Design aus "Gründliche Erfassung der Java SE 11 Silver-Problemsammlung"

Vorwort

Ich werde an dem Standort, an dem ich derzeit teilnehme, an einem Java-Projekt beteiligt sein. Trotz meines 15. Jahres als Ingenieur habe ich mich nur mit Technologien rund um .NET befasst, daher ist dies mein erstes Java-Projekt. Um die Grundkenntnisse von Java auf Nullbasis zu erlernen, habe ich mich daher entschlossen, mit dem Ziel zu beginnen, Java SE 11 Silver / Gold zu erwerben.

Um mit dem Lernen zu beginnen, kaufte ich zuerst Gründliche Strategie Java SE 11 Silver Problem Collection (sogenanntes "Kuromoto").

Da die Erklärung der Antwort sehr sorgfältig geschrieben ist, war ich der Meinung, dass dies nicht nur das beste Unterrichtsmaterial für die Prüfungsvorbereitung, sondern auch für das Erlernen von Grundkenntnissen ist. In dem Buch sagte ich jedoch: "Referenz (nicht direkt mit der Prüfungsvorbereitung verbunden) Ich habe jedoch auf den Teil geachtet, in dem steht: "Es ist nützlich, Informationen zu kennen."

Selbst im Abschnitt "Referenz" gibt es einige Beschreibungen, die sehr wichtig sind, insbesondere wenn Sie sich in Zukunft eingehender mit "objektorientiert" befassen möchten. Deshalb werde ich sie in diesem Artikel zusammenfassen.

Ab P51: Unveränderliches Objekt

Dies ergibt sich aus der Erläuterung des Problems im Zusammenhang mit dem String-Objekt in "Kapitel 2 Grundlegende Java-Datentypen und String-Operationen". Eine beispielhafte Implementierung eines "unveränderlichen Objekts" wird bereitgestellt, um eine fehlerhafte Datenänderung zu verhindern. Dies ist das wesentliche Wissen für die Implementierung von "Value Object" in DDD (Domain Driven Design).

Referenz: Bombardierung einer Klasse mit niedriger Aggregation mit einem ValueObject, das eng gepackte Designanforderungen hat

Ab P203: Je mehr Argumente, desto schwieriger ist die Methode

Aus der Antwort auf die Frage nach der Anzahl der Argumente, die in der aufrufenden Methode und der Methodendeklaration in "Kapitel 6 Instanzen und Methoden" definiert sind.

Referenzinformationen wie beschrieben.

Ein konkretes Beispiel, das ich kürzlich gesehen habe Einführung in Domain Driven Design Bottom-up! Grundlagen des Domain Driven Design Ich denke, die Strategie "Befehlsobjekt", die das Objekt "~ Befehl" definiert, das im Beispielcode von ein Argument im Feld enthält, ist ein sehr leicht verständliches Beispiel.

Beispiel eines "~ Command" -Objekts mit einem Argument im Feld

https://github.com/nrslib/itddd/blob/master/Layered/SnsApplication/Users/Get/UserGetCommand.cs

Beispielmethode, die das Objekt "~ Command" aufruft

https://github.com/nrslib/itddd/blob/master/Layered/WebApplication/Controllers/UserController.cs#L36

In diesem Beispielcode wird der Rückgabewert auch als "~ Ergebnis" -Objekt zusammengefasst, sodass das Design einfach und resistent gegen Änderungen ist, was ebenfalls hilfreich ist.

Ab P220: Kapselung

Aus der Erläuterung des Problems bezüglich des Konzepts der Kapselung in "Kapitel 6 Instanzen und Methoden". Das Problem hier ist: "Der Code wird angezeigt und ich möchte eine Kapselung darauf anwenden. Wählen Sie den besten Code aus den folgenden aus." Daher ist das Wissen über "Einkapselung" für die Prüfungsvorbereitung unverzichtbar, aber es scheint dasselbe Wissen für die Objektorientierung zu sein. Die Kapselung wird wie folgt erklärt.

Die Kapselung ist eine "Klasse für was", indem verwandte Daten und die Verarbeitung, die diese Daten beim Teilen der Software erfordert, zu einer kombiniert werden und irrelevante und irrelevante Daten aus der Klasse ausgeschlossen werden. Es wird durchgeführt, um den Zweck der Klasse "Ist es?" Zu klären, und zielt auf einen Zustand ab, in dem es keine doppelten Daten oder Verarbeitungen in anderen Klassen gibt.

Das oben erwähnte Wertobjekt ist nur eine der Methoden, um eine "Kapselung" zu erreichen. Um dann das "gekapselte" Objekt "Daten verstecken" in Java zu implementieren, werden die Felder im Objekt mit privat qualifiziert (versteckt), und die Methode, die den Wert des Feldes verwendet, wird öffentlich (öffentlich) gemacht. Usw. werden ebenfalls beschrieben.

Ab P244: "Vererbung" wird nicht mehr verwendet

Aus der Erläuterung des Problems im Zusammenhang mit der Klassenvererbung in "Kapitel 7 Klassenvererbung, Schnittstelle, abstrakte Klasse". Klassenvererbung ist ein wesentliches Wissen in objektorientierten Sprachen

Kürzlich wurde darauf hingewiesen, dass die Verwendung von Vererbung die Wartbarkeit mit größerer Wahrscheinlichkeit verringert.

Es wird beschrieben als. Der folgende Beitrag erklärt auf leicht verständliche Weise, was passiert, wenn Sie versuchen, leicht zu erben.

Ihre Vererbung wird falsch verwendet

Verfügt das von Ihnen verwaltete System auch über eine "Gott- / Basisklasse", die viele gängige Prozesse wie "AbstractController" und "AbstractService" implementiert?

Die Implementierungsmethode ist möglicherweise schwieriger als die Vererbung. Wenn Sie jedoch die Vererbung verwenden möchten, ist es möglicherweise die beste Vorgehensweise beim modernen objektorientierten Design, "Übertragung" oder "Synthese" zu berücksichtigen.

[Was ich gelernt habe, nachdem ich 10 Jahre lang gegen die Objektorientierung gekämpft hatte] (https://qiita.com/tutinoco/items/6952b01e5fc38914ec4e)

Ab S. 259: Liskovs Ersatzprinzip

Aus der Erläuterung des Problems der Methodenüberschreibung in "Kapitel 7 Klassenvererbung, Schnittstellen, abstrakte Klassen". Als Referenz werden das Prinzip "Unterklassen müssen durch Oberklassen ersetzt werden können" und "Liskov-Substitutionsprinzip (LSV)" eingeführt. Es gibt viele andere Prinzipien in der Objektorientierung, und es wird empfohlen, diese Prinzipien für ein besseres Design gut zu studieren. Typische Beispiele für diese Prinzipien sind die fünf Prinzipien, das sogenannte "SOLID-Prinzip", einschließlich des "Riskov-Ersatzprinzips".

Im folgenden Beitrag wird das SOLID-Prinzip anhand eines Codebeispiels leicht verständlich erläutert.

Schreiben Sie einfach über das SOLID-Prinzip

Ab P283: Entwurfsmuster und Strategiemuster

Dies ergibt sich aus der Erläuterung des Problems bezüglich der grundlegenden Deklarationsmethode für Lambda-Ausdrücke in "Kapitel 8 Funktionsschnittstelle, Lambda-Ausdrücke". Der Code selbst dieser Frage ist eine Realisierung des Strategiemusters unter Verwendung eines Lambda-Ausdrucks, aus dem die Einführung des GoF-Entwurfsmusters und die Erläuterung des Strategiemusters beschrieben werden.

Apropos Java und Designmuster, es ist bereits eine 15 Jahre alte Veröffentlichung. Einführung in in Java gelernte Entwurfsmuster Ich erinnerte mich. Zu dieser Zeit beschäftigte ich mich nicht mit Java, aber ein Beispiel für die Implementierung von Entwurfsmustern wurde mit Beispielcode veröffentlicht, was eine großartige Lernerfahrung war. In den letzten 1-2 Jahren wurden in den Bewertungen von Amazon hoch bewertete Bewertungen veröffentlicht. Es scheint also, dass sie immer noch als Meisterwerke eingestuft werden.

Zusammenfassung

Wie oben erwähnt, habe ich es in einer Form zusammengefasst, die das Lernen von objektorientiertem Design aus den "Referenz" -Informationen von "Gründliche Strategie Java SE 11 Silver Problem Collection" tiefer ergänzt. Wir hoffen, dass Java- und Programmieranfänger (oder sogar Veteranen?), Die diese Sammlung von Fragen gelesen haben, zu diesem Artikel kommen und mehr über die Objektorientierung erfahren können.

Recommended Posts

Objektorientiertes Design aus "Gründliche Erfassung der Java SE 11 Silver-Problemsammlung"
Bedeutung der aus der Java Collection gelernten Schnittstelle
Java SE8 Silver bestanden
[Java] Java SE 8 Silver Note
Was Sie gelernt haben, als Sie Java SE 8 Silber und Gold erworben haben
[Erfahrung] Java SE 8 Silver bestanden
Java SE8 Silver Passing Erfahrung
So lernen Sie Java Silver SE 8
Objektorientierte Programmierung aus Dragonball gelernt
[Hinweis] Java Silver SE8-Qualifikation erworben
Straße nach Java SE 11 Silberakquisition
Was ich mit Java Silver gelernt habe
Tagebuch für Java SE 8 Silber Qualifikation
[Qualifikation] Java Silver SE11 Passing Experience