没有成员的多态对象?

时间:2014-04-12 06:17:55

标签: c# oop

这是一个设计问题。

我们接受了以下课程相关的练习: 车辆(抽象基础),Car(继承自Vehicle),Engine(包含在抽象车辆中),ElectricEngine / FuelEngine(继承自Engine)。我打算使用构建器设计模式来促进汽车的创建。

我的问题涉及引擎。

ElectricEngine有(浮动)CurrentBatteryHoursLeft,(浮动)MaxBatteryHours

FuelEngine有(浮动)CurrentFuelLevel,(float)MaxFuelLevel

现在,因为CurrentBatteryHoursLeft + CurrentFuelLevel具有相同的含义,并且MaxBatteryHours + MaxFuelLevel具有相同的含义,我想将它们抽象为父(Engine)

我可以做以下事情: 将它们与父(Engine)中的通用名称联合起来,即:CurrentPowerLeft,MaxPower。这会促进重用,有利于面向对象的正确性(或者它真的吗?)

还有其他选择吗?因为如果我没有概括任何东西(意味着引擎保持空白,仅作为一个外壳),那么它的重点是什么呢? (这种情况在实践中有用吗?)

由于

2 个答案:

答案 0 :(得分:0)

你可以,但我不会这样做。

对于每种引擎类型,可能存在特定于该引擎的其他因素,这些因素不会被这两个属性覆盖。例如,在某些汽车中,电池在制动时会重新充电。

更新:

Engine的要点是充当特定引擎类型的父级。这种方式Vehicle可以具有Engine属性,但您可以为其分配不同类型的特定引擎。

答案 1 :(得分:0)

在我看来,你应该这样做,因为Engine无论如何实现都有责任。 Engine提供移动Car的力量。要做到这一点,它必须消耗一些东西。 Engine可以充值/充电的最大金额和剩余金额与其类型无关。因此,从能源类型到其服务目的的抽象是完全正确的。这是object oriented analysis的意思。