读书笔记——《深入浅出面向对象分析和设计》


作者: 康凯森

日期: 2016-11-26

分类: 笔记


一 写文章的技巧

  1. 视觉化——图像优于文字

  2. 使用对话方式和拟人化风格

  3. 第一人称角度

  4. 谈话式风格
  5. 故事代替论述
  6. 口语代替正式的术语和演说

  7. 让学习者更深入的思考

  8. 让读者集中注意力
  9. 拨动读者的心弦

二 什么是伟大的软件?

  1. 伟大软件必须让客户满意,满足客户的需求。
  2. 伟大软件是设计良好,编码良好并且易于维护、重用及扩展。

三 如何设计伟大软件?

  1. 确认软件做客户要他做的事。
  2. 运用基本的OO原则来增加软件的灵活性。
  3. 努力实现可维护、可重用的设计。

四 需求是什么?

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 文本分析

查看用例中名词和动词以整理出类与方法的动作叫做文本分析。

五 良好的设计

  1. 抽象类是实际的实现类的占位符,抽象类定义行为,而子类实现该行为。
  2. 将变化之物封装起来。
  3. 要看看软件是否设计良好的最佳方式之一就是试着改变它。
  4. 对接口编码,而不是对实现编码。
  5. 每个类应该只有一个变动的理由。
  6. 设计是反复进行的,你必须愿意改变你的设计。
  7. 大多数的好设计都是通过分析坏设计而来的。
  8. 内聚性:只专注处理一件事情,不会试着做其他事情。
  9. 重构改变程序代码的内部结构,而不影响程序代码的行为。
  10. 委托:一个对象将操作转交到另一个对象的动作,第二个对象代表第一个对象执行该操作。委托保护你的对象免受软件中其他对象实现改变的干扰。

六 架构设计

架构是系统的组织结构,包含分解开来的各个部件、它们的连通性交互机制以及你在系统设计中使用的指导原则和决策

  1. 将大问题化整为零,分解为许多功能片段,接着就单独解决每个片段。
  2. 分析系统像什么,不像什么。
  3. 只要可以,就尽量把细节往后拖延
  4. 领域分析让你检查你的设计,并且是以客户所用的语言。
  5. 应用程序中真正重要的事情是架构上重要的事情。
  6. 一次把焦点放在一个功能上,减少项目的风险。
  7. 有时候,编写伟大代码的最佳方式,是在允许的情况下将程序代码编写往后延
  8. 伟大软件不只是伟大程序代码

什么是架构上重要的事情?

  1. 它是系统本质的一部分吗? 系统的本质是指在最基本的层次上系统是什么。
  2. 这他妈的是什么意思?
  3. 我“到底”该如何做?

七 设计原则

  1. 模拟是避免做傻事的最佳方式
  2. 开闭原则:对修改关闭,对扩展开放。
  3. 不要自我重复原则。
  4. 单一职责原则。
  5. 里氏替换原子:子类型必须能够替换基类型。
  6. 假如你需要使用另一个类的功能性,但不想改变该功能性,考虑以委托代替继承。
  7. 组合。
  8. 聚合。

八 迭代和测试

伟大软件的编写是迭代进行的。

先针对整体轮廓操作,接着迭代应用程序的每个片段,直到完成。

功能驱动开发:一次做单一功能,接着迭代,一次解决一个功能,直到你完成应用程序的整个功能性。

用例驱动开发:先实现用例的单一场景,接着再取出另一个场景完成它,直到所有场景完成。然后再迭代下一个用例,直到所有用例都能运作。

测试驱动开发:聚焦于让类的行为正确。

契约式编程:你正在与客户的程序代码合作,以对你将如何处理有问题的状况达成协议。

防御式编程:确保客户获得“安全的”响应,不管客户要什么。


评论