zoukankan      html  css  js  c++  java
  • 图书馆借书程序我的分析

    我发现很多人喜欢用这个来阐述自己的面向对象观点。所以我也来模仿一下。

    我想写程序首先要熟悉业务。

    首先分析一下业务流程中有多少个对象,先不关心这些对象是否真的有必要存在,简单罗列出来,方便我们总结业务流程。

    首先是图书馆,放书的地方。

    然后图书管理员,图书馆的老大。假设有两个服务窗口,那么就要考虑多个对象之间是怎么协调的。

    或者还有保安之类的,不过应该和管理程序没有太大关系,可以忽略。

    之后,有借书人,当然还有些人不借书,专门偷书的。

    图书馆除了借书活动之外,也会有库存管理等问题,比如图书自然损耗,人为丢失,或者要添加新的书,或者发现某些书不够和谐,要禁止被外借之类的。

    所以,站在图书馆的立场,我们会发现很多内务的细节。

    如果我们站在普通借书人的立场,谁还管图书馆怎么运作,我只需要借书还书就可以了。

    这就要我们学会多个角度去分析对象关系。

    分析对象关系有两种方式,一个是站在不同对象去观察外界,第二个是基于流程去分析。基于流程去分析有个好处,就是过程很清晰,实现简单,比如那些基于数据表格的程序就可以用这个方法,弄懂不同状态之间的转换,进行查增删改等操作。

    但是业务流程有一个不足之处,那就是业务流程是非常复杂的,你要贯穿全局去分析问题,而不能简单的针对某一个对象去分析问题,不能做到把问题局部化。

    第二个,如果你基于流程,那么你写的程序往往就是有限的流程路线,用户必须按照你预先设计的路线去操作,缺少灵活度。

    所以我还是觉得应该尽量去掌握基于对象去分析的方法。

    回过来。对于借书人来说,只是希望图书馆就提供一个查询有什么书,借书,还书的简单界面。

    而图书馆的角度,希望跟踪谁借了书,还有押金多少,怎么收费等。

    图书管理员是图书馆的一个窗口,作为窗口目的是提高并行度,最大的希望就是不同窗口之间数据应该同步,不要这里借出去了,那里又借出。

    还有没有涉及的对象,比如书本。在这个场景中,书本并没有什么动作,因为它主要是被操作的对象。当然,你可以增加书本的概念,比如希望他管理自己的数量,记忆谁借了它之类的,这样相当于把一个大的图书馆概念,又细分到每一本书身上。问题是,这个代价值不值得?

    为什么这么说?首先图书馆有很多书,如果我要知道借了多少书出去,那么我就要枚举所有的图书,而这个接出去的,和总库存之间有很大的差距。因此我希望可以建立一个虚拟的对象,那就是图书馆借出去的书的列表,我只需要和这个对象通信,就能以最有效率的方法知道借了多少书出去。

    可见:面向对象,所谓对象的存在性,和他的物理实体没有必然的关系,关键是我们需要知道什么东西,然后建立相关最高效的实现,这才是我们的目的。

    这就是需求导向,没有需求的面向对象,不针对需求优化的面向对象,是没有什么意义的。难道因为书是纸做的我们就要实现是哪个厂生产的这种属性么?

    对对象进行分析后,我们可以得到不同对象立场去观察的环境。通过结合需求,我们可以创造出最合理的对象。一个对象可能有多个界面,因为有多个不同的观察角度。等一个环境的对象关系搞清楚后,又需要针对每个对象内部进行细分。如此进行大概就能得到比较满意的结果。

    建立对象概念之后,具体还需要有些设计技巧。

    第一个是对象自身的设计。对象有两类操作,一个是查询,一个是修改。只是提供查询功能的相当于复合型数据结构(抽象数据定义?),可以认为他是没有多少对象的概念的,只需把他当作变量。只有修改操作才是对象的灵魂。

    第二个是对象关系,比如组合,包含,1对1,1对多,多对多之类的。

    第三个,对象的通信方式。第一种是直接调用,第二个是委托调用,还有什么推模式,拉模式之类的。

    第四个,算法工具。算法是效率的根本,对象要根据算法来设计,否则低效率的面向对象关系是没有意义的。

    第五个,语言的集成,要用库去实现业务,不要自己重复设计,要把业务代码改得比较配合内置的库功能,比如集成linq查询的接口之类的。

    第六个,用工程思想去分步实现系统。

    当然,这些都是泛泛而谈啦,也希望听听大家的意见。

  • 相关阅读:
    PHP生成pdf文档
    PHP将数据库数据批量生成word文档
    三个常用的PHP图表类库
    Javascript——(1)
    python学习HTML之CSS(2)
    python学习HTML之CSS
    python学习之HTML
    python学习之rabbitmq
    第10周15/16/17
    多进程
  • 原文地址:https://www.cnblogs.com/Nobel/p/2180811.html
Copyright © 2011-2022 走看看