You are on page 1of 12

PROGRAMACIÓN II Programación Orientada a Objetos en Java

Ejercicios – 5

EJERCICIOS – Tema 5

PROGRAMACIÓN ORIENTADA A OBJETOS en JAVA

1. Centro de cálculo

El centro de cálculo desea una aplicación para distribuir la ejecución de programas entre 
sus ordenadores. Los programas se representan a través de su identificador y del compilador que 
necesitan. El centro de cálculo debe procesar una lista de programas. Por cada programa se decide 
en que ordenador se ejecuta dependiendo de algunos factores y se indica al ordenador elegido que 
ejecute el programa. Para elegir el ordenador se debe comprobar que el ordenador esté libre, se 
pueda utilizar y tenga instalado el compilador necesario para ejecutar el programa. 
El centro de cálculo dispone de diverso equipamiento informático identificado por un 
código. Dicho equipamiento se clasifica en ordenadores y dispositivos externos.
Los ordenadores tienen asociada la lista de compiladores instalados, el identificador del 
procesador, la velocidad de proceso y su sistema operativo. El centro de cálculo tiene ordenadores 
monotarea y multitarea. Para describir los primeros se necesita representar su estado (libre cuando 
no está ejecutando ningún programa u ocupado en caso contrario). Así mismo, los ordenadores 
monotarea se dividen en ordenadores sobremesa y portátiles. La política de la empresa establece 
que los ordenadores portátiles no se pueden utilizar para ejecutar este tipo de programas. En 
cuanto a los ordenadores multitarea, tienen asociado el número máximo de tareas que pueden 
realizar a la vez y el número de tareas que está realizando en cada momento (una tarea consiste en 
la ejecución de un programa).
Para completar el equipamiento informático describimos los dispositivos externos. Estos 
se clasifican en dispositivos de entrada, de salida y de almacenamiento. Como dispositivos de 
entrada  tenemos  los  escáneres  cuya   característica  es  un  número  que  indica  su  precisión.  Las 
impresoras son el único dispositivo de salida y se describen indicando su tipo (laser, chorro de 
tinta) y la velocidad en páginas por segundo. Finalmente tenemos dos tipos de dispositivos de 
almacenamiento, las grabadoras de CD y las unidades de cinta. Ambos tienen su velocidad de 
transferencia   y   velocidad   de   acceso.   Mientras   que   sólo   las   unidades   de   cinta   tienen   como 
característica la cantidad de datos que pueden almacenar.

Se pide:

A. Diseñar (gráficamente) una jerarquía de clases que represente la información descrita 
sobre   los   elementos   que   integran   el   Centro   de   Cálculo,   haciendo   un   uso   óptimo   del 
principio   de   compartición   y   ocultación   de   la   información.   Identificar   las   operaciones 
necesarias para la aplicación descrita. Indicar en el diagrama los atributos y operaciones 
correspondientes a cada clase, y la condición de abstractas de las clases que así lo sean 
(usando líneas discontinuas), si es el caso.
B. Implementa en Java la clase Centro de Cálculo
C. Implementa en Java la clase Ordenador y sus descendientes
D. Implementa en Java en las clases que juzgues necesario la operación para comprobar si un 
ordenador está disponible

1
PROGRAMACIÓN II Programación Orientada a Objetos en Java
Ejercicios – 5

2. Salarios

Una empresa desea una aplicación para gestionar los salarios de sus empleados. La 
empresa paga a sus empleados una cantidad de dinero por diferentes conceptos teniendo cada uno 
distintas características. Algunos conceptos están libres de impuestos, mientras que otros están 
sujetos a cierta retención por parte de Hacienda. Calcular el sueldo de un empleado no es mas que 
sumar todos los conceptos netos correspondientes (es decir, restado las retenciones cuando sea 
necesario). 
Los conceptos libres de cargas son debidos a trabajos de diversa índole, por lo que se le 
asocia una descripción del trabajo y número de horas invertidas.
En cuanto a los conceptos sujetos a retención, hacienda se lleva un porcentaje. Estos 
conceptos se clasifican en: el sueldo base, los complementos y el trabajo extra. 
•El sueldo base de cada empleado tiene un código numérico que lo identifica.
•Los complementos del sueldo tienen, además del porcentaje de retención mencionado, un 
impuesto especial que varía para cada tipo de complemento. Los complementos que se tienen en 
cuenta son: complemento de destino, complemento de cargo y complemento de antigüedad. Para 
el complemento de destino se anotará el destino actual (ciudad y sucursal), para el complemento 
de cargo se anota el propio cargo (jefe, directivo o empleado) y, finalmente, asociado al 
complemento de antigüedad está el número de años.
•El concepto de trabajo extra tiene en cuenta el número de horas extra que ha realizado el trabajador 
además de la justificación (fin de proyecto, guardia, otros). Dada la excepcionalidad de las horas extra, 
Hacienda aplica un porcentaje especial como impuesto.

