Bueno, lo primero que tiene darse cuenta es que OOAD ("análisis y diseño orientado a objetos") es una herramienta y no un medio para un fin. Lo que obtienes de ese proceso es un modelo, no una verdadera representación de lo que estás modelando. Ese modelo hace ciertas suposiciones. El propósito de ese modelo es resolver un problema que tienes.
Entonces, ¿cómo sabes cómo diseñar objetos? ¿Cómo sabes si lo has hecho bien? Por el resultado final: ¿ha resuelto tu problema?
Por lo tanto, para el ejemplo de automóvil, en algunos modelos el número de vehículos podría ser simplemente un número entero, por ejemplo, el tráfico de automóviles a través de una intersección en un modelo de tráfico. En un modelo así, rara vez le importa la marca, el modelo o la construcción de los automóviles, solo el número. Puede que le importe el tipo de vehículo hasta el punto de que sea un camión o un automóvil (por ejemplo). ¿Lo modela como un objeto de vehículo con un tipo de automóvil o camión? ¿O solo separa los recuentos de carCount y truckCount?
La respuesta corta es: lo que funcione mejor.
La prueba normal de que algo sea un objeto o no es ¿tiene un comportamiento? Recuerde que en última instancia, objetos = datos + comportamiento.
lo que podríamos decir que los coches tienen el siguiente estado:
de ruedas;
- Altura de la suspensión;
- Unidad izquierda o derecha;
- Color;
- Ancho;
- Peso;
- Longitud;
- Altura;
de puertas;
- Si tiene un quemacocos;
- Si tiene un estéreo, reproductor de CD, reproductor de MP3 y/o satélite;
- Tamaño del tanque de gasolina;
- Número de cilindros;
de las cargas de turbo y/o inyección de combustible;
- Par máximo;
- Potencia de freno máxima;
- y así sucesivamente.
Lo más probable es que solo se preocupe por un pequeño subconjunto de eso: elija lo que sea relevante. Un juego de carreras podría entrar en más detalles sobre las ruedas, como qué tan calientes están, qué tan gastadas, el ancho y el tipo de banda de rodadura, etc. En tal caso, se podría decir que un objeto Wheel es una colección de todo ese estado (pero poco comportamiento) porque un automóvil tiene un número de ruedas y las ruedas son intercambiables.
De modo que aparece el segundo punto sobre los objetos: un objeto puede existir debido a una relación tal que el objeto representa un conjunto completo de datos. Entonces una Rueda podría tener banda de rodadura, ancho, temperatura, etc. No puedes dividir eso y decir que un auto tiene banda de rodadura pero no ancho de rueda, por lo que tiene sentido que Wheel sea un objeto, ya que una rueda en su totalidad es intercambiable.
Pero, de nuevo, ¿tiene sentido para qué está haciendo? Esa es la pregunta clave.
+1 Muy buena respuesta :) –