Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Utilizando conceptos de orientación a objetos, encapsulamiento, herencia y polimorfismo

Audio

public class Audio {

private  String titulo;
private int totalDeReproducciones;
private int totalDeMeGusta;
private int clasificacion;

public void meGusta(){
    this.totalDeMeGusta++;
}
public void reproduce(){
    this.totalDeReproducciones++;
}

public String getTitulo() {
    return titulo;
}

public void setTitulo(String titulo) {
    this.titulo = titulo;
}

public int getTotalDeReproducciones() {
    return totalDeReproducciones;
}

public void setTotalDeReproducciones(int totalDeReproducciones) {
    this.totalDeReproducciones = totalDeReproducciones;
}

public int getTotalDeMeGusta() {
    return totalDeMeGusta;
}

public void setTotalDeMeGusta(int totalDeMeGusta) {
    this.totalDeMeGusta = totalDeMeGusta;
}

public int getClasificacion() {
    return clasificacion;
}

public void setClasificacion(int clasificacion) {
    this.clasificacion = clasificacion;
}

}

Cancion

ackage com.aluracursos.radioalura.modelos;

public class Cancion extends Audio{

private String album;
private String cantante;
private String genero;

@Override
public int getClasificacion() {
    if (getTotalDeMeGusta() > 5000){
        return 8;
    } else {
        return 4;
    }
}

private String getAlbum(){
    return album;
}

public void setAlbum(String album) {
    this.album = album;
}

public String getCantante() {
    return cantante;
}

public void setCantante(String cantante) {
    this.cantante = cantante;
}

public String getGenero() {
    return genero;
}

public void setGenero(String genero) {
    this.genero = genero;
}

}

Podcast

public class Podcast extends Audio{

private String presentador;
private String descripcion;

@Override
public int getClasificacion() {
    if (getTotalDeReproducciones() >= 2000){
        return 9;
    } else {
        return 2;
    }
}

public String getPresentador() {
    return presentador;
}

public void setPresentador(String presentador) {
    this.presentador = presentador;
}

public String getDescripcion() {
    return descripcion;
}

public void setDescripcion(String descripcion) {
    this.descripcion = descripcion;
}

}

Mis Favoritos

void adicione (Audio audio) {

    if(audio.getClasificacion() >= 8){
        System.out.println(audio.getTitulo() + "Es uno de los favoritos del momento");
    } else {
        System.out.println(audio.getTitulo() + "Tambien es uno de los favoritos");
    }
}

}

Principal

public class Principal {

public static void main(String[] args) {

    Cancion miCancion = new Cancion();
    miCancion.setTitulo("Forever");
    miCancion.setCantante("kiss");

    Podcast miPodcast = new Podcast();
    miPodcast.setPresentador("Albert Familia");
    miPodcast.setTitulo("Cafe.Tech");
    // Cancione
    for (int i = 0; i < 200; i++) {
        miCancion.meGusta();
    }
    for (int i = 0; i < 2000; i++) {
        miCancion.reproduce();
    }
    //podcast
    for (int i = 1; i < 100; i++) {
        miPodcast.meGusta();
    }
    for (int i = 1; i < 8000; i++) {
        miPodcast.reproduce();
    }

    System.out.println("Total reproducciones: " + miCancion.getTotalDeReproducciones());
    System.out.println("Total de Me gusta: " + miCancion.getTotalDeMeGusta());

    MisFavoritos favoritos = new MisFavoritos();
    favoritos.adicione(miPodcast);
    favoritos.adicione(miCancion);
}

}

1 respuesta

Hola Albert, espero que estés bien

¡Qué bueno que estás aplicando tus conocimientos de orientación a objetos en Java! Veo que has creado una estructura sólida usando encapsulamiento, herencia y polimorfismo. Vamos a revisar algunos puntos clave de tu implementación:

  1. Encapsulamiento: Has utilizado modificadores de acceso private para los atributos de tus clases, lo cual es una buena práctica para proteger los datos. Además, proporcionaste métodos get y set para acceder y modificar estos atributos de manera controlada.

  2. Herencia: Has definido una clase base Audio y luego creado clases derivadas Cancion y Podcast que extienden Audio. Esto te permite reutilizar el código y añadir características específicas a cada tipo de audio.

  3. Polimorfismo: Estás utilizando el polimorfismo al sobrescribir el método getClasificacion() en las clases Cancion y Podcast. Esto permite que cada clase tenga su propia lógica para calcular la clasificación.

  4. Uso de la clase MisFavoritos: La clase MisFavoritos parece estar diseñada para agregar audios a una lista de favoritos, basándose en su clasificación. Asegúrate de que esta clase esté bien integrada en tu sistema.

  5. Ejemplo práctico: En tu clase Principal, estás creando instancias de Cancion y Podcast, y luego manipulando sus datos para simular reproducciones y "me gusta". Esto te permite ver cómo se comporta tu sistema con datos reales.

Un detalle que podrías ajustar es el método getAlbum() en la clase Cancion, que actualmente es private, lo que significa que no se puede acceder desde fuera de la clase. Si necesitas acceder al álbum desde otras partes de tu aplicación, considera cambiarlo a public.

Espero que estos comentarios te sean útiles y te ayuden a seguir mejorando tu aplicación. ¡Sigue adelante con tus estudios de Java!

Espero haber ayudado y buenos estudios!