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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

图书馆借书程序我的分析相关推荐

  1. 计算机课程设计之图书借阅小程序-图书馆借阅管理小程序代码-校园图书馆借书还书小程序

    计算机课程设计之图书借阅小程序-图书馆借阅管理小程序代码-校园图书馆借书还书小程序 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 1.开发环境 开发语言:Java 框架:SSM(Spring ...

  2. mysql使用事务实现图书馆借书操作

    文章目录 一.实例 二. 相关表 1.创建表 2.插入表记录 三.事务处理 一.实例 使用事务,完成图书馆借阅图书的操作. 1.向借阅信息表插入借阅记录 2.更新图书信息表的库存 3.更新读者信息表的 ...

  3. 领域驱动设计实践:还是图书馆借书的例子

    去年开始博客园和Jdon有一场DDD的讨论,是关于如何给一个图书馆的应用系统建模.大概是在讨论几个经典的Use Case:办卡.持卡借书和还书. 讨论最开始由博客园的张逸大牛发起(链接在此),给出了一 ...

  4. 图书馆借书还书(链表)

    //链表实现图书的借书还书 #include<stdio.h> #include<stdlib.h> #include<string.h> #define Max ...

  5. 借书卡程序设计java_java图书馆借书编程求解

    package com; import java.util.InputMismatchException; import java.util.Scanner; public class library ...

  6. java异常处借接错书_Java入门第三季-异常-图书馆借书系统

    参考大神的代码,实现循环查询读书, 名称输入异常类定义 NameException.java package com.imooc; /** * 书名异常类 * @author Majinglian * ...

  7. 借书场景领域建模浅析

    关于借书场景的领域建模,我从以下几个方面进行分析: 分析模型静态结构 我分析一个领域模型的静态结构的思路一般是:先找出我们需要关心的对象,对于借书这个场景,我们关心的有: 1. Account(账号) ...

  8. 简单的图书馆借/还系统——C++实现

    其实这是学期初的一次作业,整理文件的时候在角落里找到的,索性就把代码放上来. 一个比较简陋的图书馆借书/还书系统,也许以后有时间会做一些完善. 首先完成一个图书馆类Opt_library,放在头文件中 ...

  9. 图书馆管理系统c语言 借书还书,急求程序!!!简单图书馆借/还书管理子系统...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 项目需求 通过此系统可以实现如下功能 1)完成对读者.书的基本信息以及借/还书的信息进行插入.删除.修改.保存等编辑功能: 2)书的库存量随着借/还书的情 ...

最新文章

  1. ai人工智能服务器操作系统,全球首款100%纯国产的AI操作系统来了,但说媲美Windows有意义吗...
  2. NSNumber 以及NSInteger,NSNumber以及Int的区别
  3. Android 服务入门
  4. 操作系统与存储:解析Linux内核全新异步IO引擎io_uring设计与实现
  5. linux 网络dma驱动,S3C2410的Linux下DMA驱动程序开发
  6. java邮箱代码_java邮箱开发代码——发邮件
  7. 怎样彻底删除系统服务项
  8. 高级版本 【多后台】
  9. php常用标签,PHP 过滤常用标签的正则表达式
  10. 滤波电路对服务器的影响,滤波电路到底有什么作用?
  11. html5 canvas画彩虹,HTML5/Canvas连接的彩虹点平滑动画
  12. 参数估计(二)----极大后验概率估计
  13. 在同一台电脑上使用内网和外网
  14. 安卓玩机搞机技巧综合资源--安装谷歌相机 小米查询信息 锁频段 提高网速【七】
  15. 与100名研发总监聊过项目管理后,我重新认识了里程碑
  16. 从键盘任意输入一个整型表示的月份值,用指针数组编程输出该月份的英文表示,若输入的月份值不在1~12之间,则输出“Illegal month”。
  17. assert预处理宏与预处理变量
  18. 【新闻背后】美团外卖商家Android版强杀竞争对手App
  19. 手把手教你做出数据可视化项目--波士顿矩阵模型
  20. 手机版python编程软件下载,手机python编程软件

热门文章

  1. 读库小册子【一张照片】
  2. C语言小游戏系列—恶搞关机软件,亲测QAQ
  3. 如何获得ESP32-WROOM-32技术规格书
  4. 猿创征文|ES索引字段映射类型以及ES底层打分逻辑
  5. 芯生美电子发布两款100V耐压的DC-DC降压芯片CSM3820SG/CSM3100SK
  6. 基于Java的在线作业系统
  7. 云服务器 ps,top 命令查询异常(结果为空也是)
  8. 《深入浅出图神经网络》读书笔记(8. 图分类)
  9. Hadoop2.x一次分布式HA启动时 ERROR: Cannot set priority of xxxx process 解决方式
  10. html 精美list,HTML DOM DList用法及代码示例