11.05.2013 Views

Guia Trabajos Practicos - Departamento de Computación ...

Guia Trabajos Practicos - Departamento de Computación ...

Guia Trabajos Practicos - Departamento de Computación ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Programación Orientada a Objetos<br />

Guía <strong>de</strong> <strong>Trabajos</strong> Prácticos<br />

<strong>Departamento</strong> <strong>de</strong> <strong>Computación</strong><br />

Facultad <strong>de</strong> Ciencias Exactas<br />

Universidad <strong>de</strong> Buenos Aires


Índice<br />

La materia................................................................................................................................................4<br />

Criterios <strong>de</strong> aprobación...................................................................................................................................4<br />

Materiales.........................................................................................................................................................4<br />

Priorida<strong>de</strong>s.......................................................................................................................................................4<br />

Normas <strong>de</strong> entrega <strong>de</strong> ejercicios y trabajos prácticos.............................................................................5<br />

Términos generales..........................................................................................................................................5<br />

Código...............................................................................................................................................................5<br />

Informes............................................................................................................................................................5<br />

Pharo.................................................................................................................................................................5<br />

Notación y Ejemplos <strong>de</strong> Mo<strong>de</strong>lado..........................................................................................................6<br />

Notación gráfica para diagramas....................................................................................................................6<br />

Notación Sintáctica General...........................................................................................................................6<br />

Diagrama <strong>de</strong> Instancias (o <strong>de</strong> Objetos)...........................................................................................................6<br />

Diagrama <strong>de</strong> Secuencia (o <strong>de</strong> Colaboración)..................................................................................................7<br />

Diagrama <strong>de</strong> Clases........................................................................................................................................9<br />

Pare, Atención, Mo<strong>de</strong>le .................................................................................................................................10<br />

Enunciado.....................................................................................................................................................10<br />

Resolución <strong>de</strong>l punto 1.................................................................................................................................10<br />

Resolución <strong>de</strong>l punto 2.................................................................................................................................14<br />

Práctica 1 - Smalltalk ............................................................................................................................15<br />

Conociendo Smalltalk....................................................................................................................................15<br />

Normas <strong>de</strong> codificación Smalltalk.................................................................................................................15<br />

Errores comunes con Smalltalk....................................................................................................................16<br />

#add: retorna su argumento..........................................................................................................................16<br />

Cambiar la colección mientras se itera sobre la misma.................................................................................17<br />

Olvido <strong>de</strong> ^...................................................................................................................................................17<br />

Métodos <strong>de</strong> creación <strong>de</strong> instancia.................................................................................................................17<br />

Re<strong>de</strong>finiendo #= y #hash..............................................................................................................................19<br />

Usando True o False en lugar <strong>de</strong> true o false................................................................................................19<br />

Referencias......................................................................................................................................................19<br />

Práctica 2 - Smalltalk Avanzado...........................................................................................................19<br />

Blocks y Contexts...........................................................................................................................................19<br />

Práctica 3 – Teoría <strong>de</strong> Objetos...............................................................................................................21<br />

Objeto y Clase.................................................................................................................................................21<br />

Mensajes-Métodos vs. Rutinas......................................................................................................................21<br />

self y super......................................................................................................................................................21<br />

Índice guia 2011.doc Página 2


Method Lookup.............................................................................................................................................22<br />

Clases / Métodos Abstractos / Concretos.....................................................................................................23<br />

Objetos mutables vs. Inmutables..................................................................................................................23<br />

Programa <strong>de</strong> la materia.........................................................................................................................24<br />

Bibliografía............................................................................................................................................25<br />

Básica...........................................................................................................................................................25<br />

De Referencia...............................................................................................................................................25<br />

Artículos (provistos por la cátedra).......................................................................................................25<br />

Herramientas..........................................................................................................................................25<br />

Fuentes adicionales <strong>de</strong> información.....................................................................................................26<br />

Objetos............................................................................................................................................................26<br />

Grupos y Listas <strong>de</strong> Smalltalk........................................................................................................................26<br />

Smalltalks.......................................................................................................................................................26<br />

SELF...............................................................................................................................................................26<br />

NORMAS BÁSICAS DE SEGURIDAD...............................................................................................27<br />

<strong>Departamento</strong> <strong>de</strong> <strong>Computación</strong>....................................................................................................................27<br />

Índice guia 2011.doc Página 3


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

La materia<br />

“Success is often achieved by those who don't know that failure is inevitable” – Coco Chanel<br />

“Start by doing what's necessary, then what's possible and sud<strong>de</strong>nly you are doing the impossible” – Saint<br />

Francis of Assisi<br />

Criterios <strong>de</strong> aprobación<br />

La aprobación <strong>de</strong> la materia incluye los siguientes hitos:<br />

• Criterios <strong>de</strong> aprobación<br />

• Entrega <strong>de</strong> Ejercicios: 20 % <strong>de</strong> la nota<br />

• Parcial Teórico: 40 % <strong>de</strong> la nota<br />

• Parcial Prácitco: 40 % <strong>de</strong> la nota<br />

Materiales<br />

La materia compren<strong>de</strong> las siguientes fuentes <strong>de</strong> información, comunicación y ejercicios:<br />

• Guía <strong>de</strong> trabajos prácticos<br />

• Bibliografía, compuesta por libros, papers y artículos<br />

• Página web <strong>de</strong> la materia: www.dc.uba.ar/people/materias/poo<br />

• Lista <strong>de</strong> e-mail: www.yahoogroups.com/group/poo-uba<br />

• Lista <strong>de</strong> e-mail <strong>de</strong> docentes: www.yahoogroups.com/group/doc-objetos-uba<br />

Priorida<strong>de</strong>s<br />

De todos los aspectos que conforman el software, los que nos interesa priorizar en la materia son los<br />

relacionados con la abstracción y el saber mo<strong>de</strong>lar. En este marco, consi<strong>de</strong>raremos secundarios, aunque no<br />

indiferentes, los criterios relacionados con performance y formalidad.<br />

Integrantes:<br />

Máximo Prieto (Jefe <strong>de</strong> Cátedra): mprieto@dc.uba.ar<br />

Hernán Wilkinson (JTP): hernan.wilkinson@gmail.com<br />

Emilio Oca (Ayudante <strong>de</strong> 1ra) emiliooca@gmail.com<br />

Y a<strong>de</strong>más:<br />

Lista <strong>de</strong> docentes: doc-objetos-uba@yahoogroups.com<br />

Todos (alumnos y docentes): poo-uba@yahoogroups.com<br />

Páginas web <strong>de</strong> la materia: www.yahoogroups.com/group/poo-uba<br />

www.dc.uba.ar/people/materias/poo/homepage.html<br />

Normas <strong>de</strong> entrega <strong>de</strong> ejercicios y TPs guia 2011.doc Página 4


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

Normas <strong>de</strong> entrega <strong>de</strong> ejercicios y trabajos prácticos<br />

“The one important thing I have learned over the years is the difference between taking one's work seriously<br />

and taking one's self seriously. The first is imperative, and the second is disastrous” – Margaret Fontey<br />

Términos generales<br />

• Cumplir con las fechas.<br />

• Se <strong>de</strong>be entregar informe usando el formato <strong>de</strong> entrega <strong>de</strong> la materia, con diagramas relevantes que<br />

expliquen el mo<strong>de</strong>lo, código impreso. Las hojas <strong>de</strong>ben estar abrochadas<br />

• Se <strong>de</strong>be mandar por mail a la lista <strong>de</strong> docentes el informe y el código fuente en formato electrónico<br />

Código<br />

• Debe funcionar en Pharo<br />

• Incluir todos los paquetes Monticello necesarios para cargarlo y correrlo<br />

• Incluir un archivo Leanme.txt con lo que sea necesario aclarar. Incluyendo el or<strong>de</strong>n <strong>de</strong> carga <strong>de</strong> los<br />

paquetes, si lo hay.<br />

• Debe seguir las normas <strong>de</strong> codificación <strong>de</strong> la cátedra.<br />

• Los nombres <strong>de</strong> las Clases, variables, atributos y selectores <strong>de</strong>ben ser claros, significativos y acor<strong>de</strong>s con la<br />

semántica.<br />

• Pue<strong>de</strong> incluirse un archivo <strong>de</strong> texto llamado WorkSpace.txt para importar en el Workspace y facilitar el<br />

testeo y ejecución. Recomendado.<br />

Informes<br />

• El formato <strong>de</strong>be ser Microsoft Word 6.0 o superior (el número <strong>de</strong> versión, no el producto).<br />

