PROGRAMACIÓN ORIENTADA A OBJETOS - Departamento de ...
PROGRAMACIÓN ORIENTADA A OBJETOS - Departamento de ...
PROGRAMACIÓN ORIENTADA A OBJETOS - Departamento de ...
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).