2014-04-01 43 views
1

其中的条款:什么是类关系?

Motorized VehicleCarMotorTruck

我想以下几点:

a Car is a Motorized Vehiclea Car has a Motora Truck has a Motora Truck is a Motorized Vehicle

Q1:我是在上面的更正关系?第二季度:我们现在想要将单词fan联系起来......那看起来怎么样?

我尝试: a fan has a motora Motorized Vehicle has a motora Car is a Motorized Vehiclea Car has a Motora Truck has a Motora Truck is a Motorized Vehicle

我需要在此方面的说明,请....

+0

机动车应该有一个电机作为名字建议,IMO。 – Tautvydas

+0

相关http://lostechies.com/derickbailey/files/2011/03/LiskovSubtitutionPrinciple_52BB5162.jpg – PeeHaa

回答

2

这可能是上述提到的一个很好的解决方案。由于电机可以在新车上更换,因此您可以保持聚合而不是构图。请参考以下图片solution

+0

我认为添加的图片需要一些版主的注意才能批准 –

+0

粉丝怎么了? – PeeHaa

+0

你可以在机动车辆上使用风扇的聚合。让我也加 –

0

[汽车,卡车] “是”[机动车]“有一个”[电机,风扇]

+0

还没有听说过“needs-a”,只是试过搜索它而已...... – fifamaniac04

+0

修改了我的答案。 – cybersam

0

我认为没有上下文,对于您的问题没有100%准确的答复。

例如,分离卡车于我们而言,我们应该definatelly能够告诉,那车和卡车行为不同

如果汽车和卡车只是简单的容器(例如)“名称”和“质量”或所有者等在应用程序中具有完全相同的行为,那么我们可以根据特定的对象而不是类来思考,它可以推动我们实现Vehicle(或只的机动车)类两个实例

Vehicle car = new Vehicle("Car",1200,someMotor); 
Vehicle truck = new Vehicle("Truck",3400,someMotor); 

也就是说只用“术语”简单的事情,但也有关系问题与背景。我认为关系是指关系。几乎可以肯定的是,Motorized vehicle将有一个Motor(但是也可以有更多的那个),但是它是一个很大的机会,“电机有一辆车”(作为车主,特别是在数据库实体的情况下,尤其是如果我们的背景比车辆更集中于马达 - 例如当我们为摩托车经销商构建系统时)。

还有另一个小东西可能不是每个人都很清楚,它不仅是“汽车有电机”,“卡车有电机”,更多的是“机动车有电机”,所以汽车有电机不仅仅是因为“汽车有电机”,而是“因为它是机动车!”。

而且,进入细节(如问题是OOP的标签),在面向对象方面,我们应该想想 VS 接口,我们可以在总结结束了,那MotorizedVehicle更加接口(从中我们可以得到一个电机)比阶级 - 如果我们的环境(像大多数)不允许多继承。这将防止我们遇到类似“奥巴马的赛车既应该是MotorizedVehicleArmoredVehicle”,但我已经在不同的级别赛车上机动/装甲的问题。

TL; DR一切都取决于上下文,喜欢的组成和接口,而不是复杂的类层次结构