Se pide:

A. Diseñar (gráficamente) una jerarquía de clases que represente la información descrita 
sobre los Conceptos pertenecientes al salario de un empleado, haciendo un uso óptimo del 
principio  de   compartición  de   la   información.   Indicar   en   el   diagrama   los  atributos  y 
operaciones correspondientes a cada tipo, y la condición de abstractas de las clases que 
así lo sean (usando líneas discontinuas), si es el caso.
B. Implementa la clase complemento de antigüedad.
C. Escribe el método de la clase Empleado que calcula el total de su sueldo: obtenerSalario()

3. Organización de congreso

El grupo GTI está organizando un congreso en el que se prevé una amplia participación. Un 
trabajo importante consiste en organizar convenientemente los maletines de participación que se 
entrega   a   los   participantes,   los   cuales   tienen   diferente   contenido   dependiendo   del   tipo   de 
inscripción en el congreso. Un participante puede ser:

­ estudiante, y su maletín incluirá una tarjeta blanca con su nombre y centro, un libro 
de actas del congreso, tres tarjetas de comida, una factura por el importe pagado 
(15.000 pts) y un certificado de inscripción de Estudiante;
­ senior, y su maletín incluirá una tarjeta blanca con su nombre y lugar de trabajo, 
posiblemente   varios   libros   de   actas   del   congreso,   varios   tarjetas   de   comida,   una 
factura por el importe pagado (45.000 pts) y un certificado de inscripción Normal;
­ miembro del  comité  de  programa,  su  maletín  incluirá  una  tarjeta   verde   con   su 
nombre y lugar de trabajo, varios libros de actas del congreso, varios tarjetas de 

2
PROGRAMACIÓN II Programación Orientada a Objetos en Java
Ejercicios – 5

comida, una factura por el importe pagado (45.000 pts), certificado de inscripción 
como miembro del Comité de Programa, y un regalo recuerdo de San Sebastián;
­ invitado, su maletín incluirá una tarjeta azul con su nombre y lugar de trabajo, varios 
libros de actas del congreso, varias tarjetas de comida, y un regalo recuerdo de San 
Sebastián. No se incluye ninguna factura en este caso.

Queremos construir una aplicación que dada una lista de participantes nos proporcione, 
para cada uno de ellos, la lista personalizada de contenidos de su maletín. 
Utilizando  programación  orientada   a   objetos,   diseñar   la   jerarquía  de   tipos   de  objetos 
adecuada e implementar el procedimiento contenidosMaletín para cada clase de objetos.

4. Pago de autopistas

La   empresa   Europistas   S.A.   quiere   automatizar   el   pago   de   usuarios   en   los   controles   de   sus 
autopistas. Para calcular el importe exacto a pagar por cada vehículo tiene en cuenta básicamente: 
los kilómetros recorridos y el precio por km. Los kilómetros se determinan directamente a partir 
de los puntos de entrada y salida de la autopista (el número de entrada/salida indica directamente 
el punto kilométrico).

La cantidad básica calculada a partir del producto  No. Km x Precio Km  se modifica en 


función de una serie de criterios.
Inicialmente ya hay diferencia cuando el transporte es de viajeros o de carga. En cuanto al 
transporte de viajeros: 
­ la cantidad pagada por las motos será el precio básico, 
­ la cantidad que pagarán los coches será el precio básico multiplicado por 1.5, y 
­ los autobuses pagarán el precio básico multiplicado por 4. 
­ en  el  caso  de  los   autobuses  en  diferentes   momentos  pueden  aplicarse   descuentos 
dependiendo del número de plazas.

Establecer gráficamente una jerarquía  utilizando tipos etiquetados que permita compartir la 
información de forma óptima: en cada nodo del árbol que representa la jerarquía se especificará el 
tipo definido y los atributos a definir en su nivel. Declarar en Ada los tipos de la rama del árbol 
que va desde el tipo raíz al tipo Coche; hacerlo en diferentes paquetes aplicando adecuadamente el 
principio de ocultación de información.

