headfirst面向对象读书笔记
headfirst面向对象读书笔记, 主要设计一个程序的整体设计, 从需求到规划到实现到测试
三步走
- 确认软件做客户要他做的事
- 运用基本的的 OO 原则增加软件的灵活性
- 努力实现可维护可重用的设计
低耦合
封装: 保护应用程序的某一部分的信息免遭其他部分的干扰, 应该将变化之物封装起来
变更: 确保每个类只有一个改变的理由
内聚力: 内聚力越高, 每个类的责任就定义的越好且越相关
当你有一组特性跨对象变化时, 使用集合来动态存储, 可以在新特性加入时避免改变程序代码
根据用户需要的功能整理出需求
需求: 需求列表
领域分析: 识别、收集、组织及表示领域相关信息的流程,根据的是现有系统与其开发历程的研究、领域专家捕捉到的知识、潜在的理论以及领域里新兴的技术。
- 避免构建不属于你责任范围内的系统部分
用例: 用例过程, 用例中的名词可能是代码里的类
用用例检查需求, 用例的每一步会满足(涉及)需求
- 明确的价值
- 起点与终点
- 外部启动者
主要路径和替换路径
从第一步到最后一步通过用例的完整路径称为场景
用例图:
- 系统, 系统中的用例, 参与者
- 使用功能列表确定用例图是完整的
接口: 对接口编码而不是对实现, 对接口编码, 程序代码将使用该接口的所有子类, 甚至是还没被创建的那些
构建系统时尽可能把细节往后拖延
架构: 片段如何组织在一起以及哪些比较重要
- 从功能列表中找出比较重要的
- 架构三问:
- 他是系统本质的一部分吗
- 他到底是什么意思
- 我该怎么做
OO 原则
- OCP open-close priciple 类应该对扩展开放, 对修改关闭 灵活性!
- DRY dont repeat yourself 将共同之物抽取出来置于单一地方来避免重复的额程序代码 一个地方一个需求!
- SRP single responsibility principle(内聚力) 每一个对象具有单一职责 $class $method itself!!!
- LSP Liskov substitution principle 子类型必须能替换其基类型
继承
委托: 保护对象免受软件中其他对象实现改变的干扰
- 假如你需要使用另一个类的功能性,但不想改变该动能性,考虑以委托代替继承。
组合: 当你想要使用由接口所定义的行为,并且从该接口的种种实现中进行选择时,组合是最有威力的,不论是在编译期间还是在运行时。
- 在组合中, 当对象被摧毁时, 其所有行为也会被摧毁
聚合: 可以独立于主要对象之外存在
驱动开发
- 功能驱动开发
- 用例驱动开发
- 测试驱动开发, 测试应该具有原子性
编程方式
- 契约式编程: 你正在与客户的程序代码 合作,以对你将如何处理有问题的状况达成协议。 (return null)
- 防御性编程: 你正在确保客户取得“安全的"响应,不管客户要什么。(throw exception)
整体流程
- 功能列表
- 用例图
- 分解问题
- 需求
- 领域分析
- 初步设计(OO 原则)
- 实现
- 交付
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.