当前位置 : 主页 > 手机开发 > 其它 >

oop – 面向对象的设计原则抽象

来源:互联网 收集:自由互联 发布时间:2021-06-19
在阅读抽象时,我遇到了以下声明 “抽象仅捕获与当前视角相关的对象的细节” 例如. 从驾驶员的角度来看,Car class会是 public class Car { void start(); void applybrakes(); void changegear(); void stop()
在阅读抽象时,我遇到了以下声明

“抽象仅捕获与当前视角相关的对象的细节”

例如.
从驾驶员的角度来看,Car class会是

public class Car
  {
     void start();
     void applybrakes();
     void changegear();
     void stop();
   }

从机械师的角度来看,Car class会是

public class Car
  {
     void changeOil();
     void adjustBrakes();
   }

我的问题,
在设计系统时,我们是设计一个用户视角(驱动程序还是机制)或者可以
我们设计了多个用户视角,并根据用户类型进一步抽象出来?

希望我的问题很明确.

谢谢

根据您的使用情况,您可能需要为多个用户设计.在您的示例中,如果您的汽车将由机械师和驾驶员使用,那么您不能忽略一组用户.在这种情况下,您仍然可以使用Interfaces抽象细节.

你可以像这样设计你的对象:

interface IDrivable {
    void start();
    void applyBrakes();
    void changeGear();
    void stop();
}

interface IFixable {
    void changeOil();
    void adjustBrakes();
}

public class Car : IDrivable, IFixable {
    // implement all the methods here
}

现在,当机械师想要汽车时,你不给他一个Car对象,而是给他一个IFixable对象.同样,驱动程序获取一个IDrivable对象.这样可以同时保留两组用户的相关抽象.

class Driver {

    private IDrivable car;

    public Driver(IDrivable car) {
        this.car = car;
    }

    public driveCar() {
        this.car.start();
        this.car.accelerate();

        //this is invalid because a driver should not be able to do this
        this.car.changeOil();
    }
}

类似地,机械师将无法访问接口IDrivable中的方法.

你可以在这里阅读更多关于interfaces的内容.即使这是MSDN链接并使用C#,所有主要语言都支持接口.

网友评论