Каким будет классовое отношение?

Среди условий:

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 все зависит от контекста, предпочитает композицию и интерфейсы вместо сложной иерархии классов

Другие вопросы по тегам