25.07.2013 Views

PROGRAMACIÓN ORIENTADA A OBJETOS - Departamento de ...

PROGRAMACIÓN ORIENTADA A OBJETOS - Departamento de ...

PROGRAMACIÓN ORIENTADA A OBJETOS - Departamento de ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

PROGRAMACION <strong>ORIENTADA</strong> A <strong>OBJETOS</strong><br />

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

Universidad Nacional <strong>de</strong>l Sur<br />

<strong>PROGRAMACIÓN</strong> <strong>ORIENTADA</strong> A <strong>OBJETOS</strong><br />

Práctico N° 8<br />

HERENCIA (II)<br />

Ejercicio 1: Dada la siguiente <strong>de</strong>finición <strong>de</strong> clases:<br />

AA {Resultado=5} p:AA;<br />

g() q:BB;<br />

r:CC;<br />

g()++<br />

h()<br />

h()++<br />

f()<br />

BB {Resultado=3}<br />

{Resultado=g()}<br />

M:entero;<br />

CC {Resultado=super.h()+1}<br />

{Resultado={super.g()}<br />

Haga una traza para cada segmento <strong>de</strong> código. Si encuentra una sentencia errónea indique<br />

si el error es en tiempo <strong>de</strong> ejecución o <strong>de</strong> compilación. De haber error indique, a<strong>de</strong>más, el<br />

valor <strong>de</strong>l dato M hasta la última sentencia válida.<br />

p:=q;<br />

q:=r;<br />

M:=p.g();<br />

M:=M+p.h();<br />

(a) (b) (c)<br />

p:=r;<br />

M:=r.f();<br />

q:=r;<br />

M:=M+q.h();<br />

p:=q;<br />

M:=q.g()+p.g()+r.f();<br />

q:=r<br />

r:=null;<br />

M:=q.h();<br />

Ejercicio 2: Dadas las siguientes <strong>de</strong>finiciones <strong>de</strong> clases y <strong>de</strong>claraciones <strong>de</strong> referencias:<br />

clase Uno {Resultado = g()+10} a,b:Uno<br />

f()<br />

g() {Resultado = 2}<br />

clase Dos {Resultado = super.f()}<br />

++ f()<br />

++ g() {Resultado = 50+k()}<br />

k() {Resultado = 100}<br />

c,d:Dos<br />

n,m:integer<br />

Indique para cada segmento <strong>de</strong> código si existen sentencias incorrectas y si el error es en<br />

tiempo <strong>de</strong> ejecución o en tiempo <strong>de</strong> compilación, justificando su respuesta. Siempre que sea<br />

posible, señale a<strong>de</strong>más los valores finales <strong>de</strong> n y m.<br />

a := new Uno()<br />

c := new Dos()<br />

b := c<br />

m := b.k()<br />

(a) (b) (c)<br />

a := new Uno()<br />

b := a<br />

d := new Dos()<br />

n := d.f()<br />

a := d<br />

m := a.g()<br />

a := new Uno()<br />

c := new Dos()<br />

b := c<br />

d := c<br />

m := d.g()+c.k()+a.f()<br />

d := (Dos)a<br />

n := m – d.k()


PROGRAMACION <strong>ORIENTADA</strong> A <strong>OBJETOS</strong><br />

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

Universidad Nacional <strong>de</strong>l Sur<br />

Ejercicio 3: Una empresa <strong>de</strong> multimedios produce diferentes publicaciones en los medios <strong>de</strong><br />

comunicacion mas conocidos: la radio, la televisión y la prensa escrita. Todas las<br />

publicaciones tienen un título, y una persona responsable <strong>de</strong> la dirección <strong>de</strong> la publicación.<br />

Tienen a<strong>de</strong>más un código numérico que las i<strong>de</strong>ntifica entre todas. Tanto los programas <strong>de</strong><br />

radio como los <strong>de</strong> la televisión poseen una duración <strong>de</strong>terminada y una hora <strong>de</strong> inicio, así<br />

como el nombre <strong>de</strong> la emisora correspondiente. A<strong>de</strong>más, existe un espacio disponible para<br />

los comerciales. En los programas <strong>de</strong> radio, este tiempo se mi<strong>de</strong> en minutos al aire. Para la<br />

televisión, se mi<strong>de</strong> en cantidad <strong>de</strong> comerciales por tanda. Cada programa televisivo pue<strong>de</strong><br />

tener a<strong>de</strong>más un número diferente <strong>de</strong> tandas comerciales. Los programas <strong>de</strong> radio necesitan<br />

a<strong>de</strong>más un responsable <strong>de</strong> la musicalización. En cuanto a las publicaciones por medios<br />

escritos, la empresa posee dos tipos: diarios y revistas. Las publicaciones escritas tienen<br />

editor responsable, una cantidad <strong>de</strong> páginas, un precio y un año <strong>de</strong> publicación. Los diarios<br />

que imprimen son semanales o quincenales, se cobra una pequeña cantidad <strong>de</strong> recargo por<br />

envíos al interior, y se registra la semana y mes <strong>de</strong> publicación. Las revistas poseen el mes<br />

<strong>de</strong> publicación, el número, y una palabra (string) que i<strong>de</strong>ntifique la nota <strong>de</strong> tapa. Escriba en<br />

UML las clases correspondientes a los productos <strong>de</strong> la empresa.<br />

Ejercicio 4: Una empresa <strong>de</strong> promociones turísticas <strong>de</strong>sea mantener información sobre las<br />

estructuras <strong>de</strong> alojamiento para turistas, <strong>de</strong> modo tal que sus clientes puedan planear sus<br />

vacaciones <strong>de</strong> acuerdo a sus posibilida<strong>de</strong>s. Los alojamientos se i<strong>de</strong>ntifican por un nombre,<br />

una dirección, una localidad y un gerente encargado <strong>de</strong>l lugar. La empresa trabaja con dos<br />

tipos <strong>de</strong> alojamientos: Hoteles y Alojamientos Extrahoteleros. Los Hoteles pue<strong>de</strong>n ser <strong>de</strong> 3, 4<br />

o 5 estrellas. Las caracteristicas <strong>de</strong> cada categoría es la siguiente:<br />

Hotel Cant. Habitaciones,Número <strong>de</strong> camas,Cantidad <strong>de</strong> pisos<br />

Precio Habitacion<br />

Hotel Cant. Habitaciones, Número <strong>de</strong> camas, Cantidad <strong>de</strong> pisos,<br />

Gimnasio, Nombre Restaurante, Capacidad Restoran<br />

Precio Habitacion<br />

Hotel Cant. Habitaciones, Número <strong>de</strong> camas, Cantidad <strong>de</strong> pisos<br />

Gimnasio, Nombre Restaurante, Capacidad Restoran,<br />

Cantidad salones <strong>de</strong> conferencia, Cantidad <strong>de</strong> Suites<br />

Cantidad <strong>de</strong> Limousinas,Precio Habitacion<br />

Los gimnasios pue<strong>de</strong>n ser <strong>de</strong> tipo “A” o <strong>de</strong> tipo “B”. El precio <strong>de</strong> una habitación <strong>de</strong>be<br />

calcularse <strong>de</strong> acuerdo a esta fórmula:<br />

PrecioHabitacion = $50 + ($1 * capacidad <strong>de</strong>l hotel) + (valor agregado por restaurante) +<br />

(valor agregado por gimnasio) + (valor agregado por limousinas).<br />

don<strong>de</strong><br />

• Valor agregado por restaurante:<br />

10$ si la capacidad <strong>de</strong>l restaurant es <strong>de</strong> menos <strong>de</strong> 30 personas.<br />

30$ si esta entre 30 y 50 personas.<br />

50$ si es mayor <strong>de</strong> 50.<br />

• Valor agregado por gimnasio:<br />

50$ si el tipo <strong>de</strong>l gimnasio es A.<br />

30$ si el tipo <strong>de</strong>l gimnasio es B.<br />

• Valor agregado por limousinas:<br />

5$ por la cantidad <strong>de</strong> limousinas <strong>de</strong>l hotel.<br />

Los Alojamientos Extrahoteleros proveen servicios diferentes a los <strong>de</strong> los hoteles, y están<br />

más orientados a la vida al aire libre y al turista <strong>de</strong> bajos recursos. Por cada Alojamiento<br />

Extrahotelero se indica si es privado o no, y la cantidad <strong>de</strong> metros cuadrados que ocupa.<br />

Se tienen dos tipos <strong>de</strong> alojamientos extrahoteleros: los Campings y las Resi<strong>de</strong>ncias. Para los<br />

Campings se indica la capacidad máxima <strong>de</strong> carpas, la cantidad <strong>de</strong> baños disponibles, y si<br />

posee o no un restaurante en las instalaciones. Para las resi<strong>de</strong>ncias se indica la cantidad <strong>de</strong><br />

habitaciones, si se hacen o no <strong>de</strong>scuentos a gremios y si posee o no campo <strong>de</strong>portivo.


PROGRAMACION <strong>ORIENTADA</strong> A <strong>OBJETOS</strong><br />

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

Universidad Nacional <strong>de</strong>l Sur<br />

Escriba en UML las clases necesarias para la implementación <strong>de</strong> este escenario.<br />

Implemente todos los constructores, comandos y consultas.<br />

Ejercicio 5: El Ministerio <strong>de</strong> Educación <strong>de</strong>sea implementar una base <strong>de</strong> datos con<br />

información <strong>de</strong> los diferentes órganos educativos <strong>de</strong> la Nación. A continuacion se <strong>de</strong>tallan las<br />

casas <strong>de</strong> estudio, y los datos que se intentan almacenar:<br />

Colegios Preescolares: Número, Nombre, Dirección, Nombre <strong>de</strong>l Director.<br />

Colegios Primarios: Número, Nombre, Dirección, Nombre <strong>de</strong>l Director, Año <strong>de</strong>l Plan<br />

Educativo Vigente.<br />

Colegios Secundarios: Número, Nombre, Dirección, Nombre <strong>de</strong>l Director, Año <strong>de</strong>l Plan<br />

Educativo Vigente, Título Final.<br />

Institutos Terciarios: Nombre, Nombre <strong>de</strong>l Rector, Lista <strong>de</strong> Carreras Terciarias.<br />

Universida<strong>de</strong>s Nacionales: Nombre, Nombre <strong>de</strong>l Rector, Lista <strong>de</strong> Carreras Universitarias.<br />

Universida<strong>de</strong>s Privadas: Nombre, Nombre <strong>de</strong>l Rector, Lista <strong>de</strong> Carreras Universitarias,<br />

Arancel Mensual.<br />

Liceos Militares: Nombre, Nombre <strong>de</strong>l Rector, Año <strong>de</strong>l Plan Vigente, Título Final.<br />

Dibuje el diagrama <strong>de</strong> clases que permita representar las instituciones educativas.<br />

Pue<strong>de</strong> agregar clases intermedias.<br />

Ejercicio 6: Se <strong>de</strong>sea mo<strong>de</strong>lar un programa para control <strong>de</strong> los usuarios que han ingresado<br />

a un sistema <strong>de</strong> cómputos en los últimos días. Debe llevar registro <strong>de</strong> los usuarios en una<br />

estructura <strong>de</strong> datos tipo diccionario. Dado que este programa pue<strong>de</strong> difundirse a través <strong>de</strong><br />

Internet, el objetivo es que pueda funcionar en diferentes arquitecturas.<br />

Con este fin y para darle flexibilidad, el programa <strong>de</strong>bería aceptar dos implementaciones<br />

diferentes <strong>de</strong> diccionarios: con arreglos (máximo 20 elementos) o con una lista. Estas<br />

versiones se utilizarán en forma indistinta, <strong>de</strong> acuerdo a don<strong>de</strong> se esté corriendo el programa<br />

o a los <strong>de</strong>seos <strong>de</strong>l administrador <strong>de</strong>l sistema <strong>de</strong> cómputos.<br />

Los usuarios poseen un número <strong>de</strong> i<strong>de</strong>ntificación, el nombre <strong>de</strong>l usuario y la categoría, la<br />

cual pue<strong>de</strong> ser A, B o C.<br />

El administrador <strong>de</strong>l sistema necesita que el programa le permita consultar el tiempo máximo<br />

<strong>de</strong> estadía en el sistema para cada usuario. Las reglas <strong>de</strong> permanencia están <strong>de</strong>terminadas<br />

<strong>de</strong> acuerdo a la categoría, como muestra la siguiente tabla:<br />

Tipo <strong>de</strong> usuario Estadía Máxima<br />

A 5 horas<br />

B 3 horas<br />

C 1 hora<br />

Existe un conjunto <strong>de</strong> usuarios con privilegios adicionales. Estos usuarios especiales se<br />

i<strong>de</strong>ntifican todos con el número “9999”, poseen todos una dirección <strong>de</strong> e-mail y se indica si<br />

este usuario es programador.<br />

El principal beneficio <strong>de</strong> los usuarios especiales es que pue<strong>de</strong>n estar una hora más que la<br />

que les correspon<strong>de</strong> por su categoría. Los usuarios especiales que son programadores,<br />

pue<strong>de</strong> permanecer como máximo 8 horas por día.<br />

Escriba en UML las clases necesarias para la implementación <strong>de</strong> este programa.<br />

Implemente todos los constructores, comandos y consultas.<br />

Ejercicio 7: El <strong>Departamento</strong> <strong>de</strong> Defensa <strong>de</strong> los Estados Unidos está implementando un<br />

simulador <strong>de</strong> tanques para que sus tropas puedan entrenarse. Para que este simulador sea<br />

lo más realista posible, los tanques enemigos son programados <strong>de</strong> acuerdo a informes <strong>de</strong><br />

espionaje sobre los mo<strong>de</strong>rnos tanques rusos BMP. El BMP es un tanque multiproposito, al<br />

cual se le pue<strong>de</strong>n agregar diferentes elementos, obteniendo tanques <strong>de</strong> diferentes tipos.<br />

Los reportes <strong>de</strong> inteligencia indican que el BMP Base posee ciertas características que<br />

permanecen siempre. Para el simulador, los datos que interesan son : el batallón al que<br />

pertenece, la capacidad <strong>de</strong>l tanque <strong>de</strong> combustible y el año <strong>de</strong> fabricación. Para la dinámica<br />

<strong>de</strong>l juego, el Pentágono necesita que las implementaciones <strong>de</strong> los tanques realicen ciertos<br />

cálculos. Para todos los tanques, es necesario po<strong>de</strong>r calcular qué tan lejos pue<strong>de</strong>n llegar


PROGRAMACION <strong>ORIENTADA</strong> A <strong>OBJETOS</strong><br />

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

Universidad Nacional <strong>de</strong>l Sur<br />

<strong>de</strong>s<strong>de</strong> la posición en don<strong>de</strong> están. Eso se realiza <strong>de</strong> acuerdo a la cantidad <strong>de</strong> combustible<br />

que le queda y <strong>de</strong> las características particulares <strong>de</strong> cada tanque.<br />

Los tanques más famosos son el BMP-2 y el BMP-3.<br />

El BMP-2 es un vehículo basado en el BMP Base, pero que funciona como centro <strong>de</strong><br />

comunicaciones. Para los objetivos <strong>de</strong> la simulación, sólo interesa la marca <strong>de</strong> la radio, el<br />

mo<strong>de</strong>lo <strong>de</strong>l BMP-2, y cuántos soldados está transportando. El cálculo <strong>de</strong>l alcance <strong>de</strong>l<br />

vehiculo es<br />

(cantidad <strong>de</strong> combustible en el tanque*10) – 0.05*(peso <strong>de</strong> la radio) +2*(peso <strong>de</strong>l mo<strong>de</strong>lo)<br />

Las radios marca “KGB1” pesan 10 kilos, las <strong>de</strong> marca “KGB2” pesan 15 kilos. Los BMP-2<br />

mo<strong>de</strong>lo 86 pesan 1500 kilos y los <strong>de</strong> mo<strong>de</strong>lo 90 pesan 1000 kilos.<br />

El BMP-3 está basado tambien en el BMP Base, pero éste tiene un cañón pesado. Hasta<br />

ahora, se <strong>de</strong>tectó el uso <strong>de</strong> cañones AK en estos tanques. Los cañones AK pue<strong>de</strong>n ser <strong>de</strong><br />

diferentes milímetros y pue<strong>de</strong> ser móvil o no. En el juego interesa a<strong>de</strong>más la cantidad <strong>de</strong><br />

municiones que admite el cañón, y el tiempo que <strong>de</strong>mora en recargar, lo cual es (50<br />

segundos * milímetros <strong>de</strong>l cañón + retardo <strong>de</strong>l mo<strong>de</strong>lo). Los mo<strong>de</strong>los “1” tienen un retardo<br />

adicional <strong>de</strong> 10 segundos, los mo<strong>de</strong>los “2” un retardo <strong>de</strong> 20 segundos. El cálculo <strong>de</strong>l alcance<br />

<strong>de</strong>l BMP-3 es<br />

(cantidad <strong>de</strong> combustible en el tanque*15) – 10*(mo<strong>de</strong>lo <strong>de</strong>l cañón)<br />

También interesa para la simulación que estos tanques BMP-3 puedan disparar, lo que<br />

provoca la disminución <strong>de</strong> la munición actual.<br />

Diseñe en UML las clases necesarias para representar los tanques en el simulador, <strong>de</strong><br />

acuerdo a lo pedido. Implemente todas los comandos y constructores.<br />

Ejercicio 8:<br />

Los últimos informes <strong>de</strong> espionaje indican que los rusos han producido un nuevo tanque, el<br />

BMP-31. Según lo indicado, este nuevo tanque está basado en el BMP-3, pero tiene un<br />

nuevo cañón AK <strong>de</strong>nominado AK47. Este nuevo cañón es doble, pue<strong>de</strong> tener o no mira<br />

infrarroja y el tiempo <strong>de</strong> recarga es siempre <strong>de</strong> 15 segundos. El alcance <strong>de</strong>l tanque es igual<br />

al <strong>de</strong>l BMP-3, pero por el peso <strong>de</strong>l AK47 pier<strong>de</strong> unos 13 kilómetros.<br />

Diseñe en UML las clases necesarias para actualizar el simulador <strong>de</strong> acuerdo a los<br />

últimos informes. Implemente todas los comandos y constructores.<br />

Ejercicio 9: Teniendo en cuenta las siguientes <strong>de</strong>claraciones <strong>de</strong> clases en Java:<br />

public class Primera<br />

{ protected int prot;<br />

private int priv;<br />

int a;<br />

...<br />

public final int f()<br />

{...}<br />

}<br />

public final class Tercera extends Segunda<br />

{<br />

private int pv;<br />

public static int ps;<br />

protected final int h = 12;<br />

...<br />

}<br />

public class Segunda extends Primera<br />

{ protected int priv;<br />

public int pub;<br />

public final int pf = 9;<br />

...<br />

}<br />

(a) Indique cuáles son los atributos accesibles en las clases Segunda y Tercera.


PROGRAMACION <strong>ORIENTADA</strong> A <strong>OBJETOS</strong><br />

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

Universidad Nacional <strong>de</strong>l Sur<br />

(b) Indique el o los errores en la siguiente clase:<br />

public class Cuarta extends Tercera<br />

{ public int pb;<br />

protected int b;<br />

}<br />

public f()<br />

{return super.f()+10}<br />

public int mostrar()<br />

{return f()+ a}<br />

Ejercicio 10: AIWars es un juego en don<strong>de</strong> se pue<strong>de</strong>n crear insectos virtuales <strong>de</strong>nominados<br />

cybugs cuyo objetivo es combatir entre ellos.<br />

El tablero <strong>de</strong> juego es una cuadrícula <strong>de</strong> 100x100 representando un escenario en don<strong>de</strong><br />

pue<strong>de</strong>n existir otros cybugs.<br />

La inteligencia <strong>de</strong> los cybugs <strong>de</strong>pen<strong>de</strong> <strong>de</strong> cómo hayan sido programados, pero todos realizan<br />

una serie <strong>de</strong> acciones pre<strong>de</strong>terminadas, cuya implementación <strong>de</strong>pen<strong>de</strong> <strong>de</strong> cada cybug.<br />

Todos los cybugs poseen instrucciones para moverse hacia <strong>de</strong>lante algunas celdas en el<br />

tablero, girar a izquierda o a <strong>de</strong>recha 90 grados, <strong>de</strong>tectar objetos en el escenario y atacar<br />

celdas continuas. Saben, a<strong>de</strong>más, en qué posición se encuentran en el tablero por medio <strong>de</strong><br />

dos coor<strong>de</strong>nadas. A través <strong>de</strong> la <strong>de</strong>tección, el cybug sabe quien o quienes son sus actuales<br />

enemigos.<br />

Se han creado diferentes clases <strong>de</strong> cybugs. Los más simples son los cybugs clásicos. Estos<br />

avanzan un casillero por vez, y pue<strong>de</strong>n <strong>de</strong>tectar únicamente objetos que estén en la celda<br />

que tienen enfrente. La única arma que tienen es la capacidad <strong>de</strong> disparar un pequeño misil<br />

al cybug enemigo situado a<strong>de</strong>lante, lo que le <strong>de</strong>crementa la energía a éste en 10 unida<strong>de</strong>s.<br />

El alcance <strong>de</strong>l misil es únicamente <strong>de</strong> una celda, y sólo posee 5 misiles.<br />

Existe otro prototipo <strong>de</strong> cybug clásico. Es un perfeccionamiento <strong>de</strong>l anterior <strong>de</strong>nominado<br />

SWE2. La <strong>de</strong>tección <strong>de</strong>l enemigo la pue<strong>de</strong> hacer hasta en dos casillas hacia <strong>de</strong>lante, y el<br />

misil es más po<strong>de</strong>roso: baja 20 <strong>de</strong> energía al enemigo, pero produce un gasto <strong>de</strong> 5 unida<strong>de</strong>s<br />

<strong>de</strong> energía propias al dispararlo. Pue<strong>de</strong> avanzar hacia una casilla lindante, o saltearse ésta y<br />

avanzar a la siguiente.<br />

Otra clase <strong>de</strong> cybugs menos agresivos son los <strong>de</strong>nominados cybugs cautos. Avanzan <strong>de</strong> a<br />

una celda por vez y en lugar <strong>de</strong> poseer un misil, lo único que hacen es realizar un<br />

electrochoque que disminuye el 50% <strong>de</strong> la energía <strong>de</strong>l cybug que ocupe cualquier celda<br />

vecina. La <strong>de</strong>tección la realizan automáticamente en todas las celdas lindantes.<br />

Se ha presentado recientemente a<strong>de</strong>más una versión mejorada <strong>de</strong> este cybug en la que el<br />

mecanismo <strong>de</strong>l electrochoque absorve el 10% <strong>de</strong> la energía <strong>de</strong>l contrario y con ella recarga<br />

sus propias baterías antes <strong>de</strong> realizar la <strong>de</strong>scarga.<br />

Escriba en UML las clases necesarias para mo<strong>de</strong>lar el funcionamiento básico <strong>de</strong> los<br />

cybugs. Implemente todos los constructores, comandos y consultas necesarios.<br />

Pue<strong>de</strong> suponer que cuenta con la clase Tablero, con las operaciones:<br />

verCelda(x,y):Cybug que <strong>de</strong>vuelve el cybug <strong>de</strong> esa celda, o null si no existe ninguno.<br />

trasladar(CB,x,y) que mueve el cybug CB a la coor<strong>de</strong>nada (x,y).

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

Saved successfully!

Ooh no, something went wrong!