[PYTHON] Zusammenfassung von Anfang bis Kapitel 1 der Einführung in Entwurfsmuster, die in der Java-Sprache gelernt wurden

Lange nicht gesehen. Es ist weiß. Neulich kennen leitende Ingenieure das Entwurfsmuster nicht! ?? Danach erhielt ich eine "Einführung in Designmuster, die in Java gelernt wurden", geschrieben von Hiroshi Yuki, und entschied mich zu studieren. Selbst wenn ich das Buch lese, kann ich mich nicht daran erinnern, deshalb habe ich beschlossen, es als Memorandum zu schreiben. Ich werde mein Bestes geben, damit ich das Rennen beenden kann. Darüber hinaus gibt es ein Beispielprogramm in "Einführung in in Java-Sprache erlernte Entwurfsmuster", das wir jedoch aus urheberrechtlichen Gründen weglassen werden. Bitte verstehe.

Was ist überhaupt ein Designmuster?

In "Einführung in in Java gelernte Entwurfsmuster"

Entwurfsmuster sind eine nützliche Technik, um die Programme, die Sie jeden Tag schreiben, aus einer neuen Perspektive zu überprüfen und Software zu erstellen, die einfach wiederverwendet und erweitert werden kann.

Es gab eine Beschreibung.

Wenn Sie diesen Artikel lesen, würden Sie dann nicht Code schreiben, der dem Schreiben vieler Programme ähnelt? ich habe Deshalb schreibe ich den Code oft, während ich ihn teilweise kopiere und einfüge. Es gibt nur 23 Muster, die häufig in solchen Programmen verwendet werden, oder? Es gibt vier Leute, die sagten, dass sie die Gang of Four oder GoF genannt werden. Laut GoF ist "Design Patterns: Elemente wiederverwendbarer objektorientierter Software" ein Buch, in dem 23 Muster benannt und in einem Katalog organisiert werden. Unten finden Sie Links, die das betreffende Buch erwähnen. https://en.wikipedia.org/wiki/Design_Patterns

Ich habe es in einem Durcheinander geschrieben, aber ich denke, es geht darum, das Muster des Schreibens eines Programms zu lernen, um ein Programm zu schreiben, das einfach wiederzuverwenden und zu erweitern ist.

Teil 1 Gewöhnen Sie sich an das Entwurfsmuster

Kapitel 1 Iterator - Zählen Sie eins nach dem anderen

Es gibt Programme, die nacheinander iterieren, z. B. for- und while-Anweisungen. Es wird gesagt, dass das Muster, das auf diese Weise wiederholt verarbeitet wird, als Iteratormuster bezeichnet wird.

Warum brauchst du so ein Muster?

Es gab eine Beschreibung in "Einführung in in Java-Sprache erlernte Entwurfsmuster", aber ich denke, es gibt eine Meinung, dass für Anweisungen für Dinge verwendet werden sollte, die mit Arrays verarbeitet werden. Die Quintessenz ist, dass Sie, wenn Sie Dinge abstrahieren, die nacheinander ausgeführt werden, die Methoden, die nacheinander ausgeführt werden, nicht ändern müssen, selbst wenn sich die auszuführende Datenstruktur ändert.

Unten ist ein Beispiel, das ich mir ausgedacht habe. Die Iterator-Schnittstelle und die Aggregat-Schnittstelle verwenden jedoch die unter "Einführung in die in der Java-Sprache erlernten Entwurfsmustern" beschriebenen.

Angenommen, Sie verwalten einen Studenten an einer Universität.

Angenommen, Sie haben eine Iterator-Schnittstelle, die eine "Methode zum Finden des nächsten Objekts" und eine "Methode zum Abrufen des nächsten Objekts" deklariert. Es wird auch angenommen, dass es eine Aggregatschnittstelle gibt, die die Schnittstelle dieses Iterators deklariert.

Angenommen, Sie haben mehrere Schüler in einer Abteilung und jeder Schüler hat einen Namen und eine Schulregistrierungsnummer. Angenommen, Sie haben eine Schülerklasse, die die Registrierungsnummern und -namen der Schüler verwaltet, und Sie haben eine Abteilungsklasse, die Schüler verwaltet, die einer Abteilung in einem Listenformat angehören. Die Abteilungsklasse muss die Aggregatschnittstelle implementieren. In der Abteilungsklasse werden "Methode zum Abrufen von Schülern in der Listentypvariablen", "Methode zum Abrufen der Anzahl der Schüler", "Methode zum Hinzufügen von Schülern" und "Methode zum Hinzufügen von Schülern" später beschrieben Angenommen, Sie haben eine Methode, die eine Instanz der Iterator-Klasse zurückgibt.

