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