Im Allgemeinen versuche ich, die objektorientierte Programmierung anhand von Beispielen aus der Praxis zu beschreiben.
Zum Beispiel könnte ich sagen, dass eine aufgerufene Klasse Vehicle
die minimalen Dinge beschreibt, die ein Fahrzeug ist. Ich werde die Person bitten, mir zu sagen, was sie für ein Fahrzeug hält. Manchmal sagen sie Dinge wie "Nun, wie ein Auto oder ein Lastwagen", und ich nicke und stimme ihnen zu. Dann werde ich fragen, was die Unterschiede zwischen einem Auto und einem LKW sind. Manchmal erwähnen sie Größe, manchmal den Zweck und andere Dinge.
Dann werde ich sie bitten, ein Auto oder einen LKW zu vergessen und sie bitten, weiterhin ein Fahrzeug zu beschreiben:
"Oh, gut, es bewegt sich"
"Es hat einen Bediener oder einen Fahrer"
usw...
Bald wissen wir, was ein Fahrzeug ist, und ich sagte, dass wir in OOP ein Fahrzeug definieren würden und aus Gründen der Argumentation sagen würden, dass es sich bewegen kann, und ihm eine Art Fahrer geben würden. Dann werde ich fragen, ok, was hat ein Auto?
"Türen"
"Windows"
Und dann ein LKW ....
"Türen" "Fenster" "Mehr Räder!"
Bald nach vielen Diskussionen hat die andere Person im Allgemeinen Folgendes identifiziert:
1) Was macht ein Fahrzeug aus?
2) Was macht ein Auto aus?
3) Was macht einen LKW aus?
4) Was macht ein Flugzeug aus?
Alles ohne technische Details. Wir haben die Eigenschaften der einzelnen Bereiche in die richtigen Bereiche unterteilt. Sie verstehen Vererbung ("Ja, ein Auto ist ein Fahrzeug, ein LKW ist ein Fahrzeug, aber ein Auto ist kein LKW, es ist EINFACH, duh!").
Sie verstehen sogar Polymorphismus: "Sicher, sie machen im Grunde das Gleiche, aber das könnte es etwas anders machen." Wir können über Verhalten sprechen und wo das in unserem Objektbaum leben soll.
Abhängig von ihrer Ausbildung und ihrem Hintergrund erhalten einige es schneller als andere. Aber wenn ich OOP mit realen Objekten vergleiche, bekommen die meisten Leute es immer. Tatsächlich habe ich in Gesprächen mit nicht-technischen Leuten Dinge gefunden, an die ich nie gedacht hatte. Fahrzeuge müssen zum Beispiel nicht besetzt sein (Drohnen), aber hätte ein Programmierer den Betreiber des Fahrzeugs als eine Eigenschaft davon angesehen? Ich sage nicht, dass es richtig oder falsch ist, einen Operator erwähnen zu lassen, aber es lässt uns darüber nachdenken, was wir modellieren und was wir erreichen wollen, wenn wir Software entwickeln.
Nun, teilweise Template-Spezialisierung, andererseits .... :)