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

下载本文档

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

文档简介

1、软件工程,1,软件工程第四章 面向对象技术,4.1 面向对象的概念 4.2 Rational统一开发过程 4.3 UML统一建模语言,软件工程,2,客观世界中的应用问题面对的主体都是物理的或概念的实体。 从这些实体出发,分析实体的作用、责任以及它们之间协作,从而找出问题的解,是很自然的。 面向对象技术就是适合用这种方式分析和解决问题的方法。它的基石就是问题领域中识别出来的各种对象。依赖这些对象提供的服务和对象之间相互的协同(关系),实现期望的功能。 面向对象技术能够在解决方案中直接模拟问题领域,并与人类的思维习惯相一致。,4.1 面向对象的概念,软件工程,3,什么是面向对象,Peter Coa

2、d 和 Edward Yourdon 提出面向对象方法的概念: 面向对象 = 对象 + 分类 + 继承 + 消息通信 采用这四个概念开发的软件系统就是面向对象的软件系统。 一个面向对象的程序的每一成份应是对象,计算是通过新的对象的建立和对象之间的通信来执行的。,软件工程,4,面向对象范型的特点,面向对象系统中的对象是数据抽象与过程抽象的综合体。 所谓过程抽象是指当使用某个过程时,无需关心过程内部的实现细节,只要知道如何调用该过程以及该过程完成什么功能即可。 所谓数据抽象是指使用结构或记录等方式把某个实体的数据集中起来,使得使用者能够以单元为单位使用数据。 面向对象范型在数据抽象中组织过程抽象。

3、,软件工程,5,面向对象系统的状态分别保存在各个对象的数据存储中,而不是保存在一些全局变量中。 系统解决问题的控制流包含在各个对象中的操作内。并通过消息传递,控制流从一个对象转移到另一个对象。 算法被分布到各种实体中。通过执行消息传递和对象中的操作实现算法的功能。,软件工程,6,面向对象的特点,抽象性:对象包含数据抽象和行为抽象; 封装性:信息隐蔽(使用与实现分开); 共享性: 同一个类中所有对象共享相同的数据结构和行为; 同一应用中的对象通过继承关系,共享共同的数据结构和行为; 不同应用中的对象通过复用,共享数据结构和行为。,软件工程,7,对象(object),对象是系统中描述客观事物的实体

4、,是构成系统的一个基本单元,由一组属性值和一组对属性进行操作的服务组成。 对象 = 对象名+数据(属性)+操作(行为) 属性值一般只能通过执行对象的操作来改变。 操作(方法或服务)描述了对象执行的功能,若通过消息传递,还可以为其他对象使用。 对象可以是外部实体、信息结构、事件、角色、组织结构、地点或位置、操作规程等。,软件工程,8,计算机窗口中的三个多边形对象,软件工程,9,表示多边形的三个对象,软件工程,10,类(class),把具有相同属性(数据结构)和服务(操作)的对象归在一起就形成了类。 类的定义包括一组数据属性和在数据上的一组合法操作。 属于某一个类的各个对象都是该类的实例(inst

5、ance),它们都可使用类中的操作。 类定义了各个实例所共有的数据结构,使用类的构造函数,可以在创建该类的实例时初始化这个实例的状态。,软件工程,11,由两个四边形对象导出一个类,软件工程,12,消息(message),消息是一个对象向另一个对象传递的信息。有四类消息:发送对象请求接收对象提供服务、发送对象激活接收对象、发送对象询问接收对象、发送对象仅传送信息给接收对象。 消息的使用类似于函数调用,消息中指定了某一个实例,一个操作名和一个参数表(可能是空的),如quadrilateral1. move(15, 20) 。 接收消息的实例执行消息中指定的操作,并将形式参数与参数表中相应的值结合起

6、来。,软件工程,13,继承(inheritance),如果某几个类之间具有共性的东西 (属性和行为),抽取出来放在一个泛化类中,将各个类的特有的东西放在特化类中分别描述,则可建立起特化类对泛化类的继承。 继承是使用已有的类定义做为基础建立新类的定义技术。 已有的类可当做泛化类(父类)来引用,则新类相应地可当做特化类(子类)来引用。,软件工程,14,建立继承结构的好处: 易编程、易理解 代码短, 结构清晰 易修改 共同部分只要在一处修改即可 易增加新类 只须描述不同部分 怎样建立一个好的继承层次 类可以从父类继承,父类又可以从它的父类继承,形成多层次的继承结构。 当增加一个新类时,不一定在最低层

