Comment expliquer les modèles de conception à des personnes extérieures au monde du logiciel

10

Je veux expliquer les modèles de conception à ma nièce, mais j'ai toujours du mal à le faire. C'est en grande partie dû à mon manque de compréhension claire des modèles de conception. Comment proposez-vous d'expliquer des modèles comme MVC, Singleton, Factory, Repository, etc. en des termes si simples que même les enfants de 10 ans peuvent comprendre.

Je cherche des exemples qui peuvent faciliter la compréhension des schémas. Exemples avec des jouets, des films, de la musique, etc.

gizgok
la source
2
Les modèles de conception sont au développement logiciel ce que la théorie des catégories est aux mathématiques. . . c'est du moins ainsi que je l'expliquerais à un mathématicien.
Eric Wilson
C'est comme lire les sections de réponses des livres de casse-tête. Vous ne connaîtrez pas la réponse à chaque puzzle, mais vous le saurez pour la plupart et vous saurez par où commencer pour un puzzle dont vous n'avez pas vu la réponse.
StuperUser

Réponses:

7

Je pense que le début de l'article Wikipedia est probablement un bon début:

A design pattern is a general reusable solution to a commonly occurring problem.

Ou voulez-vous expliquer les spécificités de ces modèles particuliers?

Charlie
la source
à la recherche de détails
gizgok
1
Il y a aussi un simple wikipedia, secure.wikimedia.org/wikipedia/simple/wiki/Design_pattern
Jeff Welling
2
@gizgok: "détails"? C'est ridicule. Spécifiez - en détail - ce que vous pourriez souhaiter de plus. Vouloir des "détails" est vague.
S.Lott
5

Cela dépend pourquoi vous voulez l'expliquer. Si vous voulez simplement expliquer l'idée des modèles, je m'appuierais sur des exemples d'architecture dans A Pattern Language. Ces chercheurs ont découvert que certains aspects d'un bâtiment ou d'une pièce incitaient les gens à vivre ou à travailler dans ce bâtiment ou cette pièce - partout dans le monde dans différentes cultures, avec différents matériaux de construction et dans différents types de quartiers. Comme "Light on Two Sides" par exemple. Les pièces avec des fenêtres sur deux murs sont tellement plus agréables que celles avec un seul (ou aucun). Il y a aussi des modèles comme ça dans le logiciel - même en utilisant différents langages de programmation, certains modèles se reproduisent. Et même dans des logiciels très différents - un jeu, quelque chose pour les calculs financiers, le moteur à l'intérieur de Facebook, etc.

Ensuite, si vous voulez parler d'un modèle particulier (vous ne savez pas pourquoi, à un enfant de dix ans), vous pouvez commencer par donner des exemples de son utilisation avant d'essayer d'expliquer comment cela fonctionne. Ainsi, Composite vous permet d'éviter la récursivité explicite lorsque vous déterminez le poids d'une valise en additionnant le poids du conteneur et le total de tous les conteneurs et des objets en vrac qu'il contient, mais cela fonctionne également pour calculer le fardeau salarial dans une entreprise ou la capacité d'un complexe de fabrication. Si cela est même un peu intéressant pour l'enfant de dix ans, vous pouvez essayer d'expliquer comment cela fonctionne.

Kate Gregory
la source
1
coz 10 ans veut devenir hacker
gizgok
2

Les modèles de conception existent parce que certaines personnes ont réalisé qu'il y avait des moyens de faire fonctionner ensemble des morceaux de logiciel et ont voulu partager leurs idées.

Vous pouvez penser aux modèles de conception de la même manière que vous pensez aux groupes de personnes. Par exemple, parfois, nous avons une personne qui facilite toutes nos réunions. C'est comme un modèle de contrôleur, qui facilite les interactions entre les objets.

Ou imaginez un public, où quelqu'un à l'avant de la salle regarde les gens lever les mains, puis répète la question pour que tout le monde puisse l'entendre, ou peut-être réagisse en y répondant. Ce serait similaire à un modèle de sujet / observateur.

