Guia Trabajos Practicos - Departamento de Computación ...
Guia Trabajos Practicos - Departamento de Computación ...
Guia Trabajos Practicos - Departamento de Computación ...
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