7、,可能需要插在中间层,这样可能需要调整原来的层次结构。,软件工程,15,建立一个新类起重车。它的底盘、发动机、轮胎、驱动装置等都在已有类汽车中。关系如右图所示。新类是已有类的特殊情形。这时直接让起重车类作为汽车类的子类即可。,软件工程,16,增加一个新类拖拉机。它的底盘、发动机等与汽车不同,但驱动装置、轮胎等与汽车相同。 调整继承结构。建立一个新的一般的车辆类,把拖拉机与汽车类的共性放到车辆类中,拖拉机与汽车类都成为车辆类的子类。 车辆是抽象类,相关操作到子类汽车找。,软件工程,17,另一种情形是在已有类的基础上加入新类,使得新类成为已有类的泛化类。 例如,已经存在三角形类,四边形类,想加入一

8、个多边形类,并使之成为三角形和四边形类的泛化类。,软件工程,18,前三个情况主要是通过查找(应用领域)类库,找到可以原封不动地继承的类或可以通过调整继承层次结构继承的类。但如果在已有的继承层次中找不到可以继承的已有类,就从新开始完全独立地建立一个类。 如果一个类需要用到多个现有类的特征,可以从多个类中继承,称为多继承。 例如退休教师是继承退休者和教师这两个类的某些特征或行为而得到的一个新类。,多继承,软件工程,19,多态性和动态绑定,对象互相通信,即一个对象发消息给另一个对象,执行某些行为或又发消息给另外的对象,从而执行系统的功能。,软件工程,20,多态性指同名的函数或操作可在不同类型的对象中

9、有各自相应的实现。例如 整数“+”:整数加法 浮点数“+”:浮点数加法 字符串“+”:字符串连接 点“+”:两个点的坐标位置分别叠加 具有多态的函数或操作在运行时才根据实际的对象类型,执行相应实现程序的连接,此即动态绑定。,软件工程,21,例如,想要在屏幕上画一系列多边形,多态性允许发送消息draw,根据消息接收对象的类型不同,画出不同的多边形。 draw针对的是一系列的类型(类族)而不仅仅是一个类型。 多态性的实现有 2 种: 利用继承关系,把所有数据类型当作一个抽象数据类型的子类型。,软件工程,22,利用模板机制,把所有可能的数据类型用一个参数化的数据类型来代替。 动态绑定保证在程序执行时

10、实施与对象 P 连接的操作。如果 P 是矩形类的实例,则执行与矩形连接的操作,如果 P 是三角形类的实例,则执行与三角形连接的操作。 动态绑定把函数调用与目标代码块的连接延迟到运行时进行。这样,只有发送消息时才与接收消息实例的一个操作绑定。,软件工程,23,4.2 Rational统一开发过程,最佳软件开发实践 为了以一种更好的、迭代的、可预测的方式开发软件产品,总结了软件开发的最佳实践: 迭代式软件开发; 需求管理; 基于构件的软件体系结构; 建立软件可视化模型; 不断验证软件质量; 控制变更。,软件工程,24,Rational统一开发过程 软件开发过程的作用是: 成为开发组活动顺序的向导。

11、 详细说明需要开发哪些制品,何时开发。 指导每一个成员及整个开发组的工作。 提供监控和度量项目产品和活动所依据的准则。 如果没有一个良好定义的过程,开发组将各行其是,开发成功与否完全依赖个别优秀的人才,这不是能够长久的。,软件工程,25,Rational统一开发过程(RUP, Rational Unify Process)描述了如何在软件开发组织中严格分配任务和职责的方法。 RUP 是一个过程产品,软件过程也是软件。 RUP 采用二维的过程结构: 横轴表明过程的生存周期,它反映了过程被激活时的动态情况,用周期、阶段、迭代和里程碑表示。 纵轴表明过程的静态状况,通过过程构件、活动、工作流、制品和