Il existe des modèles qui se comportent comme des traducteurs (le modèle d'adaptateur), comme des agents de sécurité (le proxy), comme des experts dans un domaine (singletons), ou comme des personnes qui vérifient que votre voiture fonctionne (validateurs).

La différence entre les objets et les personnes est que nous pouvons à peu près créer autant d'objets que nous voulons et en avoir plusieurs copies différentes. Il est donc important de comprendre quelles responsabilités les objets devraient avoir, de garder leurs responsabilités petites et d'essayer de ne pas dupliquer ce qu'ils font, afin que le logiciel ne devienne pas trop compliqué. Les experts ont une grande expérience dans ce domaine, et ils nous ont donné ces modèles de la façon dont les logiciels efficaces interagissent afin que nous puissions décider quel type de rôle est la meilleure métaphore pour le travail que nous essayons de faire, et obtenir la des logiciels pour collaborer de la manière la plus appropriée.

Lunivore
la source
1

Dites-lui qu'ils sont utilisés pour construire des composants individuels d'un système, comme les techniques de cuisson sont utilisées pour construire un repas / plat. Imaginez que vous préparez un dîner avec des pommes de terre, de la viande et des légumes. Vous décidez que vous voulez que les pommes de terre soient bouillies et écrasées, la viande grillée et les légumes cuits à la vapeur. Vous utilisez votre modèle de conception de gril pour cuire les modèles de viande, d'ébullition et de purée pour les pommes de terre et le modèle de vapeur pour les légumes.

kett_chup
la source
1

La plupart de ces modèles de conception font partie d'une conception orientée objet. Vous ne pouvez pas vraiment les expliquer à quelqu'un qui ne comprend pas OOD. Vous pouvez décrire l'objectif que vous atteignez avec un modèle donné, mais pas comment il fonctionne ni pourquoi en avez-vous besoin. À moins bien sûr que vous n'entrez dans l'explication de l'ensemble de l'OOD.

vartec
la source
1
La plupart des modèles de conception sont des instructions sur la façon d'utiliser des abstractions appropriées pour résoudre un problème particulier. Ils ne font pas vraiment partie de la conception orientée objet.
Pemdas
@Pemdas: prenez Factory par exemple. Quel sens cela a-t-il hors de la POO?
vartec
La POO est l'endroit où les modèles sont le plus parlés, mais les autres langues et ont leurs propres ensembles de modèles. Par exemple, les monades (souvent trouvées dans les langages fonctionnels, peuvent parfois être faites en POO) sont un modèle en elles-mêmes et permettent d'autres modèles. En outre, comme cela a été mentionné ici, les modèles de conception sont venus à la programmation de l'architecture.
Charlie
Les modèles de conception n'ont rien à voir avec la POO. Les modèles de conception concernent les problèmes qui se posent encore et encore, et les stratégies qui ont été développées pour gérer les problèmes. Si une stratégie est développée à plusieurs reprises, vous avez un modèle. Si une stratégie fonctionne à plusieurs reprises, vous l'appelez un modèle de conception, si elle échoue à plusieurs reprises, vous l'appelez un anti-modèle. L'apprentissage des modèles de conception signifie des stratégies d'apprentissage qui ont fonctionné à plusieurs reprises dans le passé. Voyez comment je n'ai pas du tout parlé de programmation, encore moins de POO?
gnasher729
0

Les modèles de conception ont d'abord été décrits pour l'architecture. Des choses comme l'emplacement de la place, des bâtiments et d'autres dispositions généralement répétées. Vous pourriez commencer par là. Des choses comme l'entrée principale font face à la rue, la porte vers le coin de la pièce et tout ce à quoi vous pouvez penser. Les modèles de l'auteur d'origine n'étaient pas largement utilisés. Il aurait déclaré que les schémas eux-mêmes ne suffisent pas.

Discutez des choses qui bougent dans la pièce. Mettez une chaise devant la porte. Serait-il judicieux de déplacer les fenêtres ou la porte ailleurs? Pourquoi ou pourquoi pas?

Essayez quelque chose comme mettre une place à la table. Essayez d'organiser les choses par taille en vous éloignant de vous. Pas le schéma normal et difficile à travailler. Configurez-le normalement. Est-ce une disposition appropriée pour un rapide verre de jus? Les schémas ne sont pas toujours appropriés.

Nous vivons avec des motifs tout le temps. Prenez trois ou quatre livres et commencez à les parcourir. Il y a un motif évident dans la disposition; page de titre, table des matières, contenu et index. Tous les composants ne sont pas requis, mais il serait déroutant de les voir à leur place.

BillThor
la source
0

Les modèles de conception sont au développement logiciel ce que sont les gabarits au travail du bois. C'est un outil avec lequel vous pouvez faire des «coupes» bien connues à utiliser dans des projets plus importants.

Notez que vous n'avez pas besoin du gabarit pour faire la coupe, c'est juste plus facile dans certaines circonstances.

Steven Evers
la source
0

Je pense que mon autre réponse représente le cas général, mais le PO a commenté en demandant des détails (j'ai donc estimé qu'il méritait une réponse distincte). Malheureusement, je ne connais pas le modèle de référentiel, mais je vais essayer les autres. En règle générale, je pense que la meilleure façon de les expliquer est de savoir quel problème vous voulez résoudre, pourquoi vous voulez le résoudre et comment le problème y parvient.

Singleton

Ce modèle est utilisé lorsque nous voulons garantir qu'il n'y a qu'un seul élément. Le modèle est accompli en empêchant les autres de créer notre objet.

Wikipédia

MVC

Ce modèle est utilisé pour aider à garder les choses modulaires avec tous les avantages qui en découlent. La vue est "l'interface utilisateur", le modèle est les données (y compris la logique métier) et le contrôleur est la façon dont les actions de l'utilisateur manipulent le modèle. Avec cette modularité, rien ne m'empêche d'avoir plusieurs vues / contrôleurs pour travailler avec le même modèle. Pour un exemple trop simplifié, je peux interagir avec mon e-mail ("modèle") via un site Web, une application de bureau et mon iPhone ("vues + contrôleurs"). Si j'ai une boîte aux lettres de groupe partagée, je pourrais créer un contrôleur qui n'enverrait pas de courrier électronique et réutiliser la même vue d'application et le même courrier électronique. (oui trop simpliste, mais j'espère compréhensible :))

De plus, avec cette séparation bien définie des préoccupations, les changements dans l'un (idéalement) ne nécessitent pas de changements dans un autre. Exemple concret, si j'ai besoin de prendre en charge la lecture / écriture dans une base de données MySQL au lieu d'une base de données Oracle, je n'aurais qu'à changer mon modèle et ma vue / contrôleur ne change pas.

Wikipédia

Usine

Il faut être prudent ici car il existe de nombreux modèles similaires appelés Factory ... Je vais parler de l' usine abstraite , mais vous devez savoir qu'il existe également un modèle de méthode Factory .

Fondamentalement, j'utiliserais une usine abstraite lorsque je connais les étapes que je veux effectuer, mais les étapes sur la façon d'accomplir ces étapes individuelles peuvent varier. Par exemple, je pourrais créer une application où je dois créer une boîte de dialogue avec un bouton dessus. En faisant utiliser mon code à une fabrique d'interface utilisateur hypothétique, si j'ai besoin de mon code sur Mac ou Linux au lieu de Windows, je fournis simplement une fabrique différente et le reste de mon code ne change pas. Pour un exemple potentiellement plus sauvage, je pourrais avoir une Web Factory et tout à coup la plupart du code soutenant mon application de bureau alimente maintenant également un site Web riche :) (ok peu pratique pour d'autres raisons, mais en théorie :))

Charlie
la source
0

À un enfant de 10 ans qui veut être un hacker - je dirais.

Imaginez si vous pouviez avoir certains des meilleurs hackers du monde assis à côté de vous quand vous étiez en train de pirater .. et de temps en temps ils diraient .. "vous savez si vous le faites comme ça ... [insérer le modèle] ... alors votre code sera [plus rapide / plus sûr / plus facile à entretenir / etc] "comme ce serait cool.

Maintenant que je suppose qu'elle tient à l'idée - je ne perdrais pas mon temps à expliquer chaque modèle, je définirais sa "tâche de piratage" ... et ensuite appliquerais un modèle de conception et expliquerais la valeur ... bonnes ressources et voir où ça va.

Mais surtout, elle devra les apprendre via le mentorat.

Stephen Bailey
la source