Saturday, October 3, 2009

Notas de la clase 4 y guía de trabajos prácticos


Como siempre, comenzamos con ping-ping de preguntas y respuestas para recordar lo visto hasta ahora.

En la práctica (TP3) anterior utilizamos el "if" de Smalltalk como receta. Ahora vimos que se trata de un mensaje (#ifTrue:) que entienden tanto true (la única instancia de la clase True) como false (la única instancia de la clase False). Es un muy buen ejemplo de polimorfismo.

#ifTrue: es un mensaje que espera un bloque (instancia de la clase BlockContext) como parámetro. Los bloques se crean literalmente encerrando una expresión Smalltalk entre corchetes. Como son objetos podemos asignarlos a variables, pasarlos como parámetros, y enviarles mensajes. En particular los bloques entienden el mensaje #value que hace que ejecuten su expresión Smalltalk.

Avanzando sobre el ejercicio de las cuentas bancarias vimos herencia. Vimos como funciona la herencia de conocimiento (variables de instancia) y como funciona la herencia de comportamiento (vía la búsqueda de métodos siguiendo la cadena de herencia). Vimos que una subclase puede agregar nuevos métodos y variables a las que hereda. También vimos que si define nuevamente un método que hereda, este "ocultará" al heredado en la búsqueda de método. A eso le llamamos sobre-escribir métodos (override en inglés).

También hablamos sobre self, la pseudovariable que apunta al objeto que se encuentra ejecutando el método. Todavía nos queda por conocer super, una pseudovariable que también apunta al mismo objeto que self, pero que cambia la forma en la que se buscan los métodos.

Finalmente hicimos un diagrama que mostraba envió de mensajes entre instancias de distintas clases en el ejemplo de un cajero automático. El objetivo de ese diagrama es doble; por un lado introduce la notación de diagramas de comunicación de UML; por otro lado da un panorama de como se combina todo lo visto hasta ahora para construir algo mas interesante.


Práctica

Les dejé prática nueva en el grupo de google . Esta práctica tienen que entregarla resuelta antes del lunes 12 de octubre. Cuenta como nota de concepto para definir el parcial en caso de que este dudoso.



Lectura
Les recomiendo que lean el capitulo 2 (y los anteriores si todavía no los leyeron) del libro Programando con Smalltalk de Diego Gomez Deck. Repasa todo lo que vimos hasta ahora (tipos de mensajes, variables, precedencia, etc.) y en la sección 2.7 habla de bloques y del mensaje #ifTrue: y  sus variantes.


En ese mismo libro (al final del capitulo 1) pueden leer sobre herencia. 


El capitulo 3 (Syntax in a nutshell) de Squeak by Example da un panorama completo de toda la sintaxis del languaje vista hasta ahora. Como lo dice el título, tiene muchos ejemplos.


La sección Developing in Squeak de Squeak by Example presenta los principios de Smalltalk. Es recomiendo leerlo. En particular habla de herencia. 
  • Rule 1. Everything is an object.
  • Rule 2. Every object is an instance of a class.
  • Rule 3. Every class has a superclass.
  • Rule 4. Everything happens by message sends.
  • Rule 5. Method lookup follows the inheritance chain.
La notación gráfica que usaremos se llama UML. Pueden leer sobre diagramas de comunicación en el capítulo 12 del libro UML Gota a Gota de Martin Fowler 

Thursday, September 24, 2009

Notas de la clase 3 y guía de trabajos prácticos

El foco de esta clase fue entender relaciones entre objetos. Hicimos rol playing (algunos de ustedes eran objetos) para hacer bien gráficos temas como envío de mensaje, encapsulamiento, relaciones entre objetos y pasaje de parámetros.

Hablamos sobre literales y sobre magnitudes. Vimos que los operadores aritméticos son envíos de mensajes y que los números (y otras magnitudes) son objetos.

Hicimos MUCHO hincapié en el proceso de búsqueda de método (¿qué hace un objeto cuando recibe un mensaje?) y hablamos de binding dinámico. También hablamos un poco de polimorfismo con el ejemplo de las magnitudes y los mensajes de comparar. Vimos que el binding dinámico es importante para el polimorfismo.

Hablamos sobre tipos de mensajes en Smalltalk y orden de precedencia (unarios, binarios, palabra clave).

¿Que capítulos de la bibliografía recomiendan que leamos para repasar estos temas? ¿Están leyendo esto al menos? :)

Les dejo una práctica nueva para fijar algunos de los temas que vimos en clase. Esta práctica además los guía paso a paso para cargar una aplicación web que interactue con uno de sus objetos.

La práctica es un archivo zip con el enunciado y un par de archivos con objetos ya preparados para que carguen en la imagen.

Wednesday, September 16, 2009

Notas de la clase 2 y guía de trabajos prácticos

Iniciamos la clase con algunas preguntas sobre los temas vistos anteriormente. La pregunta clase es ¿qué es un objeto?

Basándonos en el (clásico) ejemplo de la cuenta bancaria reforzamos la idea de conocimiento y comportamiento de un objeto. El conocimiento de la cuenta son su saldo, titular y numero. Su comportamiento es devolverme su saldo, extraer y depositar.

