Résumé du début au chapitre 1 de l'introduction aux modèles de conception appris en langage Java

ç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.

Qu'est-ce qu'un modèle de conception en premier lieu?

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.

Partie 1 Habituez-vous au modèle de conception

Chapitre 1 Itérateur - Comptez un par un

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.

Pourquoi avez-vous besoin d'un tel modèle?

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.

Diagramme de classe

Le contenu de l'exemple est présenté dans le diagramme de classes comme suit. iterator.png

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.

Implémenté en Python sur la base du diagramme de classes

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.

Type d'itérateur

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

Résumé

Il s'avère que le modèle qui compte les agrégats un par un s'appelle Iterator.

Chapitre 1 Impressions

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.

finalement

S'il y a quelque chose qui ne va pas, je vous serais reconnaissant de bien vouloir le signaler!

appendix

Site sur PlantUML

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

Le site auquel j'ai fait référence lors de la création d'une interface et d'une classe qui ont hérité de cette interface en Python

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

Article suivant

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

Journal des modifications

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

Résumé du début au chapitre 1 de l'introduction aux modèles de conception appris en langage Java
Résumé du chapitre 2 de l'introduction aux modèles de conception appris en langage Java
Chapitre 4 Résumé de l'introduction aux modèles de conception appris en langage Java
Résumé des modèles de prototypes d'introduction aux modèles de conception appris en langage Java
[Mis à jour de temps en temps] Résumé des modèles de conception en Java
Résumé des modèles singleton de l'introduction aux modèles de conception appris en langage Java
Modèles de conception appris avec Java et PHP (résumé)
De l'introduction de l'API GoogleCloudPlatform Natural Language à son utilisation
De l'introduction de pyethapp à l'exécution du contrat
Utilisé depuis l'introduction de Node.js dans l'environnement WSL
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 6] Introduction à scicit-learn avec 100 coups de traitement du langage
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
Comprendre les modèles de conception en comparant les implémentations en JavaScript et Java [mis à jour de temps en temps]
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" -Chapitre 1 Mémo "Connaissances préliminaires avant de commencer les exercices"
Modèles de conception en Python: introduction
Introduction aux statistiques Exercices du chapitre 2 de la presse de l'Université de Tokyo
Comment calculer la quantité de calcul appris de ABC134-D
Comment implémenter du code Java en arrière-plan de Red Hat (Linux ONE)
Introduction à l'API Socket apprise en langage C, partie 1, édition serveur
[Python] PCA scratch dans l'exemple de "Introduction à la méthode d'analyse multivariée"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 2 Étape 06 Mémo «Identifiant»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 2 Étape 02 Mémo "Prétraitement"
Essayons le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 3 Étape 10 Mémo "Détails et amélioration du réseau neuronal"
Chapitre 1 Introduction à Python Découpez uniquement les bons points de Deeplearning à partir de zéro
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 2 Étape 07 Mémo «Évaluation»
De l'introduction de JUMAN ++ à l'analyse morphologique du japonais avec Python
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 4 Etape 14 Mémo "Recherche Hyper Paramètre"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» --Chapitre 2 Étape 04 Mémo «Extraction de fonctionnalités»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 4 Étape 15 Mémo "Collecte de données"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 3 Étape 08 Mémo «Introduction aux réseaux de neurones»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 2 Étape 05 Mémo "Conversion de quantité de fonctionnalités"
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 3 Étape 11 Mémo "Embeddings de mots"
J'ai essayé de résoudre 100 traitements linguistiques Knock version 2020 [Chapitre 3: Expressions régulières 25-29]
[Introduction à Python] Une explication approfondie des types de chaînes de caractères utilisés dans Python!
[Comprendre en 3 minutes] Le début de Linux
Notes d'apprentissage depuis le début de Python 1
Omettre la nomenclature depuis le début de la chaîne
Résumé de vtkThreshold (mis à jour de temps en temps)
Notes d'apprentissage depuis le début de Python 2
Introduction à Scapy ① (De l'installation à l'exécution de Scapy)
Introduction à la vérification de l'efficacité Chapitre 1 écrit en Python
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 3 Étape 12 Mémo "Réseaux de neurones convolutifs"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» --Chapitre 3 Étape 13 Mémo «Réseaux de neurones récurrents»
J'ai essayé de résoudre la version 2020 de 100 problèmes de traitement du langage [Chapitre 3: Expressions régulières 20 à 24]
Obtenez le résultat du GeoCoding inversé en japonais à l'aide du SDK Java de GoogleMapsAPI.
Deep Learning from scratch La théorie et la mise en œuvre de l'apprentissage profond appris avec Python Chapitre 3
J'ai essayé de résoudre la version 2020 de 100 coups de traitement de langue [Chapitre 1: Mouvement préparatoire 00-04]
J'ai essayé de résoudre la version 2020 de 100 traitements linguistiques [Chapitre 1: Mouvement préparatoire 05-09]
Récapitulatif des options gcc (mises à jour de temps en temps)
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 3 Étape 09 Mémo "Identifier par Neural Network"
100 Commandes de traitement du langage Knock UNIX apprises au chapitre 2
Résumé de la façon d'importer des fichiers dans Python 3
100 Traitement du langage Knock Expressions régulières apprises au chapitre 3
Résumé de l'utilisation de MNIST avec Python
Modifiez le point décimal de la journalisation de, à.
[Introduction à Python3 Jour 20] Chapitre 9 Démêler le Web (9.1-9.4)
Trouver le début de l'avenomics à partir du grossissement NT 2