0% encontró este documento útil (0 votos)
187 vistas

Java II - Ejercicios

Este documento presenta tres ejercicios de programación orientada a objetos en Java. El primer ejercicio trata sobre herencia y sobrescritura al crear clases Electrodomestico y Lavadora. El segundo ejercicio trata sobre composición al crear clases Superheroe, Dimension y Figura. El tercer ejercicio trata sobre clases abstractas al crear una clase abstracta Servicio y clases que heredan de ella. Se proveen detalles sobre los atributos y métodos de cada clase así como instrucciones para probar los ejercicios en una clase

Cargado por

abelhardlife
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
187 vistas

Java II - Ejercicios

Este documento presenta tres ejercicios de programación orientada a objetos en Java. El primer ejercicio trata sobre herencia y sobrescritura al crear clases Electrodomestico y Lavadora. El segundo ejercicio trata sobre composición al crear clases Superheroe, Dimension y Figura. El tercer ejercicio trata sobre clases abstractas al crear una clase abstracta Servicio y clases que heredan de ella. Se proveen detalles sobre los atributos y métodos de cada clase así como instrucciones para probar los ejercicios en una clase

Cargado por

abelhardlife
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 29

Java II - Ejercicios

Ejercicios adicionles de Java P.O.O.

1. Ejercicio de Herencia y Sobreescritura.


Suponga que debe programar una aplicación para una empresa dedicada a la venta y
montaje de electrodomésticos. Esta aplicación necesitará controlar las características
que definen un electrodoméstico.

Dentro de nuestro proyecto “FormacionJava” creamos un nuevo paquete


“EjercicioElectrodomesticos”.

Para este ejercicio, vamos a crear la clase Electrodomestico, que nos servirá de clase
padre.

Esta clase Electrodomestico tendrá los siguientes atributos privados:

• tipo (String que indica el tipo de electrodoméstico que es una nevera, un horno,
una lavadora, etc.)

• marca (String que indica la marca del electrodoméstico)

• potencia (decimal que indica la potencia de consumo en kW por hora)

Se deben crear los siguientes métodos:

• Constructor vacío, constructor de copia y constructor de parámetros

• Métodos setters/getters para asignar y obtener los datos de los atributos.

• Crear el método toString de forma que devuelva una cadena con todas las
características del electrodoméstico.

• Método getConsumo(int horas): Este método recibirá una cantidad de horas de


funcionamiento y devolverá el total de kW consumido por el electrodoméstico
en ese tiempo, es decir, potencia * horas;

• Método getCosteConsumo(int horas, double costeHora): Este método recibirá


una cantidad de horas, así como el precio del kW/hora y devolverá el coste total
por el consumo del electrodoméstico en ese tiempo, es decir,
getConsumo(horas) * costeHora;

Ahora, vamos a crear una clase llamada Lavadora, que será nuestra clase hija, ya que
hereda de nuestra clase Electrodomestico.

1
Esta clase tendrá las propiedades de un electrodoméstico y además los siguientes
atributos privados:

• precio (double). Es el precio correspondiente al precio de la lavadora)

• aguaCaliente (boolean). Indica que la lavadora está funcionando con agua


caliente (true) o fría (false).

Se deben crear los siguientes métodos:

• Constructor vacío, constructor de copia y constructor de parámetros

• Métodos setters/getters para asignar y obtener los datos de los atributos.

• Crear el método toString para que devuelva una cadena con todas las
características de la lavadora.

• Método getConsumo(int horas): Debemos de sobrescribir este método, ya que


el cálculo del consumo de una lavadora depende no solo de las horas de
funcionamiento, sino también del modo de funcionamiento. Así pues:

• Si la lavadora está funcionando con agua fría, el consumo es: potencia *


horas.

• Si la lavadora está funcionando con agua caliente, el consumo es:

• horas * (potencia + potencia * 0,20)

• Método getCosteConsumo (int horas, double costeHora): Este método no


necesita ser sobrescrito ni creado de nuevo ya que se hereda de la clase
Electrodomestico, por lo que debería funcionar correctamente.

Por último, una vez creadas las clases anteriores, vamos a crear una nueva clase
llamada AppElectrodomesticos con un método main para poder crear las distintas
instancias de las clases y así poder probar los métodos creados.

En esta clase, dentro del método main, vamos a realizar lo siguiente:

1. Creamos dos constantes:

a. HORAS = 10;

b. PRECIO_KWH = 0.5;

