Clases‎ > ‎

Clase 2

Teoría

Repaso de la clase 1.

¿Qué tiene de nuevo esta materia? Si bien no es la primera materia de programación de la carrera, es la primera materia dónde vamos a ver programación orientada a objetos.

¿qué es un paradigma? Es la forma de pensar un programa, es lo que tenemos que aprender. Hay diferentes lenguajes para cada paradigmas, en este, nosotros vamos a usar Pharo. Y para facilitar un poco el aprendizaje del paradigma, vamos a usar una herramienta que llamamos Ozono.

Vemos, en Ozono, una lección, que ya tiene creada una referencia a un objeto, que llamamos Pepita.

Objeto y referencia no son lo mismo, vamos a ir hablando de esto a lo largo de las clases, pero la idea es que un objeto es una representación de lo que queremos modelar, y la/s referencias/s son lo que nos permite hacer que nuestros objetos interactúen.

En nuestra lección de Ozono podemos ver esto en la parte de "Diagrama", ahí van a encontrar un diagrama con las referencias y los objetos que vamos creando.

En nuestro ejemplo, a Pepita le queremos preguntar cuál es su energía (recordemos que pepita, es la representación de una golondrina en nuestro modelo, no me interesa cuáles son las características de una golondrina de verdad, sino del objetivo de la golondrina en nuestro modelo, en este caso, me interesa estudiar su energía).

Así que le agregamos el mensaje "energia", y vemos en Ozono, dónde se colocan los mensajes.

También explicamos que los objetos tienen atributos, que es la información que un objeto tiene sobre si mismo. ¿Qué es un atributo? No es nada mas ni nada menos que una referencia a un objeto. Así que ya que estamos, le agregamos el atributo energía a pepita, y vemos cómo se vería esto en el modelo de objetos, dentro del ambiente. Ahora si, ya sabemos en que lugar van los atributos y en que lugar van los mensajes en Ozono.

Y por último, vemos que tenemos un workspace, acá es dónde vamos a jugar con nuestros objetos. Le vamos a mandar mensajes y vamos a verificar y todo anda bien en nuestro ambiente con los objetos que tenemos creados.

Entonces le mandamos un mensaje a pepita:

pepita energia

Este mensaje nos debería devolver cuánta energía tiene pepita. Como el mensaje todavía no existe, vamos al Ozono y lo creamos. Lo que hacemos es crear el "método" energía, el método, es el código que se ejecuta cuando mandamos un mensaje. Una vez que tenemos codificado el método, entonces vamos al workspace y vemos que pasa.

Vemos que el atributo y le mensaje se llaman igual, pero NO son lo mismo, el atributo, es una referencia que tiene el objeto a otro objeto (es información que maneja el objeto sobre si mismo) y el mensaje, es la forma que tienen los demás objetos para comunicarse por él. El mensaje es la forma que tienen los objetos para comunicarse entre si.

Agregamos otro atributo, el color, y también, vemos como se crea esta referencia, y como queda el diagrama de objetos.

Ahora queremos que pepita pueda volar, al volar, consume energía.

Entonces vamos al workspace, y vemos como sería este mensaje, y escribimos:

pepita vola

Ahora que ya sabemos como sería el mensaje, vamos al Ozono, y escribimos el método.

Llegamos a la conclusión, que para decirle volá, le tendríamos que decir cuánto queremos que vuele, entonces vemos como sería agregar esa información en el método, ¿cómo sería? por medio de lo que llamamos "parámetro" un parámetro, denuevo, es un objeto, es un objeto que mandamos en mensaje para que pepita puedo comunicarse con él. En este caso, el parámetro es un número que indica la cantidad de metros que voló, y, para simplificar, quedamos que por cada metro, resta 10 de energía, ¿cómo nos queda entonces el mensaje? Nos queda así:

pepita vola:4

