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 cong reso
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. 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).

b) Escribir la especificación del paquete que implementa el tipo correspondiente a 

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. 3. 4.

Implementad el método calcularPrecio en las clases que sea necesario. Implementad el método de la clase VideoClub que muestre el título de las películas que  están actualmente alquiladas. 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. o o Amplía la jerarquía de juegos previamente descrita para poder representar los juegos  de naipes.  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.

Teniendo en cuenta las características descritas para este campeonato, se pide:

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

Sign up to vote on this title
UsefulNot useful