In genere cerco di descrivere la programmazione orientata agli oggetti usando esempi del mondo reale.
Ad esempio, potrei dire che una classe chiamata Vehicle
descrive le cose minime che un veicolo è. Chiederò alla persona di dirmi cosa pensa che sia un veicolo. A volte dicono cose come "Beh, come un'auto o un camion", e annuisco e sono d'accordo con loro. Quindi chiederò quali sono le differenze tra un'auto e un camion. A volte menzionano le dimensioni, a volte lo scopo e altre cose.
Quindi chiederò loro di dimenticare un'auto o un camion e chiederò loro di continuare a descrivere un veicolo:
"Oh, beh si muove"
"Ha un operatore o un driver"
eccetera...
Presto, sappiamo cos'è un Veicolo e ho detto che in OOP avremmo definito un veicolo, e per amor di discussione dire che può muoversi e dargli un tipo di guidatore. Allora chiederò, ok, quindi cosa ha un'auto?
"Porte"
"Finestre"
E poi un camion ....
"Porte" "finestre" "Altre ruote!"
Presto, dopo molte discussioni, l'altra persona ha generalmente identificato:
1) Cosa costituisce un veicolo
2) Cosa costituisce un'auto
3) Cosa costituisce un camion
4) Cosa costituisce un aereo.
Tutto senza alcun tecnicismo. Abbiamo suddiviso le proprietà di ciascuno nelle aree giuste. Comprendono l'eredità ("Sì, un'auto è un veicolo, un camion è un veicolo, ma un'auto non è un camion, è SEMPLICE, duh!").
Capiscono persino il polimorfismo, "Certo, sostanzialmente fanno lo stesso, ma potrebbe farlo in modo leggermente diverso". Possiamo parlare di comportamento e di dove dovrebbe vivere nel nostro albero di oggetti.
A seconda della loro istruzione e del loro background, alcuni lo ottengono più velocemente di altri. Ma quando confronto OOP con oggetti della vita reale, la maggior parte delle persone lo capisce sempre. In effetti, nelle conversazioni con persone non tecniche ho trovato cose a cui non avevo mai pensato. I veicoli non devono essere presidiati, ad esempio (droni), ma un programmatore avrebbe considerato l'operatore del veicolo come una sua proprietà? Non sto dicendo che sia giusto o sbagliato far menzionare un operatore, ma ci induce a pensare a ciò che stiamo modellando e a ciò che stiamo cercando di ottenere quando sviluppiamo software.
Ora, la specializzazione parziale del modello, d'altra parte .... :)