Demostrar los principios orientados a objetos a los no programadores que usan accesorios físicos [cerrado]

8

Estamos a punto de embarcarnos para ayudar con un campo de entrenamiento nuevo en la codificación en mi trabajo, donde las personas de otros departamentos pueden aprender cómo codificar de la gente de TI. Si bien esto es genial y todo, estoy en apuros. Se me ha pedido que proponga una forma de demostrar físicamente los conceptos de herencia, polimorfismo, relaciones ha-a y is-a con una demostración física de algún tipo. ¡Efectivamente, me están pidiendo que use accesorios para demostrar estos conceptos a personas que no saben nada sobre programación y ciencias de la computación!

¿Hay alguna buena analogía o demostración que haya usado o visto para demostrar estos principios?

Adam Wells
fuente
1
Supongo que Google devolverá muchos ejemplos.
qwerty_so
2
Hola Adam, no me malinterpretes, pero esta es una pregunta típica que es demasiado amplia para este sitio o necesita referencias a recursos de terceros, que también está fuera de tema. También se incluye en la categoría "el asesoramiento educativo está fuera de tema". Recomiendo la eliminación automática antes de obtener toneladas de votos negativos de la comunidad.
Doc Brown
3
Tenga cuidado de no mezclar "es-a" en el sentido de "es-una-instancia-de" y "es-a" en el sentido de "hereda de". Las clases son conceptos de cosas, pero los objetos que te rodean en la sala de entrenamiento serán instancias de clases.
Simon B
1
No permita que sus otros departamentos comiencen a escribir código para la empresa.
cabeza de jardín
1
Por cierto, me di cuenta de que nadie ha explicado qué es una INTERFAZ. Para ser honesto, creo que sería mejor dejar la herencia y solo hablar sobre la interfaz. Dado que la interfaz se puede asignar directamente a las funcionalidades, esto es más fácil.
Walfrat

Respuestas:

11

Enseñar los principios de OO a los no programadores es como enseñar buceo a personas que no saben nadar.

Dicho esto , aquí hay algunas posibilidades con accesorios sugeridos que puede llevar al aula y pasar (o al menos mostrar) para ilustrar los conceptos:


Herencia:

Accesorios:

  • Una serie de iPhones de diferentes versiones, desde el primer iPhone, hasta el iPhone 6, 6+, etc.

Explicación: dígales que cada nuevo iPhone es una mejora incremental de su predecesor inmediato. Que la mayoría de las entrañas son iguales, pero algunas han sido mejoradas. Lo mismo para las funcionalidades. Dígale incluso que algunas partes podrían ser literalmente las mismas partes del primer iPhone que no tenían razón para cambiar.

ingrese la descripción de la imagen aquí


Poliporfismo

Accesorios:

  • Una serie de electrodomésticos, como una cafetera, un televisor, una licuadora, una radio, una lámpara de escritorio. También una toma de corriente.

Explicación: Como todos los dispositivos cumplen con la misma interfaz (todos tienen enchufes con clavijas que se ajustan a los orificios de la toma de corriente), todos los artefactos pueden recibir energía de dicho enchufe. Desde el punto de vista del zócalo, no importa qué tipo de dispositivo esté enchufado a la red eléctrica siempre que cumpla con la "interfaz" del zócalo.

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí


Es un:

Atrezzo: los iPhones antes mencionados

Explicación: cada iPhone 7 es un iPhone, cada iPhone es un teléfono inteligente, cada teléfono inteligente es un teléfono.


Has-a: Composición

Accesorios: los iPhones mencionados anteriormente, más un panel de pantalla táctil separado.

Explicación: cada iPhone tiene un panel de pantalla táctil (lo transparente con un cable plano conectado a un lado). El panel de la pantalla táctil separado del iPhone no es de mucha utilidad. No se ve a personas cargando en sus bolsillos paneles de pantalla táctil separados con el cable plano colgando.

ingrese la descripción de la imagen aquí

Has-a: Agregación

Atrezzo: Un llavero con llaves, puntero láser, un abridor de tapa, una unidad flash, un control de alarma de automóvil y otras baratijas y llaveros.

Explicación: Un llavero es un objeto compuesto con muchas llaves adjuntas, las llaves, los punteros láser y los abrelatas pueden funcionar solos sin estar unidos a un llavero y ni el llavero ni la herramienta (llave, etc.) quedan en Un estado inestable. Puede agregar y eliminar estos elementos al llavero, pero pueden existir por sí mismos como herramientas funcionales. El llavero en sí puede ser epmty, y no se puede decir que está roto por eso.

ingrese la descripción de la imagen aquí


NOTA: esas clases realmente no enseñarán a las personas OOP, al igual que el método Chineasy no te enseñará mandarina. Solo será una visión divertida (con suerte) de una forma extraña de pensar.

