仅将汽车模型分解为将作为汽车范围之外的单独实体公开的部分。另一种思考方式是,您真的了解转动钥匙时汽车是如何启动的吗?就典型的驱动程序而言,引擎盖下的一切都是一个大(且嘈杂)的黑匣子。汽车工程师知道需要车主维护的常见部件,并明确设计它们以适应不同级别的用户交互,例如油尺或冷却液储液罐加注盖。
你能对汽车的每一部分进行建模吗?当然。对单个火花塞进行建模是否有帮助?可能不是。
您是否需要具有不同属性(如颜色或尺寸)的汽车?您是否需要具有不同功能的汽车,例如载客或牵引能力?一个不同的地方是您是否需要具有不同行为的汽车。这是您真正需要考虑对具有属性的 Driver 对象进行建模的地方,从简单的属性(如反应时间)到复杂的属性(如攻击性)。
将车辆建模为面向对象或继承的示例是有问题的,因为这些示例并没有真正解释定义类的基本属性之间的真正区别。这对 StackOverflow 来说并不新鲜,但这个问题也不是重复的, 请参阅这个 SO 线程。我和我的一个朋友进行了同样的讨论,并在我的博客上发布了一个日志。阅读 FAA 认可的不同飞机类型以及如何细分每种类型的规定。有很多不同类型的飞机,最大的区别是有动力和无动力的。
查看FAA 使用的定义:
飞机是指用于或打算用于空中飞行的设备。
飞机是指由发动机驱动的比空气重的固定翼飞机,在飞行中由空气对其机翼的动态反应支撑。
飞艇是指由发动机驱动的可操纵的轻于空气的飞机。
还有比空气轻和比空气重的。热气球是无动力的,比空气轻。飞艇是有动力的,比空气轻。滑翔机是无动力的,比空气重。波音 757 有动力且比空气重,但增加了另一类“固定翼”,这与直升机不同,后者也有动力且重于空气,但属于“旋转翼”。
这是表格形式的前四个:
| Powered | Unpowered
---------------------------------------------------
Lighter-than-air | Blimp | Hot-air balloon
Heavier-than-air | 737 | Glider
你得到图片。
您不能只说将发动机与汽车分开建模,因为没有发动机的汽车可能是完全不同的动物。没有引擎的汽车与拖车完全不同,拖车也没有引擎,但也永远不会。在这些情况下,“is-a”和“has-a”都不适合我们构建对象的具体方式。您不会将飞艇宣布为“比空气轻”的飞机,热气球也是如此。除了它们所利用的物理学之外,它们都比空气轻这一事实并没有使它们以任何方式相关。区别很重要,因为适用的规则和法规不同。从另一个角度来看,我们不会将飞艇描述为“有”引擎的热气球。飞机没有物理关系,
如果您不需要将对象定义到该详细级别,则可能也不需要将它们建模到该详细级别。