2. Creamos una instancia de tipo Electrodomestico usando el constructor vacío y


luego asigna valores a sus atributos de la siguiente forma: tipo “Frigorifico”,
marca “Balay” y potencia 0.67.

2
3. Creamos una instancia de tipo Lavadora usando el constructor de parámetros.
Datos para la nueva instancia: (“Lavadora”, “Zanussi”, 0.5, 595.0, false).

4. Creamos una instancia de tipo Lavadora usando el constructor de parámetros.


Datos para la nueva instancia: (“Lavadora”, “Zanussi”, 0.5, 490.0, true).

5. Ahora vamos a calcular el consumo y coste del consumo para cada uno de los
electrodomésticos creados anteriormente y mostrar por pantalla, la información
de cada uno como las cantidades calculadas.

Resultado esperado:

2. Ejercicio de Composición.
Se pide realizar una aplicación para una empresa que vende figuras de superhéroes.
Para ello, tendrá que modelar todos los datos relativos a estas figuras.

Dentro de nuestro proyecto “FormacionJava” creamos un nuevo paquete


“EjercicioFigurasSuperheroes”.

Para este ejercicio, vamos a crear distintas clases, la primera clase será Superheroe,
que definirá las características de un superhéroe.

Esta clase Superheroe tendrá los siguientes atributos o propiedades privados:

• nombre (String que indica el nombre del superhéroe)

• descripcion (String que describir brevemente su aspecto)

• capa (boolean que indica si el superhéroe lleva o no capa)

Se deben crear los siguientes métodos:

• Constructor vacío y constructor de parámetros

3
• Métodos setters/getters para asignar y obtener los datos de los atributos.

• Crear el método toString de forma que devuelva una cadena con todas las
características del superhéroe.

También vamos a crear la clase Dimension, que define un grupo de medidas de un


objeto.

Esta clase Dimension tendrá los siguientes atributos o propiedades privados:

• alto (double, medida correspondiente al alto del objeto)

• ancho (double, medida correspondiente al ancho del objeto)

• profundidad (double, medida correspondiente a la profundidad del objeto)

Se deben crear los siguientes métodos:

• Constructor vacío donde inicialicemos los atributos a 0, y constructor de


parámetros

• Métodos setters/getters para asignar y obtener los datos de los atributos.

• Crear el método toString de forma que devuelva una cadena con el alto, ancho,
profundidad y volumen máximo del objeto.

• Método getVolumen(): Este método devuelve el volumen máximo que ocuparía


el objeto (alto x ancho x profundidad).

La segunda clase que vamos a crear será la clase Dimension, que define un grupo de
medidas de un objeto.

Esta clase Dimension tendrá los siguientes atributos o propiedades privados:

• alto (double, medida correspondiente al alto del objeto)

• ancho (double, medida correspondiente al ancho del objeto)

• profundidad (double, medida correspondiente a la profundidad del objeto)

4
Se deben crear los siguientes métodos:

• Constructor vacío, constructor de copia y constructor de parámetros

• Métodos setters/getters para asignar y obtener los datos de los atributos.

• Crear el método toString de forma que devuelva una cadena con el alto, ancho,
profundidad y volumen máximo del objeto.

• Método getVolumen(): Este método devuelve el volumen máximo que ocuparía


el objeto (alto x ancho x profundidad).

La tercera clase que vamos a crear será la clase Figura, que representa una figura de
un superhéroe.

Esta clase Figura tendrá los siguientes atributos o propiedades privados:

• codigo (String, código identificativo formado por letras y números, y dos figuras
distintas no tendrán el mismo código.)

• precio (double, que será el precio de la figura)

• dimensión (objeto de tipo Dimension, que defina las dimensiones de la figura)

• superheroe (objeto de tipo Superheroe que defina las características del


superhéroe representado)

Se deben crear los siguientes métodos:

• Constructor vacío, constructor de copia y constructor de parámetros

• Métodos setters/getters para asignar y obtener los datos de los atributos.

• Crear el método toString de forma que devuelva una cadena con todas las
características de la figura.

• Método subirPrecio(double cantidad): Este método subirá el precio actual de la


figura en la cantidad indicada como parámetro.

Por último, una vez creadas las clases anteriores, vamos a crear una nueva clase
llamada AppFigurasSuperheroes con un método main para poder crear las distintas
instancias de las clases y así poder probar los métodos creados.

En esta clase, dentro del método main, vamos a realizar lo siguiente:

