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: uno PrecioPorPersona(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étodo PrecioPorPersona(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.