• Debe ser prolijo, claro y contener una cantidad razonablemente BAJA <strong>de</strong> errores <strong>de</strong> ortografía.<br />

• Incluirlo en el directorio correspondiente con el nombre Informe.doc.<br />

• Debe contener:<br />

• El enunciado <strong>de</strong>l ejercicio.<br />

• Nombre y correo electrónico <strong>de</strong>l/los integrante/s <strong>de</strong>l grupo.<br />

• La respuesta <strong>de</strong>l ejercicio (incluyendo código <strong>de</strong> haberlo).<br />

• Comentarios sobre el ejercicio y su enunciado. Si no tienen ninguno, escríbanlo.<br />

• Numerar las hojas.<br />

• Usar el template Informe.dot provisto por la cátedra. (Ver archivos en la página <strong>de</strong>l grupo)<br />

Pharo<br />

Bajar la versión <strong>de</strong> http://www.pharo-project.org/home<br />

Ejercicios resueltos guia 2011.doc Página 5


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

Notación y Ejemplos <strong>de</strong> Mo<strong>de</strong>lado<br />

“If you can't write it down in English, you can't co<strong>de</strong> it” – Peter Halpern<br />

Objetos y Mensajes<br />

En el paradigma <strong>de</strong> Objetos, sólo hay objetos y mensajes (que también son objetos).<br />

NADA MÁS.<br />

Notación gráfica para diagramas<br />

Leer con atención como se <strong>de</strong>ben realizar los diagramas que se utilizarán durante el curso para comunicar los<br />

diseños realizados.<br />

Notación Sintáctica General<br />

Las colaboraciones se notan siempre O M, don<strong>de</strong> O representa un objeto y M un mensaje.<br />

Salvo excepciones, cada nombre, tanto <strong>de</strong> O como <strong>de</strong> M, cumple con el siguiente formato:<br />

• Comienza con minúscula.<br />

• Si el nombre es compuesto, cada palabra comienza con mayúscula (salvo la primera) y no hay espacios<br />

intermedios.<br />

Para la sintaxis <strong>de</strong> O tener en cuenta que los objetos globalmente conocidos comienzan con mayúscula y el<br />

resto: colaboradores internos, externos y variables temporarias, lo hacen con minúscula.<br />

El texto que conforma el nombre <strong>de</strong> los mensajes M, sin los parámetros, se llama selector.<br />

Existen tres formatos diferentes para los selectores:<br />

1. Mensajes tipo unary.<br />

No tienen parámetros y, por en<strong>de</strong>, no llevan : (dos puntos).<br />

Ejemplos: size, refresh, open<br />

2. Mensajes tipo keyword.<br />

Están formados por una lista <strong>de</strong> pares keyword: parameter, don<strong>de</strong> keyword cumple con el mismo<br />

formato <strong>de</strong> siempre y, a<strong>de</strong>más, lleva pegado atrás un : (dos puntos).<br />

Ejemplos: between: anInteger and: anotherInteger, lessThan: aChar<br />

3. Mensajes tipo binary.<br />

Llevan un parámetro y el nombre <strong>de</strong>l mensaje es un símbolo SIN un : (dos puntos) atrás.<br />

Ejemplos: + anInteger, < aChar<br />

Diagrama <strong>de</strong> Instancias (o <strong>de</strong> Objetos)<br />

Representa una vista estática <strong>de</strong>l mo<strong>de</strong>lo, en él se incluyen los objetos intervinientes y las relaciones <strong>de</strong><br />

colaboración entre ellos. No es indispensable representar todas las posibles relaciones <strong>de</strong> colaboración entre<br />

ellos, solamente las necesarias para transmitir lo que se <strong>de</strong>sea. Si bien pue<strong>de</strong> utilizarse para mo<strong>de</strong>lar <strong>de</strong> modo<br />

genérico, esto ocurre rara vez. La intención <strong>de</strong>l diagrama es representar una situación particular, un ejemplo<br />

puntual.<br />

Programa <strong>de</strong> la materia guia 2011.doc Página 6


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

interno 23 <strong>de</strong><br />

la Línea 17<br />

unPasajero<br />

carrocería<br />

• Cada “cajita” representa un objeto. Esto es, una instancia particular y única en el universo, y no una forma<br />

genérica <strong>de</strong> referirse a objetos como podría ser “Colectivo”.<br />

• El nombre <strong>de</strong>l objeto es <strong>de</strong>s<strong>de</strong> el punto <strong>de</strong> vista <strong>de</strong>l mo<strong>de</strong>lador, no es un nombre propio <strong>de</strong>l objeto. Si fuese<br />

así <strong>de</strong>bería notárselo con mayúscula, como por ejemplo el nombre <strong>de</strong> una persona especial (Ej. “Juan<br />

Perez”)<br />

• Las flechas indican una relación estructural entre los objetos. Mas específicamente, indica que los objetos<br />

pue<strong>de</strong>n colaborar, o sea, enviarse mensajes.<br />

• La flecha simple hace referencia a una instancia particular, mientras que la doble indica una colección <strong>de</strong><br />

objetos. Esto es un grupo <strong>de</strong> objetos, no necesariamente homogéneos. La relación indica conocimiento <strong>de</strong>l<br />

grupo, algo distinto a conocer cada integrante por separado.<br />

• Pue<strong>de</strong> colocarse una etiqueta sobre la flecha, indicando el nombre con que el objeto origen conoce al objeto<br />

<strong>de</strong>stino, si esto es importante para distinguirla <strong>de</strong> otras o para aclarar el significado <strong>de</strong> esta relación, pero se<br />

recomienda su uso únicamente cuando la aclaración es necesaria.<br />

Diagrama <strong>de</strong> Secuencia (o <strong>de</strong> Colaboración)<br />

unaCarrocería<br />

El Indio<br />

Representa una vista dinámica <strong>de</strong>l mo<strong>de</strong>lo, incluyendo la secuencia <strong>de</strong> envío <strong>de</strong> mensajes (colaboraciones), que<br />

tiene lugar entre algunos objetos <strong>de</strong>l mo<strong>de</strong>lo para llevar a cabo una tarea. Al igual que en el diagrama <strong>de</strong><br />

instancias, no es indispensable representar todos los envíos <strong>de</strong> mensajes, solamente los necesarios para<br />

transmitir lo que se <strong>de</strong>sea. La intención <strong>de</strong>l diagrama es representar una situación particular, un ejemplo<br />

puntual.<br />

Programa <strong>de</strong> la materia guia 2011.doc Página 7


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

tiempo<br />

unGalán unaDama<br />

Invitada<br />

contestar: '¿Qué querés tomar?'<br />

^ 'Una Coca'<br />

servir: 'Una Coca'<br />

^ unaPesi<br />

pensarQueTomar<br />

unMozo<br />

• Cada cajita, al igual que en el diagrama <strong>de</strong> objetos, representa un objeto.<br />

• El sentido <strong>de</strong>l avance <strong>de</strong>l tiempo es <strong>de</strong> arriba hacia abajo.<br />

• Cada flecha está representando el envío <strong>de</strong> un mensaje <strong>de</strong> un objeto al otro, o el retorno <strong>de</strong> un objeto, que se<br />

nota mediante el símbolo ^.<br />

• El mensaje tipo rulo significa un mensaje enviado a sí mismo.<br />

Programa <strong>de</strong> la materia guia 2011.doc Página 8


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

Diagrama <strong>de</strong> Clases<br />

Representa las clases intervinientes en un mo<strong>de</strong>lo y el vínculo <strong>de</strong> herencia existente entre ellas. El diagrama<br />

incluye el protocolo que poseen los objetos instancias <strong>de</strong> las mismas.<br />

AM/FM Radio<br />

sintonizeAM<br />

“Cambia <strong>de</strong> banda a AM”<br />

dialIn: aFrequency band: aBand<br />

advanceDial: aRange<br />

SonyDigitalRadio<br />

voltage<br />

sintonizeAM<br />

off<br />

ElectricDevice<br />

• Cada cajita representa una clase.<br />

• El nombre <strong>de</strong> la clase en itálica indica que la misma es abstracta.<br />

• La flecha indica relación <strong>de</strong> herencia y va <strong>de</strong>s<strong>de</strong> la subclase hacia la superclase. Por convención se intenta<br />

que las flechas vayan en sentido ascen<strong>de</strong>nte.<br />

• El hecho <strong>de</strong> que en una subclase reaparezca un mensaje que estaba en una <strong>de</strong> sus superclases indica que la<br />

clase re<strong>de</strong>fine el método que lo implementa.<br />

• No se incluyen los colaboradores internos, pero se indican si tienen métodos <strong>de</strong> acceso a los mismos. De<br />