Angenommen, Sie haben eine Abteilungs-Iterator-Klasse, in der die Schüler der Abteilung in der Reihenfolge ihrer Registrierungsnummer aufgenommen werden. Es wird davon ausgegangen, dass diese Abteilungs-Iterator-Klasse die Iterator-Schnittstelle implementiert. In dieser Iterator-Klasse der Abteilung gibt es eine Ganzzahlvariable a, die verwaltet, wie weit Sie gesucht haben, "eine Methode, um festzustellen, ob es einen Schüler mit der folgenden Schulregistrierungsnummer gibt" und "einen Schüler und eine Variable a abrufen". Angenommen, es gibt eine Methode, die dem Wert von 1 hinzufügt. Um festzustellen, ob diese Abteilungs-Iterator-Klasse noch Schüler hat, wird der Wert der "Methode, mit der ermittelt werden kann, wie viele Schüler es gibt", die die Abteilungsklasse hat, mit der Variablen a der Abteilungs-Iterator-Klasse und der Variablen a verglichen Angenommen, es gibt noch Schüler, wenn der Wert kleiner ist. Wenn die Iterator-Klasse der Abteilung Schüler erwirbt, verwendet sie außerdem die "Methode zum Erfassen von Schülern, die in Variablen vom Typ Liste enthalten sind" der Abteilungsklasse.

Selbst wenn die Studentenverwaltungsmethode in der Abteilungsklasse vom Listentyp in den ArrayList-Typ geändert wird, ist die Implementierung der Abteilungs-Iterator-Klasse derzeit nicht betroffen, sodass der Einflussbereich auf die Abteilungsklasse beschränkt ist. In solchen Zeiten ist ein Iterator-Design erforderlich.

"Einführung in in Java gelernte Entwurfsmuster"

Denken Sie an die Idee, mit abstrakten Klassen und Schnittstellen zu programmieren.

Es gab eine Beschreibung, also vergiss sie nicht.

Klassen Diagramm

Der Inhalt des Beispiels wird im Klassendiagramm wie folgt dargestellt. iterator.png

Dieses Klassendiagramm wird als PlantUML bezeichnet. Der PlantUML-Code, den ich geschrieben habe, befindet sich auf dem GitHub unten. Lesen Sie daher bitte Read Me, bevor Sie ihn verwenden. Der entsprechende Dateiname lautet iterator.txt. https://github.com/sirajirasajiki/design_pattern_uml/blob/master/iterator/iterator.txt

Einzelheiten zur Installation und Verwendung von PlantUML finden Sie im Anhang unten.

In Python basierend auf dem Klassendiagramm implementiert

Der unten implementierte Code ist verfügbar. Implementiert in Python 3.7. https://github.com/sirajirasajiki/design_pattern_python/tree/master/Iterator

ReadMe finden Sie auf der folgenden Seite. https://github.com/sirajirasajiki/design_pattern_python/blob/master/README.md

Die Implementierung von Klassen und Schnittstellen in Python wird im folgenden Anhang beschrieben.

Art des Iterators

Neben der Verarbeitung von Anfang an gibt es die folgenden Verarbeitungsarten, die der Reihe nach wiederholt werden. --Umgekehrte Reihenfolge

Zusammenfassung

Es stellt sich heraus, dass das Muster, das Aggregate nacheinander zählt, Iterator heißt.

Kapitel 1 Impressionen

Indem ich selbst die einfache Verarbeitung abstrahierte, dachte ich, es wäre einfach, weil es nur wenige Änderungen geben würde. Ich habe auch versucht, die Klasse auf Japanisch auszudrücken, aber es war ein relativ einfaches Konzept, aber es war sehr schwierig, deshalb fand ich das Programm großartig. Später war es sehr schwierig, ein Klassendiagramm zu erstellen, während ich darüber nachdachte, deshalb würde ich es gerne auf Papier schreiben. ~~ Ich werde es zu einem späteren Zeitpunkt so in Python schreiben. ~~ Ich habe es so in Python geschrieben.

Schließlich

Wenn etwas nicht stimmt, wäre ich Ihnen dankbar, wenn Sie darauf hinweisen könnten!

appendix

Seite über PlantUML

Die folgenden Sites wurden bei der Installation von PlantUML berücksichtigt. https://qiita.com/kohashi/items/1d2c6e859eeac72ed926 Die folgenden Seiten wurden beim Schreiben von PlantUML berücksichtigt. https://qiita.com/ogomr/items/0b5c4de7f38fd1482a48

Die Site, auf die ich beim Erstellen einer Schnittstelle und einer Klasse verwiesen habe, die diese Schnittstelle in Python geerbt hat

https://qiita.com/ukisoft/items/b7c410b96dde1922a2d0#comments https://qiita.com/baikichiz/items/7c3fdb721bb72644f638 https://qiita.com/ttsubo/items/97d7dd23e8f939c81d78

Nächster Artikel

https://qiita.com/sirajirasajiki/items/0d58a3b9fe9bdb460d0d

Änderungsprotokoll

2020/2/22 Klassendiagrammelemente hinzugefügt 2020/2/24 In Python basierend auf dem Klassendiagramm implementiert und das Klassendiagramm gemäß den Namensregeln der Python-Methoden geändert. 2020/2/25 Ergänzung des Anhangs. 2020/2/27 Änderung des Git-Links im Klassendiagramm

Recommended Posts

