V2#
Instrucciones#
El parcial consta de 3 puntos donde deben resolver solo 2 de los 3, el tercero es obligatorio y eligen entre el primer y segundo punto, en ambos deben crear el diagrama UML. Responde a cada uno de manera detallada, implementando la solución solicitada en el lenguaje de programación Java. Asegúrate de utilizar los conceptos solicitados en cada pregunta. En el punto 3, incluye un diagrama UML de la solución que propongas.
Punto 1: Herencia, Clases Abstractas e Interfaces#
Objetivo: Implementar un sistema que simule una biblioteca con diferentes tipos de recursos (libros, revistas, y videos) utilizando herencia, clases abstractas e interfaces.
Requerimientos:
Crea una clase abstracta
Recurso
con atributostitulo
yañoPublicacion
, y métodos abstractosprestar()
ydevolver()
.Implementa tres subclases:
Libro
,Revista
yVideo
, cada una con atributos y comportamiento específicos (ej:Libro
tieneautor
,Revista
tieneeditor
,Video
tieneduracion
).Crea una interfaz
Digitalizable
con un métododescargar()
. Implementa esta interfaz en la claseVideo
.En el método
main
, crea un arreglo de diferentes recursos y recorre el arreglo usando polimorfismo para prestar y devolver cada recurso.
Indicaciones adicionales:
En tu implementación, debes manejar correctamente el uso de clases abstractas e interfaces.
Explica cómo el uso de la interfaz
Digitalizable
permite aVideo
tener comportamientos adicionales que no tienen las otras subclases.
Diagrama UML:
Dibuja el diagrama UML de clases que muestre la relación entre Recurso
, Libro
, Revista
, y Video
. Asegúrate de incluir las clases, atributos, métodos, y las relaciones de herencia y uso de la interfaz.
Solución#
Clases#
Show code cell content
interface Digitalizable{
public void descargar();
}
abstract class Recurso{
String titulo;
int añoPublicacion;
String tipo;
public Recurso(String titulo, int añoPublicacion, String tipo){
this.titulo = titulo;
this.añoPublicacion = añoPublicacion;
this.tipo = tipo;
}
abstract public void prestar();
abstract public void devolver();
}
class Libro extends Recurso{
public String autor;
public Libro(String titulo, int añoPublicacion, String autor){
super(titulo, añoPublicacion, "Libro");
this.autor = autor;
}
@Override
public void prestar(){
System.out.print("Prestando %s %s.".formatted(tipo, titulo));
};
@Override
public void devolver(){
System.out.print("Devolviendo %s %s.".formatted(tipo, titulo));
};
}
class Revista extends Recurso{
public String editorial;
public Revista(String titulo, int añoPublicacion, String editorial){
super(titulo, añoPublicacion, "Revista");
this.editorial = editorial;
}
@Override
public void prestar(){
System.out.print("Prestando %s %s de la editorial %s.".formatted(tipo, titulo, editorial));
};
@Override
public void devolver(){
System.out.print("Devolviendo %s %s de la editorial %s.".formatted(tipo, titulo, editorial));
};
}
class Video extends Recurso implements Digitalizable{
public double duracion;
public Video(String titulo, int añoPublicacion, double duracion){
super(titulo, añoPublicacion, "Video");
this.duracion = duracion;
}
@Override
public void prestar(){
System.out.print("Prestando %s %s con duración %.1f.".formatted(tipo, titulo, duracion));
};
@Override
public void devolver(){
System.out.print("Devolviendo %s %s con duración %.1f.".formatted(tipo, titulo, duracion));
};
@Override
public void descargar(){
System.out.print("Descargando ".formatted(tipo));
}
}
Clase de Prueba#
Show code cell content
public class TestPunto1{
public static void main(String[] args){
Libro HarryPotter = new Libro("Harry Potter and the Philosopher's Stone", 1997, "J. K. Rowling");
HarryPotter.prestar();
HarryPotter.devolver();
// System.out.println("");
Revista SOHO = new Revista("SOHO version 1", 2024, "SOHO");
SOHO.prestar();
SOHO.devolver();
// System.out.println("");
Video HarryPotterMovie = new Video("Harry Potter and the Sorcerer's Stone.", 2001, 152);
HarryPotterMovie.prestar();
HarryPotterMovie.devolver();
HarryPotterMovie.descargar();
}
}
new TestPunto1.main(null);
| new TestPunto1.main(null);
cannot find symbol
symbol: class main
Diagrama UML#

