zoukankan      html  css  js  c++  java
  • 设计练习

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

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

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

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

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

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

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

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

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

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

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

    单一职责原则。

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

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

    开放、封闭原则

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

      对修改封闭???

    依赖倒置原则

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

  • 相关阅读:
    Spring 基础学习
    Swagger basics (one)
    Handsontable Basics V7(one)
    JavaScript 对象
    CSS 基础总结
    Shell Programming(three)
    Shell Programming(two)
    Shell Programming(one)
    HTML标签总结
    jQuery 基础
  • 原文地址:https://www.cnblogs.com/jetz/p/1799715.html
Copyright © 2011-2022 走看看