OO的世界
# OO的世界
OO的整个家族:OOA面向对象分析、OOD面向对象设计、OOP面向对象编程。
OOA分析产生结果(对象--类的文档),OOD依据OOA的结果进行规范化整理,以被OOP使用。
# Object Orient
面向对象,是通过建立抽象模型,近可能的模拟人类的思维,使软件以一种接近人类认知的方式解决问题。以便开发、维护。
# OOA
面向对象分析(Object-oriented analysis),指在系统调查资料的基础上,对OO思路所需要的素材进行归类分析和整理。其实就是对OO进行细化,初步得到属性和方法。
# 分析工具
1、功能模型工具:用例图;把系统拆解为一个一个功能。
2、静态模型工具:类图、对象图;通过描述对象——对象属性——对象间 的关系,把系统分解成互相协作的类,描述系统的静态模型。
3、动态模型工具:时序图、协作图、状态图;通过描述在用例中对象的交互,和对象的状态;描述系统的动态行为。
# OOA的执行过程
OOA模型由5个层次和5个活动组成,并继续贯穿OOD过程中。
5个层次:主题层、对象类层、结构层、属性层、服务层
5个活动:标识对象类、标识结构、定义主题、定义属性、定义服务
5个活动具体指:
标识对象类:对象是对数据及其处理方式的抽象,它反映了系统保存和处理现实世界总某些事物的信息能力。类是多个对象的共同属性和方法集合的描述,它包括如何在一个类中建立一个新对象的描述。
标识结构:结构是指问题域的复杂性和连接关系。类成员结构反映了泛华—特化关系,整体-部分结构反映整体和局部之间的关系
定义主题:主题是指事物的总体概貌和总体分析模型
定义属性:属性就是数据元素,可用来描述对象或分类结构的实例,可在图中给出,并在对象的存储中指定。
定义服务:服务是在收到消息后必须进行的一些处理方法:方法要在图中定义,并在对象的存储中指定。对于每个对象和结构来说,那些用来增加、修改、删除和选择一个方法本身都是隐含的(虽然它们是要在对象的存储中定义的,但并不在图上给出),而有些则是显示的。
PS:服务基本等同于函数方法。
OOA里定义了两种对象类之间的结构:分类结构、组装结构
分类结构:反映了一般与特殊的关系
组装结构:反映了整体与部分的关系
# OOA的产物
OOA的产物即为OOA工具的产物。通过用例图、类图、对象图、时序图、协作图、状态图;描述出的对象结构模型。
# OOD
面向对象设计(Object-oriented Design),是OO的中间过渡环节,通过对OOA的产物进行规范化整理,以便可以在OOP中更好的使用。
OOD的目标是管理程序内部各部分的相互依赖。为了达到整个目的,OOD要求:
1、程序分块,每块的规模应该小到可以管理的程度。
2、分别将各个块隐藏在接口(interface)的后面,让他们只能通过接口交流。
ps:如果对应到设计模型的6大原则,可以近似看作为 ,迪米特原则和依赖倒置。
OOD是一种解决软件问题的设计范式(paradigm),一种抽象的范式。使用OOD这种设计范式,我们可以用对象(object)来表现问题领域(problem domain)的实体,每个对象都有相应的状态和行为。
# OOD的主体工作
1、对象定义规格的求精过程
对于OOA所抽象出来的对象-&-类以及汇集的分析文档,OOD需要有一个根据设计要求整理和求精的过程,使之更能符合OOP的需要。这个整理和求精过程主要有两个方面:
一、是要根据面向对象的概念模型整理分析所确定的对象结构、属性、方法等内容,改正错误的内容,删去不必要和重复的内容等。
二、是进行分类整理,以便于下一步数据库设计和程序处理模块设计的需要。整理的方法主要是进行归类,对类一&一对象、属性、方法和结构、主题进行归类。
2、数据模型和数据库设计
数据模型的设计需要确定类-&-对象属性的内容、消息连接的方式、系统访问、数据模型的方法等。最后每个对象实例的数据都必须落实到面向对象的库结构模型中。
3、优化
OOD的优化设计过程是从另一个角度对分析结果和处理业务过程的整理归纳,优化包括对象和结构的优化、抽象、集成。
对象和结构的模块化表示OOD提供了一种范式,这种范式支持对类和结构的模块化。这种模块符合一般模块化所要求的所有特点,如信息隐蔽性好,内部聚合度强和模块之间耦合度弱等。
集成化使得单个构件有机地结合在一起,相互支持。
具体步骤
- 细化重组类
- 细化和实现类之间关系,明确其可见性
- 增加属性,指定属性的类型与可见性
- 分配职责,定义执行每个职责的方法
- 对消息驱动的系统,明确消息传递的方式
- 利用设计模式进行局部设计
- 画出详细的类图和时序图
# OOP
面向对象编程(Object Oriented Programming),是一种计算机编程架构;OOP的一条基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。OOP达到了软件工程的三个主要目标:重用性、灵活性和扩展性。OOP=对象+类+继承+多态+消息,其中核心概念是类和对象。
主要概念:
抽象性 : 程序有能力忽略正在处理中信息的某些方面,即对信息主要方面关注的能力。
对象:可以对其做事情的一些东西。一个对象有状态、行为和标识三种属性。
类:一个共享相同结构和行为的对象的集合。
消息传递 :一个对象调用了另一个对象的方法。
封装 : 也叫做信息封装:确保组件不会以不可预期的方式改变其它组件的内部状态;只有在那些提供了内部状态改变方法的组件中,才可以访问其内部状态。每类组件都提供了一个与其它组件联系的接口,并规定了其它组件进行调用的方法。封装的基本单位为对象。
多态性 : 组件的引用和类集会涉及到其它许多不同类型的组件,而且引用组件所产生的结果得依据实际调用的类型。
继承性 :允许在现存的组件基础上创建子类组件,这统一并增强了多态性和封装性。典型地来说就是用类来对组件进行分组,而且还可以定义新类为现存的类的扩展,这样就可以将类组织成树形或网状结构,这体现了动作的通用性。
组件 : 数据和功能一起在运行着的计算机程序中形成的单元,组件在 OOP 计算机程序中是模块和结构化的基础。
# OO的问题
OO是近可能的模拟人类的思维,来解决问题;但是OO是需要自顶向下的整体划分,对于一开始就自底向上的开发系统(如电路设计类依赖设计者熟练的技巧和丰富的经验的开发设计),OO会使得子模块混乱。