文章目录
- 软件工程
-
- 第5章 面向对象方法学
-
- 5.1 面向对象方法总览
-
- 面对对象方法学概念
- 与传统方法学比较
- 面向对象方法学优点
- 5.2 UML简介
-
- 建模必要性
- UML构成
- UML视图
- 5.3 UML静态建模-用例图
-
- 建立用例模型
- 5.4 静态建模——类图、对象图
-
- 类图
-
- 边界类
- 控制类
- 实体类
- 接口类
- 关联关系
- 泛化(继承)关系
- 依赖关系
- 实现关系
- 对象图
- 包
- 5.5 动态建模机制——状态转换图
-
- 状态转换图——图形元素
-
- 1.状态
- 2.状态转换
- 3.判定
- 4.历史状态
- 5.6 动态建模机制——顺序图、协作图、活动图
-
- 消息
- 顺序图(sequence diagram)
- 协作图(Collaboration diagram)
- 活动图(Activity diagram)
- 5.7 UML物理框架机制
-
- 系统架构
- 构件图(Component Diagrams)
- 配置图(Deployment diagram)
- 5.8 UML扩展机制
-
- 标签值
- 约束
- 版类
软件工程
第5章 面向对象方法学
- 传统软件工程方法学适用于中小型软件产品开发;
- 面向对象软件工程方法学适用于大型软件产品开发。
5.1 面向对象方法总览
面对对象方法学概念
- 对象:具有相同状态的一组操作的集合,对状态和操作的封装。
- 类:对具有相同状态和相同操作的一组相似对象的定义。类是一个抽象数据类型。
- 实例:实例是由某个特定类所描述的一个具体对象。
-
消息:要求某对象执行某个操作的规格说明。包括三部分:
- 接收消息的对象
- 消息名
- 0或多个变元
- 方法 :对象执行的操作,即类中定义的服务。
- 属性:类中所定义数据,对客观世界实体具体性质的抽象。
- 继承:子类自动共享基类中定义的属性和方法的机制。
-
多态性:在类等级不同层次可共享一个方法名,不同层次每个类按各自需要实现这个方法。(为不同数据类型的实体提供统一的接口)例如:A是基类,B和C是A的派生类,多态函数Test参数是A的指针,Test函数可以引用A、B、C的对象。
- 优点:提高程序可复用性(接口设计的复用,不是代码实现复用);派生类的功能可被基类指针引用,提高程序可扩充性和可维护性。
- 重载
- 函数重载:在同一作用域内,参数特征不同的函数可使用相同的名字。
- 优点:调用者不需记住功能雷同函数名,方便用户;程序易于阅读和理解。
- 运算符重载:同一运算符可施加于不同类型操作数上面。
- 函数重载:在同一作用域内,参数特征不同的函数可使用相同的名字。
与传统方法学比较
- 传统方法数据与过程是分离的;
- 面向对象方法把数据和处理数据的方法封装成一个单元。
传统方法 | 面向对象方法 |
---|---|
1.系统是过程的集合 2.过程与数据实体交互 3.过程接受输入并产生输出 |
1.系统是交互对象的集合 2.对象与人或其他对象交互 对象发送与响应消息 |
面向对象方法学优点
- 与人类习惯思维方法一致
对象是对现实世界正确抽象,问题空间和解空间结构一致。 - 稳定性好
软件系统结构根据问题领域模型建立,功能需求变化不会引起软件结构整体变化,作局部性修改。例如从已有类派生新子类实现功能扩充或修改。 - 可重用性好
- 传统软件重用技术:标准函数库。
- 面向对象重用技术:类,派生类和创建类的实例
- 易开发大型软件产品
封装性好,易于分解,易于合作开发。 - 可维护性好
稳定性好、容易修改、容易理解、易于测试和调试。
5.2 UML简介
- UML 全称为 Unified Modeling Language,是目前最流行的面向对象建模语言。
- UML是图示化、说明、构造一个软件系统并生成其文档的标准语言。
- UML独立于开发过程,可与大多数面向对象开发过程配合使用。
- UML独立于程序设计语言,可用C++、Java等任何一种面向对象程序设计语言实现。
建模必要性
- 捕获商业流程
- Use Case 分析–从用户的视角来捕捉商业流程。
- 促进沟通
- 使用建模来捕捉商业对象和逻辑;
- 使用建模分析和设计应用。
- 管理复杂性
- 将模型划分成不同的视图(结构、行为等);
- 用包(Package)将视图组织成一棵抽象层次渐深的树形结构.
- 定义软件构架
- 促进软件复用
UML构成
- 基本构造块
- 事物
- 结构事物:类、接口、协作、用例、主动类、组件和节点。
- 行为事物:交互机和状态。
- 分组事物:包。整个模型可看成是一个根包,它间接包含模型中所有内容。子系统是另一种特殊的包。
- 注释事物:给建模者提供信息,提供关于任意信息的文本说明,但没有语义作用。
- 关系
- 依赖
- 关联
- 泛化
- 实现
- 图
- 用例图、顺序图
- 协作图、类图、对象图
- 状态图、活动图
- 组件图、部署图
- 事物
- 规则
- 名字
- 作用域
- 可见性
- 完整性
- 执行
- 公用机制
- 规范说明
- 修饰
- 公共划分
- 扩展机制
- 构造型
- 标记值
- 约束
UML视图
不同的视图突出特定的参与群体所关心的系统的不同方面,通过合并所有五个视图中得到的信息就可以形成系统的完整描述 。
- 用例视图
定义了系统的外部行为,是最终用户、分析人员和测试人员所关心。该视图定义了系统的需求,因此约束了描述系统设计和构造的某些方面的所有其他视图。 - 设计视图
描述的是支持用例视图中规定的功能需求的逻辑结构。它由程序组件的定义,主要是类、类所包含的数据、类的行为以及类之间交互的说明组成。 - 实现视图
描述构造系统的物理组件,这些组件包括如可执行文件、代码库和数据库等内容。这个视图中包含的信息与配置管理和系统集成这类活动有关。 - 进程视图
进程视图包括形成并发和同步机制的进程和线程。 - 部署视图
部署视图描述物理组件如何在系统运行的实际环境(如计算机 路)中分布。。
5.3 UML静态建模-用例图
- 用例:执行者与计算机一次典型交互,代表系统某一完整功能。
- 执行者:描述与系统交互的人或物,代表外部实体(如用户、硬件设备或其它软件系统)。
- 用例图:描述外部执行者(actor)与系统的交互,表达系统功能,即系统提供服务。
- 主要元素:用例和执行者。
建立用例模型
- 发现执行者
- 谁使用该系统;
- 谁改变系统的数据;
- 谁从系统获取信息;
- 谁需要系统的支持以完成日常工作任务;
- 谁负责维护、管理并保持系统正常运行;
- 系统需要应付那些硬件设备;
- 系统需要和那些外部系统交互;
- 谁对系统运行产生的结果感兴趣。
- 获取用例(向执行者提出问题获取用例)
- 执行者需获取何种功能,需要作什么;
- 执行者需读取、产生、删除、修改或存储系统中某种信息;
- 系统发生事件和执行者间是否需要通信。
- 用例的粒度:宁粗勿细
- 执行者间关联
- 泛化关系
- 用例间关联
- 泛化关系:一般与特殊关系,特殊类完全拥有一般类的信息,并且还可以附加一些其他信息;
- 扩展关系:允许一个用例扩展另一用例提供的功能,与泛化关联类似,有更多规则限制(基本UseCase必须声明若干“扩展点”,扩展UseCase只能在扩展点上增加新行为);
- 包含关系:一个基本UseCase行为包含另一个UseCase行为。
5.4 静态建模——类图、对象图
类图
类图是面向对象建模最常用的图,描述类与类间的静态关系。
边界类
位于系统与外界的交界处。
- User interface boundary class
- 窗体(form)、对话框(dialog box)、 表(report)
- External system boundary class
- 表示通讯协议(如TCP/IP)的类
- 直接与外部设备交互的类
- 直接与外部系统交互的类
控制类
每个用例通常有一个控制类,控制用例中的事件顺序,控制类也可以在多个用例间共用。
实体类
用于对必须存储的信息和相关行为建模的类。
接口类
描述一个类或构件服务的操作集,不含属性,只包含方法的声明。
关联关系
- 普通关联:双向,用实线连接两个类。
- 导航关联:关联是单向的,用实线箭头连接两个类。
- 限定关联:限定符放在关联关系末端的矩形内。
- 关联类:用关联类记录关联附加信息。
- 聚合(Aggregation):类与类间关系是”has-a”,整体与部分关系,较弱情况。聚合关系中代表部分事物对象与代表聚合事物对象生存期无关,删除聚合对象不一定删除代表部分事物对象。
- 菱形端代表整体事物类;代表部分事物类可属于整体事物类。
- 组合(Composition):组合是“contains-a”关系,是整体与部分较强关系,部分类完全隶属于整体类。
- 组合中删除组合对象,同时也就删除代表部分事物对象。
泛化(继承)关系
是指类间的“一般-特殊”关系。
依赖关系
一模型元素变化必影响另一模型元素。
实现关系
是指一个类描述了另一个类保证实现的合约。
对象图
对象图表示一组对象之间联系,对象图是类图的实例。
类图和对象图是建立对象模型主要工具,用于各类系统:信息管理系统、数据库系统、Web应用系统、实时控制系统。
包
UML中包是对模型元素成组组织的通用机制。
- 把语言相近,可能一起变更模型元素组织在包里,便于理解复杂系统。
- 包图由包和包间联系构成,包的联系:依赖、泛化。
- 包依赖:一个元素定义改变引起另一元素发生相应改变,用虚线箭头表示包间依赖关系,虚箭线从依赖包指向独立包。
- 包泛化:两个包间有一般特殊关系,实线箭头表示包间泛化关系。
5.5 动态建模机制——状态转换图
状态转换图——图形元素
表示一个对象(或模型元素)生存史,显示触发状态转移的事件和因状态改变导致的动作。
1.状态
活动:活动名/动作表达式。
- entry入口活动、exit出口活动、do内部执行活动
组合状态:包含嵌套的子状态。
2.状态转换
事件说明〔守卫条件〕/动作表达式^发送子句
- 事件说明:事件名(参数表)
- 守卫条件:事件发生且守卫条件为真状态转换
- 动作表达式:状态转换开始,执行的表达式
- 发送子句:动作特例,在状态转换期间发送消息
3.判定
工作流按保安条件取值发生分支。
4.历史状态
转移到组合状态的历史状态,对象恢复上次离开组合状态的最后一个子状态。
5.6 动态建模机制——顺序图、协作图、活动图
消息
对象间交互通过消息。
- 简单消息:没有描述通信的细节。
- 同步消息:调用者发出消息后等待消息返回后再继续执行。
- 异步消息:调用者发出消息后不等待消息返回就继续执行。
- 返回消息:代表从过程调用的返回。
- 过程控制流:可省,隐含每个调用有配对返回;
- 非过程控制流(如异步):不可省。
顺序图(sequence diagram)
描述对象间交互关系。
- 顺序图着重表现交互时间顺序;
- 对象用矩形框表示,框内标对象名;
- 矩形框下的竖线代表对象的生命线;
- 对象生命线上的细长矩形框表示对象被激活;
- 对象间通信用对象间水平消息线表示,箭头形状表明消息类型(同步、异步或简单)。
协作图(Collaboration diagram)
描述相互协作对象间交互关系和链接关系。
- 协作图着重表现交互对象的静态链接消息;
- 协作图显示对象间处理过程的分布。
活动图(Activity diagram)
描述为完成某一个用例需要做的活动以及这些活动的执行顺序。由状态图变化而来。
- 状态图着重描述对象的状态变化以及触发状态变化的事件;
- 活动图着重描述各种活动的执行顺序。
泳道:对象对活动的责任,泳道把活动分成若干组,把组指定给对象,对象履行该组活动。
5.7 UML物理框架机制
系统架构
- 逻辑架构:描述系统功能。(用例图、类图、对象图、状态图、活动图、协作图、顺序图)
- 物理框架:关心的是实现。
- 类和对象物理上分布在哪个程序或进程中;
- 程序进程在哪台计算机上运行;
- 系统有哪些硬件设备,如何连接。
构件图(Component Diagrams)
展现了一组构件的类型、内部结构和它们之间的依赖关系。构件代表系统一物理实现块,一般作为一独立文件存在。
构件种类:部署构件 工作产品构件 执行构件 。
- 部署构件:是构成一可执行系统必要构件,如操作系统,Java虚拟机。
- 工作产品构件:开发过程产物,包括源代码文件及数据文件。构件不直接参与可执行系统,用来产生可执行系统的中间工作产品。
- 执行构件:构成一可执行系统必要构件,动态链接库、exe文件、CORBA构件、.net构件等。
配置图(Deployment diagram)
描述了系统硬件和软件物理配置情况和系统体系结构,显示系统运行时刻的结构。
配置图包含结点和连接两个元素,配置图中的结点代表实际的物理设备以及在该设备上运行的构件和对象,结点的图符是一个立方体。
配置图各结点之间进行交互的通信路径称为连接,用结点间的连线表示。
5.8 UML扩展机制
利用扩展机制,用户可定义使用自己的模型元素。
标签值
- 标签值是存储元素相关信息字符串,可附加在任何独立元素(图形元素、视图元素)。
- 标签是建模人员需要记录某些特性的名称;值是给定特性的值。
- 标签值对项目管理特别有用,如元素创建日期开发状态、完成日期和测试状态。
- 标签值用{}扩起。
约束
- 约束是用文字表达式表达的语义限制,对声明全局的或影响大量元素的条件特别适用。
- 约束表示为括 中的表达式字符串,附加在类、对象、关系上和注释上等。
版类
- 版类(版型)在模型本身中定义的一种模型元素,UML元素具有通用语义,利用版类进行专有化和扩展,在已有元素上增加新语义。
- 版类用放置在基本模型元素符 中或附近的被《》括起的文字串显示,还可为特殊版型创建图标,替换基本元素符 。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!