Solución Taller#
1. Ejercicio 1: Creación de Clases y Objetos#
Crear una clase para algo que te guste mucho (película, carros, motos, anime, música, etc) y agrega al menos 5 atributos relacionados. Implementar métodos para establecer y obtener estos valores.
class Anime{
private int capitulos;
private String titulo;
private int año_lanzamiento;
private boolean finalizado;
private double calificacion; // sobre 10, según IMDb
private String genero;
public Anime(){}
public Anime(String titulo, int capitulos, int año_lanzamiento, boolean finalizado, double calificacion, String genero){
this.capitulos = capitulos;
this.titulo = titulo;
this.año_lanzamiento = año_lanzamiento;
this.finalizado = finalizado;
this.calificacion = calificacion;
this.genero = genero;
}
public void setCapitulos(int capitulos){
this.capitulos = capitulos;
}
public int getCapitulos(){ return capitulos;}
public void setTitulo(String titulo){
this.titulo = titulo;
}
public String getTitulo(){ return titulo;}
public void setAñoLanzamiento(int año_lanzamiento){
this.año_lanzamiento = año_lanzamiento;
}
public int getAñoLanzamiento(){ return año_lanzamiento;}
public void setFinalizado(boolean finalizado){
this.finalizado = finalizado;
}
public boolean getFinalizado(){ return finalizado;}
public void setCalificacion(double calificacion){
this.calificacion = calificacion;
}
public double getCalificacion(){ return calificacion;}
public void setGenero(String genero){
this.genero = genero;
}
public String getGenero(){ return genero;}
}
// Probando la clase
Anime OnePiece = new Anime();
OnePiece.setTitulo("One Piece");
System.out.println("Titulo: "+OnePiece.getTitulo());
OnePiece.setCalificacion(9);
System.out.println("Calificación: "+OnePiece.getCalificacion());
OnePiece.setCapitulos(1117);
System.out.println("Capitulos: "+OnePiece.getCapitulos());
OnePiece.setAñoLanzamiento(1997);
System.out.println("Año Lanzamiento: "+OnePiece.getAñoLanzamiento());
OnePiece.setFinalizado(false);
System.out.println("Finalizado: "+OnePiece.getFinalizado());
OnePiece.setGenero("Aventura");
System.out.println("Genero: "+OnePiece.getGenero());
System.out.println();
// Ahora usando el constructor
// String titulo, int capitulos, int año_lanzamiento, boolean finalizado, double calificacion
Anime HXH = new Anime("HunterXHunter", 148, 2011, true, 9, "Aventura");
System.out.println("""
Título: %s
Calificación: %.1f
Finalizado: %b
Año Lanzamiento: %d
Capítulos: %d
Género: %s
""".formatted(HXH.getTitulo(), HXH.getCalificacion(), HXH.getFinalizado(),
HXH.getAñoLanzamiento(), HXH.getCapitulos(), HXH.getGenero()));
Titulo: One Piece
Calificación: 9.0
Capitulos: 1117
Año Lanzamiento: 1997
Finalizado: false
Genero: Aventura
Título: HunterXHunter
Calificación: 9.0
Finalizado: true
Año Lanzamiento: 2011
Capítulos: 148
Género: Aventura
Crear una subclase que herede de los atributos y métodos de la clase creada anteriormente. Además, añada un método que imprima un mensaje utilizando los atributos definidos.
class Isekai extends Anime{
public Isekai(String titulo, int capitulos, int año_lanzamiento, boolean finalizado, double calificacion){
super(titulo, capitulos, año_lanzamiento, finalizado, calificacion, "Isekai");
}
public void MostrarInformacion(){
System.out.println("""
El anime de interes es: %s.
Este anime fue lanzado en %d con un total de %d capitulos. Obtuvo una calificación de %.2f en IMBd y pertenece al genero %s.
¿Esta finalizado?: %b.
""".formatted(this.getTitulo().toUpperCase(), this.getAñoLanzamiento(), this.getCapitulos(),
this.getCalificacion(), this.getGenero(), this.getFinalizado()));
}
}
// Probando la clase
Isekai slime = new Isekai("That Time I Got Reincarnated as a Slime", 72, 2022, false, 6.8);
slime.MostrarInformacion();
El anime de interes es: THAT TIME I GOT REINCARNATED AS A SLIME.
Este anime fue lanzado en 2022 con un total de 72 capitulos. Obtuvo una calificación de 6.80 en IMBd y pertenece al genero Isekai.
¿Esta finalizado?: false.
2. Ejercicio 2: Uso de Herencia y Polimorfismo#
Crear una clase
Licores
con un al menos 5 atributos y dos métodos: unoPrecioPorPersona(NoPersonas)
y otro que inventes.
class Licores {
public int volumen;
public String marca;
public String tipo;
public double precio;
public boolean disponible;
public Licores(){}
public Licores(int volumen, String marca, String tipo, double precio, boolean disponible){
this.volumen = volumen;
this.marca = marca;
this.tipo = tipo;
this.precio = precio;
this.disponible = disponible;
}
public double PrecioPorPersona(int NoPersonas){
return precio/NoPersonas;
}
public void MostrarInformacion(int NoPersonas){
System.out.println("""
El licor tiene un volumen de %d mL y cuesta %.1f. Es de marca %s y de tipo %s.
¿Esta disponible? %b
Si se compra entre %d personas, a cada uno le tocaria poner de a %.1f.
""".formatted(volumen, precio, marca, tipo, disponible, NoPersonas, PrecioPorPersona(NoPersonas)));
}
}
// Probando la clase
Licores guaro = new Licores(750, "Antioqueño", "Aguardiente", 49000, true);
guaro.MostrarInformacion(4);
El licor tiene un volumen de 750 mL y cuesta 49000.0. Es de marca Antioqueño y de tipo Aguardiente.
¿Esta disponible? true
Si se compra entre 4 personas, a cada uno le tocaria poner de a 12250.0.
Crear clases derivadas
Pola
,Rones
, y otra que te guste que sobrescriban los métodoPrecioPorPersona(NoPersonas)
y el que agregaste. Implementar una clase de prueba para demostrar el polimorfismo.
class Pola extends Licores{
public Pola(int volumen, String marca, double precio, boolean disponible){
super(volumen, marca, "Cerveza", precio, disponible);
}
@Override
public double PrecioPorPersona(int NoPersonas){
return precio/(NoPersonas+1); // como si alguien pone doble
}
}
class Rones extends Licores{
public Rones(int volumen, String marca, double precio, boolean disponible){
super(volumen, marca, "Ron", precio, disponible);
}
@Override
public double PrecioPorPersona(int NoPersonas){
return 0.9*precio/NoPersonas; // El ron tiene un 10% de descuento (0.9*)
}
}
class Tequila extends Licores{
public Tequila(int volumen, String marca, double precio, boolean disponible){
super(volumen, marca, "Tequila", precio, disponible);
}
@Override
public double PrecioPorPersona(int NoPersonas){
if(NoPersonas < 5){
return 0.8*precio/NoPersonas; // con 20% de descuento
}
else{
return precio/NoPersonas;
}
}
}
class PruebaLicores{
public void main(String[] args){
Pola ClubColombia = new Pola(1000, "Club Colombia", 6000, true);
Rones Caldas = new Rones(750, "Ron Viejo de Caldas Tradicional", 51900, true);
Tequila Newton = new Tequila(750, "TEQUILA NEWTON GOLD", 45900, false);
ClubColombia.MostrarInformacion(5);
// System.out.println();
Caldas.MostrarInformacion(3);
// System.out.println();
Newton.MostrarInformacion(8);
}
}
// Probando la clase de prueba
PruebaLicores prueba = new PruebaLicores();
prueba.main(new String[] {});
El licor tiene un volumen de 1000 mL y cuesta 6000.0. Es de marca Club Colombia y de tipo Cerveza.
¿Esta disponible? true
Si se compra entre 5 personas, a cada uno le tocaria poner de a 1000.0.
El licor tiene un volumen de 750 mL y cuesta 51900.0. Es de marca Ron Viejo de Caldas Tradicional y de tipo Ron.
¿Esta disponible? true
Si se compra entre 3 personas, a cada uno le tocaria poner de a 15570.0.
El licor tiene un volumen de 750 mL y cuesta 45900.0. Es de marca TEQUILA NEWTON GOLD y de tipo Tequila.
¿Esta disponible? false
Si se compra entre 8 personas, a cada uno le tocaria poner de a 5737.5.