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?
object-oriented
concepts
demonstration
Adam Wells
fuente
fuente
Respuestas:
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:
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.
Poliporfismo
Accesorios:
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.
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.
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.
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.
fuente
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).
fuente
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.
fuente
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.
fuente
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 :
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 ”.
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).
fuente
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)
fuente