Implementamos los métodos para una cuenta y simulamos el comportamiento de la misma haciendo que uno de los alumnos tomara el rol de la cuenta (sus variables estaban escritas en una hoja que el sostenía).  Luego vimos que podíamos tener otras cuentas como esta y llegamos al concepto de "la clase" como "molde" para la creación de instancias. Pueden leer mas sobre clases e instancias en el capítulo 1 del libro de Budd.

Recordamos que un objeto oculta su información y por tanto solo podemos acceder a su conocimiento enviándole mensajes.

Luego vimos como implementar clases y métodos en Squeak usando el browser. Interactuamos con instancias de Cuenta en el workspace. Para verificar que estuvieran funcionando bien, monitoreabamos su estado interno con inspectores. El libro Squeak by example seguro les sirve de ayuda para recordar todo sobre el browser y los menues de Squeak. También pueden dar una mirada al link que dejé en bibliografia "Squeak Smalltalk: language reference".

Nos dimos cuenta de que un objeto debe estar inicializado y hablamos del método #initialize. En squeak, el mensaje #initialize se envía automaticamente a las instancias tan pronto son creadas (ya veremos porque).

Resumimos todo lo que sabíamos sobre variables hasta ahora (de instancia, de workspace, parametros y temporales).

Finalmente terminanos de cerrar la idea de las variables como apuntadores a objeto. Esto implica que las variables de instancia de un objeto pueden apuntar a otros objetos. Esto nos permite hacer que un objeto  "conozca" a otro. El ejemplo que vimos en clase fue la Cuenta, que en su variable "titular" ya no tiene un String sino una Persona.

La guía de trabajos prácticos 2 que ya esta subida al grupo de google tiene preguntas y ejercicios para reforzar todo lo visto en clase. Haré algunas preguntas al principio de la clase que próxima.

Sunday, September 6, 2009

Notas de la clase 1 y guía de trabajos prácticos

El foco de la primer clase es introducir el paradigma de programación orientada a objetos y algunos de sus conceptos principales: abstracción, objeto, mensaje,  métodos, atributos, encapsulamiento. Estos temas los cubre muy bien el capítulo 1 (Thinking Object Oriented) del libro de Timothy Budd. Ojo que todavía no hablamos clases, de herencia ni de polimorfismo.

Para entender la OOP y aprender a pensar en objetos se requiere una herramienta adecuada (y mucha práctica). Squeak (Smalltalk) es esa herramienta. En la primer clase conoceremos un poco de la historia de Smalltalk, instalaremos y exploraremos Squeak y veremos como crear objetos, enviarles mensajes, y ver el resultado. En Squeak todo es un objeto. Pueden leer estos temas en español del libro de Gomez-Deck, sin embargo sigue un orden diferente al que seguimos en la materia y seguro menciona temas que todavía no vimos. El capitulo 1 (hasta la sección 1.5 inclusive) del libro Squeak By Example es otro buen punto de partida para arrancar con Squeak.

Descarguen y resuelvan la guia de trabajos prácticos correspondiente a esta clase. Es importante que se tomen un buen tiempo para entender y responder las preguntas (leyendo la bibliografía y buscando en la web). Los ejercicios en Smalltalk apuntan a que todos tengan esta semana un Squeak funcionando, sepan como instalarlo y copiarlo, y puedan utilizar un workspace para prácticar lo visto en clase. Además ya vamos fijando el vocabulario.

Horarios, aulas y fechas de evaluación

Teoría
Martes 14:30 a 17:00 (aula 411)
Responsable: Alejandro Fernández

Teoría
Martes 14:00 a 14:30 (aula 411)



Práctica
Viernes 10:00 a 12:00 (aula 411)
Responsable: David Conde

Evaluaciónes parciales (fechas tentativas)
Parcial: Martes 24 de Noviembre
Recuperatorio: Martes 1 de Diciembre

Software requerido

Squeak Smalltalk

Durante la materia vamos a utilizar el lenguaje y ambiente de programación Squeak Smalltalk. Es un ambiente puro de programación orientada a objetos.

Nos basaremos en la versión 3.10 que pueden instalar en Windows, Linux y Mac (además de muchas otras plataformas). Pueden descargarlo desde http://www.squeak.org/Download/ (ojo que necesitan descargar el ejecutable (llamado máquina virtual), la imagen virtual, y los sources.
El la primer clase de la materia veremos como instalarlo y como hacer nuestras primeras pruebas con algunos de los objetos disponibles.

Van a encontrar bastante documentación y bibliografía en inglés.
En la página  Bibliografía y material de referencia del grupo encontrarán tres libros (uno de ellos en español) para bajar en pdf.

ArgoUML
Para construir diagramas de UML recomendamos utilizar argoUML. Es muy completo y es open source. Lo pueden descargar desde la pagina oficial. Es open source y multiplataforma.

Bibliografia y material de referencia

Programación orientada a objetos

Smalltalk (en pdf)

Seaside

UML
  • Uml Gota A Gota Martin Fowler - Kendall Scott (Addison Wesley) ISBN: 9684443641. ISBN-13: 9789684443648