创建类图并正确构建系统的作业

问题描述 投票:0回答:1

我在课堂上接到了一项作业(计算机科学) - 我需要为处理不同类型车辆的车库的系统设计一个类图。这个作业的重点是正确使用组合和继承。

车库可以接收任何车辆并根据该车辆是燃油车还是电动车来处理它,例如燃油车将加油,但电动车将充电..所以我考虑通过创建一个来实现这一点抽象 Vehicle 类和两个继承自它的抽象类 - 'FueledVehicle' 和 'ElectricVehicle',然后会有从每个类继承的具体类(例如:'ElectricCar' 继承自 'ElectricVehicle' 和 'FueledCar' 继承来自“燃料车辆”)。

我的问题是汽车(燃油汽车和电动汽车)有一些共同的属性,例如 numberOfDoors,我不想分别定义两个不同类下的所有共享属性并具有双重代码。所以我得出的结论是它需要位于不同的类“CarProperties”下,但现在的问题是我可以创建类 CarProperties 的实例,该实例本质上不应该是具体的,但如果我将其设为抽象类我遇到其他问题..

如果有人能够提供一种通过重组系统或解决实例问题来解决此问题的方法,我将不胜感激。

oop class-diagram system-design
1个回答
0
投票

有很多方法可以解决这个问题,最终取决于最终目标是什么,但我怀疑这没有正确定义,这实际上只是一个分类问题,所以这可能可以保持相当简单,但你可以扩展如果需要的话,可以在每个属性上进行更多操作。

首先,我想如何实例化它?我希望有一个车库实例(定义超出范围)能够在运行时添加或删除车辆。所以首先我需要代表每种车辆类型。下面我创建了 3 种具体的车辆类型:

Vehicle (abstract)
|-PetrolVehicle
|-DieselVehicle
|-PetrolPlugInHybridVehicle

每辆车可以有多个电源:

PowerSource (abstract)
|-PetrolEngine
|-DieselEngine
|-ElectricMotor

定义公共属性所在的基类。这些可以包装到另一个类中,但我认为没有必要。

public abstract class Vehicle
{
  public abstract PowerSource[] getPowerSources(); // e.g. none, petrol, petrol+battery (hybrid)
  public abstract int getNumDoors(); // e.g. 2, 4, 5
  public abstract int getNumWheels e.g. 3, 4
}
public abstract class PowerSource
{
  FuelType getFuelType(); // e.g. petrol, diesel, electric
}

因此,我们的 PetrolVehicle,可以是汽车、卡车或公共汽车等(这可以定义为进一步的子类或只是 PetrolVehicle 的属性),类似于:

public class PetrolVehicle extends Vehicle
{
    public PetrolVehicle(int doors, int wheels)
    {
        super(doors, wheels)
    }

    public PowerSource[] getPowerSources()
    {
        return new PowerSource[] { new PetrolEngine() };
    }
}

从这里,您可能想知道车库里有什么:

public class GarageStats
{
  public int getNumPetrolVehicles()
  {
    return 0; //Todo get number of vehicles with Petrol fuel type
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.