Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/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 - Fatal编程技术网

Oop 面向对象设计的麻烦

Oop 面向对象设计的麻烦,oop,Oop,我不确定这是否是问这类问题的地方,因此,如果与此无关,请关闭此问题 我正在学习OO设计,在为一个简单的机器人系统创建一个好的设计时遇到了一些问题。其要点如下: 司机操纵机器人物体Robot是一个接口,用于BasicRobot和DisabilityRobot实现 问题是:BasicRobot中包含所有代码,而BasicRobot中只有两个变量不同。也就是说,BasicRobot在所有方向上都有传感器,而残疾人机器人只有左前传感器。由于它们如此相似,我让残疾机器人继承自基本机器人 但是,在某些情况下

我不确定这是否是问这类问题的地方,因此,如果与此无关,请关闭此问题

我正在学习OO设计,在为一个简单的机器人系统创建一个好的设计时遇到了一些问题。其要点如下:

司机操纵机器人物体
Robot
是一个接口,用于
BasicRobot
DisabilityRobot
实现

问题是:
BasicRobot
中包含所有代码,而
BasicRobot
中只有两个变量不同。也就是说,
BasicRobot
在所有方向上都有传感器,而
残疾人机器人
只有左前传感器。由于它们如此相似,我让
残疾机器人
继承自
基本机器人

但是,在某些情况下,我只能使用
BasicRobot
,而使用
disabilitrobot
则不合适。这违反了替换规则,因为只要需要父类,就可以使用子类


我不知道如何优雅地解决这个问题。我是否应该摆脱
障碍机器人
,简单地为
基本机器人
创建传感器修饰符

BasicRobot可以在任何可以使用
DisabilityRobot
的地方使用,但是
DisabilityRobot
不能在任何可以使用
BasicRobot
的地方使用。这意味着
应该是基类


也就是说,您的层次结构可能存在其他问题。如果两个不同的变量是bool,那么您可能需要从基类中分离出一些代码,并将其放入派生类中。

它看起来像装饰设计模式的应用程序。您必须创建一个接口: IRobot然后有两个类实现这个接口BasicRobot和DisabledRobot。DisabledRobot将通过IRobot包含一个BasicRobot实例

interface IRobot{}

class BasicRobot : implements IRobot{}

class HandicapedRobot : implements IRobot{
 IRobot m_internal;
 SomeType m_additionalData;
}

为了澄清语义,残障机器人只是一个普通的机器人,但被认为是“破碎的”机器人吗?如果是这样的话,我不确定它自己的类是否有意义,但是它会内置一些熵,就像一个基本机器人的坏版本一样。@trnelson它会被认为是BasicRobot的一个较低版本。“在某些情况下”你只能使用
基本机器人
,这是什么意思。如果这两个机器人只是因为变量值不同而不同,那听起来像是同一个类的实例,而不是不同的类。让它们都继承自AbstractRobotI我不得不问,是什么方法停止了从
BasicRobot
派生的
DisabilitRobot
?嗨,谢谢,我考虑过这个问题,最后使用了一个AbstractRobot,它部分实现了Robot接口。然后我有BasicRobot和残疾人机器人。