Tulains Córdova
fuente
3
Por herencia, me gusta otra analogía de teléfonos inteligentes: teléfonos Android puros versus teléfonos Android con cosas del fabricante en la parte superior. Este último claramente hereda del primero. Su serie de teléfonos inteligentes se parece más a las diferentes versiones de un producto, menos a la herencia.
RemcoGerlich
@RemcoGerlich OP solicitó ejemplos físicos . Estás hablando de software (sistema operativo Android). Además, un teléfono LG y un teléfono HTC no tienen relación, son implementaciones diferentes de algo, lo que los biólogos llaman evolución convergente. Solo usan algo del mismo sistema operativo (de nuevo, software). El ejemplo de iPhone trata sobre cosas físicas construidas de forma incremental sobre el modelo de la generación anterior en lugar de inventarlo todo desde cero cada vez.
Tulains Córdova
2
Esto es asombroso Me tengo que recordar este post próxima vez que tenga que explicar que :)
Quentin
No creo que los teléfonos sean útiles en absoluto. Representan versiones / generaciones más que cualquier otra cosa. Y son demasiado nerd para este propósito en primer lugar.
Martin Maat
@ TulainsCórdova: la evolución convergente ocurre por separado , pero HTC y LG son muy conscientes de lo que el otro está haciendo y está influyendo en su proceso. En segundo lugar, tiene razón en que el ejemplo del sistema operativo nativo / fabricante del sistema operativo no es físico, pero es un mejor ejemplo de herencia. El ejemplo de su iPhone parece implicar que cada teléfono hereda de su predecesor, pero esa no sería una buena forma de modelar este comportamiento. Si no usa el ejemplo del sistema operativo, sugiero encontrar un mejor ejemplo de herencia, por ejemplo, cómo 3 personas diferentes (gerente, conserje, maestro) son todas la misma persona subyacente .
Flater
3

Comience con lo básico. No use objetos físicos como accesorios para sugerir cosas que podrían ser objetos, porque esa es una forma engañosa de pensar acerca de los sistemas orientados a objetos. En cambio, saque una hoja de las conferencias navideñas de la Royal Institution y use a su audiencia como accesorios. Consiga que varios de ellos sean voluntarios y asigne a algunos de ellos los roles de ser objetos en un sistema orientado a objetos real y realista. Quizás uno de ellos sea una cola y algunos otros productores y consumidores, o algo así. Muéstreles que lo importante de un objeto es su comportamiento en la forma en que se relaciona con otros objetos, no lo que modela (porque en muchos casos realmente no modela nada tangible).

Jules
fuente
Buena idea y se parece mucho al "juego" de tarjetas CRC de Xtreme Programming .
Tulains Córdova
1

Mi experiencia personal es que incluso algunos desarrolladores junior sin experiencia académica en ciencias de la computación que acaban de aprender a programar buscando en Internet no pueden comprender adecuadamente los detalles de OOP. Por ejemplo, usando nombres propios para propiedades o escribiendo métodos cortos, y la lista continúa. Creo que enseñar conceptos de OOP a personas que nunca han estado expuestas a la programación es una exageración y rápidamente se convertiría en una decepción.

Sugeriría comenzar con un poco de programación básica en el lenguaje de su elección y luego lentamente ir explicando por qué está heredando, por ejemplo, de otra clase o por qué está creando clases anidadas y, finalmente, dígales "Ok, esto es Is-A relación y esa cosa es la relación Has-A ", etc.

Armin K
fuente
1

Debes centrarte en las características más importantes de OO. Estos son encapsulación, distinción de interfaz / implementación y acoplamiento flexible.

Lo que no debe hacer es hacer un gran problema con las jerarquías de herencia y utilizar las taxonomías como metáfora para esto. Primero, la herencia no es un concepto tan importante en OO, segundo, las metáforas populares son en realidad más engañosas que esclarecedoras. En realidad, las clases no se parecen en nada a especies de animales, frutas o lo que sea.

Creo que una cocina sería una metáfora útil. Una cocina requiere una gran cantidad de funciones complejas para poder cocinar. Pero no está construido como una gran máquina interconectada. Más bien está construido con componentes como horno, refrigerador, fregadero, etc. Cada componente tiene un único propósito bien definido. Son reemplazables: puede cambiar el horno a un horno diferente de un proveedor diferente, e incluso cabe en el mismo espacio y tiene básicamente la misma interfaz. Todos se conectan a las mismas tuberías y salidas. Los componentes están sueltos: cambiar el horno no hará que el refrigerador cambie su comportamiento. Una falla de diseño en el refrigerador no afectará a los otros componentes. El reparador del horno solo necesita ser experto en hornos.

Ahora considere si una cocina fue construida como una gran "máquina" con toda esta funcionalidad (capacidad para hornear, congelar, remover, enfriar, etc.), pero no separada en componentes. No podrá reemplazar o agregar componentes de diferentes proveedores. Posiblemente, parte de la funcionalidad de esta cocina en particular es inferior, pero no hay nada que pueda hacer. El técnico de reparación tendrá que entender todo porque es una gran máquina. Existe un alto riesgo de que un error de diseño en el horno haga explotar el fregadero. Y así.


Tenga en cuenta que esto no ayudará a nadie a aprender a codificar. No aprende a codificar a través de metáforas: aprende a codificar escribiendo código para resolver problemas.

