J'essaie généralement de décrire la programmation orientée objet en utilisant des exemples du monde réel.
Par exemple, je pourrais dire qu'une classe appelée Vehicle
décrit les choses minimales qu'un véhicule est. Je vais demander à la personne de me dire ce qu’elle pense qu’un véhicule est. Parfois, ils disent des choses comme "Eh bien, comme une voiture ou un camion", et je hoche la tête et je suis d'accord avec eux. Je demanderai ensuite quelles sont les différences entre une voiture et un camion. Parfois, ils mentionnent la taille, parfois le but et d'autres choses.
Ensuite, je leur demanderai d'oublier une voiture ou un camion et je leur demanderai simplement de continuer à décrire un véhicule:
"Oh, ça bouge"
"Il a un opérateur ou un chauffeur"
etc...
Bientôt, nous savons ce qu'est un véhicule et j'ai dit que dans la POO, nous définirions un véhicule et, pour les besoins de l'argument, nous dirions qu'il peut se déplacer et lui donner une sorte de conducteur. Alors je vais demander, ok, alors qu'est-ce qu'une voiture a?
"Des portes"
"Les fenêtres"
Et puis un camion ....
"Portes" "fenêtres" "Plus de roues!"
Bientôt, après beaucoup de discussions, l'autre personne a généralement identifié:
1) Ce qui constitue un véhicule
2) Qu'est-ce qui constitue une voiture
3) Ce qui constitue un camion
4) Qu'est-ce qui constitue un avion.
Le tout sans aucun détail technique. Nous avons divisé les propriétés de chacun dans les bonnes zones. Ils comprennent l'héritage ("Oui, une voiture est un véhicule, un camion est un véhicule, mais une voiture n'est pas un camion, c'est SIMPLE, duh!").
Ils comprennent même le polymorphisme, "Bien sûr, ils font essentiellement la même chose, mais cela pourrait le faire légèrement différemment.". Nous pouvons parler de comportement et où cela devrait vivre dans notre arbre d'objets.
Selon leur formation et leurs antécédents, certains l'obtiennent plus rapidement que d'autres. Mais quand je compare la POO à des objets réels, la plupart des gens l'obtiennent toujours. En fait, j'ai trouvé dans des conversations avec des gens non techniques des choses auxquelles je n'avais jamais pensé. Les véhicules n'ont pas besoin d'être habités, par exemple (les drones), mais un programmeur aurait-il pensé à l'opérateur du véhicule comme une propriété de celui-ci? Je ne dis pas qu'il est bon ou mauvais de mentionner un opérateur, mais cela nous amène à réfléchir à ce que nous modélisons et à ce que nous essayons de réaliser lorsque nous développons un logiciel.
Maintenant, spécialisation partielle des modèles, d'autre part .... :)