diferencia de comportamiento entre los dos tipos de objetos
Para decidir los métodos de una entidad, influyen dos factores:
- la naturaleza de la identidad
- lo que el programador desea implementar
Por ejemplo, la entidad "coche"
Un coche tiene unos atributos: fabricante, modelo, número bastidor, color, matricula, peso, potencia del motor...
Así que seguramente el programador querrá métodos que permitan obtener esos datos para mostrar en pantalla o donde sea.
Y quizás también para modificarlos.
Pero un "coche", por su naturaleza, además tiene ciertas funciones: arrancar/apagar motor, encender/apagar luces, abrir/cerrar puertas, acelerar, frenar, etc...
¿El programador va a querer métodos que representen/ejecuten esas funciones propias de un "coche"?
Pues depende... si está programando un juego o un simulador de conducción, pues si querrá que su clase Coche tenga esos métodos para poder representar fielmente el comportamiento de un "coche".
Pero, si en cambio lo que va a programar es el catálogo de un concesionario que vende coches, o un registro municipal de tráfico..., pues no va a necesitar que su clase Coche tenga esas funciones. Solo querrá lo imprescindible para la entrada/salida de datos de los atributos que describen un "coche", pero no su comportamiento.
Dicho esto..
¿Qué métodos puede tener una clase Canción? ¿Y una ListaReproduccion?
Pues eso, depende de su naturaleza y de lo que necesite el programador....
Una "canción", por su naturaleza, tiene ciertos atributos. Pero no tiene un "comportamiento"..., no es una entidad que "haga cosas" por ella misma.
Podemos decir que es "pasiva".
Una "canción" no se reproduce por si sola, será un "reproductor" de audio quien leerá sus datos y los transformará en sonido musical.
Una "canción" no se cataloga por si sola, será una "lista de reproducción" quien la catalogue, la ordene por nombre, o por autor, o por estilo musical.
Vamos, que una "canción" no hace nada por si misma, requiere interactuar con otras entidades.
Así que los métodos de una clase Canción básicamente serían retornar/modificar los valores de sus atributos. No va a tener métodos que representen otros comportamientos, porque por su naturaleza, pues no los tiene...
En cambio, una "lista de reproducción", sí hace cosas por ella misma, es una entidad más "activa".
Puede agregar canciones a su lista, o eliminarlas, ordenar de distintas formas según los atributos de las canciones, filtrar las canciones por autor, por género, por año, por....
Puede asociar una canción a la imagen de la portada del álbum/CD correspondiente, puede guardarse/leerse en/de disco, etc...
Una clase ListaReproduccion, a parte de métodos para retornar/modificar sus propios atributos (nombre, fecha creación, ruta en disco donde está guardada, ..) si que tendrá también otros métodos para gestionar el catálogo de objetos Canción que contiene.
Por su naturaleza, puede representar muchos comportamientos diferentes, tantos como pueda necesitar el programador. Al contrario que la clase Cancion, que como ya hemos dicho, por si sola prácticamente no hace nada..