POO-ITBA / 2024_02

Consultas 2C 2024
3 stars 0 forks source link

TP7_Ej4 #16

Open Pablo-Goros opened 6 days ago

Pablo-Goros commented 6 days ago

Hola que tal, como va?

Tengo una duda respecto de la consigna donde dice:

Si un libro no tiene género, se lo puede agregar luego.

No logro entender como puede pasar esto y el codigo puede funcionar. Por ejemplo, con el caso del libro Eragon que se inicia de la siguiente manera: ranker.rateUp(new Book("Eragon", "Christopher Paolini")); Luego cuando se utiliza el printRanking de un genero, cuando se hace la comparacion if(genre.equals(rankedBook.genre)) No se termina comparando null?

Y otra duda que me surgio es respecto de la definicion de RankedBook: public class RankedBook implements Comparable<RankedBook> { Book book; Genre genre; private int ranking; }

Hay alguna razon en especifico por la que no se hace que las variables book y genre sean private y final?

fmeola commented 6 days ago

Hola @Pablo-Goros Paso a contestar punto por punto:

Fijate que en el programa de prueba hace

       ranker.rateUp(new Book("Eragon", "Christopher Paolini"));
       ranker.rateUp(eragon);

pero nunca se llamó a ranker.add con el libro Eragon, es decir, hay que soportar invocar a rateUp con un libro que no haya sido agregado antes con el método add.

Es verdad que

if(genre.equals(rankedBook.genre))

terminaría comparando un género válido con un null y está bien porque objeto.equals(null) dará siempre false.

[!TIP] Recordá que null instanceof ClassX siempre da false.

Estaría mal hacer la inversa, es decir,

if(rankedBook.genre.equals(genre))

ya que obtendrías una NullPointerException en esos casos.

Respecto a tu última consulta no, no hay ninguna razón específica, está perfecto hacer todo private y los getters correspondientes. Me anoto para mejorar eso de la solución. Gracias por notarlo.

Pablo-Goros commented 6 days ago

Ahhhh genial ahi entendi perfecto.

Muchisimas gracias!