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.
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.
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.
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.
Der Inhalt des Beispiels wird im Klassendiagramm wie folgt dargestellt.
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.
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.
Neben der Verarbeitung von Anfang an gibt es die folgenden Verarbeitungsarten, die der Reihe nach wiederholt werden. --Umgekehrte Reihenfolge
Es stellt sich heraus, dass das Muster, das Aggregate nacheinander zählt, Iterator heißt.
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.
Wenn etwas nicht stimmt, wäre ich Ihnen dankbar, wenn Sie darauf hinweisen könnten!
appendix
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
https://qiita.com/ukisoft/items/b7c410b96dde1922a2d0#comments https://qiita.com/baikichiz/items/7c3fdb721bb72644f638 https://qiita.com/ttsubo/items/97d7dd23e8f939c81d78
https://qiita.com/sirajirasajiki/items/0d58a3b9fe9bdb460d0d
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