domingo, 25 de diciembre de 2011

POO, primer pantallazo de lo mas básico.

En la version para tu vieja me tuve que controlar y no profundizar demasiado. Ahora no voy a profundizar mucho mas, pero no me voy a meter en analogías sino en el mismo paradigma.

Bueno, en POO como decíamos hay objetos y relaciones por medio de dialogo. Formalizando un poco mas, los conceptos mas importantes del paradigma de objetos son:
  • objeto
  • mensaje

Un objeto es un ente computacional, una representación de un concepto o parte de un concepto.

El mensaje es la forma en que se relacionan los objetos, la forma en que dialogan (o mas bien dan ordenes.. son medio cobanis).

Si venis de un lenguaje basado en el paradigma procedural imperativo (estructurado) como C, pascal, etc podrías preguntarte cosas como:

  • ¿Los objetos son estructuras de datos?
    • No. No son estructuras de datos, son objetos. Las estructuras de datos como bien indica su nombre son formas de dato complejas compuestas a partir de datos mas simples. Un objeto no necesariamente tiene datos, un objeto tiene que tener comportamiento propio (cosa que no permite una estructura de datos... no con punteros a funcion tampoco es lo mismo)
  • ¿Los mensajes son funciones?
    • No. En C lo mas parecido a un mensaje que hay es la definición de la firma de una función (definido tipicamente en un archivo header -.h-), un mensaje es una petición a un objeto que esta definida por el selector (el nombre del mensaje a ejecutar) y los parametros. 

Si venis de un lenguaje con orientacion a objetos como python, java, c++, smalltalk, etc (basados en clases) por ahi tenés preguntas como:

  • Y las clases ¿No son tan importantes?
    • No. Una clase es una forma de definir, compartir código y hacer plantillas para la creación de objetos. Hay otras formas de crear objetos.

Si venis de un entorno no computacional en absoluto, te sugiero que busques por otro lado. O dejame un comment y cuanto tenga algun tutorial armado te lo paso.


Es importante tener en cuenta que todo se reduce a objeto - mensaje.


Ej.

Tenemos que modelar un mundo de fantasía donde hay un dragon que se llama norberto que tiene que poder comerse a carlota la oveja, a jacinto el caballo o bien a juana la vaca.

Sabemos por fuentes fidedignas que cada vez que norberto come obtiene la mitad de energía de lo que se come. También sabemos que cada vez que tira fuego, norberto consume 2 puntos de energía por segundo que dura la rafaga.

Un bosquejo en pseudo smalltalk sería

#Norberto
>>  come: unAnimal
          energia := energia + unAnimal energia.
          unAnimal energia: 0.

>>  energia
           ^ energia

>>  escupiFuegoDurante: unosSegundos
           energia := energia - 2 * unosSegundos.

#Carlota
 >> energia
          ^ energia
>> energia: unaCantidad
           energia := unaCantidad.
>> estaMuerto
            ^ energia = 0


#Jacinto
 >> energia
          ^ energia

>> energia: unaCantidad
           energia := unaCantidad.
>> estaMuerto
            ^ energia = 0

#Juana
 >> energia
          ^ energia

>> energia: unaCantidad
           energia := unaCantidad.
>> estaMuerto
            ^ energia = 0

^ este simbolo indica que se devuelve ese valor al ejecutarse el metodo.
>> este simbolo es un separador para indicar que es un metodo
:=  este simbolo indica una asignación
= este simbolo indica la comparación por igualdad entre los objetos a izquierda y a derecha
# este simbolo indica que en mas estamos definiendo el objeto cuyo nombre sigue al simbolo.


Bueno, ya tenemos nuestros entes que tienen comportamiento (bastante acotado si.. sobre todo el de los animales), ahora falta relacionarlos para poder modelar los hechos que son que norberto se morfa todo y escupe fuego.

================================================
norberto come: carlota.
norberto come: juana.
norberto come: jacinto.

carlota energia // Esto tiene que retornar 0.
juana energia // Esto tiene que retornar 0.
jacinto energia // Esto tiene que retornar 0.

carlota estaMuerto // esto tiene que retornar 'true'

norberto escupiFuego.
================================================

Bueno entonces vemos como la asociación es clave. Podemos tener al mejor objeto del mundo que si no se relaciona con ningun otro es inútil.



Nota:
>> pará pará... antes eran mensajes y ahora son metodos?
>> eeeemm uhmm.. eee.. son dos cosas distintas. Bien distintas. la forma en que se relacionan los objetos entre si es por el envio de mensajes, la forma en que el objeto define como ejecuta ese mensaje es lo que se llama método.
>> pero entonces tendria que estar con objeto y mensaje en importancia
>> uhm.. no, un metodo es parte de un objeto, en cambio el mensaje es parte de la relación entre objetos.

No hay comentarios:

Publicar un comentario