Implementar la operación Tarifa para el tipo raíz y para el tipo Autobús.
Implementar el programa principal que procese una secuencia de vehículos a su paso 
por el control de salida de la autopista.

5. Primas de seguros

Una compañía de seguros de automóviles quiere automatizar el proceso de cálculo de las primas 
de sus asegurados, y para ello encarga el desarrollo de una aplicación.

Para formalizar un seguro la compañía necesita unos datos iniciales:
­ tomador del seguro (persona que efectúa el contrato con la compañía)
­ propietario del vehículo
­ conductor habitual

3
PROGRAMACIÓN II Programación Orientada a Objetos en Java
Ejercicios – 5

­ tipo de vehículo (motocicleta o coche)
­ características del vehículo
­ coeficiente bonus­malus , valor numérico cercano a 1 que se utiliza para calcular la 
prima total a pagar

Los seguros que oferta la compañía son cuatro:  Responsabilidad Civil,  Terceros­Motocicleta, 


Terceros­Coche y Todo­riesgo, aunque en todos los casos es posible además contratar una póliza 
especial de seguro de Ocupantes. A continuación se describen los tipos de seguro:
­ Responsabilidad Civil  es  obligatorio  y  su  contratación  está  obligada  por  ley.  La 
cuota   básica   es   fija   y   su   valor   está   marcado   anualmente   por   cada   compañía.   La 
cobertura del seguro a terceras personas en siniestros está limitada a una cantidad fija.
­ Terceros­Motocicleta  y  Terceros­Coche  amplían su cobertura a terceros hasta una 
cantidad ilimitada. Las cuotas terceros­motocicleta y terceros­coche dependen de la 
clase de vehículo, y sus valores están marcados anualmente por cada compañía en las 
tablas correspondientes. 
­ Todo­riesgo incluye la cobertura de daños propios. Su cuota también depende de la 
clase   de   vehículo,   y  su  valor   está   marcado   anualmente   por   cada   compañía   en   la 
correspondiente   tabla.   En   este   caso   es   posible   pagar   una   franquicia   de   20.000   o 
40.000 pts, lo cual supone una disminución considerable de la prima a pagar.
­ Ocupantes,  añade la cobertura de daños del propietario, conductor y tomador del 
seguro. Su cuota es una cantidad fijada por la compañía.

6. Interfaz gráfica de ventanas

En un interfaz gráfico de usuario se utilizan ventanas de diferentes clases:


avisos, ventanas de gráficos y cuadros de diálogo. Todas las ventanas llevan
un título en el borde superior, y tienen como atributos sus dimensiones y
posición en la pantalla. Todas las ventanas se pueden visualizar en pantalla y
sus dimensiones pueden ser modificadas (excepto, esto último, en el caso de
las ventanas de tipo aviso).
Todas las ventanas de tipo aviso se componen además de una cadena de
caracteres que representa el texto del mensaje. Hay dos tipos de ventanas de
aviso: las fugaces, que son aquellas que solamente llevan el texto del
mensaje y que permanecen en pantalla durante algunos segundos, y las que
antes de desaparecer requieren del usuario su conformidad (expresada por
medio de un botón OK). Como ya se ha dicho, las dimensiones de las
ventanas de aviso no se pueden modificar.
Las ventanas de gráficos se componen de una figura y del texto de pie de
imagen, y de un botón que permite cerrarlas.
Los cuadros de diálogo se componen de dos cadenas de caracteres −una caja
de entrada de texto y una etiqueta que indica lo que se solicita que el usuario
introduzca en la misma−, y dos botones −OK y Cancelar−. Una operación
específica de este tipo de ventanas es la que permite recoger el resultado de
la interacción con el usuario: información sobre el botón oprimido por el
usuario (OK o Cancelar), y el string introducido en la caja de entrada de texto.

Se pide la especificación de estos tipos de ventanas y sus operaciones


haciendo uso de técnicas de programación orientada a objetos, compartiendo
información en lo posible −herencia de atributos y operaciones−, y
estructurando la información en módulos distintos para los diferentes tipos

4
PROGRAMACIÓN II Programación Orientada a Objetos en Java
Ejercicios – 5

abstractos de datos. En concreto se piden:


− La jerarquía de clases.
− implementar la operación que permite cambiar de dimensiones a una
ventana de tipo aviso, indicando además dónde debe ir.

