(一)面向对象分析方法(Object-Oriented Analysis, OOA)
基本任务:运用OO方法,对问题域进行分析和理解,正确认识其中的事物及它们之间的关系,找出描述问题域和系统功能所需的类和对象,定义它们的属性和责任,以及它们之间的关联,最终产生一个符合用户需求,并能直接反映问题域和系统功能的OOA模型及其详细说明。
(二)面向对象的基本概念
概念 | 说明 | |
1 | 对象 | 是基本的运行时的实体,既包括数据(属性),也包括作用于数据的操作(行为)。通常可由对象名、属性和操作(方法)三部分组成。 |
2 | 封装 | 是一种信息隐蔽技术。对象将属性和行为封装为一个整体。使对象的使用者和生产者分离,使对象的定义和实现分开。 |
3 | 消息 | 对象之间进行通信的一种构造。发送消息的对象不需要知道接收消息的对象如何对请求予以响应。 |
4 | 类 | 一个类所包含的方法和数据描述一组对象的共同行为和属性。类是在对象之上的抽象,对象是类的具体化,是类的实例(instance)。 |
5 | 继承 | 是父类和子类之间共享数据和方法的机制。是类之间的一种关系。一个父类可以有多个子类。 单重继承:只从一个父类得到继承 多重继承:一个子类有两个或更多个父类 |
6 | 多态 | 不同对象收到同一消息,可以产生完全不同的结果。实现的细节则由接收对象自行决定。 |
7 | 动态绑定 | 把过程调用和响应调用所需要执行的代码加以结合。 静态绑定:绑定在编译时进行 动态绑定:绑定在运行时进行 |
(二)统一建模语言(Unified Modeling Language,UML)
(1)定义
是面向对象软件的标准化建模语言。简单、统一,能够表达软件设计中的动态和静态信息,目前已经成为可视化建模语言事实上的工业标准。
(2)UML结构
要素 | 说明 | ||
1 | 构造块 | 事物:对模型中最具有代表性的成分的抽象 | |
关系:把事物结合在一起 | |||
图:聚集了相关的事物 | |||
2 | 规则 | 支配构造块如何放置在一起的规定 | |
3 | 公共机制 | 是指达到特定目标的公共UML方法 | |
规格说明(详细说明) | 是事物语义的细节描述,是模型真正的核心 | ||
修饰 | 事物设置简单记号来表达更多信息 | ||
公共分类(通用划分) | 类与对象、接口与实现 | ||
扩展机制 | 包括约束、构造型和标记值 |
(3)UML系统视图
ID | 视图名 | 说明 |
1 | 逻辑视图 | 也称设计视图,表示了设计模型中在架构方面具有重要意义的部分,即类、子系统、包和用例实现的子集。 |
2 | 进程视图 | 是可执行线程和进程作为活动类的建模,是逻辑视图的一次执行实例,描述了并发与同步结构。 |
3 | 实现视图 | 对组成基于系统的物理代码的文件和构件进行建模 |
4 | 部署视图 | 把构件部署到一组物理节点上,用来表示软件到硬件的映射和分布结构 |
5 | 用例视图 | 是最基本的需求分析模型 |
(4)UML事物
ID | 事物名 | 说明 | 备注 |
1 | 结构事物 (structural thing) | UML模型的名词,属于静态部分 | |
类(class) | 描述具有相同属性、方法、关系和语义对象的集合。一个类实现一个或多个接口。 | ||
接口(interface) | 指类或构件提供特定服务的一组操作的集合,描述了类或构件的对外可见的动作。 | ||
协作(collaboration) | 定义了交互操作,使一些角色和其他事物一起工作,提供一些合作的动作 | ||
用例(use case) | 描述一系列的动作,产生有价值的结果。在模型中用例通常用来组织行为事物。用例是通过协作来实现的。 | ||
主动类(active class) | 主动类的对象有一个或多个进程或线程。 | ||
构件(component) | 是物理上或可替换的部分,它实现了一个接口的集合。 | ||
节点(node) | 构件节点是一个元素,它在运行时存在,代表一个可计算的资源,通常占用一些内存和具有处理能力。一个构件集合一般来说位于一个节点,但有可能从一个节点转到另一个节点。 | ||
2 | 行为事物 (behavior thing ) | UML模型的动词,属于动态部分,描述了跨越时间和空间的行为。 | |
交互(interaction) | 由在特定语境中共同完成一定任务的一组对象之间交换的消息组成 | ||
状态机(state machine) | 描述了一个对象或一个交互在生命期内响应事件所经历的状态序列 | ||
3 | 分组事物 (grouping thing) | 是UML模型的组织部分。是一些由模型分解成的“盒子"。最主要的分组事物是包(package)。事物可以放入包内。包与构件(仅在运行时存在)不同,它纯粹是概念上的(仅在开发时存在)。 | |
4 | 注释事物 ( annotational thing) | 是UML模型的解释部分。用来描述、说明和标注模型的任何元素。 注解(note)是一种主要的注释事物。 |
(5)UML关系
ID | 关系 | 说明 | 备注 |
1 | 依赖 (dependency) | 是两个事物间的语义关系 | 变体:精化、跟踪、包含和延伸。 |
2 | 关联 (association) | 是一种结构关系。 聚集(aggregation)是一种特殊类型的关联,描述了整体和部分间的结构关系。 在关联上可以标注重复度(multiplicity)和角色(role)。 | |
3 | 泛化 (generalization) | 是一种特殊/一般关系,特殊元素(子元素)的对象可替代一般元素(父元素)的对象。 | |
4 | 实现 (realization) | 是类元之间的语义关系。 ①在接口和实现它们的类或构件之间; ②在用例和实现它们的协作之间。 |
(6)UML中的图
图(diagram)是一组元素的图形表示。
UML 2.0提供了 13种图,分别是:类图、对象图、用例图、序列图、通信图、状态图、活动图、构件图、部署图、组合结构图、包图、交互概览图和计时图。
图名称 | 说明 | ||
1 | 类图(class diagram) | 展现了一组对象、接口、协作和它们之间的关系。 类图给出系统静态设计视图。在面向对象系统建模中最常见。 类图中通常包括:类;接口:协作:依赖、泛化和关联关系 | |
2 | 对象图(object diagram) | 展现了一组对象以及它们之间的关系。描述了在类图中所建立事物的实例的静态快照。对象图一般包括对象和链。对象图可以对静态数据结构建模。 对象图表示了交互图表示的动态场景的一个静态画面。可以使用对象图可视化、详述、构造和文档化系统中存在的实例以及它们之间的相互关系。 | |
3 | 用例图(use case diagram) | 用例是一种描述系统需求的方法。展现了一组用例、参与者以及它们之间的关系。 用例图中通常包含三种元素:用例、参与者、用例之间的关系 用例之间通常存在三种关系:包含(include)、扩展(extend)和泛化(generalization) | |
4 | 交互图 | 用于对系统的动态方面进行建模。 序列图、通信图、交互概览图和计时图均被称为交互图 序列图是强调消息时间顺序的交互图 通信图是强调接收和发送消息的对象的结构组织的交互图。 交互图一般包含对象、链和消息 | |
序列图(sequence diagram) | 是场景(scenario)的图形化表示,描述了以时间顺序组织的对象之间的交互活动。 不同于通信图的特征: (1)有对象生命线 (2)有控制焦点 | ||
通信图(communication diagram) | 强调收发消息的对象的结构组织,在早期版本中也称协作图。 强调参加交互的对象的组织。不同于序列图的特征: (1)有路径(2)有顺序号(3)与序列图之间可以相互转换 | ||
交互概览图 | 是UML2.0新增的交互图之一,它描述交互(特别是关注控制流),但是抽象掉了消息和生命线。 | ||
计时图 | 新增的,特别适合实时和嵌入式系统建模的交互图。描述对象状态随着时间改变的情况,很像示波器,适合分析周期和非周期性任务。 | ||
5 | 状态图(statechart diagram) | 展现了一个状态机,它由状态、转换、事件和活动组成。关注系统的动态视图,它对于接口、类和协作的行为建模尤为重要,它强调对象行为的事件顺序。状态图通常包括:简单状态和组合状态、转换(事件和动作)。 | |
6 | 活动图(activity diagram) | 是一种特殊的状态图,它展现了在系统内从一个活动到另一个活动的流程。是专注于系统的动态视图。它对于系统的功能建模特别重要,并强调对象间的控制流程。一般包括:活动状态和动作状态、转换和对象。 | |
7 | 构件图(component diagram) | 展现了一组构件之间的组织和依赖。构件图专注于系统的静态实现视图。它与类图相关,通常把构件映射为一个或多个类、接口或协作。 | |
8 | 部署图(deployment diagram) | 展现了运行处理节点以及其中的构件的配置。部署图给出了体系结构的静态实施视图。与构件图相关,通常一个节点包含一个或多个构件。 |
(三)面向对象分析(Object-Oriented Analysis,OOA)
(1)目的
获得对应用问题的理解(目的是确定系统的功能、性能要求)。
面向对象分析技术将系统的行为和信息间的关系表示为迭代构造特征。
(2)面向对象分析法对比功能/数据分析法
对比 | 表述含义 | 结果 | 修改 | |
1 | 面向对象分析方法 | 将数据和功能结合在一起作为一个综合对象 | 容易理解和管理 | 便于修改,早期阶段的修改容易提高软件的可靠性 |
2 | 功能/数据分析法 | 分开考虑系统的功能要求和数据及其结构 |
(3)活动
活动 | 说明 | |
1 | 认定对象 | 按自然存在的实体确立对象。要注意选择系统关心的实质性对象 |
2 | 组织对象 | 分析对象间的关系,将相关对象抽象成类。利用类的继承性建立具有继承性层次的类结构。 |
3 | 对象间的相互作用 | 描述各对象在应用系统中的关系。完整描述每个对象的环境,最后得到对象的界面描述 |
4 | 定义对象的操作 | 从对象直接标识的简单操作和复杂操作。应避免对象太复杂。 |
5 | 定义对象内部信息 | 确定对象的操作后,再定义对象的内部。包括内部数据信息、信息存储方法,继承关系以及可能生成的实例数等属性。 |