éstos, solamente se usan getters en representación <strong>de</strong> ambos.<br />

• Los métodos <strong>de</strong> clase van, separados por una raya, arriba <strong>de</strong> los <strong>de</strong> instancia.<br />

• Pue<strong>de</strong> agregarse una línea <strong>de</strong> comentario bajo algún método utilizando comillas dobles (“”).<br />

• Excepcionalmente, pue<strong>de</strong>n incluirse cajas que representen objetos individuales, con una flecha punteada<br />

indicando que son instancia <strong>de</strong> alguna <strong>de</strong> las clases <strong>de</strong>l diagrama.<br />

Programa <strong>de</strong> la materia guia 2011.doc Página 9<br />

on<br />

off<br />

isOn<br />

WashingMachine<br />

changeSpeedTo: aSpeed<br />

miRadioPortatil


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

Pare, Atención, Mo<strong>de</strong>le<br />

Lea con atención la resolución <strong>de</strong>l siguiente ejercicio. El objetivo es que empiece a familiarizarse con la<br />

resolución <strong>de</strong> los problemas que se presentarán, utilizando la notación <strong>de</strong> la cátedra.<br />

Enunciado<br />

1. Mo<strong>de</strong>le un semáforo.<br />

2. Mo<strong>de</strong>le un semáforo para peatones.<br />

Resolución <strong>de</strong>l punto 1<br />

I<strong>de</strong>ntificar los objetos<br />

En esta primera iteración, intentamos i<strong>de</strong>ntificar los objetos que vamos a<br />

necesitar. Sin entrar <strong>de</strong>masiado en <strong>de</strong>talle, parece obvio que vamos a<br />

necesitar al semáforo y a las lámparas <strong>de</strong> colores.<br />

Notar que se puso unaLamparaVer<strong>de</strong> y no unaLuzVer<strong>de</strong>, ya que el<br />

semáforo interactúa con las lámparas y no con la luz que éstas emiten.<br />

Primer diagrama <strong>de</strong> secuencia<br />

Intentemos hacer un diagrama <strong>de</strong> secuencia que muestre el funcionamiento normal <strong>de</strong>l semáforo. Para eso<br />

<strong>de</strong>scribimos primero qué queremos mostrar exactamente.<br />

Este diagrama <strong>de</strong> secuencia muestra un ciclo <strong>de</strong> funcionamiento <strong>de</strong> un semáforo, <strong>de</strong>s<strong>de</strong> que está en ver<strong>de</strong> hasta<br />

que vuelve a estarlo.<br />

Empecemos entonces...<br />

unSemaforo unaLamparaVer<strong>de</strong> unaLamparaAmarilla unaLamparaRoja<br />

encen<strong>de</strong>r<br />

Nos encontramos ahora con el primer problema: ¿cómo se apaga la lámpara ver<strong>de</strong>? Es <strong>de</strong>cir, ¿cuándo se apaga?<br />

¿Quién la apaga?<br />

Una opción es que la lámpara se apague sola, pero parece más coherente que<br />

el semáforo la apague, ya que él la pren<strong>de</strong>.<br />

Esto no resuelve el hecho <strong>de</strong> saber cuándo apagarla, por más que el semáforo<br />

pueda saber que la luz ver<strong>de</strong> <strong>de</strong>be estar encendida por 40 segundos por<br />

ejemplo, <strong>de</strong>cidir cuándo pasaron los 40 segundos parece <strong>de</strong>masiado para el<br />

semáforo. Necesitamos un timer:<br />

¿Qué mensaje le enviamos al timer entonces?<br />

Programa <strong>de</strong> la materia guia 2011.doc Página 10


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

Bueno, pensemos en qué es un timer, qué queremos <strong>de</strong> él. En principio, queremos que avise a alguien cuando<br />

transcurre <strong>de</strong>terminada cantidad <strong>de</strong> tiempo. Asociamos esto con lo que sabemos <strong>de</strong> hardware, parece que lo que<br />

estamos necesitando son interrupciones. Definimos entonces que el mensaje será interrumpirA:<br />

unObjeto en: unaCantidadDeTiempo.<br />

Sigamos entonces con el diagrama <strong>de</strong> secuencia.<br />

Revisar el protocolo <strong>de</strong> los objetos<br />

El diagrama parece completo, revisemos entonces los mensajes que estamos enviando a cada objeto, a ver si<br />

parecen coherentes:<br />

• Del mensaje <strong>de</strong>l timer ya hablamos.<br />

• Enviarles encen<strong>de</strong>r y apagar a las lámparas no parece nada raro, parecen mensajes que una<br />

lámpara sabe respon<strong>de</strong>r.<br />

• Enviarle interrumpir al semáforo...no suena muy bien...lo que queremos es que cambie la luz,<br />

suena mejor cambiar.<br />

Programa <strong>de</strong> la materia guia 2011.doc Página 11


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

Ahora, ¿cómo sabe el timer que <strong>de</strong>be mandarle el mensaje cambiar al semáforo? Ni siquiera tiene por qué<br />

saber que lo que está interrumpiendo es un semáforo.<br />

Esto po<strong>de</strong>mos resolverlo modificando el protocolo <strong>de</strong>l timer, para que en lugar <strong>de</strong> interrumpirA:... el<br />

mensaje sea enviar: unMensaje a: unObjeto en: unaCantidadDeTiempo. No parece mal,<br />

<strong>de</strong>spués <strong>de</strong> todo mandar la interrupción era mandarle un mensaje al objeto.<br />

El diagrama <strong>de</strong> secuencia queda finalmente así:<br />

¿Qué más queremos mostrar?<br />

Bueno, sabemos que a veces los semáforos están <strong>de</strong>sactivados, titilando en amarillo.<br />

Este diagrama <strong>de</strong> secuencia muestra cómo <strong>de</strong>sactivan al semáforo y vuelven a activarlo luego <strong>de</strong> que titila dos<br />

veces la luz amarilla, para que retome su ciclo <strong>de</strong> funcionamiento normal:<br />

Programa <strong>de</strong> la materia guia 2011.doc Página 12


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

Programa <strong>de</strong> la materia guia 2011.doc Página 13


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

Resolución <strong>de</strong>l punto 2<br />

Diagrama <strong>de</strong> Instancia <strong>de</strong> un Semáforo para peatones<br />

El semáforo para peatones parece casi igual al semáforo para autos, por lo<br />

que los diagramas no merecen otras explicaciones.<br />

Diagramas <strong>de</strong> Secuencia <strong>de</strong> un Semáforo para peatones<br />

Este diagrama muestra un ciclo <strong>de</strong> funcionamiento <strong>de</strong> un semáforo para peatones, <strong>de</strong>s<strong>de</strong> que está en ver<strong>de</strong> hasta<br />

que vuelve a estarlo:<br />

Programa <strong>de</strong> la materia guia 2011.doc Página 14


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

Práctica 1 - Smalltalk<br />

“The use of COBOL cripples the mind; its teaching should, therefore, be regar<strong>de</strong>d as a criminal offense” - Edsger<br />

Dijkstra<br />

“It is practically impossible to teach good programming style to stu<strong>de</strong>nts that [sic] have had prior exposure to<br />

BASIC; as potential programmers they are mentally mutilated beyond hope of regeneration” - Edsger Dijkstra<br />

Simplicidad <strong>de</strong> la Sintaxis<br />

La sintaxis <strong>de</strong> Smalltalk es muy simple: la escritura <strong>de</strong> su gramática ocupa una sola página;<br />

tiene pocas “palabras reservadas” y ningún “comando”.<br />

Conociendo Smalltalk<br />

1) Bajar Pharo <strong>de</strong> la página (www.pharo-project..org) y levantar la imagen.En la ventana “Welcome To Pharo”<br />

verán una invitación a realizar el tutorial que se realiza evaluando la siguiente colaboración:<br />

ProfStef go.<br />

(Recuer<strong>de</strong>n que para ejecutar una colaboración <strong>de</strong>ben seleccionarla y luego presionar CTRL+D o botón <strong>de</strong>recho<br />

<strong>de</strong>l mouse y seleccionar “Do it”)<br />

Este ejercicio es por lo tanto, realizar todo el tutorial.<br />

Normas <strong>de</strong> codificación Smalltalk<br />

“… every curve and line has to have real meaning; it can not be arbitrary” – Frank Lloyd Wright<br />

Por favor lea estas normas <strong>de</strong> codificación, las cuales <strong>de</strong>berá utilizar en todos los trabajos que impliquen<br />

codificar con Smalltalk.<br />

