Odio decir que depende, pero depende.
Si necesita modelar todos los automóviles del mundo, y tiene métodos que puede usar para llamarlos (como "cambiar neumáticos", que es un proceso muy diferente para cada modelo), entonces sí, va a ir tener muchas clases infladas, porque tu situación en el mundo real también está hinchada.
Si solo desea tener una base de datos de imágenes de automóviles arquetípicos, y no importa si es una imagen de la instancia de su vecino o de su hermana, puede soltar la capa inferior. "2009 VW CC" bien podría ser una instancia, aunque puede visualizar que también es una clase en otro modelo.
Alternativamente, tal vez no es necesario que sea una verdadera subclase en absoluto. Una simple referencia podría ser suficiente. Por ejemplo, una compañía de seguros sabe acerca de una gran lista de modelos de automóviles y años, pero los desarrolladores no escriben una subclase para cada uno. En cambio, tienen una base de datos de modelos de automóviles, donde una fila puede representar 2009 VW CC. Cuando asegura su automóvil, crean una instancia de "Coche asegurado" con una referencia a la instancia "2009 VW CC".
Esto no sigue estrictamente la frase "Usar herencia para una 'es-una' relación ', pero las operaciones en todos los tipos de autos son idénticas; solo cambian los parámetros (por ejemplo, el precio del seguro). y los modelos de automóviles nuevos se registran en la base de datos, no en el código.
Una suposición aquí es que puede modelar las diferencias entre los modelos de diferencia como meramente parámetros de los mismos métodos en el automóvil.
(Aparte: cuando el iPhone comenzó a estar disponible a través de los sitios web de las compañías telefónicas, noté que rompía sus modelos de clase, sus sitios web parecían manejar docenas de marcas y modelos de teléfono en una página, presumiblemente usando un simple base de datos de teléfonos y sus características, y luego necesitaba una página especial para manejar los modelos de iPhone, presumiblemente porque se requerían nuevos métodos especiales en sus clases para respaldar algunos aspectos de la venta del iPhone. Los departamentos de ventas automatizados decían "Presione 1 para comprar un teléfono . Presione 2 para comprar un iPhone. ")
No tengo la intención de modelar todas las instancias de un automóvil (o cualquier producto para el caso), pero quiero proporcionar una manera de hacerlo en mi aplicación. Por ejemplo, si un producto se lanza en una edición limitada, o es lo suficientemente único/personalizado. –
Entonces tal vez sea apropiado un modelo híbrido. Standard_Car hereda de Car y tiene una referencia a una base de datos de diferentes modelos que admite. Custom_Car hereda de Car y tiene subclases para cada tipo de automóvil, lo suficientemente diferentes e importantes como para pasar por el costoso paso de modelar en el código. El automóvil de su vecino puede ser una instancia de Standard_Car o una de las subclases personalizadas de Car, dependiendo de su novedad. – Oddthinking