V1#
Punto 1: Clases, Objetos y Pilares de la POO#
Objetivo: Crear una aplicación simple que ilustre los cuatro pilares de la POO: abstracción, encapsulamiento, herencia y polimorfismo. El ejemplo debe estar relacionado con una tienda de libros.
Requerimientos:
Crea una clase o interfaz
Productoque represente los atributos básicos de un producto (nombre, precio, agrega uno más).Crea tres subclases
Libro,Revista,Videoque hereden deProductoy agregue atributos específicos como autor, número de páginas, editorial, volumen, etc. En total cada clase debe tener 2 atributos adicionales.Implementa los conceptos de encapsulamiento en ambas clases (usa
privatepara los atributos y métodosgettersysetters).Usa el polimorfismo en un método
mostrarInfo()que se defina enProductoy sea sobrescrito enLibropara mostrar detalles adicionales.
Indicaciones adicionales:
Explica cómo tu código cumple con los cuatro pilares de la POO.
Implementa un método
maino una clase de prueba en donde crees instancias deProductoyLibro, y utilices polimorfismo para mostrar la información.
Diagrama UML:
Dibuja el diagrama UML de clases que muestre la relación entre Producto, Libro, Revista. 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
abstract class Producto{
private String nombre;
private double precio;
private String tipo;
public Producto(String nombre, double precio, String tipo){
this.nombre = nombre;
this.precio = precio;
this.tipo = tipo;
}
public void setNombre(String nombre){
this.nombre = nombre;
};
public String getNombre(){return nombre;};
public void setPrecio(double precio){
this.precio = precio;
};
public double getPrecio(){ return precio;};
public void setTipo(String tipo){
this.tipo = tipo;
}
public String getTipo(){return tipo;}
public abstract void MostrarInformacion();
}
class Libro extends Producto{
private String autor;
private int no_paginas;
public Libro(String nombre, double precio, String autor, int no_paginas){
super(nombre, precio, "Libro");
this.autor = autor;
this.no_paginas = no_paginas;
}
public void setAutor(String autor){
this.autor = autor;
}
public String getAutor(){
return autor;
}
public void setNoPages(int no_paginas){
this.no_paginas = no_paginas;
}
public int getNoPages(){
return no_paginas;
}
@Override
public void MostrarInformacion(){
System.out.print("""
El producto es de tipo %s, el nombre es %s y cuesta %.1f.
El %s es del autor es %s y el libro tiene %d páginas.
""".formatted(getTipo(), getNombre(), getPrecio(),
getTipo(), autor, no_paginas));
};
}
class Video extends Producto{
private double duracion;
private String formato;
public Video(String nombre, double precio, String formato, double duracion){
super(nombre, precio, "Video");
this.duracion = duracion;
this.formato = formato;
}
public void setDuracion(double duracion){
this.duracion = duracion;
}
public double getDuracion(){
return duracion;
}
public void setFormato(String formato){
this.formato = formato;
}
public String getFormato(){
return formato;
}
@Override
public void MostrarInformacion(){
System.out.print("""
El producto es de tipo %s, el nombre es %s y cuesta %.1f.
El %s dura %.1f minutos y esta en formato %s
""".formatted(getTipo(), getNombre(), getPrecio(),
getTipo(), duracion, formato));
};
}
class Revista extends Producto{
private int volumen;
private String editorial;
public Revista(String nombre, double precio, String editorial, int volumen){
super(nombre, precio, "Revista");
this.editorial = editorial;
this.volumen = volumen;
}
public void setVolumen(int volumen){
this.volumen = volumen;
}
public int getVolumen(){
return volumen;
}
public void setEditorial(String editorial){
this.editorial = editorial;
}
public String getEditorial(){
return editorial;
}
@Override
public void MostrarInformacion(){
System.out.print("""
El producto es de tipo %s, el nombre es %s y cuesta %.1f.
La %s es de la editorial %s y es el volumen %d.
""".formatted(getTipo(), getNombre(), getPrecio(),
getTipo(), editorial, volumen));
};
}
Clase de Prueba#
Show code cell content
class TestPunto1{
public static void main(String[] args){
Libro HarryPoter = new Libro("Harry Potter", 150000, "J. K. Rowling", 223);
HarryPoter.MostrarInformacion();
Video HarryPoterMovie = new Video("Harry Potter", 20000, "MP4", 152);
HarryPoterMovie.MostrarInformacion();
Revista Vogue = new Revista("Vogue", 30000, "Vogue", 1);
Vogue.MostrarInformacion();
}
}
new TestPunto1().main(null);
El producto es de tipo Libro, el nombre es Harry Potter y cuesta 150000.0.
El Libro es del autor es J. K. Rowling y el libro tiene 223 páginas.
El producto es de tipo Video, el nombre es Harry Potter y cuesta 20000.0.
El Video dura 152.0 minutos y esta en formato MP4
El producto es de tipo Revista, el nombre es Vogue y cuesta 30000.0.
La Revista es de la editorial Vogue y es el volumen 1.
Diagrama UML de clases#
Punto 2: Diagramas UML y Aplicación Completa#
Objetivo: Desarrollar una solución completa para un sistema que gestione una flota de vehículos utilizando herencia e interfaces. Luego, realizar el diagrama UML de clases correspondiente.
Requerimientos:
Crea una clase
Vehiculocon los atributosmarca,modelo, yaño.Crea dos subclases:
AutoyMoto.Autotiene atributos adicionales comonumeroDePuertas, yMototienecilindrada.Crea una interfaz
Conducibleque tenga el métodoconducir(). TantoAutocomoMotodeben implementar esta interfaz.En el método
main, crea instancias deAutoyMotoy utiliza polimorfismo para llamar al métodoconducir().
Diagrama UML:
Dibuja el diagrama UML de clases que muestre la relación entre Vehiculo, Auto, Moto, y la interfaz Conducible. Asegúrate de incluir las clases, atributos, métodos, y las relaciones de herencia y uso de la interfaz.
Solución#
Clases e Interfaces#
Show code cell content
class Vehiculo {
public String marca;
public String modelo;
public int año;
public static void main (String[] args){
Auto chevrolet = new Auto();
chevrolet.marca = "Chevrolet";
chevrolet.modelo = "CRUZE";
chevrolet.año = 2015;
chevrolet.numeroDePuertas = 2;
chevrolet.conducir();
Moto pulsar200 = new Moto();
pulsar200.marca = "Pulsar";
pulsar200.modelo = "NS";
pulsar200.año = 2020;
pulsar200.cilindrada = 200;
pulsar200.conducir();
}
}
interface Conducible{
public void conducir();
}
class Auto extends Vehiculo implements Conducible{
public int numeroDePuertas;
@Override
public void conducir(){System.out.println("Conduciendo carro...");};
}
class Moto extends Vehiculo implements Conducible{
public int cilindrada;
@Override
public void conducir(){System.out.println("Conduciendo moto...");};
}
Prueba de Clase#
Show code cell content
new Vehiculo().main(null);
Conduciendo carro...
Conduciendo moto...
Diagrama UML de Clases#
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
class Animal{
public int age;
public String gender;
public boolean isMammal(){ return false;};
public String mate(){ return "single";};
}
class Duck extends Animal{
public String beakColr = "Yellow";
public void Swim(){System.out.println("Swimming");};
public void quack(){System.out.println("quack");};
}
class Fish extends Animal{
private int sizeInFt;
private boolean canEat;
private void Swim(){System.out.println("Swimming");};
}
class Zebra extends Animal{
public boolean is_wild;
public void run(){System.out.println("running");};
@Override
public boolean isMammal(){ return true;};
@Override
public String mate(){ return "divorced";};
}
Pruebla de Clase#
Show code cell content
public class TestAnimals{
public static void main(String[] args){
Duck pato = new Duck();
pato.quack();
System.out.print("""
Is mammal? %b
Has a mate? %s
Beak color: %s
""".formatted(pato.isMammal(),pato.mate(), pato.beakColr));
Fish pescado = new Fish();
//pescado.Swim(); // no funciona porque es privado
System.out.print("""
Is mammal? %b
Has a mate? %s
""".formatted(pescado.isMammal(), pescado.mate()));
//System.out.println("Can eat? "+pescado.canEat); // No funciona porque es privado, se necesitaria un get
Zebra zebra = new Zebra();
zebra.is_wild = true; // como es publico puedo darle un valor sin usar setter
System.out.print("""
Is mammal? %b
Has a mate? %s
Is wild? %b
""".formatted(zebra.isMammal(), zebra.mate(), zebra.is_wild));
}
}
new TestAnimals().main(null);
quack
Is mammal? false
Has a mate? single
Beak color: Yellow
Is mammal? false
Has a mate? single
Is mammal? true
Has a mate? divorced
Is wild? true