这是一个设计问题。
我们接受了以下课程相关的练习: 车辆(抽象基础),Car(继承自Vehicle),Engine(包含在抽象车辆中),ElectricEngine / FuelEngine(继承自Engine)。我打算使用构建器设计模式来促进汽车的创建。
我的问题涉及引擎。
ElectricEngine有(浮动)CurrentBatteryHoursLeft,(浮动)MaxBatteryHours
FuelEngine有(浮动)CurrentFuelLevel,(float)MaxFuelLevel
现在,因为CurrentBatteryHoursLeft + CurrentFuelLevel具有相同的含义,并且MaxBatteryHours + MaxFuelLevel具有相同的含义,我想将它们抽象为父(Engine)
我可以做以下事情: 将它们与父(Engine)中的通用名称联合起来,即:CurrentPowerLeft,MaxPower。这会促进重用,有利于面向对象的正确性(或者它真的吗?)
还有其他选择吗?因为如果我没有概括任何东西(意味着引擎保持空白,仅作为一个外壳),那么它的重点是什么呢? (这种情况在实践中有用吗?)
由于
答案 0 :(得分:0)
你可以,但我不会这样做。
对于每种引擎类型,可能存在特定于该引擎的其他因素,这些因素不会被这两个属性覆盖。例如,在某些汽车中,电池在制动时会重新充电。
更新:
Engine
的要点是充当特定引擎类型的父级。这种方式Vehicle
可以具有Engine
属性,但您可以为其分配不同类型的特定引擎。
答案 1 :(得分:0)
在我看来,你应该这样做,因为Engine
无论如何实现都有责任。 Engine
提供移动Car
的力量。要做到这一点,它必须消耗一些东西。 Engine
可以充值/充电的最大金额和剩余金额与其类型无关。因此,从能源类型到其服务目的的抽象是完全正确的。这是object oriented analysis
的意思。