En sistemas orientados a objetos verdaderos, el tipo de objeto es transparente para el cliente.Por lo tanto, el código que maneja los libros no debe saber cuál es el tipo de libro, sino solo invocar los métodos en los libros.
Así que si necesita implementar un comportamiento diferente dentro del libro en respuesta a la invocación del método, extienda el Libro y anule algunos de sus métodos. Si no lo haces, entonces no lo hagas.
Parece, dado el cuerpo vacío de sus subclases, que se comportan de la misma manera que los libros. Así que simplemente está etiquetando el libro con algunos datos adicionales: la diferencia entre Encyclopaedia y Novel no es más esencial para el libro que el tapa dura o softback o impresión grande o estándar: un cliente puede usarlos de manera diferente, y cada libro es grande. imprimir libro o es un libro impreso estándar, pero estos son todos los atributos del libro en lugar de diferencias esenciales.
No necesitaría usar una enumeración para el tipo de libro, ya que es posible que desee agregar más datos - Usaría un sistema de etiquetado libre, para que pueda etiquetar un libro con una colección de tipos - para que pueda tendría un libro etiquetado como {'niños', 'ornitológico', 'enciclopedia',} - o permitir la estructura en los roles - por lo que hay un papel para 'enciclopedia ornitológica infantil' creado cuando se requiere, pero no hay una enumeración fija.
Absolutamente de acuerdo. Estaba pensando en cómo expresar "diferencias significativas" justo ahora. Pobre inglés :( –
de acuerdo. Parece que solo quiere verlo como diferentes tipos. La herencia hace un fuerte acoplamiento, ¿y qué pasa cuando tienes un libro que cruza géneros? ¿Cambiar a C++ para permitir herencia múltiple? A [Flag] 'ed enum podría ser una buena opción aquí. – simendsjo
+1 para una respuesta muy clara. La única respuesta correcta en mi humilde opinión – pyrocumulus