Zusammenfassung von Anfang bis Kapitel 1 der Einführung in Entwurfsmuster, die in der Java-Sprache gelernt wurden
Zusammenfassung von Kapitel 2 der Einführung in Entwurfsmuster, die in Java gelernt wurden
Kapitel 4 Zusammenfassung der Einführung in Entwurfsmuster, die in Java gelernt wurden
Zusammenfassung der Prototypmuster der Einführung in Entwurfsmuster, die in Java gelernt wurden
[Von Zeit zu Zeit aktualisiert] Zusammenfassung der Entwurfsmuster in Java
Singleton-Musterzusammenfassung der Einführung in Entwurfsmuster, die in Java gelernt wurden
Mit Java & PHP erlernte Entwurfsmuster (Zusammenfassung)
Von der Einführung der GoogleCloudPlatform Natural Language API bis zur Verwendung
Von der Einführung von Pyethapp bis zur Vertragsabwicklung
Wird ab der Einführung von Node.js in der WSL-Umgebung verwendet
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 6] Einführung in Scicit-Learn mit 100 Klopfen Sprachverarbeitung
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Verstehen Sie Entwurfsmuster, indem Sie Implementierungen in JavaScript und Java vergleichen. [Von Zeit zu Zeit aktualisiert]
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" - Kapitel 1 Memo "Vorkenntnisse vor Beginn der Übungen".
Entwurfsmuster in Python: Einführung
Einführung in die Statistik Die University of Tokyo Press Kapitel 2 Übungen
Berechnen des aus ABC134-D gelernten Rechenaufwands
So implementieren Sie Java-Code im Hintergrund von Red Hat (Linux ONE)
Einführung in die in C Language Part 1 Server Edition erlernte Socket-API
[Python] PCA-Scratch im Beispiel "Einführung in die multivariate Analysemethode"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 06 Memo "Identifier"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 02 Memo "Vorverarbeitung"
Versuchen wir das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" - Kapitel 3 Schritt 10 Memo "Details und Verbesserung des neuronalen Netzes"
Kapitel 1 Einführung in Python Schneiden Sie nur die guten Punkte des Deeplearning aus, die von Grund auf neu erstellt wurden
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 07 Memo "Evaluation"
Von der Einführung von JUMAN ++ bis zur morphologischen Analyse von Japanisch mit Python
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" - Kapitel 4 Schritt 14 Memo "Hyperparametersuche"
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 2 Schritt 04 Memo "Feature Extraction"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 4 Schritt 15 Memo "Datenerfassung"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" - Kapitel 3 Schritt 08 Memo "Einführung in neuronale Netze".
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 2 Schritt 05 Memo "Feature Quantity Conversion"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 3 Schritt 11 Memo "Worteinbettungen"
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 3: Reguläre Ausdrücke 25-29]
[Einführung in Python] Eine ausführliche Erklärung der in Python verwendeten Zeichenkettentypen!
[Verständnis in 3 Minuten] Der Beginn von Linux
Notizen vom Anfang von Python 1 lernen
Lassen Sie die Stückliste am Anfang der Zeichenfolge weg
Zusammenfassung von vtkThreshold (von Zeit zu Zeit aktualisiert)
Notizen vom Anfang von Python 2 lernen
Einführung in Scapy ① (Von der Installation bis zur Ausführung von Scapy)
Einführung in die Überprüfung der Wirksamkeit Kapitel 1 in Python geschrieben
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" - Kapitel 3 Schritt 12 Memo "Convolutional Neural Networks".
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 3 Schritt 13 Memo "Wiederkehrende neuronale Netze"
Ich habe versucht, die 2020-Version von 100 Sprachverarbeitungsproblemen zu lösen [Kapitel 3: Reguläre Ausdrücke 20 bis 24]
Holen Sie sich das Ergebnis der umgekehrten GeoCoding auf Japanisch mit dem Java SDK von GoogleMapsAPI.
Deep Learning von Grund auf neu Die Theorie und Implementierung des mit Python erlernten Deep Learning Kapitel 3
Ich habe versucht, die 2020-Version von 100 Sprachverarbeitungsproblemen zu lösen [Kapitel 1: Vorbereitungsbewegung 00-04]
Ich habe versucht, die 2020-Version von 100 Sprachverarbeitungsproblemen zu lösen [Kapitel 1: Vorbereitungsbewegung 05-09]
Zusammenfassung der gcc-Optionen (von Zeit zu Zeit aktualisiert)
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 3 Schritt 09 Memo "Identifier by Neural Network"
100 Sprachverarbeitung Knock UNIX-Befehle in Kapitel 2
Zusammenfassung zum Importieren von Dateien in Python 3
100 Sprachverarbeitung Klopfen Sie auf reguläre Ausdrücke, die Sie in Kapitel 3 gelernt haben
Zusammenfassung der Verwendung von MNIST mit Python
Ändern Sie den Dezimalpunkt der Protokollierung von, nach.
[Einführung in Python3 Tag 20] Kapitel 9 Enträtseln des Webs (9.1-9.4)
Finden des Beginns der Avenomics anhand der NT-Vergrößerung 2