12、工作人员描述过程。,软件工程,26,初始,细化,构造,移交,阶 段,初始化,细化#1,细化#2,构造#1,构造#2,构造#3,移交#1,移交#2,迭代,工作流,业务建模,需求,分析与设计,实现 测试 实施,配置和变更管理 项目管理 环境,沿时间轴的组织结构,沿内容轴的组织,软件工程,27,过程的静态描述:过程模型 过程模型中的主要模型元素有 4 种: 工作人员:谁做(Who) 活动:怎么做(How) 制品:做什么(what) 工作流:何时做(when) 过程的中心概念是工作人员,工作人员不是指某一个人,而是指完成工作的角色。工作人员定义人们应履行的行为和职责。,软件工程,28,活动定义了工作人

13、员所执行的工作。有 3 类步骤: 思考步骤 执行步骤 评审步骤 制品是过程生产、修改或使用的一些信息。RUP 的制品分为 5 个信息集。 管理集:计划制品、操作制品 需求集:构想文档、项目相关人员需求、用例模型和业务模型,软件工程,29,设计集:设计模型、软件体系结构描述、测试模型 实现集:源代码和可执行程序、相关数据结构和数据文档 实施集:安装资料、用户文档、培训材料 工作流用来描述生成结果的活动序列,用以描述工作人员之间的交互。在 RUP 中共有 9 个核心过程工作流,包括 6 个核心工程工作流和 3 个核心支持工作流。,软件工程,30,业务建模工作流:描述业务过程的本质和执行情形。 需求

14、工作流:定义系统构想,使用用例模型和补充规格说明定义系统软件需求,管理系统范围和需求变更。 分析和设计工作流:研究实现环境和系统构件的效用,定义软件的组织结构,把需求获取结果转化为实现规格。 实现工作流: 建立代码的分层结构,实现类和对象,进行单元测试和系统集成。,软件工程,31,测试工作流:根据事先定义的度量和准则检查产品,确认产品是否满足或者超出事先定义并被一致接受的需求。 实施工作流:在实际使用环境中测试软件、包装要交付的软件、发布软件产品、培训最终用户及销售人员。 核心支持工作流有 项目管理工作流 配置和变更管理工作流 环境工作流,软件工程,32,过程的动态描述:迭代开发 将一个大项目

15、分解为可连续应用瀑布模型的几个小部分。在对一部分进行分析、设计、实现并确认后,再对下一部分进行分析、设计、实现和确认。以此进行下去,直到整个项目完成。在 RUP 中,迭代过程分为几个阶段。,软件工程,33,初始阶段:确定最终产品的构想及其用例,定义项目范围。 细化阶段:计划需完成活动和资源,详细说明产品特性并设计软件体系结构。 构造阶段:构造整个产品,逐步完善软件体系结构和计划,直到产品(完整的构想)已完全准备好交付给用户。 移交阶段:移交产品给用户,包括制造,交付,培训,支持及维护产品。,软件工程,34,这 4 个阶段构成开发周期,周期结束时产生一代新的软件产品。 软件产品产生于初始开发周期

16、,随着重复执行同样的过程,软件发展到下一代产品,这一时期即为软件的进化周期。,软件工程,35,Rational统一过程的特点: 用例驱动的、以体系结构(架构)为中心的、迭代和增量的过程。 用例建模技术可以用为大多数项目相关人员理解的形式来表述问题。 参与者(Actor) 用例(Use Case) 场景(scenario) 事件流(event flow),软件工程,36,用例和参与者的事例 银行储户通过自动取款机(自动柜员机)提款,转账或检查账户余额。用一组用例表达如下:,软件工程,37,用例模型 将整个系统或子系统的所有用例,以及与之交互的参与者集合起来构成系统的用例模型。 用例模型给出系统预

17、期功能模型和系统上下文环境模型,它成为开发人员和用户之间的契约。 用例模型的目的是确保系统能处理所有的功能性需求。,软件工程,38,用例驱动的过程 “用例驱动” 指开发过程是基于用例,从一个工作流向下一个工作流,逐步前进的。 开发初期,人们使用用例获取用户需求,建立用例模型,描述系统的全部功能。 基于用例模型,人们创建一系列实现这些用例的分析模型、设计模型和实现模型。 测试人员测试实现确保系统正确实现了用例。,软件工程,39,以体系结构为中心的过程 用例的选择不是孤立的,它与软件的体系结构是密切相关的。 软件体系结构的作用与一个建筑的体系结构类似。对于一个建筑,可以从框架结构、供热、上下水、供