La operación de cambio de dimensión de las ventanas será común para todos


los tipos, excepto para los avisos (en los que la operación no producirá ningún
efecto). En cuanto a la visualización, hay que pensar que no será posible
visualizar objetos tan heterogéneos por medio de una única operación, y que
las versiones de la operación para los diferentes tipos de ventanas tienen que
tener acceso a atributos comunes (título, dimensiones y posición).

7. Biblioteca con nuevos fondos

La biblioteca anterior quiere modernizarse e incluir nuevo material de préstamo. Como se prevé 
que vaya a haber nuevos cambios posteriores se plantea hacer la modificación del programa de 
gestión en modo orientado a objetos. Ahora la biblioteca incorporará a sus fondos: discos, cintas 
de vídeo y revistas. Es posible pedir en préstamo libros, discos y vídeos; sin embargo no se 
prestan las enciclopedias, ni los diccionarios, ni las revistas.
Todos los ejemplares de la biblioteca llevan como información su código de identificación, la 
fecha  de  incorporación a   la  misma,   el  título  y   un   resumen   de  sus  características.  Cuando  el 
ejemplar se puede prestar es necesario saber también su estado de préstamo (libre, prestado, o 
desaparecido), la fecha del préstamo y la de devolución prevista, y el número de socio que lo tiene 
en su poder.
Para los libros se guarda además el autor y el tema general (novela, historia, artes, ciencia ficción, 
etc.), la editorial y la fecha de edición; de los discos se almacena el interprete, la lista de temas, y 
la compañía discográfica; de las enciclopedias y diccionarios se almacena la editorial, la fecha de 
edición, y el número de tomos; de las revistas se almacena el título y la editorial.

Se pide:
− diseñar   la   jerarquía     de   clases   aprovechando   adecuadamente   las   propiedades   de   la 
programación orientada a objetos.
− Implementar la operación constructora Crear para libros, y también cualquier otra operación 
que se necesite para ello.

8. Subvenciones multicines

Se acaba de inaugurar un centro multicines orientado al aprendizaje de idiomas y se quieren 
gestionar sus diferentes salas. Las salas de cine tienen un aforo, una ocupación (el número de 
asistentes del día actual) y un precio base de la butaca, y se dividen en varios tipos: salas donde se 
proyectan películas en castellano; salas donde se proyectan películas en euskara y salas donde se 
proyectan películas en versión original. 
La entrada en las salas de castellano tiene un precio base. Sin embargo, como las salas con 
películas en euskara o en versión original reciben subvención, se abarata su precio de entrada de 
acuerdo a un porcentaje prefijado. Por ejemplo, si el precio base es de 1000 pesetas y el porcentaje 
de descuento es un 25%, la entrada valdrá 750 pesetas. 
Además del porcentaje de descuento queremos guardar la información acerca del idioma de los 
subtítulos, ya que las salas que proyectan películas en euskara pueden tener los subtítulos en 

5
PROGRAMACIÓN II Programación Orientada a Objetos en Java
Ejercicios – 5

euskara o  en castellano,  y las salas que proyectan  películas en versión original pueden tener 


subtítulos en el mismo idioma de la proyección o en castellano o en euskara.
También  queremos   recoger   información   sobre   el   idioma   de   las   películas   en   versión   original. 
Además, en algunas de estas salas se realizan debates (en el idioma de la película proyectada, para 
poder practicarlo); en ellas debe de existir un número mínimo de asistentes para que el debate se 
lleve a cabo.
Con esta descripción se pide:
1. Diseñar  una  jerarquía  de   tipos   etiquetados   o   clases   que   represente   la   información 
descrita. Indicar los atributos propios correspondientes a cada clase.
2. Implementar el método  calcularPrecio para todas aquellas clases en las que hay que 
declararlo.
3. Suponiendo que tenemos una lista con todas las salas,  implementar un método  que 
calcule el dinero que se consigue el día actual sumando las cantidades ingresadas en cada 
sala.

9. Diferentes tipos de cultivos 

