0%

系统分析与设计方法(四)面向对象的分析与设计

面向对象方法以客观世界中的对象为中心,其分析和设计思想符合人们的思维方式,分析和设计的结构与客观世界的实际比较接近。

面向对象方法中,分析和设计的界面并不明显,他们采用的相同的符号表示,能方便的从分析阶段平滑过渡到设计阶段。

在显示生活中,用户的需求经常会发生变化,但是客观世界的对象集对象间的关系比较稳定,因此用面向对象方法分析和设计的结构也相对比较稳定。

一、面向对象的基本概念

1、对象和类

对象是描述客观事物的实体,由对象标识(名称)、属性(状态、数据、成员变量)和服务(操作、行为、方法)是3个要素组成,封装成一个整体,以接口的形式对外提供服务。
类是具有相同属性和服务的一个或一组对象的抽象。
类与对象是抽象描述和具体实例的关系。一个具体的对象被称为类的一个实例。

类可以分为实体类、边界类、控制类。

(1)实体类

实体类映射需求中的每个实体,实体类保存需要存储在永久存储体重的信息。
实体类一定有属性,不一定有操作。

(2)控制类

控制类是用于控制用力工作的类,一般由动宾结构的短语转化来的名称,例如身份验证。
控制类没有属性,但是有方法。

(3)边界类

边界类用于封装在用例内、外流动的信息或数据流。边界类位于系统与外界的交界处,包括所有窗体、报表、打印机和扫描仪等硬件接口,以及与其他系统的接口。
边界类通常既有属性也要方法。

2、继承与泛化

用来说明特殊类(子类)与一般类(父类)的关系。

3、多态与重载

一般类中定义的属性或服务被特殊类集成后,可以具有不同的数据类型或表现出不同的行为。
通常用重载和改写实现。
重载是编译时制定的,改写是运行时选择的。

4、模板类

也称为类属类,用来实现参数多态机制。
一个类属类是一组类的一个特性抽象。

5、消息和消息通信

消息是想对象发出的服务请求。 为对象间提供唯一合法的动态联系的途径。

二、面向对象分析

对象技术的流行,演化出数十种不同的OOA方法,其中比较流行的包括OMT、OOA、OOSE、Booch等。OMT、OOSE、Booch最后统一成为UML。

1、OOA/OOD方法

面向对象分析(OOA),面向对象设计(OOD)。
OOA模型包括主题、对象类、结构、属性和服务5个层次。需要经过标识对象类、标识结构与关联、划分主题、定义属性、定义服务5个步骤完成整个分析工作。
OOD贯穿OOA的5个层次和5个活动,由人机交互部件、问题域部件、任务管理部件、数据管理部件4个部分组成。

(1)设计问题域部分

OOA的结果是OOD的问题域部件,分析的结果在OOD中可以被改动或增补,但基于问题域的总体组织架构是长时间稳定的。

(2)设计人机交互部件

在上述结果中加入人机交互的设计和交互细节。

(3)设计任务管理部分

识别事件驱动任务、识别时钟驱动任务、识别优先任务和关键任务、识别协调者、审查每个任务并定义每个任务。

(4)设计数据管理部分

数据管理部分提供了在数据管理系统中存储和紧缩对象的基本结构,其目的是隔离数据管理方法对其他部分的影响。

2、Booch方法

Booch认为软件开发是螺旋上升的过程,每个周期包括 标识类和对象、确定类和对象的含义、标识关系、说明每个类的接口和实现 4个步骤。

静态模型 动态模型
逻辑模型 类图、对象图 状态转换图、时序图
物理模型 模块图、进程图 -

Booch方法的开发过程是一个迭代的渐进式的系统开发过程,分为宏过程和微过程梁两类。
宏过程用于控制微过程,5个主要活动包括:

1
2
3
4
5
建立核心需求的概念化
建立模型的分析
建立架构的设计
形成实现的进化
管理软件交付使用的维护

微过程基本上代表开发人团的日常活动,4个重要、没有顺序的步骤包括:

1
2
3
4
在给定的抽象层次上识别出类和对象
识别出这些类和对象的语义
识别出类间和对象间的关系
实现类和对象