18、电、天然气、其他服务管线等不同角度来考察它。使得施工人员在施工前就能全面了解这个建筑。 软件的体系结构也从不同角度描述了即将构造的系统,包括系统的静态特征和动态特征。,软件工程,40,每一种产品都有功能和表现形式两个方面。用例就是功能,体系结构就是表现形式。 在开发过程中,必须兼顾功能和表现形式,做出适当权衡,才能得到好的产品。因此,用例和体系结构必须在迭代中并行演进。 为了找到可以演进的体系结构,设计师必须从全面了解系统的主要功能(即主要用例)入手。,软件工程,41,4.3 统一建模语言UML,UML 是Unified Modeling Language的缩写。 它是一种标准的语言,以直观的

19、表述、定义、构造和文档化软件为主的系统的工作制品。 UML聚集了来自下列建模的精髓: 数据建模(实体关系图ERD) 业务建模 (工作流) 对象建模 构件建模 它可用于软件生命周期各个过程,并适用于各种不同的实现技术。,软件工程,42,UML的特点,统一标准 融合了当前一些流行的面向对象开发方法的主要概念和技术,成为一种面向对象的标准化的统一建模语言。 提供了标准的面向对象的模型元素的定义和表示法,有标准的语言工具可用。 已成为工业标准化组织OMG的正式标准。 面向对象 支持面向对象的主要概念,提供了一批基本的模型元素的表示图形和方法。,软件工程,43,可视化,表示能力强大 一种图形化语言,系统

20、的逻辑模型和实现模型都能用UML的模型图形清晰地表示。 可以处理与软件的说明和文档有关的问题。 提供了语言的扩展机制,用户可以根据需要增加定义自己的衍型(StereoType)、标记值和约束等。 可用于各种复杂类型的软件系统的建模。 独立于过程 系统建模语言,独立于开发过程。,软件工程,44,容易掌握使用 概念明确,建模表示法简洁明了,图形结构清晰,容易掌握使用。 着重学习三个方面的主要内容: (1) UML的基本模型元素 (2) 组织模型元素的规则 (3) UML语言的公共机制 与程序设计语言的关系 用Java,C+ 等编程语言可实现一个系统。 一些CASE工具可以根据 UML所建立的系统模

21、型来产生Java、C+ 等代码框架。,软件工程,45,UML的定义,UML定义有两个组成部分:语义和表示法。 语义用自然语言描述,表示法定义了UML的可视化标准表示符号,这决定了UML是一种可视化的建模语言。 在语义上,模型是元模型的实例。UML定义给出了语法结构的精确定义。 使用UML时,要从不同的角度观察系统,为此定义了概念“视图”。视图是对系统的模型在某方面的投影,注重于系统的某个方面。,软件工程,46,UML的构成,UML的三个主要组成元素 基本构造块(basic building blocks ) 组织构造块的规则(rules) 运用于整个UML的公共机制 (common mecha

22、nisms) UML包括三种基本构造块: 事物(things) 关系(relationships) 图(diagrams),软件工程,47,UML 事物 结构事物,Class(类) Interface(接口) 描述了一个类或构件的服务(操作)集。,软件工程,48,Collaboration(协作) 合作完成某个特定任务的一组类及其关联的集合,用于对用例的实现建模。 Use Case(用例) 表示系统想要实现的行为,不关心这些行为是怎样实现的。,用例,软件工程,49,Active Class(主动类) 与一般类相同,但它至少拥有一个进程或线程,故能够启动控制活动。 Component(构件) 系

23、统中物理的、可替 代的部件。,软件工程,50,Node(节点) 系统在运行时存在的物理元素。,软件工程,51,UML事物 行为事物,Interaction(交互) 交互由在特定的上下文环境中共同完成一定任务的一组对象之间传递的消息组成。 交互涉及的元素包括消息、动作序列和链。,软件工程,52,State Machine(状态机) 状态机描述了一个对象或一个交互在生存周期内响应事件所经历的状态序列。 状态机涉及的元素包括状态、转换、事件活动等。,软件工程,53,UML事物 分组事物,package(包) 包是把元素组织成组的机制,结构事物、行为事物甚至其他分组事物都可以放进包内。 包不象构件(仅

24、在运行时存在),它纯粹是概念上的(即它仅在开发时存在)。,软件工程,54,UML事物 注释事物,Note(注释) 依附于一个元素或一组元素之上,对其进行约束或解释的简单符号。,软件工程,55,UML Relationships(关系),UML中有 4 种关系: 依赖 关联 泛化 实现 关系特征: 这四种关系是UML模型中可以包含的基本关系。 它们也有变体。例如,依赖的变体有细化、跟踪、包含和延伸。,软件工程,56,依赖(Dependency) 两个事物之间的语义关系,其中目标事物发生变化会影响源事物的语义。 图中虚线箭头从源事物指向目标事物,表示源事物依赖于目标事物。,软件工程,57,两个类之

25、间的依赖关系可以是: 源类访问定义在目标类内部的数据值; 源类的操作调用了定义在目标类的操作; 源类的返回类或参数是目标类的实例; 如果在顺序图中的两个对象存在消息的传送,而且它们之间没有结构方面的连接,可以在类图上用依赖关系建模。 依赖的变体包含特定的语义,表明类之间的关系、包之间的关系、用例之间的关系、对象之间的关系、建模元素与模型之间的关系等。,软件工程,58,类之间的依赖关系可以是: 友元依赖 目标类(如二叉树)视源类(如迭代器)为友元,允许源类访问目标类的所有私有属性和操作。 导出依赖 两个类或对象如果存在导出依赖,则表明源类(如年龄)可以从目标类(如出生年月)通过计算导出。,软件工

26、程,59,细化依赖 在类图中表示同一模型的不同详细程度的规格说明,源类比目标类更为详细。 实例化依赖 若要强调一个类的对象是由另一个类的对象创建的,可用实例化依赖。它表明源类创建了目标类的一个实例。,软件工程,60,使用依赖 不加任何修饰的依赖即为使用依赖。也可用修饰强调源类的语义依赖于目标类的具有共有可见性的构成的语义。 绑定(Binding)依赖 这种依赖关系中的目标类是模板类,源类是从模板实例化的类。,软件工程,61,包之间的依赖关系可以是: 访问依赖 它表明源包被赋予了可访问目标包的权限。 导入依赖 它表明了源包可以访问目标包里的元素,但各个包有自己独立的命名空间,这意味着属于不同包的

27、两个元素可以重名。导入依赖可以使目标包内的公共可见元素进入源包的命名空间。,软件工程,62,用例之间的依赖关系可以是: 包含依赖 它表明源用例显式地包含目标用例作为其行为的一部分。此时将源用例称为基用例,目标用例称为内含用例。 如果两个用例之间具有包含依赖关系,则表明基用例的动作序列中有特定的步骤把内含用例的动作序列包含进来。 扩展依赖 ,软件工程,63,它表明源用例扩展了目标用例的行为。此时,源用例称为基用例,目标用例称为扩展用例。扩展用例在特定条件下为基用例提供附加的动态行为。例如,在人机交互过程中出现差错时进行的异常处理即为扩展动作。 扩展依赖与包含依赖的区别在于,如果仅将扩展从基用例地

28、动作序列中去除,基用例仍然是语义完备的,即它的执行仍将产生有意义的结果。而包含依赖则不然。,软件工程,64,对象之间的依赖关系可以是: 转换依赖 当需要在交互图上表示对象状态的转换时可以用转换依赖。主要强调由于消息而导致对象状态的改变。转换依赖连接的目标对象和源对象是同一个对象。 调用依赖 当需要在交互图或对象图上显式强调对象之间或操作之间的调用关系时要用调用依赖。它表明源对象引用了目标对象的操作,或源操作引用了目标操作。 复制依赖 ,软件工程,65,为了在交互图或活动图上描述对象复制的动作可以采用复制依赖。它连接两个对象,目标对象是源对象的完全相同而又独立的副本。 发送依赖 它连接一个对象(

29、在源端)和一个消息(在目标端),表明源对象在交互过程中发送了一个消息,可以用在状态机的描述中。 它针对内嵌有状态机的对象,可用来描述如何通过发送信号以产生某种事件的动作。 建模元素与模型之间的依赖关系是: 回溯依赖 它连接两个模型元素,表明目标是源的历史上的前驱。如交互和协作就是从用例导出的。,软件工程,66,关联(Association) 关联是一种结构关系,它描述一组链,这些链是类之间或类与接口之间的连接。通过这种连接,一个对象可以访问另一个对象的属性或调用另一个对象的操作。 关联是双向的,其中的角色代表一个类的对象在另一个类中的存在。 聚合(aggregation)是一种特殊类型的关联,

30、它描述了整体和部分间的结构关系。,软件工程,67,聚合关系在整体端有一个菱形作为标记。 复合聚合(composite aggregate) 是一种特殊的聚合关系,它表明整体对象与部分对象具有相同的生存周期。 角色的重复度(Multiplicity),软件工程,68,表明角色在关联关系中出现的次数。如1,0.1,1.*,*等。 导航(navigation) 一般默认关联关系是双向的,而导航则限制关联关系到一个方向。在图中用箭头指明方向。 限定关联(qualification) 如教师与学生的关系由课程的标识决定。,软件工程,69,关联类 关联关系是两个类之间的语义连接。在比较简单的情况下,关联关

31、系的语义用关联关系的名字来概括。但在某些情况下,需要对关联关系的语义做详细的定义、存储和访问,为此可以建立关联类,描述关联的属性。,软件工程,70,泛化(Generalization) 一般化特殊化的关系(继承)。表明特化类共享一个或多个泛化类的结构和行为。 如果两个类被定义为具有泛化关系,就意味着在任何泛化类(父类)的对象出现的地方,都可以用特化类(子类)来代替。,软件工程,71,软件工程,72,继承的多态性表明子类的操作的动态行为可代替父类的同名操作的动态行为。 泛化关系的变体:实现继承。它规定其中的子类可继承其父类的结构和行为,但其可见性成为私有,也不支持父类的接口。 实现(Realiz

32、ation) 类之间的语义关系,其中的一个类元指定了由另一个类保证执行的契约。 两种情况出现实现关系: 1)在接口和实现它们的类或构件之间; 2)在用例和它们的协作之间。,软件工程,73,软件工程,74,模型中主要的图形元素,软件工程,75,UML模型的图形,软件工程,76,UML图的作用,UML 可以用于: 使用用例(use cases)和参与者(actors)描述系统的边界和它的主要功能。 使用交互图(顺序图、协作图)具体描述用例的实现。 使用类图表示系统的静态结构。 是用状态转换图模型化对象的行为。 使用构件图和部署图展现系统的物理实现体系结构。 使用衍型(stereotypes)扩展建

33、模能力。,软件工程,77,UML工作的实例,某大学用计算机管理的注册(registration)系统 注册管理员设置一个学期的所有课程信息 一个课程可以有多个课程选课单。 学生选择4门主修课和2门选修课 当某学生在学期注册了,则记账(billing)系统会得到通知,在该学期给该学生开设账号。 学生在注册后一段时间可以使用系统增加/撤销所选课程。 教授使用这个系统接受他们课程的选课名册。 注册系统的用户将得到密码(password),用于登录的确认。,软件工程,78,用例图(use case diagram),用例图展现了一组用例、参与者(Actor)以及它们之间的关系。 用例图通常包括用例、参

34、与者和扩展关系、包含关系等。 用例图的功能是支持系统的行为,即该系统在它的上下文环境中所提供的外部可见服务。 用例图的两种使用方式: 上下文环境建模:说明位于系统之外并与系统进行交互的参与者以及他们所扮演的角色的含义。 功能需求建模:说明系统想要的行为。,软件工程,79,参与者(Actors),参与者定义了一组与系统有信息交互关系的人、事、物。它是用例的客户并与用例进行交互。一个参与者针对每一个与之通信的用例扮演一种角色。 角色可以是人或外部系统。它定义了系统的边界。,软件工程,80,用例(Use Cases),一个用例是一种系统应表现行为的模式: 每个用例是一个参与者与系统在一次对话中所执行

35、的相关事务的序列。 要调查参与者以确定他们的要求: Registrar(注册管理员) 维护所有课程信息 Professor(教授) 要求选课名单 Student(学生) 维护选课表 Billing System(记账系统) 从注册中心接受记账信息,软件工程,81,用例的规格说明,为每个用例建立一个规格说明,描述用例的事件流(flow of event)。 从参与者角度编写 它包含在用例执行时系统必须为参与者提供的各种细节。 典型的内容有 用例如何开始和结束 基本的事件流 候补的事件流 异常的事件流,软件工程,82,保持所有课程信息的事件流,用例开始于注册管理员登录到注册系统并敲入他的密码时。系

36、统检验此密码是否有效,并提示注册管理员选择当前学期或下个学期。注册管理员敲入他期望的学期。然后系统提示选择他所期望的活动,包括:Add,Delete,Review或Quit。 如果选择Add,则执行增加课程的子事件流。 如果选择Delete,则执行删除课程的子事件流。 如果选择Review,则执行审查所有课程信息的子事件流。 如果选择Quit,则用例终止。,软件工程,83,register course(注册课程)用例,用例允许学生在本学期注册他的课程申请。 如果在本学期开学的一段时间内学生作出add或drop的变更,他还可修改和删除他的课程选择。 课程目录系统提交一个表格,列出本学期所有的课

37、程申请。 基本事件流: 当学生想要注册课程申请或者想要改变他的已有的选课表时,本用例开始。,软件工程,84,系统要求学生具体说明他可能会执行的功能(建立、更新或者删除一个选课表)。 一旦学生提交了请求信息,将执行某一个子流。 如果学生选择“建立一个选课表”,则执行一个“建立”子事件流的服务。 如果学生选择“更新一个选课表”,则执行一个“更新”子事件流的服务。 如果学生选择“删除一个选课表”,则执行一个“删除”子事件流的服务。,软件工程,85,建立选课表子事件流,系统检索来自课程目录系统的一个有效的课程申请的列表,并把这个表显示给学生。 学生根据这个有效的课程申请列表选择 4 门主修课申请和 2

38、 门选修课申请。 一旦学生作出他的选择,系统为学生建立一个选课表,包括了这个学生选择的课程申请。 执行“提交选课表”子事件,软件工程,86,用例图的事例,注册系统的用例图直观地描述了参与者和用例之间的关系。,三部工硕,软件工程,87,交互图 用例的实现,用例图描述了系统的外部视图。 交互图则描述了如何通过对象之间的交互实现用例。 交互图展现了按一定的目的进行的一种交互,它由在一个上下文中的一组对象及它们之间交互的信息组成。 交互图有两种类型: 顺序图(Sequence diagram) 协作图(Collaboration diagram),软件工程,88,顺序图(Sequence Diagra

39、m),顺序图也称为序列图,它按时间顺序显示对象之间的交互。,软件工程,89,顺序图展现了一组对象和由这组对象收发的消息,用于按时间顺序对控制流建模。 对象表述为虚垂线顶端的矩形框。这些对象都排列在图的顶部,其生命线从图的顶部画到图的底部。 垂线是对象的生命线,说明对象在一段时间内存在。 对象可以在交互过程中创建,在交互过程中撤销。 生命线之间的箭头表示消息。消息出现的次序自上而下。 消息箭头可以回到同一条生命线,指明自调用,即对象发给自己的消息。,软件工程,90,顺序图的控制焦点是一个瘦高的矩形,表示一个对象执行一个动作所经历的时间段。矩形的顶部表示动作的开始,底部表示动作的结束(可以由一个返

40、回消息来标记)。 顺序图的构造步骤: 首先,把参加交互的对象放在图的上方,横向排列。通常把发起交互的对象放在左边,较下级对象依次放在右边。 然后,把这些对象发送和接收的消息纵向按时间顺序从上到下放置。 这样,就提供了控制流随时间推移的清晰的可视化轨迹。,软件工程,91,选课的顺序图,软件工程,92,边界类 是直接与系统外部实体交互的类,描述系统与外部(人或其他系统)的接口建模,其原型为。 控制类 是为特定用例的控制行为建模的类,协调特定于用例的行为所需的事件,其原型为。 实体类 是用来保存或更新某个对象的信息的类,独立于它的环境。原型为。,软件工程,93,协作图(Collaboration D

41、iagram),协作图也称为合作图,它显示了对象与周围对象之间的交互,以及它们之间的链接。,软件工程,94,协作图展现了一组对象,这组对象之间的连接以及这组对象收发的消息。 协作图中的协作不是参与者与系统之间的交互,而是系统内部某一个用例中各个对象之间信息传递的方式。 消息上所附编号指明执行顺序。 协作图的构造步骤: 将参加交互的对象作为图的顶点。 将连接这些对象的链表示为图的弧。 用对象发送和接收的消息修饰这些链。 协作图提供了在协作对象的结构组织的上下文环境中观察控制流的一个清晰的可视化轨迹。,软件工程,95,类图(class diagram),类图从系统的逻辑视图展现了一组类、接口、协作

42、和它们之间的关系。 类图给出系统的静态设计视图,主动类的类图给出了系统的静态进程视图。 在类图中UML建模元素包括: 类及其结构和行为; 接口; 协作; 关联、依赖、泛化关系; 多重性和导航指示符; 角色名字。,软件工程,96,类(Class),类是具有共同结构、共同行为、共同关系和共同语义的对象的集合。 通过检查在顺序图和协作图中的对象可以发现类。 一个类用间隔为三部分的矩形描绘。 类应当使用领域的术语来命名: 应建立命名的标准 例如,所有的类都是以大写字母开头的单一名词,软件工程,97,类的事例,软件工程,98,操作(Operations),一个类的行为通过类的各种操作来表达。 这些操作可

43、以通过检查交互图来寻找。,软件工程,99,属性(Attributes),一个类的结构通过它的属性来表达。 通过检查类的定义、问题的需求,并参照领域知识来发现属性。,每个课程选课单有课程号number 、 地点location、 时间time,CourseOffering,number,location,time,软件工程,100,类的事例,软件工程,101,寻找关系,通过检查交互图,以发现关系 如果两个对象必须打交道,一定存在沟通的路径。,软件工程,102,关系的事例,软件工程,103,多重性和导航的事例,软件工程,104,泛化(继承)的事例,软件工程,105,对象图(Object Diagr

44、am),对象图展现了一组对象以及它们之间的关系。用以详述、构造和文档化系统中存在的实例以及它们之间的相互关系。 对象图给出系统的静态设计视图或静态进程视图,和类图一样。描述了在类图中所建立的事物的实例的静态快照。 对象图一般包括对象和链。 这种视图主要支持系统的功能需求,即系统应该提供给最终用户的服务。因而它也用于表示交互图表示的动态场景的一个静态画面。,软件工程,106,对象图的事例,软件工程,107,状态迁移图( State Transition Diagram ),状态是在对象生存周期中的一个位置。在此位置满足某种条件,执行某种活动或等待某个事件。 状态迁移图展现了一个状态机,它由状态、

45、转移、事件和活动组成。 状态迁移图显示了: 一个给定类的生存史; 导致状态转移的一系列事件; 产生状态变化的一系列活动; 状态图关注系统的动态视图。,软件工程,108,状态迁移图的事例,软件工程,109,活动图(Activity Diagram),一个活动是一个在状态机内部正在进行的非原子(即可中断的)动作。 活动图是一种特殊的状态图。其中, 大多数的或者全部的状态都是动作状态或者活动状态 大多数的或者全部的迁移都是由于源状态中活动的完成而被触发的。 一个活动图着重于描述计算过程或工作流的顺序的和并发的执行步骤。,软件工程,110,软件工程,111,活动图的两种使用方式,软件工程,112,泳道

46、(swimlanes),活动图描述发生了什么,但没有说明该活动由谁来完成。泳道描述了这种关系。 泳道用矩形框表示,属于某个泳道的活动放在该矩形框内,将对象名放在矩形框的顶部,表示泳道中的活动由该对象负责。 两个泳道中活动的各自由不同的对象负责,活动之间控制权的转移表明对象之间的协作关系。 所以泳道可以将活动图的逻辑描述与顺序图、写作图的责任描述结合起来。,软件工程,113,乘客 电梯,电梯在当前楼层,否则,软件工程,114,软件工程,115,构件图( Component diagram),构件图展现了一组构件之间的组织和依赖。 构件图专注于系统的静态实现视图。它与类图相关,通常把构件映射为一个或多个类、接口或协作。 一个构件可能是: 部署构件:如动态链接库(DLL)、二进制可执行构件、ActiveX控件、JavaBeans等,是形成可执行文件的基础。 工作产品构件:如数据文件或源代码。是部署构件的来源。 执行构件:可运行的构件,软件工程,116,构件图的事例,软件工程,117,接口(interface),接口是一个类或构件提供给其他类或构件的一组操作。类的变体,其变体关键字是。 每个接口要指定一个名字,以区分不同的接口。接口的

温馨提示

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

评论

0/150

提交评论