• 设计练习


    什么才是面向对象的思维,我一直搞不清楚。今天下午尝试对一个门禁系统进行设计,这是我的思路:

    一、本系统复杂之处在于有很多种不同身份的人要通过,所以自然而然,我就首先对人员进行设计,先设计一个人员的基类,再继承出很多种类的人员。但进一步往下,发现对不同的人员,并不需要太多不同的处理。知道人员种类并不能决定进行什么操作,还要进行很多其他的判断(规则、设备状态),才能进行处理。

      于是,想到面向对象并不是简单的复制现实中的对象关系,尽管有些对象非常标准地符合教科书中讲的对象关系,让人忍不住想对它们进行一番抽象。但仔细想,在本系统中,这种抽象意义实在不大,与增加一个属性达到的效果一样。

      不能为抽象而抽象,而应该为了适应变化而抽象。

    二、所以,进一步思考,本系统的变化在哪里?就目前所知,变化最大的,就是整个进门的流程。比如,刷卡后,有些要输密码,有些要等待下一个卡,有些要开门…

      那么,针对这些变化,怎么来设计呢?

      没头绪,还是回到比较具体的东西上。每个用户交互硬件设备当然对应到一个对象了,它们公共的地方就是能够向系统提供一条信息。可以抽象出来,但还是意义不大,因为还要和外界的很多信息共同作用才能决定后续处理。

      而且,还有个问题,不能单靠这些硬件设备来驱动整个系统。完整的进门过程应该有多次刷卡等操作,但如果仅靠设备的事件来驱动的话,假如因为某种原因只刷了一半,那么系统也无从得知。

    三、由此,想到系统必须要掌握整个“进门过程”。不同种类的人员进门流程不同,仅仅是“进门过程”的具体表现不同而已,这个正好可以采用抽象的方式来设计,在继承的类中,提供了具体的不同的流程要求。同时,根据不同的进门流程,和上面的硬件对象进行交互。而进门过程作为一个对象,也可以让系统对其开始、进行、结果有全面的掌握。

      而将来流程发生变化,就可以只对流程的定义进行更改。

    四、现学现练,自查一下面向对象的几个原则:

    单一职责原则。

      引起硬件类改变的原因:硬件改变。

      引起进门过程类改变的原因:规则变化。

    开放、封闭原则

      对扩展开放:可以更改流程,可以增加设备。

      对修改封闭???

    依赖倒置原则

      硬件类保留接口,外界只调用接口。

  • 相关阅读:
    Nutch分类搜索
    ubnutu命令行操作以及打开文件
    关于获取字符串的某一段值的问题
    汗。。华夏名网挂了
    “System.OutOfMemoryException”类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理
    vs2008中无法添加数据连接之解决方案
    DockingManager的使用入门
    C# + .net下使用serialPort做串口开发 1
    为处理 InvalidOperationException. String[1]: the Size property has an invalid size of 0.
    未处理的“System.StackOverflowException”类型的异常出现在 mscorlib.dll
  • 原文地址:https://www.cnblogs.com/jetz/p/1799715.html
Copyright © 2020-2023  润新知