1. Creamos un array de tipo Figura para poder guardar todas las figuras de
superhéroes que vamos a crear.

5
2. Creamos cuatro instancias de tipo Superheroe con los distintos superhéroes y
mostramos por consola el listado de los distintos superhéroes creados.
3. Creamos dos instancias de tipo Dimension para poder dar dimensión a las
distintas figuras de los distintos superhéroes.

dimPeq = (20,5,6);

dimGra = (70, 20, 20);

4. Creamos cuatro instancias de tipo Figura para crear nuestras figuras de


nuestros superhéroes, es decir, para cada instancia de tipo Figura le asignamos
una instancia de tipo Superheroe y una instancia de tipo Dimension creadas
previamente, de tal forma que tengamos cuatro figuras distintas con los cuatro
superhéroes distintos.

5. Guardamos en nuestro array las distintas figuras creadas anteriormente.

6. Mostramos por consola un primer listado con el nombre, precio y volumen de


todas las figuras creadas.

7. Actualizamos el precio de todas las figuras incrementando su valor en 10€.

8. Mostramos de nuevo por consola un segundo listado con el nombre y el precio


actual de todas las figuras.

Resultado esperado:

6
3. Ejercicio de Clases Abstractas.

Se va a realizar una aplicación que controle los servicios que realiza una empresa de
mantenimiento. Estos servicios son muy variados, pero todos ellos comparten una
serie de características comunes. Así pues, se pide que programe una clase abstracta
llamada Servicio que especificará esas características comunes y que servirá para
crear, a través de herencia, las distintas clases de servicios que ofrece la empresa.

Dentro de nuestro proyecto “FormacionJava” creamos un nuevo paquete


“EjercicioEmpresaMantenimiento”.

Para este ejercicio, vamos a crear distintas clases, la primera clase a crear será la
clase abstracta Servicio, que especificará las características comunes que tendrán
los distintos servicios de nuestra empresa de mantenimiento.

Esta clase abstracta Servicio tendrá las siguientes propiedades privadas:

• trabajador (String, con el nombre y apellidos del trabajador que realiza el


servicio)

• fechaInicio (Date, con la fecha de inicio del servicio)

• cliente (String, nombre y apellidos del cliente o nombre de la empresa cliente)

Se deben crear los siguientes métodos:

• Constructor vacío y constructor de parámetros

• Métodos setters/getters para asignar y obtener los datos de los atributos.

Además, un servicio siempre debe tener programados los siguientes métodos:

• double costeMaterial(): Este método calculará el total gastado en material.

• double costeManoObra(): Este método calculará el total gastado en mano de


obra.

• double costeTotal(): Este método calculará el coste total del servicio.

• String detalleServicio(): Este método devolverá una cadena con información


detallada de lo que ha costado el Servicio.

La segunda clase que vamos a crear será la clase TrabajoPintura, que describirá un
trabajo de pintura (pintar una casa, una habitación, etc…), heredará de la clase
Servicio y tendrá las siguientes propiedades (además de las que hereda de la clase
Servicio):

7
• superficie (double, superficie a pinta en m2)