3、OMT方法

对象建模技术(OMT)主要用于分析、系统设计和对象设计。
包括对象模型、动态模型、功能模型。

模型 说明 主要技术
对象模型 描述系统中对象的静态结构、对象之间的关系、属性、操作。他表示静态的、结构上的、系统的“数据”特征。 对象图
动态模型 描述与时间和操作顺序有关的系统特征,如激发时间、时间序列、确定时间先后关系的状态。他表示瞬时、行为上的、系统的“控制”特征 状态图
功能模型 描述与值的变换有关的系统特征:功能、映射、约束和函数依赖 数据流图

4、OOSE方法

面向对象软件工程(OOSE)在OMT的基础上对功能模型进行了补充,提出了“用例”的概念,最终取代数据流图进行需求分析和建立功能模型。

三、统一建模语言

统一建模语言(UML)

1、UML是什么

是一种用于详细描述的可视化语言。
是一种构造语言,虽然不是一种可视化的编程语言,但与编程语言直接相连,有较好的映射关系。允许正向工程、逆向工程。
是一种文档化语言。

2、UML的结构

UML由构造块、公共机制和架构三部分组成。

(1)构造块

构造块也就是基本的UML建模元素、关系和图。
建模元素:包括构造事物(类、接口、协作、用例、活动类、组件、节点等)、行为事物(交互、状态机)、分组事物(包)、注释事物。
关系:包括关联关系、依赖关系、泛化关系、实现关系。
图:UML2.0包括14种不同的图,分为表示系统静态结构的静态模型(包括类图、对象图、包图、构件图、部署图、制品图),以及表示系统动态结构的动态模型(包括对象图、用例图、顺序图、通信图、定时图、状态图、活动图、我交互概览图)。

(2)公共机制

指达到特定目标的公共UML方法,包括规格说明、修饰、公共分类和扩展机制4种。
规格说明:是元素语义的文本描述。
修饰:通过修饰给模型元素表达更多的信息。
公共分类:包括类元和实体、接口和实现两组公共分类。
扩展机制:包括约束、构造型、标记值。

(3)架构

架构是系统的组织结构,包括系统分解的组成部分、他们的关联性、交互、机制和指导原则。

具体来说,就是5个系统视图。

逻辑视图:以问题域的语汇组成的类和对象集合。
进程视图:可执行线程和进程作为活动类的建模,他是逻辑视图的一次执行实例。
实现视图:对组成基于系统的物理代码的文件和组件进行建模。
部署视图:把组件物理的部署到一组物理的可计算的节点上。
用例视图:最基本的需求分析模型。

3、用例图基础

外部参与者所理解的系统功能。

包括参与者、用例、包含和扩展。

4、类图和对象图基础

类图技术是OO方法的核心。

(1)类和对象

类是对一类具有相同特征的对象的描述。
对象是类的实例。
类的属性的语法为: “可见性 属性名:类型 = 默认值 {约束特性}”。
可见性包括 Public、Private 和 Protected,分别用+、-、#号表示。
类的操作的语法为: “可见性:操作名(参数表):返回类型 {约束特性}”。

(2)类之间的关系

①依赖关系。使用带箭头的虚线表示依赖关系。
②泛化关系。继承关系是泛化关系的反关系,也就是说子类是从父类中继承的,而父类则是子类的泛化。使用带空心箭头的实线表示,箭头指向父类。
③关联关系。用一条实线来表示关联关系。
聚合关系:聚合是一种特殊形式的关联。聚合表示类之间的关系是整体与部分的关系。例如 一辆轿车包含四个车轮、一个方向盘、一个发动机和一个底盘,就是聚合的一个例子。在 UML 中,用一个带空心菱形的实线表示,空心菱形指向的是代表“整体”的类。
组合关系:如果聚合关系中的表示“部分”的类的存在,与表示“整体”的类有着紧密的关系,例如“公司”与“部门”之间的关系,那么就应该使用“组合”关系来表示。在 UML 中, 用带有实心菱形的实线表示,菱形指向的是代表“整体”的类。
④实现关系。用一个带空心箭头的虚线表示。