Estas normas son guías, no leyes inapelables. Sin embargo, la <strong>de</strong>cisión <strong>de</strong> no seguirlas en un caso particular<br />

<strong>de</strong>bería estar fundamentada.<br />

• Elija nombres que sean significativos.<br />

• Los nombres <strong>de</strong> clase, variables globales, <strong>de</strong> clase y pool dictionaries, comienzan con mayúscula. Si el nombre es<br />

compuesto, comience cada palabra con mayúscula.<br />

• Los nombres <strong>de</strong> método, variables <strong>de</strong> instancia, temporarias y parámetros <strong>de</strong> método, comienzan con minúscula. Si el<br />

nombre es compuesto, comience cada palabra, salvo la primera, con mayúscula.<br />

• Evite elegir para una clase un nombre que diga algo sobre su implementación.<br />

• Use sustantivos y oraciones comunes para objetos que no son Boolean.<br />

• Use cláusulas predicativas o adjetivos para objetos o estados Boolean, pero no para estados no Boolean.<br />

• Use oraciones y verbos imperativos para métodos que realizan una acción.<br />

• Use oraciones que comiencen con un verbo, tales como is o has, para métodos que respondan Boolean cuando se<br />

interroga por el estado <strong>de</strong> un objeto.<br />

• Use #new: o #new solamente para métodos <strong>de</strong> creación <strong>de</strong> instancia. Use #initialize para establecer los<br />

valores iniciales <strong>de</strong> las variables <strong>de</strong> instancia.<br />

Material <strong>de</strong> lectura y trabajo guia 2011.doc Página 15


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

• Los métodos que <strong>de</strong>vuelven el estado <strong>de</strong> una variable (getters) <strong>de</strong>berían tener <strong>de</strong> nombre el <strong>de</strong> la variable.<br />

• Los métodos que establecen el valor <strong>de</strong> una variable (setters), <strong>de</strong>berían tener <strong>de</strong> nombre el <strong>de</strong> la variable, seguido <strong>de</strong> un<br />

: (dos puntos).<br />

• No utilice un mismo nombre <strong>de</strong> variable temporaria <strong>de</strong>ntro <strong>de</strong>l mismo scope para más <strong>de</strong> un propósito.<br />

• Utilice el siguiente esquema genérico para los métodos:<br />

Selector <strong>de</strong>l Mensaje y nombres <strong>de</strong> Argumentos<br />

“Comentario”<br />

| Variables temporarias |<br />

Sentencias<br />

• Utilice por lo menos un blanco antes y <strong>de</strong>spués <strong>de</strong> los siguientes operadores binarios: * + < = > | := == = y - (usado como operador binario). Omita espacios a ambos lados <strong>de</strong>l operador binario /. Preceda el signo -<br />

(usado como operador unario) con, por lo menos, un blanco.<br />

• Cuando los paréntesis () <strong>de</strong>limitan una expresión o una lista <strong>de</strong> argumentos, <strong>de</strong>je por lo menos un blanco antes <strong>de</strong>l<br />

paréntesis izquierdo y luego <strong>de</strong>l <strong>de</strong>recho, pero no <strong>de</strong>je espacios entre múltiples paréntesis izquierdos o <strong>de</strong>rechos. Esto<br />

aplica también a los <strong>de</strong>limitadores <strong>de</strong> bloque [].<br />

• Deje al menos un blanco luego, pero no antes, <strong>de</strong> una , (coma), un ; (punto y coma), y un : (dos puntos) cuando<br />

forma parte <strong>de</strong> un selector. No <strong>de</strong>je un blanco entre un : (dos puntos) y el argumento <strong>de</strong> un bloque.<br />

• In<strong>de</strong>nte para marcar el anidamiento lógico. Si hay casos alternativos encolúmnelos consistentemente.<br />

• Parta los mensajes <strong>de</strong> varios keywords en múltiples líneas para evitar los line wraps. In<strong>de</strong>nte cada línea.<br />

• Use mensajes en cascada en lugar <strong>de</strong> repetir el objeto receptor, aún el caso en el que el receptor es self.<br />

• En un mensaje en cascada, coloque cada mensaje en línea aparte e in<strong>de</strong>ntado, separados <strong>de</strong>l objeto receptor.<br />

• Los métodos, salvo contadas excepciones, <strong>de</strong>berían tener una longitud máxima <strong>de</strong> entre 6 y 8 líneas. 1<br />

• Limite la longitud <strong>de</strong> las líneas <strong>de</strong> código a 60 caracteres o al ancho <strong>de</strong> la ventana, lo que sea menor.<br />

• Utilice paréntesis extras para simplificar la lectura <strong>de</strong> una expresión complicada. Use paréntesis para hacer el or<strong>de</strong>n <strong>de</strong><br />

evaluación claro y explícito.<br />

“Specifying an object, sending it a message, and getting back another object as the result are the only things<br />

that ever happen in Smalltalk co<strong>de</strong>” – Ted Kaehler, Dave Patterson<br />

Errores comunes con Smalltalk<br />

“Ever tried. Ever failed. No matter. Try again. Fail again. Fail better” – Samuel Beckett<br />

“The only man who never makes mistakes is the man who never does anything” – Theodore Roosevelt<br />

Leer con atención este punto, le ahorrará algunos dolores <strong>de</strong> cabeza posteriormente.<br />

#add: retorna su argumento<br />

En toda collection que crece, #add: retorna su argumento y no el receptor, que es lo que la gente<br />

usualmente asume. Así, se suele escribir:<br />

(c<br />

add: x)<br />

add: y<br />

1 Un análisis <strong>de</strong> la imagen <strong>de</strong> Smalltalk mostró un promedio <strong>de</strong> 7.01 líneas <strong>de</strong> código y 2.25 <strong>de</strong> comentario por<br />

método.<br />

Regla <strong>de</strong>l Objeto en Smalltalk<br />

En Smalltalk cada objeto, incluso una clase, es una instancia <strong>de</strong> alguna clase.<br />

Material <strong>de</strong> lectura y trabajo guia 2011.doc Página 16


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

Cuando correspon<strong>de</strong>:<br />

c<br />

add: x;<br />

add: y.<br />

O si no:<br />

c add: x.<br />

c add: y<br />

Notar que esta es una buena oportunidad para usar yourself:<br />

^ Set new<br />

add: x;<br />

add: y;<br />

…;<br />

yourself.<br />

Para asegurarse el retorno <strong>de</strong>l nuevo Set.<br />

Notar que hay buenas razones por las que #add: tiene ese comportamiento. Una <strong>de</strong> ellas es evitar el uso <strong>de</strong><br />

variables temporarias, puesto que pue<strong>de</strong>n crearse los argumentos en el momento (como por ejemplo un literal) y<br />

utilizarlo para otras cosas luego <strong>de</strong>l #add:. Si quiere acce<strong>de</strong>rse a la colección, también se pue<strong>de</strong> hacerlo<br />

utilizando mensajes en cascada.<br />

De todas formas, este comportamiento ya forma parte <strong>de</strong>l folclore Smalltalk, y no sería bueno modificarlo.<br />

Cambiar la colección mientras se itera sobre la misma<br />

Nunca <strong>de</strong>biera modificarse una collection mientras se la itera. Habrá elementos que serán movidos, y<br />

elementos que serán salteados o recorridos más <strong>de</strong> una vez. En cambio, <strong>de</strong>be hacerse una copia <strong>de</strong> la<br />

collection sobre la que se va a iterar.<br />

Por ejemplo:<br />

aCollection copy do: [:each | aCollection remove: each ]<br />

Olvido <strong>de</strong> ^<br />

Es muy fácil olvidarse el caret (^) en una expresión. Si no hay un retorno al final <strong>de</strong>l método, Smalltalk retorna<br />

el receptor <strong>de</strong>l mismo. Solamente se requiere la falta <strong>de</strong> un ^ para arruinar una larga ca<strong>de</strong>na <strong>de</strong> invocaciones a<br />

métodos.<br />

Métodos <strong>de</strong> creación <strong>de</strong> instancia<br />

Dos formas correctas <strong>de</strong> escribir un método para crear una instancia son algo así:<br />

new<br />

new<br />

^ super new<br />

initialize;<br />

yourself<br />

Material <strong>de</strong> lectura y trabajo guia 2011.doc Página 17


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

^ super basicNew<br />

initialize;<br />

yourself<br />

Debe re<strong>de</strong>finirse el método <strong>de</strong> instancia initialize en cada clase para inicializar las variables <strong>de</strong> instancia<br />

<strong>de</strong>l objeto:<br />

initialize<br />

super initialize. “inicializa las variables heredadas”<br />

