Segundo examen intermedio de la asignatura Programación Orientada a Objetos

12/12/95:

Cuestiones:

  1. Diseñar una aplicación orientada a objetos que describa la siguiente situación:

    En una casa viven cinco animales: una ballena llamada "Moby Dick", que no dice nada; un perro fiero llamado "Caín", que dice "Grrr"; un perro manso llamado "Abel", que dice "Guau"; un pingüino llamado "Adela" que no dice nada; y un loro que dice "Lorito bonito", "Pretty Polly" y "Viva mi dueño".

    Especificar la jerarquía de herencia, las clases, los atributos y los métodos de cada clase.

  2. Construir los métodos anteriores en Smalltalk, procurando que sean lo más generales posible.
  3. Construir la aplicación Smalltalk de tal manera que los cinco animales estén en una bolsa y cada uno de ellos diga todo lo que sabe decir.
  4. ¿Cuál sería el resultado de la ejecución del programa?

Soluciones:

  1. Una solución posible es: Clases Atributos Metodos ------------------------------- ----------------------- ---------------------- Objeto Animal nombre habla, nombre:, print: Mamifero Perro fiero habla, fiero, manso Ballena Ave Loro vocabulario habla, sabe: Pinguino
  2. Una solución posible es: Animal: habla "Dice que no sabe hablar" self print: 'No se hablar' Animal: nombre: aString "Asigna nombre a un animal" nombre := aString Animal: print: aString "Presenta un mensaje del animal: su clase y nombre seguido por aString" Transcript nextPutAll: self class name,' ',nombre,': ',aString; cr Perro: fiero "Declara que un perro es fiero" fiero := true Perro: manso "Declara que un perro no es fiero" fiero := false Perro: habla "Version especial del metodo 'habla', solo para perros" | x | fiero=nil ifTrue: [x:=super habla] ifFalse: [fiero ifTrue: [x:='Grrr'] ifFalse: [x:='Guau']]. self print: x Loro: habla "Version especial del metodo 'habla', solo para loros" vocabulario isNil ifTrue: [ ^ super habla ]. vocabulario do: [ :i | self print: i ] Loro: sabe: aString "Anade una palabra al vocabulario de un loro" vocabulario isNil ifTrue: [ vocabulario := Set new ]. vocabulario add: aString
  3. Una solución posible es: Clase "Animales", hija de "Objeto", metodo "ejecuta" Animales: ejecuta "Ejecucion de mi aplicacion" |x| animalesEnCasa := Bag new. animalesEnCasa add: (Pinguino new nombre: 'Adela'). animalesEnCasa add: (Perro new nombre: 'Abel') manso. animalesEnCasa add: (Perro new nombre: 'Cain') fiero. animalesEnCasa add: (Ballena new nombre: 'Moby Dick'). x := Loro new nombre: 'Polly'. x sabe: 'Lorito bonito'. x sabe: 'Pretty Polly'. x sabe: 'Viva mi dueno'. x sabe: 'Viva mi dueno'. " Esta linea debe ser ignorada" animalesEnCasa add: x. animalesEnCasa do: [ :i | i habla ]
  4. Una solución posible es: Ballena Moby Dick: No se hablar Loro Polly: Lorito bonito Loro Polly: Pretty Polly Loro Polly: Viva mi dueno Perro Abel: Guau Perro Cain: Grrr Pinguino Adela: No se hablar