• precioPintura (double, precio del litro de pintura.

Se deben crear los siguientes métodos:

• Constructor vacío, constructor de copia y constructor de parámetros

• Métodos setters/getters para asignar y obtener los datos de los atributos.

Además, debemos sobrescribir todos los métodos abstractos heredados de la clase


Servicio, dándoles un significado según la siguiente especificación:

• double costeMaterial(): Según nos indica el cliente, el coste de material se


calcula con la siguiente fórmula: Coste_material = (Superficie / 7.8) *
PrecioPintura;

• double costeManoObra(): Según nos indica el cliente, el coste de mano de obra


se calcula con la siguiente fórmula: Coste_mano_obra = (Superficie / 10) * 9.5;

• double costeTotal(): Según nos indica el cliente, el coste total del servicio se
calcula así: Coste_total = coste_material + coste_mano_obra;

Hay que tener en cuenta que cuando la superficie a pintar es de menos de 50


metros cuadrados se añade un coste adicional del 15% sobre el anterior coste.

• String detalleServicio(): Este método devolverá un resumen del servicio con la


siguiente estructura:

8
Por último, una vez creadas las clases anteriores, vamos a crear una nueva clase
llamada AppEmpresaServicios con un método main para poder crear las distintas
instancias de las clases y así poder probar los métodos creados.

En esta clase, dentro del método main, vamos a realizar lo siguiente:

1. Creamos distintas instancias para distintos trabajos de pintura y revisiones de


alarmas.

TrabajoPintura ("Antonio", "2022-9-10", "Seguros Martínez", 20, 4);

TrabajoPintura ("Ana", "2022-8-8", "Fruteria La Pera", 10, 3);

TrabajoPintura ("Juan", "2022-9-30", "Restaurante El Boqueron", 200, 2.5);

RevisionAlarma ("2022-8-6", "Colegio Santa Maria", 34);

RevisionAlarma ("2022-10-1", "Hotel Las Palmeras", 70);

2. Mostramos en pantalla el resumen detallado de cada uno de esos trabajos


anteriores.

3. Por último, sacamos por consola la suma de los costes de todos los trabajos y
también lo que se tiene que pagar en total en sueldos por esos trabajos
realizados.

Resultado esperado:

9
NOTA: Para dar formato a los importes y que aparezcan sólo con dos cifras puedes
usar lo siguiente:

DecimalFormat formato = new DecimalFormat("#.00");

…………..

"TOTAL: " + formato.format(costeTotal()) + "€\n"

O la siguiente opción:

System.out.printf("%.2f€ %n", costeTotal);2

4. Ejercicio de Interface.
Vamos a hacer una aplicación o programa que gestione el uso de unos vehículos, ya
sean coches como motos.

Para este ejercicio, vamos a crear en el paquete anterior “EjerciciosInterfaces” una


interface llamada IVehiculo.

La interface IVehiculo tendrá:

• La constante VELOCIDAD_MAX para el guardar el valor 120, que será la


velocidad máxima para los vehículos.

Además, esta interface tendrá los siguientes métodos abstractos:

• Método String frenar(int cuanto);

• Método String acelerar(int cuanto);

10
A continuación, en el mismo paquete, vamos a crear una nueva clase abstracta
llamada Vehiculos que implemente de la interface IVehiculo.

La clase Vehiculos tendrá:

• El atributo privado velocidad de tipo int

Para esta clase Vehiculos, se deben crear los siguientes métodos:

• Constructor vació y de copia

• Métodos setters/getters

• Dejamos como abstractos los métodos frenar(int cuanto) y acelerar(int cuanto)


que vienen dados por la interface.

A continuación, en el mismo paquete, vamos a crear una nueva clase llamada Coche
que extiende de la clase Vehiculos.

Para esta clase Coche, se deben crear los siguientes métodos:

• Constructor vació y de copia

• Implementar el método frenar(int cuanto) que viene dado por la interface,


dicho método recibe como parámetro un valor que debemos decrementar al
atributo velocidad y devolverá el mensaje "El coche ha frenado ya y va a " +
velocidad + " km/hora".

• Implementar el método acelerar(int cuanto) que viene dado por la interface,


dicho método recibe como parámetro un valor que debemos incrementar al
atributo velocidad, además comprobamos si hemos pasado de la velocidad
máxima para devolver el mensaje "Exceso de velocidad. El coche ha acelerado y
va a " + velocidad + " km/hora " y sino ha excedido devolver el mensaje "El coche
ha acelerado y va a " + velocidad + " km/hora".

A continuación, en el mismo paquete, vamos a crear una nueva clase llamada Moto
que extienda de la clase Vehiculos.

Para esta clase Moto, se deben crear los siguientes métodos:

• Constructor vació y de copia

• Implementar el método frenar(int cuanto) que viene dado por la interface,


dicho método recibe como parámetro un valor que debemos decrementar al
atributo velocidad y devolverá el mensaje "La moto ha frenado ya y va a " +
velocidad + " km/hora";

11
• Implementar el método acelerar(int cuanto) que viene dado por la interface,
dicho método recibe como parámetro un valor que debemos incrementar al
atributo velocidad, además comprobamos si hemos pasado de la velocidad
máxima para devolver el mensaje "Exceso de velocidad. La moto ha acelerado y
va a " + velocidad + " km/hora" y sino ha excedido devolver el mensaje "La moto
ha acelerado y va a " + velocidad + " km/hora"

Por último, una vez creadas las clases anteriores, vamos a crear una nueva clase
llamada UsoVehiculo con un método main para poder probar.

En esta clase UsoVehiculo, vamos a realizar lo siguiente dentro del método main:

• Creamos una instancia de tipo Coche con una velocidad de 100, es decir,
asignamos a su atributo el valor de 100.

• Vamos a acelerar el coche en 30, es decir, sobre la instancia anterior llamamos


al método acelerar y le pasamos el valor 30.

• Vamos a frenar el coche en 10, es decir, sobre la instancia anterior llamamos al


método frenar y le pasamos el valor 10.

• Creamos una instancia de tipo Moto con una velocidad de 80, es decir,
asignamos a su atributo el valor de 80.

• Vamos a acelerar la moto en 30, es decir, sobre la instancia anterior llamamos al


método acelerar y le pasamos el valor 30.

• Vamos a frenar la moto en 10, es decir, sobre la instancia anterior llamamos al


método frenar y le pasamos el valor 10.

Resultado esperado:

5. Ejercicio de Interfaces y Polimorfismo.


Suponga que debe crear distintas clases Java para escribir los productos que vende
un supermercado. Para unificar el código de los distintos programadores del equipo
debe crear las siguientes Interfaces Java para describir algunas características de los
productos.

12
Dentro de nuestro proyecto “FormacionJava” creamos un nuevo paquete
“EjercicioSupermercado”, y en él vamos a ir creando las distintas interfaces y
clases.

La primera interface que vamos a crear será la interface EsLiquido, que indica que los
objetos creados a partir de ella serán líquidos, y tendrá los siguientes métodos:

• public void setVolumen(double v);

• public double getVolumen();

• public void setTipoEnvase(String env);

• public String getTipoEnvase();

La segunda interface que vamos a crear será la interface EsAlimento, que indica que
los objetos creados a partir de ella serán alimentos, y tendrá los siguientes métodos:

• public void setCaducidad(LocalDate fc);


• public LocalDate getCaducidad();
• public int getCalorias();

La tercera interface que vamos a crear será la interface ConDescuento, que indicará
que el producto tiene descuento e incluirá los siguientes métodos:

• public void setDescuento(double des);


• public double getDescuento();
• public double getPrecioDescuento();

A continuación, vamos a crear las siguientes clases de productos, cada una de ella
implementará la interface que sea necesaria.

La primera clase que vamos a crear será la clase Detergente, que definirá una botella
de detergente y hay que tener en cuenta que este producto puede tener descuento.
Sus propiedades principales son las siguientes:
• marca (String)
• precio (double)

Se deben crear los siguientes métodos:

• Constructor vacío y constructor de parámetros

• Métodos setters/getters para asignar y obtener los datos de los atributos.

13
• Método toString para que muestre todas las características del producto

• Debe implementar los métodos dados por las interfaces, y si es necesario, añada
más propiedades a la clase.

La segunda clase que vamos a crear será la clase Cereales, que definirá una caja de
cereales y este producto no tiene descuento. Sus propiedades principales son las
siguientes:
• marca (String)
• precio (double)
• tipoCereal (String)

Se deben crear los siguientes métodos:

• Constructor vacío y constructor de parámetros


• Métodos setters/getters para asignar y obtener los datos de los atributos.

• Método toString para que muestre todas las características del producto

• Debe implementar los métodos dados por las interfaces, y si es necesario, añada
más propiedades a la clase. Debes tener en cuenta, que las calorías serán las
siguientes: 5 si el cereal es espelta, 8 si es maíz, 12 si es trigo, y 15 en los demás
casos.

La tercera clase que vamos a crear será la clase Vino, que definirá una botella de vino
y este producto puede tener descuento. Sus propiedades principales son las
siguientes:

• marca (String)
• precio (double)
• tipoVino (String)
• gradosAlcohol ()

Se deben crear los siguientes métodos:

• Constructor vacío y constructor de parámetros

• Métodos setters/getters para asignar y obtener los datos de los atributos.


• Método toString para que muestre todas las características del producto

• Debe implementar los métodos dados por las interfaces, y si es necesario, añada
más propiedades a la clase. Debes tener en cuenta, que las calorías se
calcularán multiplicando por 10 la graduación alcohólica.

14
Por último, una vez creadas las interfaces y clases anteriores, vamos a crear una
nueva clase llamada AppSupermercado con un método main para poder probar.

En esta clase AppSupermercado, vamos a realizar lo siguiente dentro del método


main para probar las clases creadas:

• Creamos distintas instancias de los distintos tipos de productos que podemos


tener.

Detergente("Limpiamas", 2.5, 33,"Botella de plástico", 2);

Cereales("Crunchy","Espelta",3.0,LocalDate.of(2022, 8, 2));

Vino("Plimplar","Tinto", 12.0, 8.0, 330, "Botella de cristal", LocalDate.of(2023, 7,


12), 5);
• Mostramos por consola la información o detalle de cada uno de los productos
que hemos creado.
• Mostrar por consola la suma o precio total de todos los productos creados.

• Para hacer un ejemplo de polimorfismo, podemos crear un ArrayList de


productos alimenticios, calcular la suma de sus calorías y mostrarlo por pantalla.

Resultado esperado:

6. Ejercicio de Colecciones.
Para este ejercicio vamos a continuar o reutilizar el ejercicio 2, donde se pedía
realizar una aplicación para una empresa que vende figuras de superhéroes. En este
ejercicio ya creamos las clases Superheroe, Dimension y Figura, que ahora vamos a
reutilizar.

Dentro de nuestro proyecto “FormacionJava” en el paquete


“EjercicioFigurasSuperheroes”, vamos a crear una nueva clase llamada Colección,
ya que la empresa vende a veces colecciones de figuras, que básicamente son
conjuntos de figuras con una temática relacionada.

15
Por ejemplo, una colección “El Hombre Murciélago” que consta de una serie de
figuras relacionadas con Batman, o una colección “Marvel”, con figuras de
superhéroes de Marvel, etc.

Esta lase Coleccion, tendrá las siguientes propiedades:


• nombreColeccion (String, que será el nombre de la colección, por ejemplo, “El
Hombre Murciélago”, “Marvel”, etc..)
• listaFiguras (arrayList de tipo Figura, que contendrá las distintas figuras que
forman la colección)

Se deben crear los siguientes métodos:

• Constructores que necesites

• Métodos setters/getters para asignar y obtener los datos de los atributos.


• Método toString(): Modificar o sobreescribir el método de tal forma que
devuelva una cadena con el listado de todas las figuras de la colección con
todas las características de cada una.

• Método incluirFigura(Figura fig): Este método recibe como parámetro una


figura y la añada al listado de figuras de la colección.

• Método subirPrecio(double cantidad, Sting id): Este método recibe como


parámetros una cantidad de dinero y el identificador de una de las figuras de la
colección. El método subirá el precio de dicha figura en la cantidad pasada
como parámetro.
• Método conCapa(): Este método devuelve una cadena con el listado de aquellas
figuras de la colección que tengan capa.
• Método masValioso(): Este método devuelve la figura que tenga el precio
mayor de la colección.
• Método getValorColeccion(): Este método devuelve el precio total de la
colección, es decir, la suma de los precios de cada figura de la colección.
• Método getVolumenColeccion(): Este método devuelve un double con el
volumen aproximado que ocuparía toda la colección de figuras. Para hacer este
cálculo se deben sumar los volúmenes de cada figura, y añadirle al resultado el
valor 200.

Por último, vamos a crear una nueva clase AppColeccionFigurasSuperheroes con


un método main para poder crear las distintas instancias de las clases y así poder
probar los métodos creados.

16
En esta clase, dentro del método main, vamos a realizar lo siguiente:

1. Creamos cinco instancias de tipo Superheroe con los distintos superhéroes


propuestos a continuación:

“Spiderman" - "Puede volar y lanza rayos por los ojos"

"Batman" - "Tiene los poderes de un murciélago"

"Ironman" - "Superhéroe con traje de metal capaz de volar"

"Thor" - "Dios del trueno"

"Hulk" - "Una bestia verde con superfuerza"

2. Creamos dos instancias de tipo Dimension para poder dar dimensión a las
distintas figuras de los distintos superhéroes.

dimPeq = (20,5,6);

dimGra = (70, 20, 20);

3. Creamos cinco instancias de tipo Figura para crear nuestras figuras de nuestros
superhéroes, es decir, para cada instancia de tipo Figura le asignamos una
instancia de tipo Superheroe y una instancia de tipo Dimension creadas
previamente, de tal forma que tengamos cinco figuras distintas con los cinco
superhéroes distintos.

Figura figSpiderman = new Figura("super-01", 30.0, superman, dimPeq);

Figura figBatman = new Figura("bat-02", 30.0, batman, dimPeq);


Figura figIronman = new Figura("iron-03", 50.0, ironman, dimGra);

Figura figThor = new Figura("thor-01", 50.0, thor, dimGra);


Figura figHulk = new Figura("hulk-01", 50.0, hulk, dimGra);

4. Creamos una instancia de tipo Colesccion con el nombre de “Marvel”.

5. Ahora vamos a añadir a la colección creada antes todas las figuras que sean de
Marvel creadas anteriormente, para ello debemos usar el método incluirFigura.

6. Una vez creada nuestra colección, vamos a subir el precio a la figura de Thor
con un incremento de 20€.

7. Mostramos por consola el contenido de nuestra colección. Usar el método


toString de la clase Coleccion.

8. Una vez que hemos mostrado todo el contenido de nuestra colección, vamos a
sacar el valor y volumen totales de la colección. Usar los métodos
getValorColeccion y getVolumenColeccion

17
También debemos mostrar la figura con más valor de la colección, para ello
podemos usar el método fMasValiosa.

9. También debemos mostrar el listado de las figuras con capa de la colección.


Usa el método conCampa.

10.Por último, debemos sacar un listado de las figuras de la colección ordenada


por nombre y precio.

Para este punto, deberás modificar la clase Figura creada en el ejercicio 2, para
que implemente la interface Comparable y sobrescriba el método compareTo
de tal forma que ordene las figuras en primer lugar por nombre y a nombres
iguales, por precio de menor a mayor.

Resultado esperado:

7. Ejercicio de Polimorfismo y Colecciones.


Para este ejercicio vamos a continuar o reutilizar el ejercicio 3, donde se pedía
realizar una aplicación que controle los servicios que realiza una empresa de
mantenimiento. En este ejercicio ya creamos la clase abstracta Servicio, y las clases
TrabajoPintura y RevisionAlarma, que ahora vamos a reutilizar.

Dentro de nuestro proyecto “FormacionJava” en el paquete


“EjercicioEmpresaMantenimiento”, vamos a crear una nueva clase llamada
AppServicios que nos sirva para probar el concepto de polimorfismo y colecciones,
para ello vamos a realizar los siguiente en el método main de esta clase:

18
1. Creamos varios trabajos de pintura y revisiones de alarmaras.
TrabajoPintura ("Antonio", "2022-9-10", "Seguros Martínez", 20, 4);
TrabajoPintura ("Ana", "2022-8-8", "Fruteria La Pera", 10, 3);
TrabajoPintura ("Juan", "2022-9-30", "Restaurante El Boqueron", 200, 2.5);

RevisionAlarma ("2022-8-6", "Colegio Santa Maria", 34);

RevisionAlarma ("2022-10-1", "Hotel Las Palmeras", 70);

2. Para probar el concepto de polimorfismo y colección, creamos una lista de tipo


Servicio para almacenar todos estos trabajos creados anteriormente.

3. Muestre en pantalla el resumen detallado de cada uno de esos trabajos.

4. Pruebe a calcular la suma de los costes de todos los trabajos. Calcule también lo
que se tiene que pagar en total en sueldos por esos trabajos realizados.

Resultado esperado:

19
8. Ejercicio de Colecciones y Excepciones.
Vamos a crear una aplicación sencilla que permita controlar la ocupación en tiempo
real de un Parking. Todo el control de errores se hará lanzando y capturando
Excepciones.

Dentro de nuestro proyecto “FormacionJava” creamos un nuevo paquete


“EjercicioParking”.

Para este ejercicio, vamos a crear la clase Parking, que va a representar el parking y
las plazas que tenemos para el parking.

Esta clase Parking tendremos los siguientes atributos:


• nombre, String con el nombre del parking
• matriculas, un Map de tipo Integer para la clave y de tipo String para los
elementos, este mapa contendrá las matrículas de los coches aparcados en
cada plaza. Por ejemplo, si el coche con matrícula 1234-KW aparca en la plaza 3,
entonces introduciremos la cadena “1234-KW” con la clave 3.

Se deben crear los siguientes métodos:

• Constructor vacío: En este constructor debemos inicializar nuestro atributo


matriculas creando 10 elementos con las claves del 0 al 9 y con el valor por
defecto “(vacia)” para cada una de esas posiciones, de tal forma que tengamos
un parking de 10 posiciones con todas sus plazas inicialmente vacías.

• public String getNombre(): Devuelve el nombre del parking.


• public String setNombre(): Que modifica el nombre del parking.

• public void entrada(String matricula, int plaza): Este método introduce el


coche con la matricula indicada en la plaza del parking indicada. En este método
tendremos el siguiente control de errores:
- Si la plaza indicada es menor de 0, se lanzará una excepción con el mensaje
“Plaza incorrecta”
- Si la matrícula tiene un tamaño menor de 4 caracteres o es null, se lanzará
una excepción con el mensaje “Matrícula incorrecta”

- Si la plaza ya estuviera ocupada se lanzará una excepción con el mensaje


“Plaza ocupada”

- Si la matrícula existiera dentro del parking se lanzará una excepción con el


mensaje “Matrícula repetida”

20
• public int salida(String matricula): Este método hace que el coche con la
matrícula indicada salga del parking, liberando la plaza correspondiente.
Devolverá el número de la plaza liberada. En este método tendremos el
siguiente control de errores:

Si la matrícula no existe dentro del parking se lanzará una excepción con el


mensaje “Matrícula no existente”

• public int getPlazasTotales(): Este método devuelve las plazas totales del
parking.

• public int getPlazasOcupadas(): Este método devuelve las plazas ocupadas del
parking.

• public int getPlazasLibres(): Este método devuelve las plazas libres del parking.
Pista: Puedes usar el método frequency de Collections, para ello tendrás que
previamente pasar todos los elementos del mapa a una Collection.

• public String toString(): La sobrecarga de este método devolverá una cadena


que contendrá el nombre del parking y un listado de cada plaza y la matrícula
que la ocupa.

Por ejemplo:

También debemos crear la clase ParkingException que construya nuestras propias


excepciones. Esta clase tendrá dos atributos de tipo String, uno con el mensaje y otro
para la matrícula.

Además, tendremos un constructor de parámetros, para que pueda crear una


excepción con un mensaje y una matrícula, de tal forma, que debe contener un
método getMensaje que devuelva el mensaje y otro método getMatricula que
devuelva la matrícula del coche que ha producido el error. Una vez realizada esta
clase, úsela para lanzar las excepciones de la clase Parking.

NOTA: esta clase heredará de la clase Exception

Por último, una vez creadas las clases anteriores, vamos a crear una nueva clase
llamada AppParking con un método main para poder probar, para ello, vamos a
realizar lo siguiente:

21
• Crea un objeto Parking llamado “Parking Centro”.
• Después de crear el objeto Parking, se mostrará al usuario un menú con cuatro
opciones: 1) Entrada de coche y 2) Salida de coche, 3) Mostrar parking y 4) Salir
del programa.
• Se le pedirá al usuario que introduzca un valor entero, entre 1 y 4,
correspondiente a una de las opciones (use la clase Scanner y el método
nextInt). Este menú se pedirá una y otra vez hasta que el usurario elija la opción
4.
Dependiendo de la opción seleccionado por el usuario, pueden ocurrir las
siguientes opciones:

• Opción 1. Entrada de coche

• La opción “Entrada de coche” le pedirá al usuario que introduzca por


teclado la matrícula del coche que entra y la plaza donde se colocará, y a
continuación se introducirá el coche en el parking en dicha plaza
utilizando el método “entrada” creado en la clase Parking. La opción
mostrará luego el número de plazas totales, ocupadas y disponibles
después de la entrada.

• Se capturarán las excepciones si las hubiera, y en ese caso se mostraría el


mensaje de error y la entrada no se llevaría a cabo.

• Opción 2. Salida de coche

• La opción Salida de coche le pedirá al usuario que introduzca por teclado


la matrícula del coche que sale utilizando el método “salida” creado en la
clase Parking y a continuación se mostrarán las plazas totales, libres y
ocupadas del parking después de la salida.

Se capturarán las excepciones si las hubiera, y en ese caso se mostraría el


mensaje de error y la entrada no se llevaría a cabo.

• Opción 3. Mostrar parking

• Esta opción muestra todas las plazas y las matrículas que las ocupan (se
usará el método toString de la clase Parking).

• Opción 4. Salir del programa

• El programa mostrará el menú repetidas veces hasta que se pulse esta


opción.

Mejoras para tener en cuenta: Puedes crear todos los métodos que quieras para
simplificar el código o reutilizar código.

22
Resultado esperado:

• Opción 1 con datos correctos

• Opción 1 con matrícula repetida

23
• Opción 1 con plaza ocupada

• Opción 1 con datos correctos

24
• Opción 3

• Opción 2 con matrícula no existente

25
• Opción 2 con datos correctos

• Opción 3

26
• Opción 4

27
Gracias

También podría gustarte