“inicializo las variables que yo <strong>de</strong>fino”<br />

…<br />

Hay muchas formas <strong>de</strong> hacer esto mal. Quizás el error más común es olvidar el ^:<br />

new<br />

super new<br />

initialize;<br />

yourself<br />

El resultado es que se retorna una clase cuando lo que se quiere es una instancia <strong>de</strong> la misma.<br />

Otro error es olvidar la inicialización <strong>de</strong> la superclase, como en:<br />

initialize<br />

“inicializo las variables que yo <strong>de</strong>fino”<br />

…<br />

El resultado es un objeto parcialmente inicializado.<br />

Otro error típico es crear un ciclo infinito escribiendo:<br />

new<br />

^ self new<br />

initialize;<br />

yourself<br />

Tener en cuenta que cuando se crear un objeto que necesita colaboradores para que el mismo tenga sentido,<br />

estos se <strong>de</strong>ben pasar en el mensaje <strong>de</strong> construcción e inicialización. Por ejemplo:<br />

Person class>>named: aString bornOn: aDate<br />

^self new initializeNamed: aString bornOn: aDate<br />

Person>> initializeNamed: aString bornOn: aDate<br />

name := aString.<br />

dateOfBirth := aDate.<br />

Material <strong>de</strong> lectura y trabajo guia 2011.doc Página 18


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

Vean como <strong>de</strong> esta manera el objeto queda bien <strong>de</strong>finido <strong>de</strong>s<strong>de</strong> el momento que se crea y no es necesario tener<br />

setter para realizar cambio <strong>de</strong> sus colaboradores (al menos que el objeto así lo requiera)<br />

Re<strong>de</strong>finiendo #= y #hash<br />

Si se re<strong>de</strong>fine el método #= (igualdad) en alguna clase, y sus instancias van a ser agregadas a un Set o un<br />

Dictionary 2 , se DEBE también re<strong>de</strong>finir el método #hash en esa clase.<br />

La razón es que los sets y dictionaries usan una clave hash para buscar rápidamente los elementos y la<br />

igualdad para completar la i<strong>de</strong>ntificación.<br />

Si no se re<strong>de</strong>fine el #hash, el método por omisión (en Object) usa el valor <strong>de</strong> #i<strong>de</strong>ntityHash. Así, si<br />

solamente se re<strong>de</strong>fine el #=, los objetos pue<strong>de</strong>n compararse como iguales pero no retornarán la misma clave<br />

hash. Los sets y los dictionaries tendrán problemas para manejar correctamente estos objetos.<br />

La regla para el método #hash es la siguiente:<br />

x = y implica x hash = y hash.<br />

Otro punto a tener en cuenta es que, <strong>de</strong> cambiarse el método <strong>de</strong> hash, los objetos ya agregados en sets o<br />

dictionaries pue<strong>de</strong>n no volver a encontrarse.<br />

Usando True o False en lugar <strong>de</strong> true o false<br />

Los valores booleanos son true y false, no True y False que son sus clases.<br />

Referencias<br />

http://www.exept.<strong>de</strong>/sites/exept/onlineDoc/english/programming/classicBugs.html<br />

Práctica 2 - Smalltalk Avanzado<br />

“A language that doesn't affect the way you think about programming, is not worth knowing” – Alan J. Perlis<br />

“A programming language is low level when its programs require attention to the irrelevant” – Alan J. Perlis<br />

La Cultura <strong>de</strong> la Reusabilidad<br />

Desarrolle todo el software bajo la premisa <strong>de</strong> que será reusado.<br />

No crea que ningún software es reusable hasta que no lo haya visto siendo reusado.<br />

Blocks y Contexts<br />

1. Escriba la <strong>de</strong>finición <strong>de</strong> Bloque<br />

2. Implemente el mensaje #timesRepeat: aNumber <strong>de</strong> tal manera que lo sepan respon<strong>de</strong>r los Bloques<br />

3. Dado el siguiente código, respon<strong>de</strong>r que <strong>de</strong>vuelve cuando se envían los mensajes #m1, #m2 y #m3. ¿Por<br />

qué <strong>de</strong>vuelven esos objetos?<br />

A>>m1: anArg<br />

| tempVar |<br />

tempVar := 1.<br />

instVar := 20.<br />

^ [ self size + anArg + tempVar + instVar ]<br />

2 Esto no es válido para I<strong>de</strong>ntitySet ni I<strong>de</strong>ntityDictionary<br />

Material <strong>de</strong> lectura y trabajo guia 2011.doc Página 19


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

B>>m2<br />

| a |<br />

a := A new.<br />

a size: 10.<br />

Transcript show: (a m1: 300) value asString.<br />

C>>m3<br />

| tempVar a |<br />

a := A new.<br />

a size: 10.<br />

tempVar := 2000.<br />

Transcript show: (a m1: 300) value asString<br />

4. ¿Qué se obtiene al evaluar?<br />

a) [ self ]<br />

b) [ super ]<br />

c) [ ....<br />

^ self ]<br />

d) [....<br />

^ super ]<br />

5. Si tengo este método:<br />

Test>>bloque1<br />

| var1 |<br />

var1 := 0.<br />

^ [ var1 := var1 + 1 ]<br />

Y <strong>de</strong>spués ejecuto en el Transcript:<br />

Test new bloque1 inspect<br />

Y <strong>de</strong>ntro <strong>de</strong>l inspector le mando el mensaje value varias veces, ¿Qué suce<strong>de</strong>?.<br />

Ahora corro <strong>de</strong> vuelta, sin cerrar el inspector anterior<br />

Test new bloque1 inspect<br />

¿Qué suce<strong>de</strong>? ¿Qué valores obtengo en cada inspector al enviar el mensaje #value?<br />

Referencias:<br />

• Chamond Liu. Smalltalk, Objects and Design. Sección 3.10: Control Flow<br />

• Chamond Liu. Smalltalk, Objects and Design. Página 55: Blocks [...]<br />

• http://wiki.cs.uiuc.edu/VisualWorks/Closures<br />

No corte la rama sobre la que se sienta<br />

El ambiente Smalltalk permite modificar sus propias herramientas <strong>de</strong> trabajo. Esto es muy<br />

útil y muy atractivo, pero sea cuidadoso al modificar cosas “<strong>de</strong> base”. En general, no<br />

conviene modificar las herramientas provistas por el ambiente, sino subclasificarlas e<br />

introducir las modificaciones en la subclase. Luego, se pue<strong>de</strong> modificar el new <strong>de</strong> la<br />

herramienta para que nos <strong>de</strong> una instancia <strong>de</strong> la subclase, o proveer otro mecanismo <strong>de</strong><br />

acceso.<br />

Material <strong>de</strong> lectura y trabajo guia 2011.doc Página 20


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

Práctica 3 – Teoría <strong>de</strong> Objetos<br />

Objeto y Clase<br />

1. Defina qué es un objeto. De ejemplos concretos<br />

2. Defina qué es una clase. De ejemplos concretos.<br />

3. ¿Cuál es la diferencia entre un objeto y una clase?<br />

4. ¿Todos los lenguajes <strong>de</strong> objetos poseen clases? ¿Cualés no? ¿Qué ventajas y <strong>de</strong>sventajas tienen entre sí?<br />

Mensajes-Métodos vs. Rutinas<br />

5. ¿Cuál es la diferencia entre mensaje y método?<br />

6. ¿Cuál es la diferencia entre enviar un mensaje e invocar una función en el paradigma estructurado?<br />

7. ¿Qué relación tiene la separación mensaje/método con el dynamic binding?<br />

8. ¿Qué relación tiene esta separación con el polimorfismo?<br />

9. +-*/ ¿Son mensajes, métodos o funciones?<br />

self y super<br />

“No man can produce great things who is not thoroughly sincere in <strong>de</strong>aling with himself” – James Russell<br />

Lowell<br />

1. De la <strong>de</strong>finición <strong>de</strong> las pseudo-variables self y super<br />

2. Señale las diferencias entre variables y pseudo-variables<br />

3. ¿Cuál es el resultado <strong>de</strong> evaluar …? (No evalúe estas colaboraciones en Pharo puesto que algunas no<br />

funcionan <strong>de</strong>bido a la implementación <strong>de</strong> dicho Smalltalk. Simplemente piense que significa cada una <strong>de</strong><br />

ellas y escriba el resultado que se le ocurre que <strong>de</strong>bería generar)<br />

a) super = self<br />

b) self := x<br />

c) super := x<br />

d) x := self<br />

e) x := super<br />

4. Si ejecuta el siguiente código, ¿qué se obtiene?.<br />

A>>m2<br />

| a |<br />