La misma cooperativa anterior quiere automatizar la información de los distintos tipos de cultivos. 
Dicha   información   incluirá   las   características   de   los   cultivos   adaptadas   a   la   zona   geográfica 
concreta, para que un agricultor pueda consultarlas y decidir su nueva plantación. 
Todos los cultivos tienen una época de siembra y de cosecha adecuadas, un tamaño mínimo de 
finca  y  un  tipo  concreto  de   exposición  solar  (sol,  sol/sombra,  sombra).   Por  otro  lado   en   los 
cultivos   de   regadío   se   indica   también   la   frecuencia   de   riego   y   las   necesidades   de   agua   en 
litros/m2.
Los cereales (trigo, avena, maíz, centeno) y legumbres (garbanzos, lentejas, alubias) son cultivos 
de   secano   y   en   ellos   se   indica   el   material   industrial   necesario   para   la   cosecha   y   siembra 
(cosechadora, empaquetadora). 

Las hortalizas (tomates, pimientos, vainas, acelgas, lechugas) y los árboles frutales (manzano, 
cerezo, ciruelo) son cultivos de regadío y por sus problemas de plagas necesitan unos cuidados 
especiales; cada tipo de cultivo tiene un grupo de plagas particulares.

Se pide:
1. Dibujar la jerarquía clases adecuada para implementar la información descrita; para cada 
tipo indicar únicamente sus características y operaciones primitivas propias.
2. Implementar la operación imprimirCaracterísticas para los tipos necesarios de la rama 
cuya  hoja  es  Tomate;  utilizar  de forma  óptima  las  características  de  la  programación 
orientada a objetos.
3. La consulta de un agricultor sobre un cultivo específico se resuelve accediendo a una lista 
que incluye los cultivos posibles cada año. Crear un programa en el que se implemente y 
explore dicha lista para una consulta concreta del agricultor, éste indicará el nombre del 
cultivo del que requiere información y la aplicación imprimirá sus características.

6
PROGRAMACIÓN II Programación Orientada a Objetos en Java
Ejercicios – 5

10. Reparto de leña 
En un municipio de una zona rural se va a proceder a realizar el reparto de leña para el invierno. A 
cada fuego (familia) le corresponde un número de árboles del bosque del municipio; la cantidad 
de árboles depende del número de personas de la familia. Al hacer el reparto el ayuntamiento 
marca los árboles con dos iniciales correspondientes al fuego.
Un árbol se caracteriza, entre otras cosas, por la forma de la hoja, el grosor máximo que pueda 
alcanzar, la calidad de su madera, el grosor real y el número de años; además tiene un código de 
identificación. Un árbol se puede talar cuando su grosor real es mayor que la mitad del grosor 
máximo correspondiente; además, en el caso de los árboles que no dan fruto la velocidad de 
crecimiento (lenta, rápida) también se tiene en cuenta. 
La zona de bosque del municipio tiene árboles de hoja caduca y árboles de hoja perenne. Entre los 
árboles de hoja caduca algunos dan fruto (estos no se talan) y otros no. Algunos árboles de hoja 
caduca de  este municipio  tienen  la  particularidad  de encontrarse en zonas protegidas, lo que 
impide su tala, y entre los de hoja perenne algunos son árboles singulares que tampoco se pueden 
talar. 
Para designar los árboles que finalmente se cortan el ayuntamiento utiliza una serie de criterios 
basados   en  toda   la   información   descrita,   como   por   ejemplo   la   antigüedad   o   la   velocidad   de 
crecimiento. 
Se pide:
1. Dibujar la jerarquía de clases para implementar la información descrita; para cada tipo 
indicar únicamente sus características y operaciones primitivas propias.
2. Implementar   la   operación  esPosibleTalar  para   todos   los   tipos   de   la   jerarquía 
aprovechando las ventajas de la POO. Esta operación devuelve un valor True cuando es 
posible talar el árbol (según los criterios descritos) y False en caso contrario (que sea 
posible talar el árbol no significa que se vaya a hacer).
3. Supongamos que tenemos una lista de todos los árboles del bosque ordenada según los 
criterios de asignación propios del ayuntamiento. Se pide implementar un programa que: 
dado un número de árboles y la identificación del fuego al que corresponden, imprima los 
árboles que el ayuntamiento asignaría a dicho fuego y los marque con la identificación 
dada. En caso de que no hubiera árboles suficientes para asignar, el programa visualizará 
un mensaje de aviso.

11. Sensores de meteorología

Las lecturas de los sensores metereológicos, están caracterizadas por el identificador del sensor, 
la hora y el valor, pueden ser de diferentes tipos: temperatura, presión, viento y humedad relativa 
del aire. 

