[PYTHON] Résumé du chapitre 3 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'omettons pour des raisons de droits d'auteur. Essaye de comprendre.

La dernière fois, j'ai écrit un article sur le "modèle d'adaptateur". L'article précédent est ci-dessous. https://qiita.com/sirajirasajiki/items/0d58a3b9fe9bdb460d0d

Cette fois, je voudrais décrire le "modèle de méthode modèle". De plus, il existe un exemple de programme dans "Introduction aux modèles de conception appris en langage Java", mais nous l'omettons pour des raisons de droits d'auteur. Essaye de comprendre.

Chapitre 3 Méthode de modèle - Laisser le traitement spécifique aux sous-classes

Connaissez-vous le genre des réincarnations de light novel? Fondamentalement, le genre de choses réincarnées a un flux fixe tel que le personnage principal mourant → obtenir une triche de Dieu → se réincarner dans un autre monde → faire un grand succès dans un autre monde. Quelque chose comme celui-ci qui peut être utilisé comme modèle s'appelle un modèle. Cependant, même si vous utilisez le modèle, la raison pour laquelle le personnage principal meurt, la triche reçue de Dieu, la vision du monde de la destination réincarnée, le contenu de l'activité en réincarnation, etc. différeront selon le roman. L'idée de base et le déroulement de l'histoire ne changent pas, mais la personne qui la fait réellement décide quoi faire dans chaque scène.

De cette manière, une méthode qui hérite de la classe qui détermine le cadre de traitement, crée une sous-classe et détermine le traitement réel dans la sous-classe est appelée "modèle de méthode de modèle".

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

Si vous créez un grand nombre de classes différentes qui traitent avec le même algorithme par copier-coller sans utiliser le "modèle de méthode modèle", ou si vous trouvez un bogue dans l'algorithme qui traite le même, copiez et collez Vous devez modifier toutes les classes que vous avez créées. En utilisant le "modèle de méthode modèle", vous pouvez modifier toutes les classes héritées en modifiant uniquement la superclasse.

À titre d'exemple concret, il y avait aussi «Introduction aux modèles de conception appris en langage Java»,

"Afficher des caractères et des chaînes 5 fois à plusieurs reprises"

Je voudrais penser en utilisant le contenu. Cependant, ajoutez des en-têtes et des pieds de page avant et après l'affichage des caractères et des chaînes. La méthode pour ajouter un en-tête est "open", la méthode pour ajouter un pied de page est "close", la méthode pour afficher les caractères et les chaînes de caractères est "print_string" et la méthode pour afficher des caractères et des chaînes de caractères à plusieurs reprises 5 fois est "display". ça ira. Dans la superclasse, on suppose que les trois méthodes "open", "close" et "print_string" sont des méthodes abstraites, et seul "display" est implémenté. On suppose que la méthode "display" implémentée dans la superclasse utilise trois méthodes, "open", "close" et "print_string".

À un moment donné, supposons que vous vouliez changer la partie qui "affiche les caractères et les chaînes de caractères 5 fois de manière répétée" pour "afficher les caractères et les chaînes de caractères 3 fois de manière répétée". Si vous créez plusieurs classes en copiant et en collant la partie traitement de la super classe sans hériter de la super classe, vous devez la modifier dans toutes les classes. Cependant, si vous avez créé une classe en héritant de la superclasse, vous pouvez facilement la modifier en ne changeant que la superclasse.

De cette façon, lors de la création de plusieurs processus du même algorithme, en utilisant le "modèle de méthode modèle", même si le processus de la partie commune change, il peut être facilement traité.

Comme mentionné dans "Introduction aux modèles de conception appris en langage Java",

Il est important de façonner le flux de processus au stade de la classe abstraite.

J'ai repensé à cela.

Précautions lors de l'utilisation du "modèle de méthode de modèle"

Les sous-classes créées à l'aide du "modèle de méthode modèle" utilisent les algorithmes définis dans la superclasse modèle tels quels. Par conséquent, il est nécessaire de créer une sous-classe après avoir compris ce que fait la superclasse.

Exemple de méthode de modèle

Créez un diagramme de classes et du code Python à l'aide de l'exemple dans «Introduction aux modèles de conception appris dans le langage Java». La méthode pour ajouter un en-tête est "open", la méthode pour ajouter un pied de page est "close", la méthode pour afficher les caractères et les chaînes de caractères est "print_string" et la méthode pour afficher des caractères et des chaînes de caractères à plusieurs reprises 5 fois est "display". ça ira. Dans la superclasse, on suppose que les trois méthodes "open", "close" et "print_string" sont des méthodes abstraites, et seul "display" est implémenté. On suppose que la méthode "display" implémentée dans la superclasse utilise trois méthodes, "open", "close" et "print_string".

