¿Cómo se podría enseñar OO sin hacer referencia a objetos físicos del mundo real? [cerrado]

14

Recuerdo haber leído en alguna parte que los conceptos originales detrás de OO eran encontrar una mejor arquitectura para manejar el envío de mensajes de datos entre múltiples sistemas de una manera que protegiera el estado de esos datos. Ahora, probablemente sea una paráfrasis pobre, pero me hizo preguntarme si hay una manera de enseñar OO sin las analogías de los objetos (Bicicleta, Coche, Persona, etc.), y eso en cambio se centra en los aspectos de los mensajes. Si tiene artículos, enlaces, libros, etc., eso sería útil.

    
pregunta John Doe 17.03.2011 - 18:03

8 respuestas

5

El concepto original de OO no tiene nada que ver con lo que es el OO de hoy. (Vea Entonces, ¿qué? * Alan Kay realmente quiere decir con el término "orientado a objetos"? ). La programación orientada a objetos de hoy trata sobre la creación de objetos como las metáforas de las bicicletas, las casas y las personas, etc. Recomendaría encarecidamente seguir con esto porque el propósito de las metáforas es ayudar a las personas a entender utilizando un concepto que ya comprenden. Ayúdelos a ver la correlación y luego ayúdeles a ver las diferencias ENTONCES de sumergirse en cosas más profundas sobre OO.

EDITAR: la OO de hoy trata sobre la creación de objetos totalmente independientes cuyas propiedades y habilidades se describen completa / parcialmente mediante diversos métodos (funciones) y atributos (se refiere a las variables y constantes de AKA).

    
respondido por el Kenneth 17.03.2011 - 18:22
5

Puedes hablar de conceptos de acoplamiento y cohesión. Los objetos deben estar compuestos de atributos y métodos con alta cohesión y acoplamiento implícitamente alto. Deben asignarse a las operaciones y atributos menos granulares necesarios para que el sistema funcione. También deben satisfacer el deseo de mantener el código lo más pequeño y directo posible, es decir, la codificación teniendo en cuenta el mantenimiento y la extensibilidad.

Esto también evita la "explosión de objetos", la generalización general y la elección incorrecta de metáforas, que son errores comunes.

    
respondido por el dietbuddha 19.03.2011 - 18:02
3

No me concentraría en los objetos del mundo real, y tampoco me concentraría en los mensajes. Más bien, un ejemplo que he usado es en gráficos, donde desea tener objetos que "saben dibujar ellos mismos".

Si está trabajando en C, por ejemplo, que no tiene OO incorporado, puede que le resulte conveniente almacenar punteros a funciones dentro de objetos de datos. Si lo haces, entonces estarás metiéndote en OOP.

No me gusta referirme a Alan Kay como si fuera Moisés repartiendo las tabletas. Más bien, él fue entrenado en matemáticas y bio, creo. Como matemático, probablemente tenía cierta familiaridad con Lambda Calculus, que era bastante abstracto, no relacionado con el hardware. En LC, podría decir que todo es un "objeto", como el número 0 y el número 1 son objetos que evalúan diferentes cosas cuando se les da un argumento. Eso lleva a Smalltalk bastante bien. La idea de "mensaje" es para que podamos evitar hablar de hardware. Podría decir que cuando llama a una función (o un método de un objeto) le está enviando un mensaje, y cuando regresa, le está enviando un mensaje a usted (oa su continuación). Esto se estableció como una forma de describir formas de comunicación entre programas que se ejecutan de forma asíncrona en un hardware separado. Eso está bien, pero para la programación ordinaria se está dejando llevar. Para obtener el valor de la idea OOP, no necesita negar la relevancia de la tarea concreta que está tratando de hacer, o negar la concreción del hardware que está ejecutando. Creo que enseñar sobre POO en términos de analogías artificiales lleva a las personas a pensar demasiado en el diseño de software en términos de estructura de datos, lo que lleva a un diseño excesivo, lo que conlleva a una gran cantidad de código y problemas de rendimiento masivos, que tengo que dedicar tiempo a limpiar se pone bastante mal.

    
respondido por el Mike Dunlavey 17.03.2011 - 18:24
1

Yo afirmaría que hay poca diferencia en usar un objeto físico para un ejemplo y usar un objeto no físico como ejemplo. En el código ambos tienen exactamente las mismas partes. Si usamos el ejemplo de los gráficos y lo enseñamos con Esfera, cubo, cilindro, es casi lo mismo que usar bola, caja, palo.

Entonces, para enseñarlo sin usar ejemplos físicos, sugeriría no usar ningún ejemplo en absoluto, pero no veo por qué no querría ejemplos físicos, por lo que mi postura sobre el tema es

No, no deberías enseñarlo sin objetos físicos del mundo real

    
respondido por el Tim 17.03.2011 - 18:39
1

No veo cómo puedes evitar comenzar en metáforas del mundo real, pero no quieres permanecer allí. Si está haciendo la POO correctamente, rápidamente se vuelve abstracto, pero en el siguiente nivel de comprensión, el alumno debe comprender los objetos como objetos.

    
respondido por el user1936 17.03.2011 - 19:24
1

Curiosamente, algunos de mis ejemplos favoritos no son objetos físicos. Tome la cuenta bancaria, por ejemplo. Todos "entienden" por qué depositar () y retirar () debe cobrar el cargo por servicio, en lugar de confiar en el código de llamada para cambiar el valor del saldo y recuerde retirar el cargo por servicio. Las formas en una pantalla son doblemente intangibles, y Stroustrup me dijo que el ejemplo clásico de "Formas" es uno de los dos ejemplos más antiguos de OO que conoce, que datan de hace 40 años (el otro es vehículos, ahora tiene 44 años).

Lo importante es que las personas entiendan tus ejemplos de inmediato. Los ascensores son un buen ejemplo solo para las personas que están familiarizadas con los ascensores. Etc.

    
respondido por el Kate Gregory 19.03.2011 - 20:34
1

Si está en un grupo de programación, reúna a algunas personas y comience a analizar cómo se dirían entre sí para hacer lo que necesita que haga el sistema. Literalmente asuma roles en el sistema (puede hacer esto por su cuenta solo con cada rol, pero es más fácil con un grupo de personas. Los juguetes le ayudan si está solo). Concéntrese en lo que cada persona está haciendo / hará, en lugar de en qué datos tiene. Hacer esto con las personas ayuda a que se centren en los mensajes y roles porque las personas tienden a recordar lo que están haciendo pero no los datos que tienen.

Tome nota de lo que deben pedirse mutuamente y qué información necesita para hacerlo. Sea protector de sus propios datos, si otro programador le pide sus datos para algo, diga no y pregúntele por qué los necesita (ayuda a encapsular los datos).

    
respondido por el Cormac Mulhall 14.10.2013 - 18:23
0

Creo que un enfoque de abajo hacia arriba / metal podría ser útil. Primero, explique las estructuras y los indicadores de estilo C, para mostrar cómo se pueden estructurar los datos en lugar de usar primitivas directamente. Luego explique el enlace tardío y los punteros de función. Luego explique que puede usarlos para construir objetos, que son básicamente pilas de datos bien encapsulados y punteros a las funciones que se necesitan para operar con dichos datos.

Esta explicación contradice la manera convencional de enseñar matemáticamente el concepto independientemente de la implementación, pero es la perspectiva la que me hizo (ciertamente alguien con una ingeniería, no una ciencia comp, antecedentes) finalmente obtengo OO.

    
respondido por el dsimcha 19.03.2011 - 18:46

Lea otras preguntas en las etiquetas