Hay lecturas que se toman en el exterior y otras que se toman en el interior de edificios. En el 
exterior se toman lecturas de todos los tipos, mientras que en el interior de edificios actualmente 
sólo se toman lecturas de temperatura, aunque se prevé que en un futuro se tomen también otras. 
Todas las lecturas de exterior llevan como atributo la orientación de la pared en la que está 
colocado el sensor (N, S, E, O) y una indicación de la condición de sol o sombra en la que se 
encuentra en el momento de la medición. Las lecturas de la velocidad del viento se caracterizan, 
además de por su valor en kms/h, por la dirección del mismo (tipo orientación).

Se pide:

7
PROGRAMACIÓN II Programación Orientada a Objetos en Java
Ejercicios – 5

a) Diseñar  (gráficamente)  una  jerarquía  de clases  que   represente   la  información 


descrita, haciendo un uso óptimo del principio de compartición de la información, y 
teniendo en cuenta la posible ampliación de la jerarquía en el futuro. Indicar en el 
diagrama los atributos correspondientes a cada tipo, y la condición de abstractas 
de las clases que así lo sean (usando líneas discontinuas), si es el caso.

b) Escribir la especificación del paquete que implementa el tipo correspondiente a 
las lecturas de exterior  como extensión de otro tipo de la jerarquía. Declárense 
solamente los tipos de datos (no hace faltar declarar las operaciones).

12. Video Club

Un videoclub quiere poner en marcha un sistema de alquiler de películas por ordenador. Cuando 
los clientes devuelven las películas, el programa calcula la cantidad que deben pagar. El videoclub 
dispone de una amplia colección de películas en diferentes formatos como se describe a 
continuación.

Para cada película se guarda la siguiente información: título, productora, si está en alquiler o 
no, y si lo está, el número de horas que lleva alquilada.

El precio básico de las películas se calcula de la siguiente manera: si la película ha estado 
menos de 24 horas alquilada se cobran 2 euros. A partir de entonces cada hora extra se cobra 0,25 
euros.

Por otra parte, el precio cambia en función del formato de la película. En el formato video el 
precio básico se mantiene y se almacena una lista con los trailers (anuncios) incluidos en la cinta. 
Todas las películas en DVD cuestan 0,5 euros más. Además tenemos tres tipos de películas en 
DVD: normales, especiales y de lujo. Todos estos ofrecen la posibilidad de oír la película en el 
idioma original, esta información se almacena para que los clientes puedan conocerla. Los DVD 
normales tienen también una lista de trailers. Por su parte, los DVD especiales, disponen de 
subtítulos en diferentes idiomas y son más caros que los normales en 0,25 euros. Finalmente los 
DVD de lujo, además de las ventajas de los DVD especiales, tienen extras como el resumen del 
argumento y una crítica. Además los DVD de lujo tienen un precio de 3 euros más 0,5 euros por 
hora extra de alquiler.

Se pide:

1. Estableced en un diagrama UML una jerarquía que represente los objetos que se han 
descrito  en  el  enunciado.  Situar  de  forma  correcta  los  atributos  y operaciones  de  tal 
manera que se fomente la compartición de la información y el comportamiento. Marcar 
las clases abstractas (por ejemplo con línea discontinua). Para que el diagrama no sea muy 
grande, indicad los atributos de las clases, SÓLO las operaciones imprescindibles para 
esta aplicación y NO incluyáis las interfaces.
2. Implementad el método calcularPrecio en las clases que sea necesario.
3. Implementad el método de la clase VideoClub que muestre el título de las películas que 
están actualmente alquiladas.
4. Queremos   también   una   operación  mostrarTrailersPeliculas  en   la   clase 
VideoClub  para mostrar la lista de todos los trailers incluidos en las películas del 
videoclub. NO defináis la operación mostrarTrailers en aquellos soportes que no 

8
PROGRAMACIÓN II Programación Orientada a Objetos en Java
Ejercicios – 5

los tienen. Si necesitáis nuevas clases o definir algunos métodos en las clases previamente 
descritas, hacedlo. Justifica tus decisiones explicando cuales son las ventajas que tiene tu 
solución.
5. Imaginad   que   la   aplicación   incluye   una   clase  Maquina  que   controla   la   máquina 
expendedora de películas. Esta clase implementa la interfaz IMaquina que se muestra a 
continuación. La clase VideoClub debe tener una operación recuperarPelícula 
que se ejecuta cuando el usuario selecciona la operación para devolver una película. Dado 
que en la devolución física de la película se pueden producir errores, el usuario puede 
realizar varios intentos siempre dentro de un tiempo límite. La máquina debe proporcionar 
ayuda   en   estos   casos.   Si   se   pasa   el   tiempo   para   la   devolución,   la   operación 
recuperarPelícula debe elevar otra excepción llamada ErrorRecuperacion. 
Escribe   el   código   de   la   operación  recuperarPelícula  para   que   se   traten 
adecuadamente las situaciones excepcionales.

