目录
首先明确背景,本书所描述的OO开发是高于编程语言,基于现实世界以及程序中的抽象为基础思考软件的方式,在此前提下,这里的开发描述的软件的生命周期(分析、设计、实现)
OO开发的本质是识别和组织应用领域中的概念
作者认为软件开发中困难的部分是对本质的操作,映射成某种语言是次要层面
OO开发强调以下三点
对概念而非实现建模
- 传统设计方法的弊端是过度专注实现机制,忽略了底层思维过程
- OO开发鼓励在软件生命周期内应用概念来工作和思考
- OO开发是思维方式而不是编程技术,利于表达抽象概念
- 它充当 分析(规约、分析)、设计(文档、接口)、实现(编程)的一种媒介
OO方法论
一种OO开发过程和一种图形化表示法来表示OO的概念
强调构建应用模型,然后在设计中增加细节
从分析到设计再到实现使用的是相通的无缝表示法,这样某一个开发阶段增加的信息就不会再下一阶段丢失或转化
提出一个问题:这里提到的无缝表示法,指的是图形化表达的应用模型吗?是说在生命周期中都是用这个模型,具象表现是一张图?完成所有步骤吗?还是一个抽象?
OO方法论包括以下阶段
- 系统构思
- 由业务人员、用户产生的一种构思并形成的临时性需求
- 分析
- 通过创建模型,分析人员重新描述系统构思阶段的需求。
- 此阶段分析人员与请求者协同工作。
- 分析模型为了描述要做什么,而不是如何做,不包含任何决策
- 领域模型---描述系统内部反映的现实世界对象
- 应用模型---描述可见的应用系统本身组成部分
- 举例 对于股票经纪人系统,领域对象包括股票、债券、交易、佣金,应用对象会控制交易的的执行过程,并输出结果
- 应用专家非技术但是可以理解评议好的模型(业务流程)
- 系统设计
- 系统架构- - - 用于解决应用程序问题的高层策略,是开发团队的产物
- 以解决问题,资源分配,明确目标为导向
- 类的设计
- 根据系统策略给分析模型添加细节
- 使用OO概念阐释域对象、应用对象
- 焦点在于实现每个累的数据结构和算法
- 实现
- 将设计阶段的产物转化为编程语言、数据库、硬件
- 困难的决策都在设计阶段,程序设计理应变得简单、直接
- 遵循良好的软件工程实践很重要
OO开发贯穿整个生命周期,各个阶段使用相同的类,后续阶段添加细节(这里的类指的是一个领域模型,是一个抽象的东西)
提倡迭代开发,非瀑布式(因为不需要并行的开发系统,历经几个阶段开发部分系统,然后增加功能)
这里特意提到不将测试列为一个阶段,是因为测试贯穿于整个生命周期中,检查、测试模型是必要的,将质量控制归于单个步骤,代价更大,效率更低
三种模型
用三种模型从不同的视角来描述系统
- 类模型 --- class model
- 描述系统内部对象及其关系的静态结构
- 界定了软件开发的上下文形成论域 (universe of discourse 任何科学理论都有它的研究对象,这些对象构成一个不空的集合,称为论域。)
- 产物 类图 class diagram
- 节点是类 ,弧表示类间的关系
- 状态模型 --- state model
- 描述对象随事件发生变化的方面
- 产物 状态图 state diagram
- 节点是状态,弧是由事件引发的状态转移
- 交互模型 --- interaction model
- 描述系统中的对象如何协作完成任务
- 用例图 --- 关注系统的功能, 即系统为用户做什么
- 顺序图 --- 显示对象间发生交互的顺序
- 活动图 --- 描述重要的处理步骤
- 交互模型由用例开始,后两者做补充详细描述
三种模型相互独立的描述了一套完整的系统的相互独立的部分
总结 --- 三种模型描述了何物何时如何发生何种变化
OO技术中的主题
- 抽象
- OO开发中最重要的一项技能
- 使开发者专注于应用程序最本质的方面
- 封装
- 使代码整洁有力
- 将对象的外部因素与内部实现细节分离
- 代码解耦
- 组合数据和行为
- 封装?
- 共享
- 通过继承、封装、抽象增效
- 强调对象的本质
- 更注重数据结构,特性比使用方式更稳定,用法以来应用细节
- 协同
- 标识、分类、多态、继承 都是OO语言的特性,可分开用,也可结合,互相促进,互相补充,强调对象的本质,迫使开发者摄入思考对象是什么,做了什么,比只关注数据和操作更通用、更健壮