Por ejemplo supongamos que tengo un vehículo de clase y deseo para un ConvertibleVehicle subclase que tiene métodos adicionales, tales como foldRoof(), turboMode(), foldFrontSeats() etc. Deseo instanciar como sigue¿Cómo diseño una subclase con características no disponibles en la clase base?
Vehicle convertible = new ConvertibleVehicle()
tan Todavía tengo acceso a un método común como openDoor(), startEngine() etc. ¿Cómo diseño una solución de este tipo?
Para aclarar mis dos soluciones iniciales, ninguno de los cuales estoy feliz con son:
- tienen métodos ficticias foldRoof(), turboMode(), foldFrontSeats() que puedo reemplazar en ConvertibleVehicle solamente, dejando que se no hacer nada en otras subclases
- tener métodos abstractos foldRoof(), turboMode(), foldFrontSeats() y obligar a cada subclase para proporcionar una implementación, incluso si va a estar en blanco en todos los casos que no sean ConvertibleVehicle
lo anterior parece sl muy intrincados ya que ambos contaminan la clase base ya que agrego un número creciente de subclases cada uno con sus funciones únicas
Después de leer algunas de las respuestas quizás haya algún tipo de falla fundamental en mi diseño. Supongamos que tengo una clase que lleva VehicleFleet vehículos y les da instrucciones para conducir la siguiente manera:
public VehicleFleet(Vehicle[] myVehicles) {
for (int i=0; i < myVehicles.length; i++) {
myVehicles[i].drive();
}
}
Supongamos que esto funciona para las subclases de vehículo docenas pero para ConvertibleVehicle también quiero plegar el techo antes de conducir. Para ello me subclase VehicleFleet de la siguiente manera:
public ConvertibleVehicleFleet(Vehicle[] myVehicles) {
for (int i=0; i < myVehicles.length; i++) {
myVehicles[i].foldRoof();
myVehicles[i].drive();
}
}
Esto me deja con una función foldRoof desordenado() atrapado en la clase base en la que no pertenece realmente que se anula sólo en el caso de ConvertibleVehicle y no hace nada en todos los otros casos. La solución funciona pero parece muy poco elegante. ¿Este problema se presta a una mejor arquitectura?
estoy usando Java aunque yo esperaría que una solución general se pudo encontrar que funcionará en cualquier lenguaje orientado a objetos y que no voy a necesitar confiar en el lenguaje peculiaridades específicas
umm simplemente hereda Vehículo, agregando las funciones adicionales. –
Creo que su pregunta ya describe el diseño. ¿Puedes aclarar tu pregunta? Algunas cosas que ayudarían sería si mencionas qué idioma estás usando y/o muestras de algún código. – allyourcode