public interface IMaquina {
  ...
  public Pelicula devolverPelicula () 
       throws Error1, Error2;
  // Salida: Devuelve el objeto película correspondiente 
a la
  //         película que se ha devuelto
  // Efecto: Dispara la excepción Error1 cuando el 
usuario   
  //         no ha insertado correctamente la película
  //         Dispara la excepción Error2 cuando se ha    
  //         agotado el tiempo para la devolución

  public void mensajeExplicacion ();
  // Efecto: Muestra un mensaje por la pantalla de la 
máquina
  //         indicando las instrucciones de uso

  public void mensajeExpiracionTiempo ();
  // Efecto: Muestra un mensaje por la pantalla de la 
máquina
  //         indicando que se ha agotado el tiempo para 
la devolución
  ... 
}

13. Ludoteca

Una ludoteca dispone de diferentes juegos para entretener a sus socios. Estos juegos se pueden 
clasificar   en   dos   grandes   grupos   atendiendo   al   grado   de   influencia   que   tiene   el   azar   en   la 
obtención   de   una   victoria.   Así,   puede   observarse   que   en   juegos   tales   como   el   parchís   y   el 
chinchón, el azar es un factor muy importante mientras que en otros como el ajedrez, el sudoku o 
los crucigramas, éste apenas influye.

9
PROGRAMACIÓN II Programación Orientada a Objetos en Java
Ejercicios – 5

El centro dispone de la siguiente infraestructura: tableros de parchís para cuatro y para seis 
jugadores, de tableros y piezas de ajedrez y de barajas de distintos tipos (de 40 cartas y de 50). 
Además distribuye crucigramas, sopas de letras y sudokus. En cuanto al número máximo de 
personas por partida depende de cada juego: para una partida de chinchón es de cinco jugadores, 
para una de póker o de julepe es de cuatro, para el ajedrez es de dos, los sudokus, crucigramas y 
sopas de letras son individuales y para el parchís depende del tablero disponible.

La ludoteca desea recoger de forma organizada la información correspondiente a todos los juegos 
de los que dispone. Para cada uno de ellos guardará su nombre, descripción, normas del juego, 
origen   y   número   máximo   de   jugadores   que   pueden   participar   en   una   partida   y   precio   de 
inscripción por jugador. Además, para aquellos juegos en los que el azar no es factor decisivo, se 
desea incluir una característica adicional que indique si el juego es considerado deporte o no. 
También, dependiendo del tipo de juego, se deberá guardar información propia de cada uno de 
ellos, tal como: el tamaño del tablero de parchís (para 4 jugadores o para 6), el número de 
columnas y filas del sudoku, si el crucigrama es por sílabas o por letras, el nivel de dificultad de 
la sopa de letras (alto, medio o bajo)  y para el ajedrez el tiempo máximo que puede emplear cada 
jugador para hacer un movimiento.

Cuando un cliente de la ludoteca desea participar en algún juego, debe inscribirse adecuadamente 
y pagar la cuota de inscripción correspondiente. El precio de inscripción en los juegos de azar es 
de 0.5 euros por jugador. Para los juegos que no son de azar, se establece una cuota de 1 euro si 
no son considerados deporte y de 2 euros en el caso contrario. El precio total de una partida se 
calculará multiplicando el valor de la inscripción por el número de jugadores.

Se pide:

­ Establecer en un diagrama UML una jerarquía que represente los objetos que se han 
descrito en el enunciado. Situar de forma correcta los atributos y operaciones de tal 
manera que se fomente la compartición de la información. Marcar las clases abstractas 
con línea discontinua. Para que el diagrama no sea muy grande, indicar todos los atributos 
de las clases, pero SÓLO las operaciones imprescindibles para esta aplicación y NO 
incluyáis las interfaces.
­ Implementar el método calcularPrecio que devuelve el precio total de una partida para 
cada tipo de juego ofrecido por la ludoteca, suponiendo que en ella participa el número 
máximo de jugadores. Indica para cada clase el código que le corresponde.
­ Implementar el método calcularPrecioTotal, que calcula el importe recaudado por la 
ludoteca cuando todos los juegos disponibles están siendo utilizados por el número 
máximo de jugadores. 

