ça fait longtemps. C'est blanc. L'autre jour, les ingénieurs seniors ne connaissent pas le modèle de conception! ?? Après cela, j'ai reçu une "Introduction aux modèles de conception appris en langage Java" écrite par Hiroshi Yuki, alors j'ai décidé d'étudier. Cependant, même si j'ai lu le livre, je ne m'en souviens pas, alors j'ai décidé de l'écrire sous forme de mémorandum. Je ferai de mon mieux pour pouvoir terminer la course. De plus, il existe un exemple de programme dans "Introduction aux modèles de conception appris en langage Java", mais nous l'omettreons pour des raisons de droits d'auteur. Essaye de comprendre.
Dans "Introduction aux modèles de conception appris en langage Java"
Les modèles de conception sont une technique utile pour revoir les programmes que vous écrivez chaque jour sous un nouvel angle et créer des logiciels faciles à réutiliser et à étendre.
Il y avait une description.
Si vous lisez cet article, n'écririez-vous pas du code similaire à l'écriture de nombreux programmes? j'ai J'écris donc souvent le code en copiant et collant en partie. Il n'y a que 23 modèles qui sont souvent utilisés dans des programmes comme celui-ci, non? Il y a quatre personnes qui ont dit qu'on les appelait le Gang of Four ou GoF. Le GoF dit que «Design Patterns: Elements of Reusable Object-Oriented Software» est un livre qui nomme 23 modèles et les organise dans un catalogue. Vous trouverez ci-dessous des liens qui mentionnent le livre en question. https://en.wikipedia.org/wiki/Design_Patterns
Je l'ai écrit dans le désordre, mais je pense qu'il s'agit d'essayer d'apprendre le modèle d'écriture d'un programme afin d'écrire un programme facile à réutiliser et à développer.
Il existe des programmes qui itèrent dans l'ordre, comme les instructions for et while. On dit que le modèle qui est traité à plusieurs reprises de cette manière est appelé le modèle Iterator.
Il y avait une description dans "Introduction aux modèles de conception appris en langage Java", mais je pense qu'il y a une opinion selon laquelle les instructions devraient être utilisées pour les choses qui sont traitées à l'aide de tableaux. L'essentiel est que si vous faites abstraction des choses qui sont exécutées en séquence, vous n'avez pas à changer les méthodes qui sont exécutées en séquence même si la structure de données à exécuter change.
Ci-dessous, un exemple que j'ai proposé. Cependant, l'interface Iterator et l'interface Aggregate utilisent celles décrites dans «Introduction aux modèles de conception appris dans le langage Java».
Par exemple, supposons que vous dirigiez un étudiant dans une université.
Supposons que vous ayez une interface Iterator qui déclare une "méthode pour trouver le suivant" et une "méthode pour obtenir l'objet suivant". Il est également supposé qu'il existe une interface d'agrégation qui déclare l'interface de cet itérateur.
Supposons que vous ayez plusieurs étudiants dans un département et que chaque étudiant ait un nom et un numéro d'inscription scolaire. Supposons que vous ayez une classe d'étudiants qui gère les numéros et les noms d'inscription des étudiants et que vous ayez une classe de département qui gère les étudiants appartenant à un département dans un format de liste. La classe de service doit implémenter l'interface Aggregate. Dans la classe du département, "méthode pour obtenir les étudiants dans la variable de type Liste", "méthode pour obtenir le nombre d'étudiants", "méthode pour ajouter des étudiants" et "méthode pour ajouter des étudiants" décrites plus loin Supposons que vous ayez une méthode qui renvoie une instance de la classe Iterator.
Supposons que vous ayez une classe Iterator de département qui prend les étudiants dans le département par ordre de numéro d'inscription. Cette classe Iterator de département est supposée implémenter l'interface Iterator. Dans cette classe Iterator de département, il existe une variable de type entier a qui gère jusqu'où vous avez recherché, "une méthode pour déterminer s'il y a un élève avec le numéro d'inscription scolaire suivant" et "obtenir un élève et la variable a". Supposons qu'il existe une méthode qui ajoute 1 à la valeur de. Afin de déterminer si cette classe Iterator de département a encore des étudiants, la valeur de la "méthode qui peut obtenir le nombre d'étudiants" de la classe de département est comparée à la variable a de la classe Iterator de département et à la variable a Supposons qu'il y ait encore des étudiants lorsque la valeur est plus petite. De plus, lorsque la classe Iterator du département acquiert des étudiants, elle utilise la «méthode d'acquisition des étudiants contenues dans les variables de type Liste» de la classe du département.
À ce stade, même si la méthode de gestion des étudiants passe du type List au type ArrayList dans la classe Department, l'implémentation de la classe Department Iterator n'est pas affectée, de sorte que la plage d'influence est limitée à la classe Department. La conception de l'itérateur est nécessaire dans de tels moments.
"Introduction aux modèles de conception appris en langage Java"
Gardez à l'esprit l'idée de programmer avec des classes abstraites et des interfaces.
Il y avait une description, alors ne l'oubliez pas.
Le contenu de l'exemple est présenté dans le diagramme de classes comme suit.
Ce diagramme de classes est décrit comme PlantUML. Le code PlantUML que j'ai écrit se trouve sur le GitHub ci-dessous, veuillez donc lire Lisez-moi avant de l'utiliser. Le nom de fichier correspondant est iterator.txt. https://github.com/sirajirasajiki/design_pattern_uml/blob/master/iterator/iterator.txt
Pour plus de détails sur l'installation et l'utilisation de PlantUML, voir l'annexe ci-dessous.
Le code implémenté ci-dessous est disponible. Implémenté en Python 3.7. https://github.com/sirajirasajiki/design_pattern_python/tree/master/Iterator
ReadMe se trouve sur la page suivante. https://github.com/sirajirasajiki/design_pattern_python/blob/master/README.md
L'implémentation des classes et des interfaces en Python est décrite en annexe ci-dessous.
En plus du traitement dans l'ordre depuis le début, il existe les types de traitement suivants qui sont répétés dans l'ordre. --Ordre inverse --Bidirectionnel --Processus du milieu à la fin
Il s'avère que le modèle qui compte les agrégats un par un s'appelle Iterator.
En faisant abstraction d'un traitement même simple, j'ai pensé que ce serait facile car il y aurait peu de changements. De plus, j'ai essayé d'exprimer la classe en japonais, mais c'était un concept relativement simple, mais c'était très difficile, donc j'ai trouvé le programme génial. Après cela, il était très difficile de créer un diagramme de classe en y réfléchissant, alors j'aimerais l'écrire sur papier. ~~ Je vais l'écrire comme ça en Python à une date ultérieure. ~~ Je l'ai écrit comme ça en Python.
S'il y a quelque chose qui ne va pas, je vous serais reconnaissant de bien vouloir le signaler!
appendix
Les sites suivants ont été pris en charge lors de l'installation de PlantUML. https://qiita.com/kohashi/items/1d2c6e859eeac72ed926 Les sites suivants ont été pris en compte lors de l'écriture de PlantUML. 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 Ajout d'éléments de diagramme de classes 2020/2/24 Implémenté en Python basé sur le diagramme de classes, et modifié le diagramme de classes selon les règles de dénomination des méthodes Python. 2020/2/25 Ajout d'une annexe. 2020/2/27 Changement de lien Git affiché dans le diagramme de classes
Recommended Posts