a := super.<br />

a m1 “tanto A como SuperA implementan m1”<br />

5. ¿Cuál es la diferencia entre utilizar super y utilizar una sintaxis <strong>de</strong> la forma nombreDeSuperclase::mensaje?<br />

(al estilo C++)<br />

6. Para hacer en velocidad:<br />

MyClass>>test1<br />

^ super == self<br />

MyClass>>test2<br />

^ self class == super class<br />

Material <strong>de</strong> lectura y trabajo guia 2011.doc Página 21


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

Evaluar MyClass new test1 y MyClass new test2 da:<br />

a) true true<br />

b) true false<br />

c) false true<br />

d) false false<br />

7. Analice el resultado <strong>de</strong> los siguientes mensajes<br />

A<br />

m1 : ^ 'A'<br />

m8 : ^ self m1<br />

m9 : ^ super m1<br />

m10 : ^ self m8<br />

m11 : ^ self m9<br />

m12 : ^ 'A'<br />

B<br />

m1 : ^ 'B'<br />

m2 : ^ self m1<br />

m3 : ^ super m1<br />

m12 : ^ 'B'<br />

C<br />

m1 : ^ 'C'<br />

m4 : ^ self m1<br />

m5 : ^ super m1<br />

m6 : ^ super m2<br />

m7 : ^ super m3<br />

a) C new m1<br />

b) C new m2<br />

c) C new m3<br />

d) C new m4<br />

e) C new m5<br />

f) C new m6<br />

g) C new m7<br />

h) C new m8<br />

i) C new m9<br />

j) C new m10<br />

k) C new m11<br />

l) C new m12<br />

Referencias:<br />

1. Chamond Liu. Smalltalk, Objects and Design. Página 54: Special variables self and super<br />

Method Lookup<br />

1. Escriba el algoritmo <strong>de</strong> MethodLookup<br />

2. ¿Pondría la ejecución <strong>de</strong>l method lookup <strong>de</strong>l lado <strong>de</strong>l emisor o <strong>de</strong>l lado <strong>de</strong>l receptor <strong>de</strong> un mensaje?<br />

3. ¿Qué ventajas nos brinda que el primero en enterarse <strong>de</strong> un MNU sea el receptor <strong>de</strong>l mensaje?<br />

4. ¿Podría el method lookup resolverse en un lenguaje dinámico al compilarse el método que se está<br />

programando? ¿Hay excepciones? ¿Y en lenguajes estáticamente tipados?<br />

5. Piense 3 ejemplos para qué le sería útil re<strong>de</strong>finir el MNU<br />

Referencias:<br />

1. Chamond Liu. Smalltalk, Objects and Design. Sección 16.2: Method lookup<br />

Material <strong>de</strong> lectura y trabajo guia 2011.doc Página 22


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

Clases / Métodos Abstractos / Concretos<br />

1. Escriba la <strong>de</strong>finición <strong>de</strong> Clases / Métodos Abstractos / Concretos<br />

2. ¿Qué <strong>de</strong>be re<strong>de</strong>finirse al subclasificar?<br />

3. Consi<strong>de</strong>rar todas las combinaciones <strong>de</strong> clases y métodos, abstractos y concretos, y <strong>de</strong>cidir existencia.<br />

Ejemplo: ¿Pue<strong>de</strong> una clase concreta tener métodos abstractos? ¿Una abstracta todos los métodos<br />

concretos?, etc.<br />

4. ¿Para qué sirven los métodos concretos en las clases abstractas?<br />

5. ¿Qué problemas podría ocasionarle heredar <strong>de</strong> una clase concreta? ¿Lo haría igual?<br />

6. El objetivo <strong>de</strong> mo<strong>de</strong>lar usando clases abstractas es compartir código. ¿Verda<strong>de</strong>ro o Falso? Justifique.<br />

Referencias:<br />

1. Chamond Liu. Smalltalk, Objects and Design. Capítulo 5: Abstract classes<br />

2. Chamond Liu. Smalltalk, Objects and Design. Capítulo 9: When (not) to inherit<br />

Objetos mutables vs. Inmutables<br />

1. Ensaye una <strong>de</strong>finición <strong>de</strong> inmutabilidad <strong>de</strong> los objetos<br />

2. ¿Cómo consi<strong>de</strong>ra a las siguientes clases? ¿Cómo las consi<strong>de</strong>ra Smalltalk?:<br />

a) Symbol<br />

b) String<br />

c) MonetaryUnit<br />

d) Date<br />

e) Measure<br />

3. ¿Y si a un objeto número (clase Integer por ejemplo) le cambiase el valor?<br />

Referencias:<br />

1. Chamond Liu. Smalltalk, Objects and Design. Páginas 35-36<br />

Material <strong>de</strong> lectura y trabajo guia 2011.doc Página 23


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

Programa <strong>de</strong> la materia<br />

“The only thing that makes life possible is permanent, intolerable uncertainty, not knowing what comes next” –<br />

Ursula K. Leguin<br />

1. Calidad <strong>de</strong> Software y Calidad <strong>de</strong> Desarrollo<br />

2. Paradigma y Mo<strong>de</strong>lo Computacional<br />

3. Paradigma <strong>de</strong> Orientación a Objetos<br />

3.1. Programa<br />

3.2. Objeto<br />

3.3. Mensaje<br />

3.4. Colaboraciones<br />

3.5. Protocolo<br />

3.6. Colaboradores (Internos y Externos)<br />

3.7. Método<br />

3.8. Polimorfismo y Binding Dinámico<br />

3.9. Creación <strong>de</strong> Objetos<br />

3.9.1. Clases<br />

3.9.2. Prototipos<br />

3.10. Destrucción <strong>de</strong> Objetos<br />

3.10.1. Automática<br />

3.10.2. Manual<br />

3.11. Mecanismos <strong>de</strong> Sharing<br />

3.11.1. Herencia (Simple vs. Múltiple. Estricta vs. No Estricta)<br />

3.11.2. Delegación (Implícita vs. Explícita)<br />

3.12. Mecanismos <strong>de</strong> Abstracción<br />

3.12.1. Clasificación (Clases Abstractas y Concretas)<br />

3.12.2. Subclasificación<br />

3.12.3. Protocolos en Distintos Niveles<br />

4. Mo<strong>de</strong>los Básicos con Objetos<br />

4.1. Magnitu<strong>de</strong>s<br />

4.2. Lógica Booleana<br />

4.3. Contextos <strong>de</strong> Ejecución<br />

4.4. Colecciones<br />

5. Aplicaciones Orientadas a Objetos<br />

5.1. Definición <strong>de</strong> Aplicación<br />

5.2. Paradigmas Mo<strong>de</strong>l-View-Controller y Morphic<br />

5.3. Mecanismos <strong>de</strong> Observación<br />

5.3.1. Depen<strong>de</strong>ncias<br />

5.3.2. Eventos<br />

6. Concepto <strong>de</strong> Tipo en la Orientación a Objetos<br />

6.1. Revisión <strong>de</strong> TAD<br />

6.2. Aserciones y Contratos<br />

6.3. Jerarquías Polimórficas<br />

7. Recursión y Orientación a Objetos<br />

Material <strong>de</strong> lectura y trabajo guia 2011.doc Página 24


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

Bibliografía<br />

“Libros para ser libres” – Mafalda. Quino.<br />

“If you believe everything you read, you better not read” – Proverbio Japonés<br />

Básica<br />

• Ducasse, Black, Nierstrasz, Pollet: “Pharo by Example”, http://pharobyexample.org/<br />

• Chamond Liu. Smalltalk, Objects, and Design. toExcel, iUniverse.com, Inc. 1996.<br />

• A<strong>de</strong>le Gol<strong>de</strong>rg, David Robson. Smalltalk-80: The Language. Addison Wesley. 1989.<br />

• Lauren Wiener, Brian Wilkerson, Rebecca Wirfs-Brock. Designing Object-Oriented Software. Prentice<br />

Hall. 1990.<br />

De Referencia<br />

• Wilf R. LaLon<strong>de</strong>, John R. Pugh. Insi<strong>de</strong> Smalltalk volumes I y II. Prentice Hall. 1991.<br />

• Bertrand Meyer. Object-Oriented Software Construction. Prentice Hall. 2 nda edición. 1997.<br />

• Edward J. Klimas, Suzanne Skublics, David A. Thomas. Smalltalk with Style. Prentice Hall. 1995.<br />

Artículos (provistos por la cátedra)<br />

• Brian Foote, Ralph Johnson. “Designing Reusable Classes”. Journal of Object-Oriented Programming.<br />