Que sería pepita volá 4 metros (esto le debería consumir 40 de energía). Vemos que entonces el mensaje cambió, primero era "vola", pero ahora es "vola:" que lleva un parámetro. Codificamos el método, y volvemos al workspace a verificar que todo anda ¿cómo lo verificamos? porque este método, no nos devuelve ningún valor. Acá vemos que hay dos tipos de mensajes, aquellos que son "órdenes" de algo que queremos que hagan, y aquellos que son "preguntas", es decir, queremos que nos devuelvan algo, estamos esperando una respuesta. En el caso de "energia", este mensaje es una pregunta, es decir, yo me quedo esperando a que me responda (en este caso, sería una cantidad), y en el caso de "vola:" es una órden, ya que yo le digo que vuele, y que eso le reste energía, ¿y cómo sabemos que anduvo todo bien? Volvemos al workspace, y le mandamos otro mensaje, "energia", para verificar, que nos devolvió lo que tenia antes, menos 40.

Luego, agregamos que pepita, pueda comer, al comer, le sumamos energía ¿cuánto? la energía que sume dicha comida.

Acá ya se cae de maduro que le mensaje necesita un método, que es la comida, por lo tanto, nos estría quedando algo así:

pepita come:alpiste

¿Y alpiste que es? Bueno, alpiste es una comida, es un nuevo objeto que aparece en nuestro modelo, así que creamos la referencia, agregamos esto en nuestro diagrama, y ahora que ya tenemos el objeto, ya estamos en condiciones de codificar le método. Escribimos lo siguiente:

come:unaComida

    energia := energia + unaComida

y vamos al workspace, y lo ejecutamos, ¿y que pasa? se rompe, ¿por qué? porque estamos queriendo sumar un número (energia) mas un objeto (unaComida), y estas dos cosas NO se pueden sumar, necesitamos saber cuánta energía sumar, es decir, cuanta energia tiene la comida, de esta manera, llegamos a la conclusión, de que el objeto unaComida, debería saber cuanta energia tiene, y eso lo sabemos agregándole un atributo al objeto alpiste que agregamos, y le ponemos una cantidad (por ejemplo 5), pero con eso no alcanza, porque recordemos que los atributos son internos del objeto, la única forma de hablar con un objeto es por medio de un mensaje, así que le agregamos un mensaje "energia" al objeto alpiste, y codificamos el método para que nos devuelva la energía. Ahora si, ya tenemos todo para resolver el mensaje come:, nos queda de la siguiente manera.

come:unaComida

    energia := energia + unaComida energia

Y listo! ahora si, ejecutamos el método en el workspace, le damos alpiste a pepita y verificamos que la energia que tiene ahora, está bien (es lo que tenía mas la energía de la comida que se le sumó).

Rapidíto, hacemos un ejemplito mas.

En Ozono, creamos una nueva referencia: otraGolondrina. Y al igual que pepita, le ponemos un atributo energia, y un mensaje energia para poder preguntarle.

Voy al workspace y hago:

pepita come:otraGolondrina

¿esto anda?

La conclusión, es que si, anda ¿por qué?. Observemos el método come: de pepita, lo que necesita es que unaComida nos sepa decir su energia, una vez que la sabemos, eso se suma a la energía actual de pepita y listo, y en este caso, unaComida, vendría siendo otraGolondrina, y otraGolondrina también entiende el mensaje energia, por lo tanto, puede responder perfectamente.

Lo loco acá, es que primero mandé como parámetro el objeto alpiste, y después, el objeto otraGolondrina, que son dos objetos bien distintos, sin embargo con ambos anda, simplemente porque ambos entienden el mensaje "energia". Esto es lo que llamamos polimorfismo, para pepita (remarcando esto: para pepita y no para cualquier otro objeto), alpiste y otraGolondrina son objetos polimórficos, ya que a pepita, lo único que le interesa de ellos, es la energía que le suman, entonces es lo mismo uno u otro.


Todo lo que vimos en esta clase en Ozono, lo podes ver también en este manual

Comments