Каким будет классовое отношение?
Среди условий:
Motorized Vehicle
, Car
, Motor
, Truck
Я думал следующее:
a Car is a Motorized Vehicle
, a Car has a Motor
, a Truck has a Motor
, a Truck is a Motorized Vehicle
Q1: я прав в вышеуказанных отношениях?
Q2: Теперь мы хотим связать слово fan
... как это будет выглядеть?
Моя попытка:a fan has a motor
, a Motorized Vehicle has a motor
, a Car is a Motorized Vehicle
, a Car has a Motor
, a Truck has a Motor
, a Truck is a Motorized Vehicle
Мне нужно немного разъяснений по этому вопросу....
3 ответа
Это может быть хорошим решением для вышеупомянутого. Так как двигатель можно заменить в автомобиле новым, вы можете сохранить агрегацию вместо композиции. Пожалуйста, обратитесь к изображению ниже
[Автомобиль, Грузовик] "это" [Моторизованное транспортное средство] "имеет" [Мотор, Вентилятор]
Я думаю, что нет 100% точного ответа на ваш вопрос без контекста.
Например, чтобы отделить грузовик от легкового автомобиля в нашем контексте, мы должны определенно сказать, что автомобиль и грузовик ведут себя по-разному.
Если и автомобиль, и грузовик - это просто простые контейнеры для (например) "имени" и "массы" или владельца и т. Д. С одинаковым поведением в приложении, то мы, вероятно, мыслим с точки зрения конкретных объектов, а не классов, которые могут управлять нам реализовать Vehicle
(или просто моторизованный автомобиль) класс с двумя экземплярами
Vehicle car = new Vehicle("Car",1200,someMotor);
Vehicle truck = new Vehicle("Truck",3400,someMotor);
Это простая вещь с "терминами", но есть также проблема отношений с контекстом. Под отношениями я имею в виду связи. Почти уверен, что Motorized vehicle
будет иметь Motor
(но помните, что также может иметь более одного), но вполне вероятно, что "мотор имеет транспортное средство" (как владелец, особенно в контексте сущностей базы данных и особенно, если наш контекст более сконцентрирован вокруг двигателей, чем транспортных средств - например, когда мы строим систему для автосалона).
Есть еще одна крошечная вещь, которая может быть не столь понятна для всех, это не только "у машины есть мотор" и "у грузовика есть мотор", но больше как "у моторизованной машины есть мотор", поэтому у машины есть мотор не только потому, что " У автомобиля есть мотор ", но" потому что это моторизованный автомобиль!".
Кроме того, вдаваясь в детали (так как вопрос помечен как oop), в объектно-ориентированных терминах мы должны думать о классе и интерфейсе, и мы можем в итоге сделать вывод MotorizedVehicle
это скорее интерфейс (из которого мы можем получить мотор), чем класс - если наша среда (как и большинство) не допускает множественного наследования. Это предотвратит нас от проблем типа "машина Обамы должна быть MotorizedVehicle
а также ArmoredVehicle
но я моторизован / бронирован в отдельном классе ".
TL; DR все зависит от контекста, предпочитает композицию и интерфейсы вместо сложной иерархии классов