Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 当有一个级别的车,应该是一辆敞篷车的子类车还是没有?_Oop_Uml_Ooad - Fatal编程技术网

Oop 当有一个级别的车,应该是一辆敞篷车的子类车还是没有?

Oop 当有一个级别的车,应该是一辆敞篷车的子类车还是没有?,oop,uml,ooad,Oop,Uml,Ooad,比如说,如果在我们的对象设计中,已经有一个Car类,现在有一些cars对象是可转换的 我们可以定义另一类敞篷车和子类汽车,但我们稍后会创建一个四轮驱动的类,它也是汽车的子类,然后,如果我们有一个四轮驱动也是敞篷车,那么我们如何处理它呢 与其他设计相比,上面的设计是怎样的?其他设计在汽车类中是可转换的布尔值,在汽车类中也是可转换的布尔值,就像汽车类的标志或属性一样。因此,在这种情况下,我们不会定义额外的类 更新:在现实生活中的一个例子中,在我们的项目中,有一个凭证类存储用户信息:用户id、加密密码

比如说,如果在我们的对象设计中,已经有一个Car类,现在有一些cars对象是可转换的

我们可以定义另一类敞篷车和子类汽车,但我们稍后会创建一个四轮驱动的类,它也是汽车的子类,然后,如果我们有一个四轮驱动也是敞篷车,那么我们如何处理它呢

与其他设计相比,上面的设计是怎样的?其他设计在汽车类中是可转换的布尔值,在汽车类中也是可转换的布尔值,就像汽车类的标志或属性一样。因此,在这种情况下,我们不会定义额外的类


更新:在现实生活中的一个例子中,在我们的项目中,有一个凭证类存储用户信息:用户id、加密密码、电子邮件地址等。当我们允许使用JanRain通过Facebook、Gmail、Yahoo、MySpace登录时,一位同事建议添加FacebookCredential、Gmail Credential、YahooCredential、,所有这些类都是Credential的子类。我有点不知所措,有这么多的类,当你看到一个方法时,你必须看看子类是覆盖它还是基类的方法。我只需要使用一个代码来告诉凭证的提供者是Facebook、Gmail等,并使用这个提供者代码来做适当的事情。例如,有些提供商已经验证了电子邮件地址,有些则没有。因此,我不知道我同事的方法是更合适还是更复杂。

您可能希望通过使用
您可以为不同类型的汽车定义不同的行为,因此没有太多的子类。

您的意思是您使用的语言不支持多重继承。语言支持接口吗?你可以有一辆基础抽象类汽车。抽象是因为人们从不制造汽车,而是制造汽车的特定实现。然后继承抽象基类的类的实例可以实现公共接口:

易变 四轮驱动 IHybrid 等等 其思想是抽象基类定义最简单的事物。接口定义了它是什么类型的东西,当然也有重叠。这些接口将包含特定于该类型的操作和属性。IConvertible的属性和方法与IHybrid一样,是不可转换的,等等。然后,特定的实现可以为整个过程添加自己独特的天赋


你知道,这是一个有点做作的例子。所以这都是猜测。但对于这一特定的理论实现,我要用接口来实现。

< P>除了你对四轮驱动车的关注之外,还可以考虑以下几点:

都是敞篷车吗? 是否所有车辆都配有四轮驱动车辆?
对我来说,这些问题都指向汽车的属性,而这些属性并没有定义一种类型。从某种意义上说,它们与颜色或车门数量等没有什么不同。

基本上可以归结为一个问题,即您是否需要/希望根据敞篷车和四轮驱动来更改该车型的功能。例如,如果您需要/希望敞篷车有一个升高和降低的车顶,四轮驱动车有一个锁定和解锁轮毂,那么您几乎需要使用继承来添加具有这些的类。在这种情况下,是的,敞篷四轮驱动车辆很有可能继承敞篷车和四轮驱动车型。这样,如果你在C++中这样做,那么这些类应该可能从汽车或你的基类中继承,而在java之类的东西中,它们非常需要接口而不是类。
另一方面,如果您只需要了解特定车辆是否可转换和/或四轮驱动,那么类中的简单布尔值或枚举字段就足够了。

我从不理解这些代表真实世界的对象。答案总是取决于您试图用代码解决的实际问题。也许至少我们知道选项是什么,这可能是有帮助的。您应该只根据您面临的实际问题提出实际的、可回答的问题。闲聊的、开放式的问题会降低我们网站的实用性,并将其他问题从头版推下。@Sunny这不是一个实际问题吗?你以前没看过有车的赛车游戏吧,是吗?请不要再问反问了。我的建议是,找到解决方案的更好地方可能是阅读一本书,或者学习一门关于面向对象编程和编程的课程。学习如何设计类不是你将要学习的东西,因此你的工具将影响那些设计决策
但是。。。在动物类的例子中,如果我们有兔子,我们可能会定义一个兔子类和动物的子类,即使所有的兔子都是动物,可能所有的敞篷车实际上都是汽车,我想不出一个反例。然而,并非所有四轮驱动车辆都是汽车。例如,ATV有时是四轮驱动的,但可以说它们不被视为汽车。我不确定这些问题是否有明确的答案。虽然从动物中创建兔子亚类的例子在某些情况下可能有用,但在另一些情况下,人们可能会认为兔子只是哺乳动物的一个特定实例的名称。或者在故事书中,兔子可能是主角,例如。这不是一个简单的主题。