June/July 1988, volume 1, number 2, pages 22-35.<br />

• Bobby Woolf. “Polymorphic Hierarchy”. The Smalltalk Report. January 1997, volume 6, number 4,<br />

pages 15-18.<br />

• Henry Lieberman. “Using Prototypical Objects to Implement Shared Behaviour in OO Systems”.<br />

OOPSLA '86, SIGPLAN Notices, volume 21, number 9, pages 214-223. Portland, OR. 1986.<br />

• Randall Smith, David Ungar. “Self: The Power of Simplicity”. OOPSLA '87 Conference Proceedings,<br />

pages 227-241. Orlando, FL. 1987.<br />

• Henry Lieberman, Laura Stein, David Ungar. “The Treaty of Orlando”. Birds of a Feather Session,<br />

A.C.M. Conference on OOPSLA '87. Orlando, FL. 1987.<br />

• Henry Lieberman, Laura Stein, David Ungar. “A Shared View of Sharing: The Treaty of Orlando”. Object-Oriented<br />

Concepts, Databases, and Applications, A.C.M. Press, pages 31-48. 1989.<br />

• Henry Lieberman, Laura Stein, David Ungar. “Of Types and Prototypes: The Treaty of Orlando”.<br />

SIGPLAN Notices, volume 23, number 5, pages 43-44. 1988.<br />

Herramientas<br />

Pharo: http://www.pharo-project.org/home<br />

Fuentes adicionales <strong>de</strong> información guia 2011.doc Página 25


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

Fuentes adicionales <strong>de</strong> información<br />

"We've all heard that a million monkeys banging on a million typewriters will eventually reproduce the entire<br />

works of Shakespeare. Now, thanks to the Internet, we know this is not true" – Robert Wilensky<br />

Objetos<br />

The Object-Oriented Page www.well.com/user/ritchie/oo.html<br />

Grupos y Listas <strong>de</strong> Smalltalk<br />

Smalltalk Archive at the University of Illinois st-www.cs.uiuc.edu<br />

Recursos <strong>de</strong> Smalltalk iamwww.unibe.ch/~scg/Resources/Smalltalk/in<strong>de</strong>x.html<br />

ClubSmalltalk http://groups.google.com/group/clubSmalltalk<br />

SUGAR (Smalltalk User Group of Argentina) www.sugarweb.com<br />

Smalltalking www.smalltalking.net<br />

Paper fundacional <strong>de</strong> Squeak users.ipa.net/~dwighth/squeak/oopsla_squeak.html<br />

Smalltalks<br />

Pharo http://www.pharo-project.org/home<br />

VisualWorks www.cincomsmalltalk.com<br />

VisualAge Smalltalk http://www.instantiations.com/VAST/in<strong>de</strong>x.html<br />

Dolphin Smalltalk http://www.object-arts.com/<br />

Squeak www.squeak.org<br />

Squeak Swiki minnow.cc.gatech.edu/squeak<br />

SELF<br />

The SELF Project www.sunlabs.com/research/self<br />

Índice guia 2011.doc Página 26


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

NORMAS BÁSICAS DE SEGURIDAD<br />

“The world is a dangerous place to live, not because of the people who are evil, but because of the people who<br />

don't do anything about it” – Albert Einstein<br />

<strong>Departamento</strong> <strong>de</strong> <strong>Computación</strong><br />

Las normas básicas <strong>de</strong> seguridad son un conjunto <strong>de</strong> medidas <strong>de</strong>stinadas a proteger la salud <strong>de</strong> todos, prevenir<br />

acci<strong>de</strong>ntes y promover el cuidado <strong>de</strong>l material <strong>de</strong> los laboratorios. Son un conjunto <strong>de</strong> prácticas <strong>de</strong> sentido<br />

común: el elemento clave es la actitud responsable y la concientización <strong>de</strong> todos: personal y alumnado.<br />

RESPÉTELAS y HÁGALAS RESPETAR.<br />

1. Se <strong>de</strong>berá conocer la ubicación <strong>de</strong> los elementos <strong>de</strong> seguridad en el lugar <strong>de</strong> trabajo, tales como: matafuegos,<br />

salidas <strong>de</strong> emergencia, accionamiento <strong>de</strong> alarmas, etc.<br />

Observar <strong>de</strong> qué tipo – A, B o C – es cada matafuego ubicado en el <strong>de</strong>partamento <strong>de</strong> computación, y verificar<br />

qué material combustible – papel, ma<strong>de</strong>ra, pintura, material eléctrico – se pue<strong>de</strong> apagar con él. Por ejemplo,<br />

nunca usar un matafuego tipo A (sólo A) para apagar fuego provocado por un cortocircuito.<br />

Matafuegos Tipo A: sirven para fuego <strong>de</strong> materiales combustibles sólidos (ma<strong>de</strong>ra, papel, tela, etc.).<br />

Matafuegos Tipo B: para fuego <strong>de</strong> materiales combustibles líquidos (nafta, kerosén, etc.).<br />

Matafuegos Tipo C: para fuegos en equipos eléctricos (artefactos, tableros, etc.).<br />

Existen matafuegos que sirven para los tres tipos <strong>de</strong> fuegos. Generalmente son <strong>de</strong> polvo.<br />

En caso <strong>de</strong> un fuego <strong>de</strong> tipo C, si se corta la corriente eléctrica se transforma en uno <strong>de</strong> tipo A.<br />

El agua en general apaga fuegos <strong>de</strong> tipo A. La arena sirve para apagar fuegos <strong>de</strong> tipo B.<br />

Salidas:<br />

Ante una emergencia: se podrá solicitar a un docente – JTP o profesor, u otra persona autorizada – que obtenga<br />

la llave <strong>de</strong> la puerta <strong>de</strong> planta baja. La persona autorizada que abra la puerta se hará responsable <strong>de</strong>l cierre <strong>de</strong> la<br />

puerta y <strong>de</strong> la <strong>de</strong>volución <strong>de</strong> la llave.<br />

Las únicas ventanas sin reja son las <strong>de</strong> los cuartos 11 y 12 – dan a un balcón.<br />

No se <strong>de</strong>ben bloquear las rutas <strong>de</strong> escape o pasillos con equipos, mesas, máquinas u otros elementos que<br />

entorpezcan la correcta circulación.<br />

2. No se permitirá comer, beber, ni fumar en los laboratorios. Recordar que el polvo y la tiza dañan las PC.<br />

3. No se permitirá enchufar ni <strong>de</strong>senchufar periféricos a las CPU <strong>de</strong> los laboratorios sin la supervisión <strong>de</strong>l<br />

docente o administradores <strong>de</strong> la red. No se modificará la instalación <strong>de</strong> ningún equipo.<br />

Índice guia 2011.doc Página 27


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

4. Es indispensable recalcar la pru<strong>de</strong>ncia y el cuidado con que se <strong>de</strong>be manipular todo aparato que funcione con<br />

corriente eléctrica. Nunca <strong>de</strong>be tocar un artefacto eléctrico si usted está mojado o <strong>de</strong>scalzo.<br />

5. No se permitirán instalaciones eléctricas precarias o provisorias. Se dará aviso inmediato a la Secretaría<br />

Técnica en caso <strong>de</strong> filtraciones o goteras que puedan afectar las instalaciones o equipos y puedan provocar<br />

incendios por cortocircuitos (Interno 355).<br />

6. Es imprescindible mantener el or<strong>de</strong>n y la limpieza. Cada persona es responsable directa <strong>de</strong>l lugar don<strong>de</strong> está<br />

trabajando y <strong>de</strong> todos los lugares comunes.<br />

7. Los laboratorios contarán con un botiquín <strong>de</strong> primeros auxilios con los elementos indispensables para aten<strong>de</strong>r<br />

casos <strong>de</strong> emergencia.<br />

8. Se recomienda <strong>de</strong>scansar la vista por lo menos 15 minutos por cada hora <strong>de</strong> trabajo frente al monitor, según<br />

la Organización Mundial <strong>de</strong> la Salud.<br />

Procedimientos ante emergencias:<br />

* Emergencias médicas<br />

Si ocurre una emergencia tal como: cortes o abrasiones, quemaduras o ingestión acci<strong>de</strong>ntal <strong>de</strong> algún producto<br />

químico, tóxico o peligroso, se <strong>de</strong>berá proce<strong>de</strong>r:<br />

1. A los acci<strong>de</strong>ntados se les proveerán los primeros auxilios.<br />

2. Simultáneamente se tomará contacto con el Servicio Médico (Interno 482), o al Servicio Médico <strong>de</strong> Deportes<br />

(4784-4351 / 3948)<br />

