Разбивайте модель автомобиля только на части, которые будут видны как отдельные объекты за пределами автомобиля. Еще один способ думать об этом - ты действительно понимаешь, как заводится твой автомобиль, когда ты поворачиваешь ключ? Что касается типичного водителя, то все под капотом - это один большой (и шумный) черный ящик. Автоинженеры знают общие детали, которые требуют обслуживания со стороны владельца автомобиля, и специально разработали их для различного уровня взаимодействия с пользователем, например, заправочный стержень масляного щупа или крышка для заправки бачка охлаждающей жидкости.
Можете ли вы смоделировать каждую часть автомобиля? Конечно. Полезно ли моделировать отдельные свечи зажигания? Возможно нет.
Вам нужны машины с разными атрибутами, такими как цвет или размер? Вам нужны автомобили с различными возможностями, такими как пассажирский или буксирный? Одно место, которое отличается, если вам нужны машины с другим поведением. Здесь вам действительно нужно подумать о моделировании объекта Driver, который имеет атрибуты, от простых, таких как время реакции, до сложных, таких как агрессивность.
Моделирование транспортных средств в качестве примеров ориентации или наследования объектов проблематично, потому что примеры на самом деле не объясняют истинных различий между существенными атрибутами, которые определяют класс. Это не новость в StackOverflow, но этот вопрос также не является дубликатом, см. Эту ветку SO . У меня была такая же дискуссия с моим другом, и я разместил запись в своем блоге . Читайте о различных типах воздушных судов, которые FAA признает, и о том, как подразделяются правила для каждого типа. Есть много разных типов самолетов, самое большое разделение между двигателями и без двигателя.
Проверьте определения , используемые FAA :
Самолет означает устройство, которое используется
или предназначен для использования для полета в
воздух.
Самолет означает двигатель с приводом
самолеты тяжелее воздуха,
что поддерживается в полете
динамическая реакция воздуха против
его крылья.
Дирижабль означает двигатель с приводом
самолет легче воздуха, который может быть
управляемый.
Есть также легче воздуха и тяжелее воздуха. Воздушный шар не имеет силы и легче воздуха. Дирижабль работает и легче воздуха. Планер не имеет сил и тяжелее воздуха. Boeing 757 оснащен двигателем и тяжелее воздуха, но добавляет еще одну категорию «неподвижных крыльев», которая не похожа на вертолет, который также имеет мощность и тяжелее воздуха, но имеет «вращающиеся крылья».
Вот первые четыре в виде таблицы:
| Powered | Unpowered
---------------------------------------------------
Lighter-than-air | Blimp | Hot-air balloon
Heavier-than-air | 737 | Glider
Вы получите изображение.
Нельзя просто сказать, что вы будете моделировать двигатель отдельно от автомобиля, потому что автомобиль без двигателя может быть совершенно другим животным. Автомобиль без двигателя - не что иное, как трейлер, у которого также нет двигателя, но и никогда не будет. В этих случаях ни «is-a», ни «has-a» не соответствуют конкретному способу создания объектов. Вы не объявляете дирижабль самолетом, который легче воздуха, как воздушный шар. Тот факт, что они оба легче воздуха, никак не связывает их, кроме физики, которой они пользуются. Различие важно, потому что применяемые правила и положения различны. С другой стороны, мы не описываем дирижабль как воздушный шар, у которого есть двигатель. Самолеты физически не связаны, отношения должны быть такими, какими они должны быть.
Если вам не нужно определять ваши объекты с таким уровнем детализации, вам может не потребоваться моделировать их с таким уровнем детализации.