lunes, 11 de junio de 2007

Definición de Programa

En el último post sobre la tería de Objetos había comentado que las herramientas que ofrece el Paradigma de Objetos para modelar son los Objetos y los Mensajes.
Es a partir de estas herramientas que un programa dentro del Paradigma de Objetos se define como: "Objetos que colaboran entre sí enviandose Mensajes" [1]
Esto implica que un modelo realizado con este paradigma, no es más ni menos que objetos colaborando. Para poder entender esta definición es necesario aclarar que significa cada una de sus palabras claves que están en negrita.
Objeto: Un objeto es una representación de un Ente del dominio del problema que se está modelando. Un Ente puede ser cualquier cosa, como por ejemplo una cantidad de dinero, un número, un billete, una acción, un empresa, lo que se entiende por todo o lo que se entiende por nada, etc. Cómo podemos ver, es una definición muy vaga quizá, pero por suerte los seres humanos tenemos la capacidad de atachar a estas definiciones emociones, vivencias, etc. que le van dando significado al término y lo van desambiguando.
Mensaje: Los mensajes son el mecanismo que utilizan los objetos para comunicarse entre sí. Haciendo una analogía con una conversación entre dos personas, un mensaje sería aquello que una persona le dice a otra.
Colaboración: Es el hecho de enviar un mensaje y esperar su respuesta. Cada vez que un objeto envía un mensaje a otro, se está realizando una colaboración y esta termina cuando el objeto receptor del mensaje devuelve una respuesta.

Se puede pensar en este modelo de colaboración entre objetos como una simplificación de la comunicación entre personas. Digo simplificación porque en este caso, existe un objeto emisor del mensaje que espera hasta que el receptor del mensaje responda, y siempre existirá una respuesta al envío de un mensaje, aunque esa respuesta sea "nada", que es "algo".
Por lo tanto, cada conversación que un objeto mantiene con otro es "sincrónica", sin embargo nada impide que un objeto lleve varias conversaciones simultáneamente, de la misma manera que una persona puede estar realizando varias "tareas" a la vez.
Una característica que posee la "colaboración" entre objetos es que el objeto receptor del mensaje no conoce al objeto emisor del mismo. Esto no cumple con la analogía que venimos haciendo, sin embargo el resultado de esta característica es que se puede asegurar que un objeto siempre responderá de la misma manera a un mensaje, no importa quién le envíe el mensaje. O sea, no sucede como en los humanos, donde generalmente la respuesta no será la misma si el que pide una tarea es el jefe o un compañero. (Esto no impide que esta situación se pueda modelar con objetos, de hecho se ha hecho, pero va más allá de lo que quiero hablar ahora).
Hay muchos temas interesantes que surgen a partir de esta definición de programa, cómo por ejemplo que el único acoplamiento entre objetos son los mensajes que se envían o el único problema que puede existir en este modelo es que un objeto no sepa responder un mensaje o que en definitiva un mensaje es un objeto. Estos temas lo trataré más adelante, sin embargo lo que más me importa recalcar para concluir este post es la definición de Objeto. Cuando se la entiende y aplica correctamente, permite obtener mejores modelos. Les voy adelantando que el "kit de la cuestión" está en tener un objeto en el modelo por cada ente de la realidad. Por lo tanto las preguntas que se pueden empezar a hacer son: ¿Cómo se define un objeto a partir del ente que representa? ¿Cómo se si un ente en realidad es uno o dos? ¿Hay que modelar todos los entes? etc.

-----------
[1] Esta definición fue creada por Máximo Prieto

No hay comentarios.: