清华大学殷仁昆教授讲授《软件工程》讲义-04_第1页
清华大学殷仁昆教授讲授《软件工程》讲义-04_第2页
清华大学殷仁昆教授讲授《软件工程》讲义-04_第3页
清华大学殷仁昆教授讲授《软件工程》讲义-04_第4页
清华大学殷仁昆教授讲授《软件工程》讲义-04_第5页
已阅读5页,还剩123页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、软件工程软件工程1 1软件工程软件工程第四章第四章 面向对象技术面向对象技术4.1 4.1 面向对象的概念面向对象的概念4.2 Rational4.2 Rational统一开发过程统一开发过程4.3 UML4.3 UML统一建模语言统一建模语言软件工程软件工程2 2n客观世界中的应用问题面对的主体都是物理的或客观世界中的应用问题面对的主体都是物理的或概念的概念的实体实体。n从这些实体出发,分析实体的从这些实体出发,分析实体的作用作用、责任责任以及它以及它们之间们之间协作协作,从而找出问题的解,是很自然的。,从而找出问题的解,是很自然的。n面向对象技术就是适合用这种方式分析和解决问面向对象技术就

2、是适合用这种方式分析和解决问题的方法。它的基石就是题的方法。它的基石就是问题领域中识别出来的问题领域中识别出来的各种对象各种对象。依赖这些对象提供的服务和对象之间。依赖这些对象提供的服务和对象之间相互的协同(关系),实现期望的功能。相互的协同(关系),实现期望的功能。n面向对象技术能够在解决方案中直接模拟问题领面向对象技术能够在解决方案中直接模拟问题领域,并与人类的思维习惯相一致。域,并与人类的思维习惯相一致。4.1 4.1 面向对象的概念面向对象的概念软件工程软件工程3 3什么是面向对象什么是面向对象nPeter Coad 和和 Edward Yourdon 提出面向对象方提出面向对象方法的

3、概念:法的概念: 面向对象面向对象 = 对象对象 + 分类分类 + 继承继承 + 消息通信消息通信n采用这四个概念开发的软件系统就是面向对象的采用这四个概念开发的软件系统就是面向对象的软件系统。软件系统。n一个面向对象的程序的每一成份应是一个面向对象的程序的每一成份应是对象对象,计算,计算是通过新的是通过新的对象的建立对象的建立和和对象之间的通信对象之间的通信来执行来执行的。的。软件工程软件工程4 4面向对象范型的特点面向对象范型的特点n面向对象系统中的对象是面向对象系统中的对象是数据抽象数据抽象与与过程抽象过程抽象的综合体。的综合体。n所谓所谓过程抽象过程抽象是指是指当使用某个过程时,无需关

4、当使用某个过程时,无需关心过程内部的实现细节,只要知道如何调用该心过程内部的实现细节,只要知道如何调用该过程以及该过程完成什么功能即可过程以及该过程完成什么功能即可。n所谓所谓数据抽象数据抽象是是指使用结构或记录等方式把某指使用结构或记录等方式把某个实体的数据集中起来,使得使用者能够以个实体的数据集中起来,使得使用者能够以单单元为单位元为单位使用数据使用数据。n面向对象范型在数据抽象中组织过程抽象。面向对象范型在数据抽象中组织过程抽象。软件工程软件工程5 5n面向对象系统的面向对象系统的状态状态分别保存在各个对象的数分别保存在各个对象的数据存储中,而不是保存在一些全局变量中。据存储中,而不是保

5、存在一些全局变量中。n系统解决问题的系统解决问题的控制流控制流包含在各个对象中的操包含在各个对象中的操作内。并通过作内。并通过消息传递消息传递,控制流从一个对象转,控制流从一个对象转移到另一个对象。移到另一个对象。n算法被分布到各种实体中。通过执行消息传递算法被分布到各种实体中。通过执行消息传递和对象中的操作实现算法的功能。和对象中的操作实现算法的功能。软件工程软件工程6 6面向对象的特点面向对象的特点n抽象性:对象包含数据抽象和行为抽象;抽象性:对象包含数据抽象和行为抽象;n封装性:信息隐蔽(使用与实现分开);封装性:信息隐蔽(使用与实现分开);n共享性:共享性:同一个类中所有对象共享相同的

