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
Producto
que represente los atributos básicos de un producto (nombre, precio, agrega uno más).Crea tres subclases
Libro
,Revista
,Video
que hereden deProducto
y 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
private
para los atributos y métodosgetters
ysetters
).Usa el polimorfismo en un método
mostrarInfo()
que se defina enProducto
y sea sobrescrito enLibro
para mostrar detalles adicionales.
Indicaciones adicionales:
Explica cómo tu código cumple con los cuatro pilares de la POO.
Implementa un método
main
o una clase de prueba en donde crees instancias deProducto
yLibro
, 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
Vehiculo
con los atributosmarca
,modelo
, yaño
.Crea dos subclases:
Auto
yMoto
.Auto
tiene atributos adicionales comonumeroDePuertas
, yMoto
tienecilindrada
.Crea una interfaz
Conducible
que tenga el métodoconducir()
. TantoAuto
comoMoto
deben implementar esta interfaz.En el método
main
, crea instancias deAuto
yMoto
y 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