Punto 2: Diagramas UML y Aplicación Completa#
Objetivo:
Desarrollar una solución completa para un sistema que gestione diferentes tipos de electrodomésticos utilizando herencia e interfaces. Luego, realizar el diagrama UML de clases correspondiente.
Requerimientos:
Crea una clase
Electrodomestico
con los atributosmarca
,modelo
yconsumoEnergetico
.Crea dos subclases:
Lavadora
yRefrigerador
.Lavadora
tiene un atributo adicionalcapacidadCarga
, yRefrigerador
tiene el atributovolumen
.Crea una interfaz
Operable
que tenga el métodoencender()
. TantoLavadora
comoRefrigerador
deben implementar esta interfaz.En el método
main
, crea instancias deLavadora
yRefrigerador
, y utiliza polimorfismo para invocar el métodoencender()
.
Diagrama UML:
Dibuja el diagrama UML de clases que muestre la relación entre Electrodomestico
, Lavadora
, Refrigerador
y la interfaz Operable
. Asegúrate de incluir las clases, atributos, métodos, y las relaciones de herencia e implementación de la interfaz.
Solución#
Clases e Interfaces#
Show code cell content
interface Operable{
public void encender();
}
class Electrodomestico implements Operable{
String marca;
String modelo;
double consumoEnergetico;
public Electrodomestico(){};
public Electrodomestico(String marca, String modelo, double consumoEnergetico){
this.marca = marca;
this.modelo = modelo;
this.consumoEnergetico = consumoEnergetico;
}
public void encender(){
System.out.print("El electrodomestico de marca %s, modelo %s, esta ENCENDIDO y tiene un consumo energético de %.0f W.".formatted(marca, modelo, consumoEnergetico));
};
public static void main(String[] args){
Electrodomestico microondas = new Electrodomestico("Electrolux", "EMDO17S3GSLUW", 700);
microondas.encender();
Refrigerador nevera = new Refrigerador("LG", "334 LT Door", 27.9, 334);
nevera.encender();
Lavadora lavadora = new Lavadora("Samsung", "WF22R6270AW/CO", 1.5, 22);
lavadora.encender();
}
}
class Lavadora extends Electrodomestico{
int capacidadCarga;
public Lavadora(String marca, String modelo, double consumoEnergetico, int capacidadCarga){
super(marca, modelo, consumoEnergetico);
this.capacidadCarga = capacidadCarga;
}
public void encender(){
System.out.print("La lavadora de marca %s, modelo %s, esta ENCENDIDO. Tiene un consumo energético de %.0f KWh/mes y una capacidad de caga de %d Kg.".formatted(marca, modelo, consumoEnergetico, capacidadCarga));
};
}
class Refrigerador extends Electrodomestico{
int volumen;
public Refrigerador(String marca, String modelo, double consumoEnergetico, int volumen){
super(marca, modelo, consumoEnergetico);
this.volumen = volumen;
}
public void encender(){
System.out.print("El refrigerador de marca %s, modelo %s, esta ENCENDIDO. Tiene un consumo energético de %.0f y un volumen de %d m^3.".formatted(marca, modelo, consumoEnergetico, volumen));
};
}
Prueba#
Show code cell content
Electrodomestico pruebaElectrodomestico = new Electrodomestico();
pruebaElectrodomestico.main(null);
El electrodomestico de marca Electrolux, modelo EMDO17S3GSLUW, esta ENCENDIDO y tiene un consumo energético de 700 W.
El refrigerador de marca LG, modelo 334 LT Door, esta ENCENDIDO. Tiene un consumo energético de 28 y un volumen de 334 m^3.
La lavadora de marca Samsung, modelo WF22R6270AW/CO, esta ENCENDIDO. Tiene un consumo energético de 2 KWh/mes y una capacidad de caga de 22 Kg.
Diagrama UML#

Punto 3: De Diagrama UML a Código#
Implementen el código del siguiente diagrama UML de clases

Solución#
Clases#
Show code cell content
import java.util.Date;
class Employee{
private String name;
private Date started;
public Employee(String name, String started){
this.name = name;
this.started = new Date(started);
}
public void setName(String name){
this.name = name;
}
public void setStarted(String started){
this.started = new Date(started);
}
}
class FullTimeEmployee extends Employee{
private int pensiontier;
public FullTimeEmployee(String name, String started, int pensiontier){
super(name, started);
this.pensiontier = pensiontier;
};
public void setPensionTier(int pensiontier){
this.pensiontier = pensiontier;
}
}
class PartTimeEmployee extends Employee{
private int hoursworked;
public PartTimeEmployee(String name, String started, int hoursworked){
super(name, started);
this.hoursworked = hoursworked;
};
public void setHoursWorked(int hoursworked){
this.hoursworked = hoursworked;
}
}
Clases de Prueba#
Show code cell content
// probando clases
Employee sebas = new Employee("Sebastian", "05/05/2024");
FullTimeEmployee sebas = new FullTimeEmployee("Sebastian", "05/05/2024", 1);
PartTimeEmployee sebas = new PartTimeEmployee("Sebastian", "05/05/2024", 20);