• 设计练习


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

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

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

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

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

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

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

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

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

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

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

    单一职责原则。

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

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

    开放、封闭原则

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

      对修改封闭???

    依赖倒置原则

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

  • 相关阅读:
    PHP无法使用file_get_contents或者curl_init()函数解决办法
    EXT 删除 监听
    PHP调试工具Xdebug安装配置教程
    Linux常用命令大全
    js中setInterval与setTimeout用法
    基于Web过程模拟的动态Web信息获取
    HNU2[J题]Modified LCS 扩展GCD
    SQL Server 2005定时备份维护操作步骤定时备份维护操作步骤定时备份维护操作步骤定时备份维护操作步骤
    object_id (N'...')是什么意思?
    使用TSQL来创建作业(这个比较好)
  • 原文地址:https://www.cnblogs.com/jetz/p/1799715.html
Copyright © 2020-2023  润新知