Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

[Sugerencia] setTotalDeReproducciones() y setTotalDeMegusta() no deberían de existir.

Esto debido a que los atributos:

    private int totalDeReproducciones = 0;
    private int totalDeMeGusta = 0;

de la superclase Audio solo deben ser modificados por los métodos:

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

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

propios de la misma superclase.

Posdata. Tampoco deberia de existir el siguiente setter:

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

de la misma superclase ya que la clasificación se obtendrá indirectamente dependiendo del total de me gusta y total de reproducciones. Si se deja el setter anterior un usuario con malas intenciones puede restablecerlo. Propongo igual que el siguiente getter:

    public int getClasificacion() {
        return clasificacion;
    }

(igual de la misma superclase) tampoco debería existir y establecerlo mejor como un método y no como un getter:

    public int getClasificacion() {
        // return 0;
    }

ya que se va a sobrescribir en las subclases Cancion y Podcast.

2 respuestas
solución!

¡Hola Yahadad, espero que estés bien!

Entiendo tu preocupación sobre la encapsulación y la seguridad de los atributos en la superclase Audio. Tienes razón al señalar que permitir la modificación directa de los atributos totalDeReproducciones y totalDeMeGusta mediante setters podría comprometer la integridad de los datos. Al limitar las modificaciones a través de métodos específicos como reproduce() y meGusta(), te aseguras de que los valores solo se incrementen de manera controlada.

En cuanto al atributo clasificacion, también es una buena práctica calcularlo dinámicamente en lugar de permitir que se establezca directamente. Esto evita que usuarios malintencionados puedan manipular el valor. Podrías implementar un método que calcule la clasificación en función de los totalDeMeGusta y totalDeReproducciones. Por ejemplo:

public int calcularClasificacion() {
    // Implementa la lógica para calcular la clasificación
    return (totalDeReproducciones > 0) ? (totalDeMeGusta * 100) / totalDeReproducciones : 0;
}

Este método puede ser sobrescrito en las subclases Cancion y Podcast si necesitas una lógica de clasificación específica para cada tipo.

Tu propuesta de eliminar los setters y transformar el getter de clasificacion en un método de cálculo es una buena práctica de encapsulación y diseño orientado a objetos. Esto no solo mejora la seguridad de tu aplicación, sino que también la hace más robusta y fácil de mantener.

Espero que estas sugerencias te sean útiles y puedas aplicarlas en tu proyecto. ¡Bons estudios!

Perfecto, gracias por atender mi sugerencia, analizarla y debatirla juntos, ingeniera Brenda.