Generalmente trato de describir la Programación Orientada a Objetos usando ejemplos del mundo real.
Por ejemplo, podría decir que una clase llamada Vehicle
describe las cosas mínimas que es un vehículo. Le pediré a la persona que me diga qué cree que es un vehículo. A veces dicen cosas como "Bueno, como un automóvil o un camión", y yo asentiré y estaré de acuerdo con ellos. Luego preguntaré cuáles son las diferencias entre un automóvil y un camión. A veces mencionan el tamaño, a veces el propósito y otras cosas.
Luego les pediré que se olviden de un automóvil o un camión y simplemente les pediré que continúen describiendo un vehículo:
"Oh, bueno, se mueve"
"Tiene un operador o un conductor"
etc ...
Pronto, sabemos lo que es un Vehículo y dije que en OOP definiríamos un vehículo, y por el simple hecho de decir que puede moverse, y le daríamos un tipo de conductor. Entonces preguntaré, ok, ¿qué tiene un auto?
"Puertas"
"Windows"
Y luego un camión ...
"Puertas" "ventanas" "¡Más ruedas!"
Pronto, después de mucha discusión, la otra persona generalmente ha identificado:
1) Qué constituye un vehículo
2) Qué constituye un automóvil
3) Qué constituye un camión
4) Qué constituye un avión.
Todo sin tecnicismos. Hemos dividido las propiedades de cada uno en las áreas correctas. Entienden la herencia ("Sí, un automóvil es un vehículo, un camión es un vehículo, pero un automóvil no es un camión, ¡es SIMPLE, duh!").
Incluso entienden el polimorfismo, "Claro, básicamente hacen lo mismo, pero eso podría hacerlo un poco diferente". Podemos hablar sobre el comportamiento y dónde debería vivir en nuestro árbol de objetos.
Dependiendo de su educación y antecedentes, algunos lo obtienen más rápido que otros. Pero cuando comparo OOP con objetos de la vida real, la mayoría de las personas siempre lo entienden. De hecho, he encontrado en conversaciones con personas no técnicas cosas en las que nunca había pensado. Los vehículos no tienen que ser tripulados, por ejemplo (drones), pero ¿un programador habría pensado que el operador del vehículo es una propiedad del mismo? No digo que sea correcto o incorrecto que se mencione un operador, pero nos hace pensar en lo que estamos modelando y lo que estamos tratando de lograr cuando desarrollamos software.
Ahora, especialización parcial de plantilla, por otro lado .... :)