JacquesB
fuente
+1 Por señalar que las analogías animales son malos ejemplos.
Tulains Córdova
1

Utilice la clasificación de animales y animales de peluche si lo desea

Esto logra el equilibrio correcto de aproximación difusa con la sensación de que esto es "cosas científicas" serias. Use algunos animales de peluche baratos como accesorios, si lo desea, y tal vez use una presentación de PowerPoint con fotos frecuentes de animales: a la gente le gustan los animales, y la mayoría se animará cuando sea una buena imagen de un animal.

Ayuda que el sistema de clasificación biológica sea "real" y que la mayoría de los graduados de secundaria lo recuerden un poco.

ADVERTENCIAS :

  1. La única advertencia es que ocasionalmente puede toparse con una persona cuya visión del mundo se ve desafiada al discutir un tema relacionado con la evolución. Puede asegurar a esas personas que está “hablando de la clasificación de animales ”.

  2. La metáfora animal funciona mejor si conoces un poco sobre biología y el sistema de clasificación de animales. Si realmente no recuerda su biografía de la escuela secundaria y olvida los atributos comunes de los mamíferos, es mejor que use un ejemplo sobre el que pueda hablar con autoridad.

    En cualquier caso, evite los temas de alta tecnología para su ejemplo. La mayoría de los laicos realmente no se preocupan por los modelos de computadora o periféricos. Estos motivos solo reforzarán las nociones que tu audiencia probablemente ya tendrá, entrando, de que todo este tema es "solo para técnicos".

Conceptos para describir:

Clases y objetos : el ideal del perro, frente a los perros individuales.

Método y atributos : los perros son peludos. Los perros pueden ladrar.

Anulaciones : no todos los perros tienen pelo.

Herencia : los perros son mamíferos. Los perros generalmente pueden hacer lo que los mamíferos pueden hacer (herencia del método) tienen atributos que los mamíferos tienen (herencia de atributos).

Clases abstractas : ningún animal real es solo un mamífero.

Herencia de una clase concreta : los perros de caza escoceses son perros que no tienen un método de ladrido .

Composición : un perro u otro animal puede tener un collar, pero un collar no es parte del animal.

Conceptos ligeramente más avanzados

Lo anterior es tan lejos como lo he llevado con una primera charla, pero puedes continuar:

Asociación : un perro o un gato pueden tener un collar. Pero el collar también es un objeto independiente. Puedes regalar al perro, pero mantén el collar.

Agregación : un pez puede pertenecer a una escuela . Si la escuela es tragada por una ballena, la escuela es destruida, junto con todos los peces que contiene.

Cadenas de herencia : el perro es un mamífero, un vértigo, un animal, una forma de vida. (Y señale que los sistemas informáticos también pueden ser tan complejos).

Involucre a su audiencia

Todos estos son conceptos difíciles, y probablemente obtendrá muchas miradas vidriosas si no mantiene activamente a la gente involucrada y hablando.

Por ejemplo, no enumere los atributos y métodos del perro usted mismo, solicite información del grupo. (Las personas están programadas para estar interesadas en los animales, por lo que eso ayuda).

Tim Grant
fuente
Tenga en cuenta que sobre la composición, sería mejor que algo así como una computadora esté compuesta de CPU, ... Por cierto, olvidó distinguir la agregación fuerte (composición) y la débil. Si muero, mi mano también morirá, pero no mi computadora. Anulación: más algo en la línea: no ataques de perros de la misma manera.
Walfrat
1
Los ejemplos animales para explicar los conceptos de OO no son una de las mejores opciones. Demasiado permeable y juvenil. Además, OP quiere usar accesorios físicos como recursos didácticos.
Tulains Córdova
1
@ TulainsCórdova, su propia respuesta sugiere cuán infructuoso ha sido en enseñar a las personas no técnicas los conceptos básicos de OO. Los animales mantienen a las personas más comprometidas, y no hay nada "permeable" o juvenil en la biología. Además, mi respuesta menciona accesorios en el título.
Tim Grant
@TimGrant Nunca he enseñado o explicado OOP a personas que no son programadores, pero he visto a otros fallar al usar ejemplos de animales. La rama de la ciencia de la biología no tiene fugas ni es juvenil, estaba hablando de explicar la POO con ejemplos de animales. Es muy trillado. Sin intención de ofender.
Tulains Córdova
@ TulainsCórdova, ¿dices goteante, juvenil y ahora, "trillado"? La trivialidad requeriría que la audiencia la haya escuchado antes, y esta audiencia no. ¿Tiene alguna idea real que ofrecer, o simplemente está arrojando sombra sobre una respuesta competitiva?
Tim Grant
-3

LEGO

Consigue algo de lego y construye un auto (clase base)

Luego tenga el mismo automóvil con luces (funcionalidad adicional)

Luego el mismo auto con ruedas grandes (anulaciones)

Luego obtenga una moto (clase base diferente)

Luego, obtenga un automóvil con los neumáticos quitados de dos ruedas y una luz. haz que se vea horrible. (tratando de llevar la funcionalidad de la moto a un sistema existente)

Ewan
fuente