lunes, junio 25, 2007

Anti-Objetos

Leí un articulo hace poco que muy interesante sobre la noción de antiobjeto.

Hacen el ejercicio de poner estudiantes a que generen códigos de inteligencia artificial para los fantasmitas de pacman. En estos intentos sucede esto:

The psychology of programming attempts to explain
programmer’s intuition. Syntonicity [31] is an introspective
behavior that makes us want to be the ghost in order to think
about what the ghost should do and how it should do it.


En el contexto que habla el artículo, pareciera (y aqui hablo soy yo, el artículo en ningún momento resulta una crítica) que la orientación a objetos favorece esta introspección. La delimitación de un programa a "entidades abstractas con identidad, comportamientos y relaciones entre si" es un escenario mas apto para la introspección que un programa digamos lógico ó estructurado.

Me explico:

El razonamiento usando la modularidad de objetos da esto: "huy tengo una clase fantasma (probablemente con una posición y algo mas) y otra pacman... que haría si yo fuese un fantasma para cazar a pacman?"... que tiene esto de malo?... en el artículo muestran como puede lograrse con una cosa que llaman "difusión colaborativa", obtener una propiedad emergente simplemente asociando una función de cercanía a pacman que es computada por las "baldosas?" del piso (quien habría tenido en cuenta las baldosas en el UML... yo no :P)

Ahora bien, aquí es donde radica mi infundada teoría... creo que la noción del programa estructurado, como totalidad (aquí olvídense de módulos y esas maricadas... programas horribles en quick basic sin funciones donde todo esta en un archivo y todo está mezclado) impide esta introspección y en cierta forma puede permitir descubrir estas soluciones que dependen no de la reacción de la suma de las partes sino de las reacciones de un sistema holístico.

Ya solo falta tomar el conjunto de ratas de laboratorio de primer semestre y hacer la prueba.

(No sé hasta que punto los lenguajes funcional inhiban la introspección)

2 comentarios:

febuiles dijo...

Diego,
¿Cómo aplica esta introspección a programas no basados en entidades?
Digamos que si estoy modelando un Pac-Man puedo obtener propiedades emergentes al vuelo como lo estas diciendo, pero, ¿cómo "me meto en el papel" de un Integer o de un FileStream?

No se si me expliqué bien, pero para objetos mucho mas abstractos no se que tanto se aplique esto.

Por otro lado, en un lenguaje funcional, al no estar preocupandome tanto por las entidades en si, sino en como se relacionan, no se que tanto se pueda aplicar este enfoque.

diegoeche dijo...

Estoy de acuerdo. En algunos casos, tal vez nos resulte tan ajena la entidad que no nos podamos poner en sus zapatos... Sin embargo, creo que estos casos no son los usuales, Creo ademas que la intrsopeccion surge cuando uno construye las clases (de esta forma el caso de Integer en java no funciona).

No tiene que ser un objeto antropomorfo como un fantasma, cuando uno resuelve un problema de grafos de ruta minima puede uno imaginarse a si mismo buscando la ruta minima, cuando uno hace una clase ordenadora puede uno imaginarse jugando con cartas y ordenandolas... todos son estos casos de "sinthonicity" pese a que ordenar no es antropomorfo ni tampoco lo es "ruta minima"