(3)多重性问题

多重性是用来说明关联的两个类之间的数量关系的。
0…1;0…;1…1;1…;*

(4)类图

对于软件系统,其类模型和对象模型类图描述类和类之间的静态关系。与数据模型不同,它不仅显示了信息的结构,同时还描述了系统的行为。类图是定义其他图的基础。

(5)对象图

UML 中对象图与类图具有相同的表示形式。对象图可以看作是类图的一个实例。

5、交互图基础

交互图是表示各组对象如何按某种行为进行协作的模型。通常可以使用一个交互图来表示和说明一个用例的行为。

(1)顺序图

顺序图用来描述对象之间动态的交互关系,着重体现对象间消息传递的时间顺序。顺序图允许直观地表示出对象的生存期,在生存期内,对象可以对输入消息做出响应,并且可以发送信息。

(2)通信图

通信图用于描述相互合作的对象间的交互关系和链接关系。虽然顺序图和通信图都用来描述对象间的交互关系,但侧重点不一样。顺序图着重体现交互的时间顺序,通信图则着重体现交互对象间的静态链接关系。

(3)定时图

定时图是一种特殊形式的顺序图。

6、状态图基础

状态图用来描述一个特定对象的所有可能状态及其引起状态转移的事件。

7、活动图基础

活动图的应用非常广泛,它既可用来描述操作(类的方法)的行为,也可以描述用例和对象内部的工作过程。
活动图是由状态图变化而来的,它们各自用于不同的目的。活动图依据对象状态的变化来捕获动作(将要执行的工作或活动)与动作的结果。活动图中一个活动结束后将立即进入下一个活动(在状态图中状态的变迁可能需要事件的触发)。

(1)基本活动图。


判定:用菱形表示。
分支与组合:用粗线来表示分支和组合。

(2)带泳道的活动图。

(3)对象流。

在活动图中可以出现对象。对象可以作为活动的输入或输出,对象与活 动间的输入/输出关系由虚线箭头来表示。如果仅表示对象受到某一活动的影响,则可用不带箭头的虚线来连接对象与活动。

(4)信号。

在活动图中可以表示信号的发送与接收,分别用发送和接收标识来表示。 发送和接收标识也可与对象相连,用于表示消息的发送者和接收者。

8、构件图基础

构件图是面向对象系统的物理方面进行建模要用的两种图之一。它可以有效地显示一组构件,以及它们之间的关系。构件图中通常包括构件、接口及各种关系。

通常构件指的是源代码文件、二进制代码文件和可执行文件等。而构件图就是用来显示编译、链接或执行时构件之间的依赖关系的。

对源代码进行建模

这样可以清晰地表示出各个不同源程序文件之间的关系。

对物理数据库建模

用来表示各种类型的数据库、表之间的关系。

对可调整的系统建模

例如对应用了负载均衡、故障恢复等系统的建模。

在绘制构件图时,应该注意侧重于描述系统的静态实现视图的一个方面,图形不要过于简化,应该为构件图取一个直观的名称,在绘制时避免产生线的交叉。

9、部署图基础

部署图,也称为实施图,它和构件图一样,是面向对象系统的物理方面建模的两种图之一。构件图是说明构件之间的逻辑关系,而部署图则是在此基础上更进一步地描述系统硬件的物理拓扑结构及在此结构上执行的软件。部署图可以显示计算结点的拓扑结构和通信路径、结点上运行的软件构件,常用于帮助理解分布式系统。

(1)节点和连接。

节点代表一个物理设备及其上运行的软件系统,如一台 UNIX 主机、一个 PC 终端、一台打印机、一个传感器等。
节点之间的连线表示系统之间进行交互的通信路径,在 UML 中被称为连接。
通信类型则放在连接旁边的“《》”之间,表示所用的通信协议或网络类型。

(2)构件和接口。

在部署图中,构件代表可执行的物理代码模块,如一个可执行程序。


在面向对象方法中,类和构件等元素并不是所有的属性和操作都对外可见。它们对外提供了可见操作和属性,称之为类和构件的接口。界面可以表示为一头是小圆圈的直线。