读书笔记——《深入浅出面向对象分析和设计》
作者: 康凯森
日期: 2016-11-26
分类: 笔记
一 写文章的技巧
视觉化——图像优于文字
使用对话方式和拟人化风格
第一人称角度
- 谈话式风格
- 故事代替论述
口语代替正式的术语和演说
让学习者更深入的思考
- 让读者集中注意力
- 拨动读者的心弦
二 什么是伟大的软件?
- 伟大软件必须让客户满意,满足客户的需求。
- 伟大软件是设计良好,编码良好并且易于维护、重用及扩展。
三 如何设计伟大软件?
- 确认软件做客户要他做的事。
- 运用基本的OO原则来增加软件的灵活性。
- 努力实现可维护、可重用的设计。
四 需求是什么?
It's a specific thing your system has to do to work correctly.
需求是系统为了正确运作所必须做的事情。
取得好需求的最佳方式就是了解系统应该做什么。
客户永远是正确的。需求永远在变化。
需求的变更有时会暴露出关于系统你所不知的问题。
需求的变更是经常的,随着你每次对需求的实现,系统总是随之改善。
4.1 用例是什么?
A use case describes what your system does to accomplish a partilar customer goal.
用例是把系统描述为实现特定用户目标要做的事情。
好的用例以容易理解的语言,清楚且准确地解释了系统在做什么。
用例反应使用性,功能反应功能性。
用例的三要素:
4.2 文本分析
查看用例中名词和动词以整理出类与方法的动作叫做文本分析。
五 良好的设计
- 抽象类是实际的实现类的占位符,抽象类定义行为,而子类实现该行为。
- 将变化之物封装起来。
- 要看看软件是否设计良好的最佳方式之一就是试着改变它。
- 对接口编码,而不是对实现编码。
- 每个类应该只有一个变动的理由。
- 设计是反复进行的,你必须愿意改变你的设计。
- 大多数的好设计都是通过分析坏设计而来的。
- 内聚性:只专注处理一件事情,不会试着做其他事情。
- 重构改变程序代码的内部结构,而不影响程序代码的行为。
- 委托:一个对象将操作转交到另一个对象的动作,第二个对象代表第一个对象执行该操作。委托保护你的对象免受软件中其他对象实现改变的干扰。
六 架构设计
架构是系统的组织结构,包含分解开来的各个部件、它们的连通性、交互机制以及你在系统设计中使用的指导原则和决策。
- 将大问题化整为零,分解为许多功能片段,接着就单独解决每个片段。
- 分析系统像什么,不像什么。
- 只要可以,就尽量把细节往后拖延。
- 领域分析让你检查你的设计,并且是以客户所用的语言。
- 应用程序中真正重要的事情是架构上重要的事情。
- 一次把焦点放在一个功能上,减少项目的风险。
- 有时候,编写伟大代码的最佳方式,是在允许的情况下将程序代码编写往后延。
- 伟大软件不只是伟大程序代码。
什么是架构上重要的事情?
- 它是系统本质的一部分吗? 系统的本质是指在最基本的层次上系统是什么。
- 这他妈的是什么意思?
- 我“到底”该如何做?
七 设计原则
- 模拟是避免做傻事的最佳方式。
- 开闭原则:对修改关闭,对扩展开放。
- 不要自我重复原则。
- 单一职责原则。
- 里氏替换原子:子类型必须能够替换基类型。
- 假如你需要使用另一个类的功能性,但不想改变该功能性,考虑以委托代替继承。
- 组合。
- 聚合。
八 迭代和测试
伟大软件的编写是迭代进行的。
先针对整体轮廓操作,接着迭代应用程序的每个片段,直到完成。
功能驱动开发:一次做单一功能,接着迭代,一次解决一个功能,直到你完成应用程序的整个功能性。
用例驱动开发:先实现用例的单一场景,接着再取出另一个场景完成它,直到所有场景完成。然后再迭代下一个用例,直到所有用例都能运作。
测试驱动开发:聚焦于让类的行为正确。
契约式编程:你正在与客户的程序代码合作,以对你将如何处理有问题的状况达成协议。
防御式编程:确保客户获得“安全的”响应,不管客户要什么。
《OLAP 性能优化指南》欢迎 Star&共建
《OLAP 性能优化指南》
欢迎关注微信公众号