10
PROGRAMACIÓN II Programación Orientada a Objetos en Java
Ejercicios – 5

­ Este año, y con motivo del aniversario de la creación de la ludoteca, se desea celebrar un 
campeonato de juegos de naipes. Para ello, se está organizando partidas teniendo en 
cuenta las barajas disponibles y el número máximo de jugadores que pueden participar en 
cada juego. Los puntos apostados por los jugadores durante la partida se irán acumulando 
en un atributo del juego que al comenzar estará inicializado con el valor cero. En los 
juegos de naipes se guardan, además de la información propia del juego, los nombres de 
los jugadores y la cantidad de puntos apostados.
Teniendo en cuenta las características descritas para este campeonato, se pide:
o Amplía la jerarquía de juegos previamente descrita para poder representar los juegos 
de naipes. 
o Implementar un método que, para cada juego de naipes muestre el nombre del juego, 
los nombres de los jugadores que han participado en la partida y el número total de 
puntos apostados en la misma. Implementad un método que imprima la información de 
todas las partidas del campeonato ordenada por nombre del juego. Si hay varias 
partidas del mismo juego, éstas se ordenan en función del número de puntos 
apostados.

14. Agencia de Seguros

Se desea diseñar una aplicación que gestione los seguros de una empresa del ramo. Cada seguro 
estará identificado por un código, el nombre y DNI del tomador y debe representar el precio base 
y el agente que lo gestiona. Entre los seguros que oferta la compañía los más extendidos son los 
seguros de vehículos los cuales se caracterizan por la matricula y el año de fabricación del 
vehiculo. Existen seguros para vehículos particulares y para vehículos comerciales. En los 
primeros es imprescindible conocer la edad del conductor así como la potencia del vehículo. Entre 
los vehículos particulares (coches y motos), los seguros de moto tienen un complemento de 
peligrosidad al precio base. También existen seguros para vehículos comerciales, en concreto para 
furgonetas y camiones. En un seguro para vehiculo comercial se debe indicar el NIF de la 
empresa, su sede y dedicación. Para los camiones un factor a tener en cuenta es el peso máximo 
autorizado. Otra rama de seguros son los seguros de locales. Para una casa particular, se tiene en 
cuenta si el barrio en que se encuentra es peligroso o no. En caso de un barrio peligroso el precio 
se duplica. Para los locales comerciales se debe conocer el NIF de la empresa, su sede y 
dedicación. La última rama que se gestiona son los seguros de vida, en los cuales se ha de 
representar la edad del tomador del seguro, complemento de estado de salud y si pertenece a la 
mafia o no. El precio de los seguros de vida se calcula de multiplicando la edad por el 
complemento de salud y sumando 60000 euros si el tomador del seguro pertenece a la mafia. 
Finalmente, en las clases que corresponda, se deberá definir una operación para mostrar los datos 
del tomador del seguro  y otra para mostrar los datos de la empresa relacionada.

Se pide:

− Establecer en un diagrama UML una jerarquía que represente los objetos que 
se han descrito en el enunciado. Situar de forma correcta los atributos y 
operaciones de tal manera que se fomente la compartición de la información. 
Marcar las clases abstractas con línea discontinua. Para que el diagrama no sea 
muy grande, indicar todos los atributos de las clases, pero SÓLO las operaciones 
imprescindibles para esta aplicación y NO incluyáis las interfaces.

11
PROGRAMACIÓN II Programación Orientada a Objetos en Java
Ejercicios – 5

− Implementar el método calcularPrecio que devuelve el precio del seguro. 
Indica para cada clase el código que le corresponde.
− Implementar el método calcularPrecioTotal, que calcula el precio 
correspondiente a todos los seguros tramitados por la compañía. 
− En las condiciones del enunciado, identificar dónde es interesante definir una 
interfaz que agrupe comportamiento de clases de diferentes puntos de la 
jerarquía. Define la interfaz y justifica por qué es útil. 
− Implementar el método infoSegurosComerciales, que muestra por pantalla la 
información de todos los seguros contratados por empresas y muestra el número 
de estos seguros que superan los 1000 euros. 

12

You might also like