[GO] Dezapata_0 Warum Designmuster lernen?

zunaechst

Diese Artikelserie wurde vom Autor verfasst (Java-Lernerfahrung: ca. 2 Jahre, Java-Berufserfahrung: ein wenig) Erstellt, um "GoF Design Pattern 23" zu verstehen. Ich beabsichtige, mich eher auf das Bild als auf die Genauigkeit zu konzentrieren, und ich denke, dass der Inhalt auf ** weniger als auf Java-Zwischenprogrammierung ** abzielen wird.

Wenn Sie es nicht erreichen können, kommentieren Sie bitte <(_ _)>

** Hauptlernquellen: ** ・ "Einführung in Entwurfsmuster, die in der erweiterten und überarbeiteten Java-Sprache (von Hiroshi Yuki) gelernt wurden" ・ Entwurfsmuster | TECHSCORE


Was ist ein Designmuster?

Entwerfen Sie Muster, um die Qualität des Programms zu verbessern. In einer solchen Situation ist es eine Sammlung der Weisheit unserer Vorgänger, wie zum Beispiel so zu entwerfen und später zu helfen.

Dieser Artikel behandelt 23 Muster, die als ** "GoF Design Patterns" ** bekannt sind. "[GoF](https://ja.wikipedia.org/wiki/%E3%82%AE%E3%83%A3%E3%83%B3%E3%82%B0%E3%83%BB%E3%" 82% AA% E3% 83% 96% E3% 83% BB% E3% 83% 95% E3% 82% A9% E3% 83% BC_ (% E6% 83% 85% E5% A0% B1% E5% B7 Es wurde von einer prominenten Gruppe von Software-Ingenieuren namens "% A5% E5% AD% A6))" befürwortet und ist eines der bekanntesten Entwurfsmuster. Japanische Version des Buches: ** "Entwurfsmuster zur Wiederverwendung in der Objektorientierung" ** "(Es tut mir leid, dass ich nicht gelesen habe!)"

Warum Designmuster lernen?

Es gibt verschiedene Zwecke. .. Wenn Sie GoF-Entwurfsmuster lernen, können Sie die folgenden Vorteile erwarten.

Lernen Sie Entwurfsmethoden kennen, die die Wartbarkeit und Wiederverwendbarkeit von Programmen verbessern

-Designmuster sind nützlich, um Programmkomponenten nach Funktionen zu gruppieren oder Rollen zu trennen, um allgemeine Teile zu erstellen.

Sie können die Programme verstehen, die Muster verwenden.

-Java Collection (ArrayList usw.) verwendet das Iterator-Muster. Außerdem verwenden viele das Factory-Muster zur Instanziierung. -Einige Designs mit Designmustern sind auf den ersten Blick schwer zu verstehen. Wenn Sie das Muster nicht kennen, können Sie es nicht verstehen, indem Sie sich das Programm ansehen, und Sie können es als kompliziertes und schlechtes Design falsch interpretieren.

Erfahren Sie, wie Sie objektorientiert effektiv arbeiten.

-Es gibt viele objektorientierte Programmiersprachen, die nicht auf Java beschränkt sind. Es ist jedoch ziemlich schwierig zu wissen, wie man "objektorientiert" gut verwendet. .. (Ich denke nicht, dass es ein sehr intuitives Konzept ist) Ich denke, dass das Erlernen verschiedener Muster Ihnen helfen wird, die Objektorientierung zu lernen.

Nützlich für die Kommunikation als allgemeines Wissen von Softwareentwicklern.

・ GoF ist ein berühmtes Entwurfsmuster, und viele Ingenieure wissen es. Wenn Sie also sagen: "Dieses Design ist ein" XXX-Muster "", kann dies ausreichen, um dies zu erklären.

Für diejenigen, die von nun an Designmuster lernen, anstatt nur die Muster zu verwenden Für jedes Muster gibt es einen "Zweck", und "GoF entwirft dies für diesen Zweck". Ich denke, wenn Sie sich dieses Punktes bewusst sind, können Sie ihn anwenden.


Zusätzliche Erklärung:

Es ist ein Bonus. Sie können es überspringen.

Was ist Wartbarkeit?

Einfache Hinzufügung und Änderung des Programms. Es umfasst auch die Lesbarkeit des Codes und die ordnungsgemäße Protokollierung für die Analyse im Falle eines Problems. In Bezug auf das Programmdesign zeigt es "Flexibilität", die auf Situationen wie Funktionserweiterungen und Spezifikationsänderungen reagieren kann.

-Wenn die Teile für jede Funktion / Rolle im Programm organisiert sind, wird die Sichtbarkeit des Programms verbessert und die Wartbarkeit verbessert.

Was ist Wiederverwendbarkeit?

Einfache Wiederverwendung von Programmen und ihren Teilen. Sie können einen Teil an mehreren Stellen im Programm oder mit einigen Änderungen in einem anderen Programm verwenden. Zusätzlich zur Reduzierung der Mühe, denselben Code zweimal zu schreiben Teile, die die strenge Testphase bestanden haben, sollten qualitativ garantiert sein. Wenn die qualitätsgarantierten Teile unverändert wiederverwendet werden können, kann der Testaufwand reduziert werden.

-Teile mit "allgemeinem Design", die nicht von besonderen Bedingungen abhängen, sind in hohem Maße wiederverwendbar. -Es kann gesagt werden, dass die offiziellen Sprach-APIs in hohem Maße wiederverwendbar sind.

Zusammenfassung:

Ein "gutes" Programm, das sehr wartbar und wiederverwendbar ist -Es ist für jede Funktion / Rolle "organisiert", was das Ändern und Hinzufügen von Funktionen erleichtert. -Es gibt viele "allgemein gefertigte" Teile, die so weit wie möglich von den besonderen Umständen im Programm getrennt sind.

Da das Programm jedoch zur Lösung eines echten konkreten Problems dient, Sie müssen irgendwo "konkrete" Verarbeitung und Werte schreiben.

** In Anbetracht der Umstände wird das GoF-Entwurfsmuster häufig wie folgt gestaltet. ** ** **

Machen Sie Teile für jede Funktion / Rolle so fein wie möglich

・ Durch die Unterteilung wird die für jedes Teil verantwortliche Arbeit klar. ・ Der Einflussbereich beim Austausch oder der Änderung von Teilen wird verringert.

Trennen Sie die Beziehung zwischen Teilen und der Beschreibung der spezifischen Verarbeitung

Fassen Sie bestimmte Verarbeitungs- und Wertebeschreibungen an bestimmten Orten zusammen

・ Schreiben Sie hier und da keine spezifischen Beschreibungen, z. B. welche konkrete Klasse zu new (). Lassen Sie es beispielsweise von einem Experten verwalten, die Hauptfunktion. Anschließend können Sie zwischen verschiedenen konkreten Klassen wechseln, indem Sie nur main () ändern.

Organisieren Sie Abhängigkeiten zwischen Teilen

Ordnungsgemäße Verschleierung / Einkapselung von Teilen

・ Bewahren Sie die Unabhängigkeit von Teilen, indem Sie der Benutzerseite nur die erforderlichen Teile anzeigen -Es ist auch möglich, mehrere Teile zu einem großen Teil zu kombinieren. Blenden Sie in diesem Fall alle Teile außer dem Fenster aus.


Was ist Abhängigkeit?

Die Teile des Programms sind eng mit anderen Teilen verwandt.

Ein häufiges Problem, wenn Sie ein Programm ändern möchten Das Ändern eines Teils "A" erfordert möglicherweise (möglicherweise) das Ändern des anderen Teils "B". Zu diesem Zeitpunkt soll "B" ** "abhängig" ** von "A" sein.

Wenn in Java der Name der Klasse "A" in der Beschreibung der Klasse "B" erscheint, "B" hängt von "A" ab. Wenn Sie beispielsweise den Namen "A" in "New A" ändern, müssen Sie alle in "B" angezeigten "A" in "New A" ändern. Andernfalls wird der Compiler wütend.

Es ist unwahrscheinlich, dass Sie tatsächlich nur den Namen ändern, aber solange Sie die Klasse "A" in der Klasse "B" absichtlich beschrieben haben, "B" bedeutet, dass "A" auf irgendeine Weise verwendet wird. (Es kann verschiedene Situationen geben, z. B. die Verwendung oder Vererbung einer Instanz.) Wenn Sie die Beschreibung in "A" in diesem Zustand neu schreiben, besteht die Möglichkeit, dass die Funktion von "B" mit "A" in irgendeiner Weise beeinträchtigt wird.

Im Gegenteil, unabhängig davon, wie stark Änderungen an der Klasse "B" vorgenommen werden, wirkt sich dies nicht auf die Seite der Klasse "A" aus. (Wenn "A" nicht "B" verwendet) Innerhalb des Codes für die Klasse "A" könnten Sie nicht einmal sehen, ob "B" überhaupt existiert. Daher kann gesagt werden, dass die Klasse "A" nicht von der Klasse "B" abhängt.

Wenn die Abhängigkeit zwischen Teilen kompliziert wird, geht die Unabhängigkeit von Teilen verloren und der Zeit- und Arbeitsaufwand für die Korrektur nimmt zu. Daher sollten die Abhängigkeiten so klein wie möglich und leicht zu kontrollieren sein.

Was ist Verschleierung / Einkapselung?

Das Verhindern, dass ein bestimmter Teil einer Programmkomponente von außen gesehen oder berührt wird, wird als "Verdeckung" bezeichnet. Das "Verstecken" des rechten Teils heißt ** "Kapselung" **.

Nehmen wir zum Beispiel an, Sie haben hier einen Herd. Auf der Oberseite des Ofens befindet sich ein Ein- / Ausschalter, und wenn Sie ihn drücken, kommt eine warme Brise heraus. Das Innere der Maschine ist mit einer Abdeckung abgedeckt, und Teile wie Heizungen und Lüfter, die sich im Inneren bewegen, können nicht gesehen oder berührt werden. Dies ist der "gekapselte" Zustand, und die Teile, die für den Benutzer nicht erforderlich sind, sind "versteckt".

Was ist, wenn die Ofenabdeckung entfernt wird und die mechanischen Teile vollständig sichtbar sind? Sie können den Netzschalter nicht auf einen Blick finden, aber Sie können die Heizung, den Lüfter, die Schrauben und andere interne Teile sehen. Es ist sehr schwer zu verstehen, wo man operiert. Es ist möglich, dass Sie versehentlich ein wichtiges Teil berühren und den Ofen zerbrechen. Dies ist der Zustand, in dem es nicht "versteckt" ist.

Auf diese Weise hat eine ordnungsgemäße Verschleierung zwei Vorteile. -Es ist einfacher zu handhaben, da der Benutzer nur das Fenster (Netzschalter usw.) überprüfen muss, um die Teile zu verwenden. ・ Schützt die inneren Elemente von Teilen vor unerwarteten Veränderungen von außen

In Java wird das Ausblenden hauptsächlich durch die Verwendung von ** Zugriffskontrolle ** wie privat und öffentlich erreicht.

Recommended Posts

Dezapata_0 Warum Designmuster lernen?
Entwurfsmuster in Python: Einführung
Versuchen Sie es mit Designmustern (Exporter Edition)