6、数据结构同一个类中所有对象共享相同的数据结构和行为;和行为;同一应用中的对象通过继承关系,共享共同一应用中的对象通过继承关系,共享共同的数据结构和行为;同的数据结构和行为;不同应用中的对象通过复用,共享数据结不同应用中的对象通过复用,共享数据结构和行为。构和行为。软件工程软件工程7 7对象(对象(object) 对象是系统中描述客观事物的实体,是构成系统对象是系统中描述客观事物的实体,是构成系统的一个基本单元,由一组属性值和一组对属性进的一个基本单元,由一组属性值和一组对属性进行操作的服务组成。行操作的服务组成。 对象对象 = = 对象名对象名+ +数据数据( (属性属性)+)+操作操作( (

7、行为行为) ) 属性值一般只能通过执行对象的操作来改变。属性值一般只能通过执行对象的操作来改变。 操作(方法或服务)描述了对象执行的功能,若操作(方法或服务)描述了对象执行的功能,若通过消息传递,还可以为其他对象使用。通过消息传递,还可以为其他对象使用。 对象可以是对象可以是外部实体外部实体、信息结构信息结构、事件事件、角色角色、组织结构组织结构、地点或位置地点或位置、操作规程操作规程等。等。软件工程软件工程8 8计算机窗口中的三个多边形对象计算机窗口中的三个多边形对象(50, 60)(50, 85)(35, 60)(35, 85)(50, 45)(60, 35)(56, 10)(46, 37

8、)(10, 50)(20, 20)(23, 30)软件工程软件工程9 9表示多边形的三个对象表示多边形的三个对象drawmove( x, y)contains?(aPoint)(10, 50)(20, 20)(23, 30)triangledrawmove( x, y)contains?(aPoint)(46, 37)(50, 45)(60, 35)(56, 10)quadrilateral1drawmove( x, y)contains?(aPoint)(35, 60)(35, 85)(50, 85)(50, 60)quadrilateral2软件工程软件工程1010类(类(classcla

9、ss) 把具有相同属性(数据结构)和服务(操作)把具有相同属性(数据结构)和服务(操作)的对象归在一起就形成了的对象归在一起就形成了类类。 类的定义包括一组数据属性和在数据上的一组类的定义包括一组数据属性和在数据上的一组合法操作。合法操作。 属于某一个类的各个对象都是该类的实例属于某一个类的各个对象都是该类的实例(instance),它们都可使用类中的操作。,它们都可使用类中的操作。 类定义了各个实例所共有的数据结构,使用类类定义了各个实例所共有的数据结构,使用类的构造函数,可以在创建该类的实例时初始化的构造函数,可以在创建该类的实例时初始化这个实例的状态。这个实例的状态。软件工程软件工程11

10、 11由两个四边形对象导出一个类由两个四边形对象导出一个类drawmove( x, y)contains?(aPoint)(46, 37)(50, 45)(60, 35)(56, 10)quadrilateral1drawmove( x, y)contains?(aPoint)(35, 60)(35, 85)(50, 85)(50, 60)quadrilateral2drawmove( x, y)contains?(aPoint)point1point2point3point4quadrilateral软件工程软件工程1212消息消息(messagemessage)消息是一个对象向另一个对象传

11、递的信息。有消息是一个对象向另一个对象传递的信息。有四类消息:发送对象四类消息:发送对象请求接收对象提供服务请求接收对象提供服务、发送对象发送对象激活接收对象激活接收对象、发送对象、发送对象询问接收对询问接收对象象、发送对象、发送对象仅传送信息给接收对象仅传送信息给接收对象。消息的使用类似于函数调用,消息中指定了某消息的使用类似于函数调用,消息中指定了某一个实例,一个操作名和一个参数表(可能是一个实例,一个操作名和一个参数表(可能是空的),如空的),如quadrilateral1. move(15, 20) 。接收消息的实例执行消息中指定的操作,并将接收消息的实例执行消息中指定的操作,并将形式

12、参数与参数表中相应的值结合起来。形式参数与参数表中相应的值结合起来。软件工程软件工程1313继承(继承(inheritanceinheritance) 如果某几个类之间具有共性的东西如果某几个类之间具有共性的东西 ( (属性和行属性和行为为) ),抽取出来放在一个泛化类中,将各个类的,抽取出来放在一个泛化类中,将各个类的特有的东西放在特化类中分别描述,则可建立特有的东西放在特化类中分别描述,则可建立起特化类对泛化类的继承。起特化类对泛化类的继承。 继承是使用已有的类定义做为基础建立新类的继承是使用已有的类定义做为基础建立新类的定义技术。定义技术。 已有的类可当做泛化类(父类)来引用,则新已有的

13、类可当做泛化类(父类)来引用,则新类相应地可当做特化类(子类)来引用。类相应地可当做特化类(子类)来引用。软件工程软件工程1414n建立继承结构的好处:建立继承结构的好处: 易编程、易理解易编程、易理解 代码短代码短, , 结构清晰结构清晰 易修改易修改 共同部分只要在一处修改即可共同部分只要在一处修改即可 易增加新类易增加新类 只须描述不同部分只须描述不同部分n怎样建立一个好的继承层次怎样建立一个好的继承层次 类可以从父类继承,父类又可以从它的父类可以从父类继承,父类又可以从它的父类继承,形成多层次的继承结构。类继承,形成多层次的继承结构。 当增加一个新类时,不一定在最低层,可当增加一个新类

14、时,不一定在最低层,可能需要插在中间层,这样可能需要调整原能需要插在中间层,这样可能需要调整原来的层次结构。来的层次结构。软件工程软件工程1515建立一个新类建立一个新类起重车起重车。它的。它的底底盘盘、发动机发动机、轮胎轮胎、驱动装置驱动装置等都在已有类等都在已有类汽车汽车中。关系如中。关系如右图所示。新类是已有类的特右图所示。新类是已有类的特殊情形。这时直接让殊情形。这时直接让起重车起重车类类作为作为汽车汽车类的子类即可。类的子类即可。起重车起重车类类汽车类汽车类汽车汽车载重车载重车大轿车大轿车救火车救火车起重车起重车软件工程软件工程1616增加一个新类增加一个新类拖拉机拖拉机。它的。它的

15、底盘底盘、发动机发动机等与等与汽车汽车不同,但不同,但驱动装置驱动装置、轮胎轮胎等与等与汽车汽车相同。相同。调整继承结构。建立一个新的一般的调整继承结构。建立一个新的一般的车辆类车辆类,把把拖拉机拖拉机与与汽车类汽车类的共性放到的共性放到车辆类车辆类中,中,拖拉拖拉机机与与汽车类汽车类都成为都成为车辆类车辆类的子类。的子类。车辆车辆是抽象类,相关操作到子类是抽象类,相关操作到子类汽车汽车找找汽车汽车拖拉机拖拉机车辆车辆汽车汽车拖拉机拖拉机软件工程软件工程1717另一种情形是在已有类的基础上加入新类,另一种情形是在已有类的基础上加入新类,使得新类成为已有类的泛化类。使得新类成为已有类的泛化类。例

16、如,已经存在例如,已经存在三角形类三角形类,四边形类四边形类,想加,想加入一个入一个多边形类多边形类,并使之成为,并使之成为三角形三角形和和四边四边形类形类的泛化类。的泛化类。三角形类三角形类四边形类四边形类多多边边形形类类六边形六边形多边形多边形四边形四边形三角形三角形软件工程软件工程1818前三个情况主要是通过查找(应用领域)类库,前三个情况主要是通过查找(应用领域)类库,找到可以找到可以原封不动地继承的类原封不动地继承的类或可以或可以通过调整通过调整继承层次结构继承的类继承层次结构继承的类。但如果在已有的继承。但如果在已有的继承层次中找不到可以继承的已有类,就从新开始层次中找不到可以继承

17、的已有类,就从新开始完全独立地建立一个类。完全独立地建立一个类。n如果一个类需要用到多个现有类的特征,可以如果一个类需要用到多个现有类的特征,可以从多个类中继承,称为从多个类中继承,称为多继承多继承。n例如例如退休教师退休教师是继承是继承退休者退休者和和教师教师这两个类的这两个类的某些特征或行为而得到的一个新类。某些特征或行为而得到的一个新类。多继承多继承软件工程软件工程1919多态性和动态绑定多态性和动态绑定n对象互相通信,即一个对象发消息给另一个对对象互相通信,即一个对象发消息给另一个对象,执行某些行为或又发消息给另外的对象,象,执行某些行为或又发消息给另外的对象,从而执行系统的功能。从而

18、执行系统的功能。退休者退休者教师教师退休教师退休教师软件工程软件工程2020多态性多态性指同名的函数或操作可在不同类型的指同名的函数或操作可在不同类型的对象中有各自相应的实现。例如对象中有各自相应的实现。例如v 整数整数“+”:整数加法:整数加法v 浮点数浮点数“+”:浮点数加法:浮点数加法v 字符串字符串“+”:字符串连接:字符串连接v 点点“+”:两个点的坐标位置分别叠加:两个点的坐标位置分别叠加具有多态的函数或操作在运行时才根据实际具有多态的函数或操作在运行时才根据实际的对象类型,执行相应实现程序的连接,此的对象类型,执行相应实现程序的连接,此即动态绑定。即动态绑定。软件工程软件工程21

19、21n例如,想要在屏幕上画一系列多边形,例如,想要在屏幕上画一系列多边形,多态多态性性允许发送消息允许发送消息draw,根据消息接收对象的,根据消息接收对象的类型不同,画出不同的多边形。类型不同,画出不同的多边形。ndraw针对的是一系列的类型(类族)而不仅针对的是一系列的类型(类族)而不仅仅是一个类型。仅是一个类型。n多态性的实现有多态性的实现有 2 种:种: 利用利用继承继承关系,把所有数据类型当作一个关系,把所有数据类型当作一个抽象数据类型的子类型。抽象数据类型的子类型。软件工程软件工程2222 利用利用模板模板机制,把所有可能的数据类型用机制,把所有可能的数据类型用一个参数化的数据类型

20、来代替。一个参数化的数据类型来代替。n动态绑定保证在程序执行时实施与对象动态绑定保证在程序执行时实施与对象 P 连连接的操作。如果接的操作。如果 P 是是矩形类矩形类的实例,则执行的实例,则执行与与矩形矩形连接的操作,如果连接的操作,如果 P 是是三角形类三角形类的实的实例,则执行与例,则执行与三角形三角形连接的操作。连接的操作。n动态绑定把函数调用与目标代码块的连接延动态绑定把函数调用与目标代码块的连接延迟到运行时进行。这样,只有发送消息时才迟到运行时进行。这样,只有发送消息时才与接收消息实例的一个操作绑定。与接收消息实例的一个操作绑定。软件工程软件工程23234.2 Rational4.2

21、 Rational统一开发过程统一开发过程最佳软件开发实践最佳软件开发实践 为了以一种更好的、迭代的、可预测的方式开为了以一种更好的、迭代的、可预测的方式开发软件产品,总结了软件开发的最佳实践:发软件产品,总结了软件开发的最佳实践:迭代式软件开发;迭代式软件开发;需求管理;需求管理;基于构件的软件体系结构;基于构件的软件体系结构;建立软件可视化模型;建立软件可视化模型;不断验证软件质量;不断验证软件质量;控制变更。控制变更。软件工程软件工程2424Rational统一开发过程统一开发过程 软件开发过程的作用是:软件开发过程的作用是:成为开发组活动顺序的向导。成为开发组活动顺序的向导。详细说明需

22、要开发哪些制品,何时开发。详细说明需要开发哪些制品,何时开发。指导每一个成员及整个开发组的工作。指导每一个成员及整个开发组的工作。提供监控和度量项目产品和活动所依据的提供监控和度量项目产品和活动所依据的准则。准则。如果没有一个良好定义的过程,开发组将各行如果没有一个良好定义的过程,开发组将各行其是,开发成功与否完全依赖个别优秀的人才,其是,开发成功与否完全依赖个别优秀的人才,这不是能够长久的。这不是能够长久的。软件工程软件工程2525nRational统一开发过程(统一开发过程(RUP, Rational Unify Process)描述了如何在软件开发组织中严格分)描述了如何在软件开发组织中

23、严格分配任务和职责的方法。配任务和职责的方法。nRUP 是一个过程产品,是一个过程产品,软件过程也是软件。软件过程也是软件。nRUP 采用二维的过程结构:采用二维的过程结构:横轴表明过程的生存周期,它反映了过程被横轴表明过程的生存周期,它反映了过程被激活时的动态情况,用周期、阶段、迭代和激活时的动态情况,用周期、阶段、迭代和里程碑表示。里程碑表示。纵轴表明过程的静态状况,通过过程构件、纵轴表明过程的静态状况,通过过程构件、活动、工作流、制品和工作人员描述过程。活动、工作流、制品和工作人员描述过程。软件工程软件工程2626初始初始细化细化构造构造移交移交阶阶 段段初始化初始化细化细化#1细化细化

24、#2构造构造#1 构造构造#2 构造构造#3 移交移交#1移交移交#2迭代迭代 工作流工作流业务建模业务建模需求需求 分析与设计分析与设计实现实现测试测试实施实施配置和变更管理配置和变更管理项目管理项目管理环境环境沿时间轴的组织结构沿时间轴的组织结构沿内容轴的组织沿内容轴的组织软件工程软件工程2727过程的静态描述:过程模型过程的静态描述:过程模型 过程模型中的主要模型元素有过程模型中的主要模型元素有 4 种:种:v工作人员:谁做(工作人员:谁做(Who)v活动:怎么做(活动:怎么做(How)v制品:做什么(制品:做什么(what)v工作流:何时做(工作流:何时做(when) 过程的中心概念是

25、工作人员,工作人员不是过程的中心概念是工作人员,工作人员不是指某一个人,而是指完成工作的角色。工作指某一个人,而是指完成工作的角色。工作人员定义人们应履行的行为和职责。人员定义人们应履行的行为和职责。软件工程软件工程2828 活动定义了工作人员所执行的工作。有活动定义了工作人员所执行的工作。有 3 类类步骤:步骤:v 思考步骤思考步骤v 执行步骤执行步骤v 评审步骤评审步骤 制品是过程生产、修改或使用的一些信息。制品是过程生产、修改或使用的一些信息。RUP 的制品分为的制品分为 5 个信息集。个信息集。 管理集管理集:计划制品、操作制品:计划制品、操作制品 需求集需求集:构想文档、项目相关人员

26、需求、:构想文档、项目相关人员需求、用例模型和业务模型用例模型和业务模型软件工程软件工程2929v 设计集设计集:设计模型、软件体系结构描述、:设计模型、软件体系结构描述、测试模型测试模型v 实现集实现集:源代码和可执行程序、相关数:源代码和可执行程序、相关数据结构和数据文档据结构和数据文档v 实施集实施集:安装资料、用户文档、培训材:安装资料、用户文档、培训材料料v 工作流用来描述生成结果的活动序列,用工作流用来描述生成结果的活动序列,用以描述工作人员之间的交互。在以描述工作人员之间的交互。在 RUP 中中共有共有 9 个核心过程工作流,包括个核心过程工作流,包括 6 个核心个核心工程工作流

27、和工程工作流和 3 个核心支持工作流。个核心支持工作流。软件工程软件工程3030v 业务建模工作流业务建模工作流:描述业务过程的本质和:描述业务过程的本质和执行情形。执行情形。v 需求工作流需求工作流:定义系统构想,使用用例模:定义系统构想,使用用例模型和补充规格说明定义系统软件需求,管型和补充规格说明定义系统软件需求,管理系统范围和需求变更。理系统范围和需求变更。v 分析和设计工作流分析和设计工作流:研究实现环境和系统:研究实现环境和系统构件的效用,定义软件的组织结构,把需构件的效用,定义软件的组织结构,把需求获取结果转化为实现规格。求获取结果转化为实现规格。v 实现工作流实现工作流: 建立

28、代码的分层结构,实现建立代码的分层结构,实现类和对象,进行单元测试和系统集成。类和对象,进行单元测试和系统集成。软件工程软件工程3131v 测试工作流测试工作流:根据事先定义的度量和准根据事先定义的度量和准则检查产品,确认产品是否满足或者超则检查产品,确认产品是否满足或者超出事先定义并被一致接受的需求。出事先定义并被一致接受的需求。v 实施工作流实施工作流:在实际使用环境中测试软在实际使用环境中测试软件、包装要交付的软件、发布软件产品、件、包装要交付的软件、发布软件产品、培训最终用户及销售人员。培训最终用户及销售人员。n核心支持工作流有核心支持工作流有 项目管理工作流项目管理工作流 配置和变更

29、管理工作流配置和变更管理工作流 环境环境工作流工作流软件工程软件工程3232过程的动态描述:迭代开发过程的动态描述:迭代开发 将一个大项目分解为可连续应用瀑布模型将一个大项目分解为可连续应用瀑布模型的几个小部分。在对一部分进行分析、设的几个小部分。在对一部分进行分析、设计、实现并确认后,再对下一部分进行分计、实现并确认后,再对下一部分进行分析、设计、实现和确认。以此进行下去,析、设计、实现和确认。以此进行下去,直到整个项目完成。在直到整个项目完成。在 RUP 中,迭代过程中,迭代过程分为几个阶段。分为几个阶段。初始初始细化细化构造构造移交移交生存周期生存周期构架里程碑构架里程碑生存周期生存周期

30、目标里程碑目标里程碑最初运行最初运行能力里程碑能力里程碑产品发布产品发布里程碑里程碑时间时间软件工程软件工程3333初始阶段初始阶段:确定最终产品的构想及其用例,:确定最终产品的构想及其用例,定义项目范围。定义项目范围。细化阶段细化阶段:计划需完成活动和资源,详细说:计划需完成活动和资源,详细说明产品特性并设计软件体系结构。明产品特性并设计软件体系结构。构造阶段构造阶段:构造整个产品,逐步完善软件体:构造整个产品,逐步完善软件体系结构和计划,直到产品(完整的构想)已系结构和计划,直到产品(完整的构想)已完全准备好交付给用户。完全准备好交付给用户。移交阶段移交阶段:移交产品给用户,包括制造,交:

31、移交产品给用户,包括制造,交付,培训,支持及维护产品。付,培训,支持及维护产品。软件工程软件工程3434n这这 4 个阶段构成开发周期,周期结束时产生个阶段构成开发周期,周期结束时产生一代新的软件产品。一代新的软件产品。n软件产品产生于初始开发周期,随着重复执软件产品产生于初始开发周期,随着重复执行同样的过程,软件发展到下一代产品,这行同样的过程,软件发展到下一代产品,这一时期即为软件的进化周期。一时期即为软件的进化周期。 I E C T I E C T I E C T V1V2V3初始开发周期初始开发周期进化周期进化周期软件工程软件工程3535Rational统一过程的特点:统一过程的特点:

32、v用例驱动的、以体系结构(架构)为中心用例驱动的、以体系结构(架构)为中心的、迭代和增量的过程。的、迭代和增量的过程。v用例建模技术可以用为大多数项目相关人用例建模技术可以用为大多数项目相关人员理解的形式来表述问题。员理解的形式来表述问题。 参与者(参与者(Actor) 用例(用例(Use Case) 场景场景(scenario) 事件流(事件流(event flow)Actoruse case软件工程软件工程3636n用例和参与者的事例用例和参与者的事例 银行储户通过自动取款机(自动柜员机)提款,银行储户通过自动取款机(自动柜员机)提款,转账或检查账户余额。用一组用例表达如下:转账或检查账户

33、余额。用一组用例表达如下:转账转账提款提款检察账户余额检察账户余额储户储户软件工程软件工程3737n用例模型用例模型 将整个系统或子系统的所有用例,以及将整个系统或子系统的所有用例,以及与之交互的参与者集合起来构成系统的与之交互的参与者集合起来构成系统的用例模型。用例模型。 用例模型给出系统预期功能模型和系统用例模型给出系统预期功能模型和系统上下文环境模型,它成为开发人员和用上下文环境模型,它成为开发人员和用户之间的契约。户之间的契约。 用例模型的目的是确保系统能处理所有用例模型的目的是确保系统能处理所有的功能性需求。的功能性需求。软件工程软件工程3838n用例驱动的过程用例驱动的过程 “用例

34、驱动用例驱动” 指开发过程是基于用例,从指开发过程是基于用例,从一个工作流向下一个工作流,逐步前进的。一个工作流向下一个工作流,逐步前进的。 开发初期,人们使用用例获取用户需求,开发初期,人们使用用例获取用户需求,建立用例模型,描述系统的全部功能。建立用例模型,描述系统的全部功能。 基于用例模型,人们创建一系列实现这些基于用例模型,人们创建一系列实现这些用例的分析模型、设计模型和实现模型。用例的分析模型、设计模型和实现模型。 测试人员测试实现确保系统正确实现了用测试人员测试实现确保系统正确实现了用例。例。软件工程软件工程3939n以体系结构为中心的过程以体系结构为中心的过程 用例的选择不是孤立

35、的,它与软件的体系结用例的选择不是孤立的,它与软件的体系结构是密切相关的。构是密切相关的。 软件体系结构的作用与一个建筑的体系结构软件体系结构的作用与一个建筑的体系结构类似。对于一个建筑,可以从框架结构、供类似。对于一个建筑,可以从框架结构、供热、上下水、供电、天然气、其他服务管线热、上下水、供电、天然气、其他服务管线等不同角度来考察它。使得施工人员在施工等不同角度来考察它。使得施工人员在施工前就能全面了解这个建筑。前就能全面了解这个建筑。 软件的体系结构也从不同角度描述了即将构软件的体系结构也从不同角度描述了即将构造的系统,包括系统的造的系统,包括系统的静态特征静态特征和和动态特征动态特征。

36、软件工程软件工程4040 每一种产品都有功能和表现形式两个方面。每一种产品都有功能和表现形式两个方面。用例就是功能用例就是功能,体系结构就是表现形式体系结构就是表现形式。 在开发过程中,必须兼顾功能和表现形式,在开发过程中,必须兼顾功能和表现形式,做出适当权衡,才能得到好的产品。因此,做出适当权衡,才能得到好的产品。因此,用例和体系结构必须在迭代中并行演进用例和体系结构必须在迭代中并行演进。 为了找到可以演进的体系结构,设计师必须为了找到可以演进的体系结构,设计师必须从全面了解系统的主要功能(即主要用例)从全面了解系统的主要功能(即主要用例)入手。入手。软件工程软件工程41414.3 4.3

37、统一建模语言统一建模语言UMLUMLnUML 是是Unified Modeling Language的缩写。的缩写。 它它是一种标准的语言,以直观的表述、定义、构造是一种标准的语言,以直观的表述、定义、构造和文档化软件为主的系统的工作制品。和文档化软件为主的系统的工作制品。nUML聚集了来自下列建模的精髓:聚集了来自下列建模的精髓: 数据建模(实体关系图数据建模(实体关系图ERD) 业务建模业务建模 (工作流)(工作流) 对象建模对象建模 构件建模构件建模n它可用于软件生命周期各个过程,并适用于各种它可用于软件生命周期各个过程,并适用于各种不同的实现技术。不同的实现技术。软件工程软件工程424

38、2UMLUML的特点的特点n统一标准统一标准 融合了当前一些流行的面向对象开发方法融合了当前一些流行的面向对象开发方法的主要概念和技术,成为一种面向对象的的主要概念和技术,成为一种面向对象的标准化的统一建模语言。标准化的统一建模语言。 提供了标准的面向对象的模型元素的定义提供了标准的面向对象的模型元素的定义和表示法,有标准的语言工具可用。和表示法,有标准的语言工具可用。 已成为工业标准化组织已成为工业标准化组织OMG的正式标准。的正式标准。n面向对象面向对象 支持面向对象的主要概念,提供了一批基支持面向对象的主要概念,提供了一批基本的模型元素的表示图形和方法。本的模型元素的表示图形和方法。软件

39、工程软件工程4343n可视化,表示能力强大可视化,表示能力强大 一种图形化语言,系统的逻辑模型和实现一种图形化语言,系统的逻辑模型和实现模型都能用模型都能用UML的模型图形清晰地表示。的模型图形清晰地表示。 可以处理与软件的说明和文档有关的问题。可以处理与软件的说明和文档有关的问题。 提供了语言的扩展机制,用户可以根据需提供了语言的扩展机制,用户可以根据需要增加定义自己的衍型(要增加定义自己的衍型(StereoType)、标)、标记值和约束等。记值和约束等。 可用于各种复杂类型的软件系统的建模。可用于各种复杂类型的软件系统的建模。n独立于过程独立于过程 系统建模语言,独立于开发过程。系统建模语

40、言,独立于开发过程。软件工程软件工程4444n容易掌握使用容易掌握使用 概念明确,建模表示法简洁明了,图形结构概念明确,建模表示法简洁明了,图形结构清晰,容易掌握使用。清晰,容易掌握使用。 着重学习三个方面的主要内容:着重学习三个方面的主要内容: (1) UML的基本模型元素的基本模型元素 (2) 组织模型元素的规则组织模型元素的规则 (3) UML语言的公共机制语言的公共机制n与程序设计语言的关系与程序设计语言的关系 用用Java,C+ 等编程语言可实现一个系统。等编程语言可实现一个系统。 一些一些CASE工具可以根据工具可以根据 UML所建立的系统所建立的系统模型来产生模型来产生Java、

41、C+ 等代码框架。等代码框架。软件工程软件工程4545UMLUML的定义的定义nUML定义有两个组成部分:语义和表示法。定义有两个组成部分:语义和表示法。n语义语义用自然语言描述,用自然语言描述,表示法表示法定义了定义了UML的可的可视化标准表示符号,这决定了视化标准表示符号,这决定了UML是一种可视是一种可视化的建模语言。化的建模语言。n在语义上,模型是元模型的实例。在语义上,模型是元模型的实例。UML定义给定义给出了语法结构的精确定义。出了语法结构的精确定义。n使用使用UML时,要从不同的角度观察系统,为此时,要从不同的角度观察系统,为此定义了概念定义了概念“视图视图”。视图是对系统的模型

42、在某。视图是对系统的模型在某方面的投影,注重于系统的某个方面。方面的投影,注重于系统的某个方面。软件工程软件工程4646UMLUML的构成的构成nUML的三个主要组成元素的三个主要组成元素基本构造块基本构造块(basic building blocks )组织构造块的组织构造块的规则规则(rules)运用于整个运用于整个UML的的公共机制公共机制(common mechanisms)nUML包括三种基本构造块包括三种基本构造块:事物(事物(things)关系(关系(relationships)1) 图(图(diagrams)软件工程软件工程4747UML UML 事物事物 结构事物结构事物Cl

43、ass(类)(类)Interface(接口)(接口) 描述了一个类或构件的描述了一个类或构件的服务(操作)集。服务(操作)集。ISpelling 类名类名属性属性操作操作open( )close( )move( )display( )originsizeWindow操作操作属性属性类名类名软件工程软件工程4848Collaboration(协作)(协作) 合作完成某个特定任务的一组类及其关联的合作完成某个特定任务的一组类及其关联的集合,用于对用例的实现建模。集合,用于对用例的实现建模。Use Case(用例)(用例) 表示系统想要实现的行为,不关心这些行为表示系统想要实现的行为,不关心这些行为

44、是怎样实现的。是怎样实现的。Place OrderOrderManagement用例用例协作协作实现实现实现实现协作协作用例用例软件工程软件工程4949Active Class(主动类)(主动类) 与一般类相同,但它至少拥有一个进程或与一般类相同,但它至少拥有一个进程或线程,故能够启动控制活动。线程,故能够启动控制活动。Component(构件)(构件) 系统中物理的、可替系统中物理的、可替代的部件。代的部件。Orderform.java suspend()flush()EventManager软件工程软件工程5050Node(节点)(节点) 系统在运行时存在的物理元素。系统在运行时存在的物理

45、元素。数据库数据库服务器服务器应用应用服务器服务器课程课程管理管理成绩成绩管理管理软件工程软件工程5151UMLUML事物事物 行为事物行为事物Interaction(交互)(交互)n交互由在特定的上下文环境中共同完成一定任交互由在特定的上下文环境中共同完成一定任务的一组对象之间传递的消息组成。务的一组对象之间传递的消息组成。n交互涉及的元素包括消息、动作序列和链。交互涉及的元素包括消息、动作序列和链。p:Person:CompanyAssign(development)消息消息有名对象有名对象匿名对象匿名对象有名对象有名对象匿名对象匿名对象消息消息软件工程软件工程5252State Mach

46、ine(状态机)(状态机) 状态机描述了一个对象或一个交互在生存状态机描述了一个对象或一个交互在生存周期内响应事件所经历的状态序列。周期内响应事件所经历的状态序列。 状态机涉及的元素包括状态、转换、事件状态机涉及的元素包括状态、转换、事件活动等。活动等。initializingcommandidleKeypressFinishedExit软件工程软件工程5353UMLUML事物事物 分组事物分组事物package(包)(包) 包是把元素组织成组的机制,结构事物、行包是把元素组织成组的机制,结构事物、行为事物甚至其他分组事物都可以放进包内。为事物甚至其他分组事物都可以放进包内。 包不象构件(仅在

47、运行时存在),它纯粹是包不象构件(仅在运行时存在),它纯粹是概念上的(即它仅在开发时存在)。概念上的(即它仅在开发时存在)。用户接口用户接口包包业务对象业务对象包包应用包应用包软件工程软件工程5454UMLUML事物事物 注释事物注释事物Note(注释)(注释) 依附于一个元素或一组元素之上,对其进依附于一个元素或一组元素之上,对其进行约束或解释的简单符号。行约束或解释的简单符号。CashAccountpresentValue()See policy8-5-96.doc for details about these algorithms.软件工程软件工程5555UML Relationshi

48、psUML Relationships(关系)(关系)nUML中有中有 4 种关系:种关系: 依赖依赖 关联关联 泛化泛化 实现实现 n关系特征:关系特征: 这四种关系是这四种关系是UML模型中可以包含的基本模型中可以包含的基本关系。关系。 它们也有变体。例如,依赖的变体有细化、它们也有变体。例如,依赖的变体有细化、跟踪、包含和延伸。跟踪、包含和延伸。软件工程软件工程5656依赖(依赖(Dependency) 两个事物之间的语义关系,其中目标事物发两个事物之间的语义关系,其中目标事物发生变化会影响源事物的语义。生变化会影响源事物的语义。 图中虚线箭头从图中虚线箭头从源源事物指向事物指向目标目标

49、事物,表示事物,表示源事物依赖于目标事物。源事物依赖于目标事物。CourseScheduleadd(c:Course)remove(c:Course)CourseIterator软件工程软件工程5757n两个类之间的依赖关系可以是:两个类之间的依赖关系可以是: 源类源类访问访问定义在目标类内部的数据值;定义在目标类内部的数据值; 源类的操作源类的操作调用调用了定义在目标类的操作;了定义在目标类的操作; 源类的返回类或参数是目标类的源类的返回类或参数是目标类的实例实例;n如果在顺序图中的两个对象存在消息的传送,如果在顺序图中的两个对象存在消息的传送,而且它们之间没有结构方面的连接,可以在类而且它

50、们之间没有结构方面的连接,可以在类图上用依赖关系建模。图上用依赖关系建模。n依赖的变体包含特定的语义,表明类之间的关依赖的变体包含特定的语义,表明类之间的关系、包之间的关系、用例之间的关系、对象之系、包之间的关系、用例之间的关系、对象之间的关系、建模元素与模型之间的关系等。间的关系、建模元素与模型之间的关系等。软件工程软件工程5858n类之间的依赖关系类之间的依赖关系可以是:可以是:v 友元依赖友元依赖 v目标类(如二叉树)视源类(如迭代器)目标类(如二叉树)视源类(如迭代器)为友元,允许源类访问目标类的所有私有属为友元,允许源类访问目标类的所有私有属性和操作。性和操作。v 导出依赖导出依赖

51、a.两个类或对象如果存在导出依赖,则表两个类或对象如果存在导出依赖,则表明源类(如年龄)可以从目标类(如出生年明源类(如年龄)可以从目标类(如出生年月)通过计算导出。月)通过计算导出。IteratorBinaryTreeAgeBirthDay软件工程软件工程5959v 细化依赖细化依赖 在类图中表示同一模型的不同详细程度的规在类图中表示同一模型的不同详细程度的规格说明,源类比目标类更为详细。格说明,源类比目标类更为详细。v 实例化依赖实例化依赖 若要强调一个类的对象是由另一个类的对象若要强调一个类的对象是由另一个类的对象创建的,可用实例化依赖。它表明源类创建创建的,可用实例化依赖。它表明源类创

52、建了目标类的一个实例。了目标类的一个实例。Chessboardfrom optimizedchessboardfrom simpleArrayStack软件工程软件工程6060v 使用依赖使用依赖 不加任何修饰的依赖即为使用依赖。也可用不加任何修饰的依赖即为使用依赖。也可用修饰修饰强调源类的语义依赖于目标类强调源类的语义依赖于目标类的具有共有可见性的构成的语义。的具有共有可见性的构成的语义。v 绑定(绑定(Binding)依赖)依赖v这种依赖关系中的目标类是模板类,源这种依赖关系中的目标类是模板类,源类是从模板实例化的类。类是从模板实例化的类。Binary SearchTreeBinary T

53、ree Stack Stack软件工程软件工程6161n包之间的依赖关系包之间的依赖关系可以是:可以是:访问依赖访问依赖 它表明源包被赋予了可访问目标包的权它表明源包被赋予了可访问目标包的权限。限。导入依赖导入依赖 a.它表明了源包可以访问目标包里的元素,它表明了源包可以访问目标包里的元素,但各个包有自己独立的命名空间,这意味着属但各个包有自己独立的命名空间,这意味着属于不同包的两个元素可以重名。导入依赖可以于不同包的两个元素可以重名。导入依赖可以使目标包内的公共可见元素进入源包的命名空使目标包内的公共可见元素进入源包的命名空间。间。sourcetargetsourcetarget软件工程软件

54、工程6262n用例之间的依赖关系用例之间的依赖关系可以是:可以是:包含依赖包含依赖 它表明源用例显式地包含目标用例作为它表明源用例显式地包含目标用例作为其行为的一部分。此时将源用例称为其行为的一部分。此时将源用例称为基用例基用例,目标用例称为目标用例称为内含用例内含用例。如果两个用例之间具有包含依赖关系,如果两个用例之间具有包含依赖关系,则表明基用例的动作序列中有特定的步骤把内则表明基用例的动作序列中有特定的步骤把内含用例的动作序列包含进来。含用例的动作序列包含进来。a.扩展依赖扩展依赖 base use caseinclusion use case软件工程软件工程6363它表明源用例扩展了目

55、标用例的行为。此时,它表明源用例扩展了目标用例的行为。此时,源用例称为源用例称为基用例基用例,目标用例称为,目标用例称为扩展用例扩展用例。扩展用例在特定条件下为基用例提供附加的动扩展用例在特定条件下为基用例提供附加的动态行为。例如,在人机交互过程中出现差错时态行为。例如,在人机交互过程中出现差错时进行的异常处理即为扩展动作。进行的异常处理即为扩展动作。扩展依赖与包含依赖的区别在于,如果仅将扩扩展依赖与包含依赖的区别在于,如果仅将扩展从基用例地动作序列中去除,基用例仍然是展从基用例地动作序列中去除,基用例仍然是语义完备的,即它的执行仍将产生有意义的结语义完备的,即它的执行仍将产生有意义的结果。而

56、包含依赖则不然。果。而包含依赖则不然。base use caseextension use case软件工程软件工程6464n对象之间的依赖关系对象之间的依赖关系可以是:可以是:v 转换依赖转换依赖 v当需要在交互图上表示对象状态的转换当需要在交互图上表示对象状态的转换时可以用转换依赖。主要强调由于消息而导致时可以用转换依赖。主要强调由于消息而导致对象状态的改变。转换依赖连接的目标对象和对象状态的改变。转换依赖连接的目标对象和源对象是同一个对象。源对象是同一个对象。v 调用依赖调用依赖 v当需要在交互图或对象图上显式强调对当需要在交互图或对象图上显式强调对象之间或操作之间的调用关系时要用调用依

57、赖。象之间或操作之间的调用关系时要用调用依赖。它表明源对象引用了目标对象的操作,或源操它表明源对象引用了目标对象的操作,或源操作引用了目标操作。作引用了目标操作。a.复制依赖复制依赖 软件工程软件工程6565为了在交互图或活动图上描述对象复制的动作为了在交互图或活动图上描述对象复制的动作可以采用复制依赖。它连接两个对象,目标对可以采用复制依赖。它连接两个对象,目标对象是源对象的完全相同而又独立的副本。象是源对象的完全相同而又独立的副本。v 发送依赖发送依赖 它连接一个对象(在源端)和一个消息(在目它连接一个对象(在源端)和一个消息(在目标端),表明源对象在交互过程中发送了一个标端),表明源对象

58、在交互过程中发送了一个消息,可以用在状态机的描述中。消息,可以用在状态机的描述中。它针对内嵌有状态机的对象,可用来描述如何它针对内嵌有状态机的对象,可用来描述如何通过发送信号以产生某种事件的动作。通过发送信号以产生某种事件的动作。n建模元素与模型之间的依赖关系建模元素与模型之间的依赖关系是:是:v 回溯依赖回溯依赖 d.它连接两个模型元素,表明目标是源的历它连接两个模型元素,表明目标是源的历史上的前驱。如交互和协作就是从用例导出的。史上的前驱。如交互和协作就是从用例导出的。软件工程软件工程6666关联(关联(Association) 关联关联是一种结构关系,它描述一组链,这是一种结构关系,它描

59、述一组链,这些链是类之间或类与接口之间的连接。通些链是类之间或类与接口之间的连接。通过这种连接,一个对象可以访问另一个对过这种连接,一个对象可以访问另一个对象的属性或调用另一个对象的操作。象的属性或调用另一个对象的操作。 关联是双向的,其中的角色代表一个类的关联是双向的,其中的角色代表一个类的对象在另一个类中的存在。对象在另一个类中的存在。 聚合(聚合(aggregation)是一种特殊类型的关是一种特殊类型的关联,它描述了整体和部分间的结构关系。联,它描述了整体和部分间的结构关系。employeremployee0.1*软件工程软件工程6767 聚合关系在整体端有一个菱形作为标记。聚合关系在

60、整体端有一个菱形作为标记。 复合聚合(复合聚合(composite aggregate) 是一种特是一种特殊的聚合关系,它表明整体对象与部分对象殊的聚合关系,它表明整体对象与部分对象具有相同的生存周期。具有相同的生存周期。3)角色的重复度(角色的重复度(Multiplicity)复合聚合复合聚合, ,双向导航双向导航0.*0.10.*整体整体 类名类名部分部分 类名类名2部分部分 类名类名1聚合聚合, ,单向导航单向导航0.1软件工程软件工程6868表明角色在关联关系中出现的次数。如表明角色在关联关系中出现的次数。如1,0.1,1.*,*等。等。 导航(导航(navigation)一般默认关联

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论