3. Avise al Jefe <strong>de</strong> Laboratorio o autoridad <strong>de</strong>l <strong>Departamento</strong>, quienes solicitarán asistencia <strong>de</strong> la Secretaría<br />

Técnica (interno 380) para que envíen personal <strong>de</strong>l Dpto. <strong>de</strong> Mantenimiento, Seguridad y Control o Servicios<br />

Generales según correspondan.<br />

4. El Jefe <strong>de</strong> <strong>Departamento</strong> notificará el acci<strong>de</strong>nte al Servicio <strong>de</strong> Higiene y Seguridad para su evaluación e<br />

informe, don<strong>de</strong> se <strong>de</strong>terminarán las causas y se elaborarán las propuestas para modificar dichas causas y evitar<br />

futuras repeticiones.<br />

5. Centros para requerir ayuda médica:<br />

S.A.M.E.<br />

Teléfono 107<br />

Hospital Pirovano<br />

Av. Monroe 3555. Capital Fe<strong>de</strong>ral. Tel. 4542-5552 / 9279<br />

INTOXICACIONES :<br />

Índice guia 2011.doc Página 28


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

* Incendio:<br />

Hospital <strong>de</strong> Niños Dr. R. Gutiérrez<br />

Sánchez <strong>de</strong> Bustamante 1399. Capital Fe<strong>de</strong>ral. Tel. 4962-6666.<br />

Hospital <strong>de</strong> Niños Dr. P. <strong>de</strong> Elizal<strong>de</strong><br />

Av. Montes <strong>de</strong> Oca 40. Capital Fe<strong>de</strong>ral. Tel. 4307-7491 Toxicología 4300-2115<br />

QUEMADURAS :<br />

Hospital <strong>de</strong> Quemados<br />

Pedro Goyena 369. Capital Fe<strong>de</strong>ral. Tel. 4923-4082 / 3022<br />

OFTALMOLOGÍA<br />

Hospital Santa Lucía<br />

San Juan 2021. Capital Fe<strong>de</strong>ral. Tel. 4941-7077<br />

Hospital Dr. P. Lagleyze<br />

Av. Juan B. Justo 4151. Capital Fe<strong>de</strong>ral. Tel. 4581-0645 / 2792<br />

1. Mantenga la calma. Lo más importante es ponerse a salvo y dar aviso a los <strong>de</strong>más.<br />

2. Si hay alarma, acciónela. Si no, grite para alertar al resto.<br />

3. Se dará aviso inmediatamente al <strong>Departamento</strong> <strong>de</strong> Seguridad y Control (Interno 311) informando el lugar y<br />

las características <strong>de</strong>l siniestro.<br />

4. Si el fuego es pequeño y sabe utilizar un extintor, úselo. Si el fuego es <strong>de</strong> consi<strong>de</strong>ración, no se arriesgue y<br />

manteniendo la calma ponga en marcha el plan <strong>de</strong> evacuación.<br />

5. Si <strong>de</strong>be evacuar el sector apague los equipos eléctricos y cierre las llaves <strong>de</strong> gas y ventanas.<br />

6. Evacue la zona por la ruta asignada.<br />

7. No corra, camine rápido, cerrando a su paso la mayor cantidad <strong>de</strong> puertas. No utilice ascensores. Descienda<br />

siempre que sea posible.<br />

8. No lleve consigo objetos, pue<strong>de</strong>n entorpecer su salida.<br />

9. Si pudo salir, por ninguna causa vuelva a entrar. Deje que los equipos especializados se encarguen.<br />

10. Recuer<strong>de</strong> que las mayores causas <strong>de</strong> acci<strong>de</strong>ntes son – y en este or<strong>de</strong>n:<br />

1) el pánico<br />

2) el humo<br />

3) el fuego.<br />

* Teléfonos útiles<br />

Índice guia 2011.doc Página 29


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

BOMBEROS Teléfono 100<br />

DIVISIÓN CENTRAL DE ALARMA: 4381-2222 / 4383-2222 / 4304-2222.<br />

CUARTEL V DE BELGRANO:<br />

Obligado 2254. Capital Fe<strong>de</strong>ral. Tel. 4783-2222<br />

BOMBEROS DE VICENTE LÓPEZ:<br />

Av. Maipú 1669. Vicente López. Tel. 4795-2222<br />

BOMBEROS DE SAN ISIDRO:<br />

Santa Fe 650. Martínez. Tel. 4747-2222<br />

La corriente eléctrica como factor <strong>de</strong> acci<strong>de</strong>ntes y lesiones.<br />

Es imprescindible la concientización <strong>de</strong>l riesgo que engendra la corriente eléctrica. Ya que si bien no es la<br />

mayor fuente <strong>de</strong> acci<strong>de</strong>ntes, se trata generalmente <strong>de</strong> acci<strong>de</strong>ntes graves, en muchos casos mortales.<br />

Riesgos <strong>de</strong> la electricidad.<br />

Riesgos <strong>de</strong> incendios por causas eléctricas.<br />

Los incendios provocados por causas eléctricas son muy frecuentes. Ellos ocurren por:<br />

* sobrecalentamiento <strong>de</strong> cables o equipos bajo tensión <strong>de</strong>bido a sobrecarga <strong>de</strong> los conductores.<br />

* sobrecalentamiento <strong>de</strong>bido a fallas en termostatos o fallas en equipos <strong>de</strong> corte <strong>de</strong> temperatura.<br />

* fugas <strong>de</strong>bidas a fallas <strong>de</strong> aislación.<br />

* auto ignición <strong>de</strong>bida a sobrecalentamiento <strong>de</strong> materiales inflamables ubicados <strong>de</strong>masiado cerca o <strong>de</strong>ntro <strong>de</strong><br />

equipos bajo tensión, cuando en operación normal pue<strong>de</strong>n llegar a estar calientes.<br />

* ignición <strong>de</strong> materiales inflamables por chispas o arco.<br />

Shock Eléctrico.<br />

Un shock eléctrico pue<strong>de</strong> causar <strong>de</strong>s<strong>de</strong> una sensación <strong>de</strong> cosquilleo hasta un <strong>de</strong>sagradable estímulo doloroso<br />

resultado <strong>de</strong> una pérdida total <strong>de</strong>l control muscular y llegar a la muerte.<br />

Control <strong>de</strong> los riesgos eléctricos.<br />

Los factores principales a consi<strong>de</strong>rar son :<br />

* el diseño seguro <strong>de</strong> las instalaciones.<br />

* el diseño y construcción <strong>de</strong> los equipos <strong>de</strong> acuerdo a normas a<strong>de</strong>cuadas.<br />

* la autorización <strong>de</strong> uso <strong>de</strong>spués que se ha comprobado que es seguro<br />

* el mantenimiento correcto y reparaciones<br />

* las modificaciones que se efectuen se realicen según normas<br />

Las precauciones generales contra el shock eléctrico son:<br />

* la selección <strong>de</strong>l equipo apropiado y el ambiente a<strong>de</strong>cuado<br />

Índice guia 2011.doc Página 30


Programación Orientada a Objetos Facultad <strong>de</strong> Ciencias Exactas - UBA<br />

* las buenas prácticas <strong>de</strong> instalación<br />

* el mantenimiento programado y regular<br />

* el uso <strong>de</strong> acuerdo a las instrucciones <strong>de</strong>l fabricante.<br />

La protección contra el shock eléctrico se consigue usando :<br />

* equipos <strong>de</strong> maniobra con baja tensión.<br />

* la doble aislación o la construcción aislada<br />

* las conexiones a tierra y la protección por equipos <strong>de</strong> <strong>de</strong>sconexión automática<br />

* la separación eléctrica entre las fuentes y la tierra.<br />

* Frecuentemente se usan adaptadores <strong>de</strong> enchufes. Tenga siempre en cuenta que cuando se usan estos<br />

aditamentos pue<strong>de</strong> <strong>de</strong>sconectarse la tierra <strong>de</strong>l equipo que está usando.<br />

Generales:<br />

. Todo material corrosivo, tóxico, inflamable, oxidante, radiactivo, explosivo o nocivo <strong>de</strong>berá estar<br />

a<strong>de</strong>cuadamente etiquetado.<br />

. El material <strong>de</strong> vidrio roto no se <strong>de</strong>positará con los residuos comunes. Será conveniente ubicarlo en cajas<br />

resistentes, envuelto en papel y <strong>de</strong>ntro <strong>de</strong> bolsas plásticas.<br />

. Ante un problema, consultar al Servicio <strong>de</strong> Higiene y Seguridad (Interno 275).<br />

Índice guia 2011.doc Página 31

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!