Diagramme de classe

template_method.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. template_method.txt. https://github.com/sirajirasajiki/design_pattern_uml/tree/master/template_method 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/TemplateMethod

Résumé

J'ai appris le "modèle de méthode modèle" qui définit le cadre de traitement dans la super classe et décrit le traitement spécifique dans la sous-classe.

Chapitre 3 Impressions

En ajoutant un traitement spécifique au stade de la superclasse, il est possible de décider dans une certaine mesure comment le créer dans la sous-classe, donc même lorsqu'il est implémenté par quelqu'un d'autre que la personne qui a créé la superclasse, il peut être implémenté sans trop d'hésitation. Je me demandais. Plus tard, je n'ai pas pu penser à un exemple cette fois, alors je vais essayer d'en savoir plus.

~~ L'exemple utilisé dans l'explication sera implémenté en Python à une date ultérieure. ~~ Implémenté en Python.

finalement

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

appendix

Article suivant

https://qiita.com/sirajirasajiki/items/3a779d3529fbc14af801

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

Ce à quoi j'ai fait référence lors de l'implémentation en Python

Comment éviter les sauts de ligne dans la sortie standard en Python https://qiita.com/tortuepin/items/4fbf29e42f05cb4b02a5

Journal des modifications

08/03/2020 Ajout d'exemples, de diagrammes de classes et d'implémentation en Python

Recommended Posts

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é du chapitre 3 de l'introduction aux modèles de conception appris en langage Java
Résumé du début au chapitre 1 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
Résumé des modèles singleton de l'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
Modèles de conception appris avec Java et PHP (résumé)
[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
Modèles de conception en Python: introduction
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
Introduction à l'API Socket apprise en langage C, partie 1, édition serveur
Introduction à la vérification de l'efficacité Chapitre 1 écrit en Python
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
100 traitements du langage frappent l'analyse morphologique apprise au chapitre 4
Introduction à la vérification de l'efficacité Chapitre 2 écrit en Python
Comprendre les modèles de conception en comparant les implémentations en JavaScript et Java [mis à jour de temps en temps]
Résumé des outils nécessaires pour analyser les données en Python
Introduction au langage Python
[Introduction à Python] Résumé des fonctions et méthodes qui apparaissent fréquemment en Python [Format du problème]
Modèles de conception à utiliser avec les bibliothèques Java fréquemment utilisées - Modèle de constructeur
Modèles de conception à utiliser avec les bibliothèques Java fréquemment utilisées - Modèles d'adaptateur
Modèles de conception à utiliser avec les bibliothèques Java fréquemment utilisées - Modèles de stratégie
Introduction aux statistiques Exercices du chapitre 2 de la presse de l'Université de Tokyo
Résumé de l'écriture des fichiers .proto utilisés dans gRPC
Introduction à l'API Socket apprise en langage C 2e édition client
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"
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"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 2 Étape 07 Mémo «Évaluation»
Comment implémenter du code Java en arrière-plan de Red Hat (Linux ONE)
[Python] PCA scratch dans l'exemple de "Introduction à la méthode d'analyse multivariée"
Modèles de conception à utiliser avec les bibliothèques Java fréquemment utilisées - Modèle de méthode de modèle
J'ai essayé de faire 5 modèles de base d'analyse en 3 ans
Modèles de conception à utiliser avec les bibliothèques Java fréquemment utilisées - Modèle de façade
Introduction à l'API Socket apprise en langage C 4e édition serveur / client UDP # 1
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"
Résumé de la façon d'écrire des instructions if (Scala, Java, Rust, langage C, C ++, langage Go, PHP, Perl, Python, Ruby)
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"
Explication facile à comprendre de l'application Web Python (Django) même pour les débutants (4) [Route setting / Introduction to MTV design patterns]
Résumé de l'utilisation de pandas.DataFrame.loc
100 Language Processing Knock Chapitre 1 en Python
[Introduction à Python3 Jour 13] Chapitre 7 Chaînes de caractères (7.1-7.1.1.1)
Résumé de l'utilisation de pyenv-virtualenv
[Introduction à Python3 Jour 14] Chapitre 7 Chaînes de caractères (7.1.1.1 à 7.1.1.4)
Introduction à Protobuf-c (langage C ⇔ Python)
Introduction d'une méthode de conception de contrôleur pilotée par les données
Résumé des différentes opérations dans Tensorflow
Modèle de chaîne de responsabilité en Java
[Introduction à Python3 Jour 15] Chapitre 7 Chaînes de caractères (7.1.2-7.1.2.2)