面向对象软件工程-第06章_面向对象方法学与UML.ppt_第1页
面向对象软件工程-第06章_面向对象方法学与UML.ppt_第2页
面向对象软件工程-第06章_面向对象方法学与UML.ppt_第3页
面向对象软件工程-第06章_面向对象方法学与UML.ppt_第4页
面向对象软件工程-第06章_面向对象方法学与UML.ppt_第5页
免费预览已结束,剩余248页可下载查看

下载本文档

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

文档简介

面向对象软件工程 object oriented software engineering,授课教师:周岩 e-mail:,第6章 面向对象方法学与uml,主要内容 1.面向对象方法概念 2.uml图,面向对象方法: (objected oriented,简称为oo ) 面向对象分析: (object oriented analysis,简称ooa) 面向对象设计: ( object oriented design,简称ood),6.1 面向对象方法概述,6.1.1 面向对象方法学的要素和优点 1.面向对象方法的要素 对象 类 继承 消息,2、面向对象方法学的主要优点 与人类习惯的思维方法一致 稳定性好 可重用性好 较易开发大型软件产品 可维护性好,8.1.2 面向对象的概念,1对象(object) (1)对象的定义:在应用领域中有意义的、与所要解决的问题有关系的任何事物都可作为对象。 (2)对象的特点 以数据为核心 主动性 实现了数据封装 本质上具有并行性 模块独立性好,内部状态,打开,调节频道,其他,关闭,调节声音,一台收音机对象的实例,2类(class):类是具有相同属性和相同方法的一组对象的集合。,人类 分门别类 物以类聚,3实例(instance):一个对象是类的 一个实例。 4属性(attribute):是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。 5消息(message):消息就是向对象发出的服务请求。分为同步消息和异步消息,消息传递: 当一个消息发送给某个对象时,包含要求接受对象去执行某些活动的信息。接收到消息的对象经过解释,然后予以响应。这种通信机制叫做消息传递。,对象,对象,消息,6方法(method):方法是对象所能执行的操作,是类中所定义的服务。 7封装(encapsulation):就是把对象的属性和方法结合成一个独立的系统单位,并尽可能隐蔽对象的内部细节。,两层含义: (1)结合性 (2)信息隐蔽性,8继承(inheritance) :利用继承子类可以自动的拥有父类中定义的属性和方法。,父类或超类,子类或派生类,继承性分类: 单重继承、多重继承两类。 单重继承:一个子类只能有一个父类; 多重继承:一个子类可以有多于一个的父类。,9多态性(polymorphism):多态是指一个实体在不同条件下具有不同意义或用法的能力。 10重载(overloading):重载有两种: (1)函数重载 (2)运算符重载,3种实现方式: 通过接口实现多态性 通过继承实现多态性 通过抽象类实现的多态性,结构与连接,为了使系统能够有效地映射问题域,系统开发者需要认识并描述对象间的以下几种关系: (1)一般/特殊结构,(2)整体/部分结构,(3)实例连接,实例连接:反映了对象与对象间的静态关系。,(4)消息连接,消息连接:描述对象之间的动态联系。消息连接是有方向的,连接从消息发送者指向消息接受者。,1、建模的原则 (1)选择建立什么样的模型对如何发现和解决问题具有重要的影响。 正确的模型有助于提高开发者的洞察力。,6.2 uml概述,(2)每个模型可以有多种表达方式。 使用者的身份和使用的原因是评判模型好坏的关键。 (3)最好的模型总是能够切合实际。 模型是现实的简化,必须保证简化过程不会掩盖任何重要的细节。,(4)孤立的模型是不完整的。,5、建模的目标 通过建模,要实现以下4个目标: (1)便于开发人员展现系统。 可视化visualization (2)允许开发人员指定系统的结构或行为。 详述specification (3)提供指导开发人员构造系统的模板。 构造construction (4)记录开发人员的决策。 文档化documentation,通用建模语言 (1)自然语言、图形语言、数学语言 (2)结构化建模与面向对象建模 a、基于功能的分解与基于概念的建模 b、面向对象的建模语言(50种之多) rumbaugh(云豹):omt shlaer/mellor (雪梨与米勒) jacobson (雅克森) :oose booch(布什) yourdon(尤顿):ooa/ood martin/odell(马丁与奥地),建模语言,(3)统一建模语言uml 软件工程领域在1995-1997年取得前所未有的进展,其中最重要的、具有划时代意义的成果之一就是统一建模语言,umlunified modeling language unified: 组合了当前最好的面向对象软件建模方法 grady booch,james rumbaugh,ivar jacobson,uml三位主要贡献者。 1.omt( james rumbaugh ) 2.the booch method( grady booch ) 3.oose( ivar jacobson ),modeling: 用于表达现实的简化视图,以便于面向对象软件系统的设计与实现。 language: uml主要是遵循精确语法的图形语言。,(4)应注意的问题 a、uml是一种建模语言,不是一种建模方法。 遵循特定的规则、允许创建各种模型、并不告诉设计者需要创建哪些模型,不提供开发过程 b、uml并不是软件建模的专用语言。 uml是用于构造系统或理解系统的语言(uml既支持正向工程,又支持反向工程)、是文档化的语言。,6.2.2 uml的内容(uml的构成) (1)视图“4+1”视图 表达系统的某一方面特征的uml建模元素的子集。 视图并不是图。 由一个或者多个图组成的对系统某个角度的抽象。 (2)图 9种图 (3)模型元素 uml中的模型元素包括事物和事物之间的联系。事物描述了一般的面向对象的概念,如类、对象、接口、消息和组件等。 (4)通用机制 uml提供的通用机制可以为模型元素提供额外的注释、信息或语义。,1)、用例视图 用例视图强调从系统的外部参与者角度看到的或需要的系统功能。用例图 2)、逻辑视图 逻辑视图从系统的静态结构和动态行为角度显示如何实现系统的功能。类图、对象图、状态图、时序图、协作图、活动图 3)、组件视图 组件视图显示代码组件的组织结构。组件图 4)、并发视图 并发视图显示系统的并发性,解决在并发系统中存在的通信和同步问题。状态图、协作图、活动图 5)、配置视图 配置视图显示系统的具体部署。配置图 部署是指将系统配置到由计算机和设备组成的物理结构上。,(1)uml“4+1”视图,1)、用例图use case diagram 2)、类 图class diagram 3)、对象图object diagram 4)、状态图state diagram 5)、时序图sequence diagram 6)、协作图collaboration diagram 7)、活动图activity diagram 8)、组件图component diagram 9)、配置图deployment diagram,(2)uml的图,(3)uml的模型元素,1)、事物 uml中的事物可以分为结构事物、动作事物、分组事物和注释事物4类。 (1) 结构事物 结构事物共有7种:类、接口、协作、用例、活动类、组件和节点。, 类 对具有相同属性、方法、关系和语义的对象的抽象,一个类可以实现一个或多个接口。 在uml中类用包括类名、属性和方法的矩形表示。, 接口。 为类或组件提供特定服务的一组操作的集合。描述了类或组件的对外可见的动作。 在uml中接口用圆表示,在图形旁边还要标注接口的名字。, 协作。 定义了交互操作。 在uml中,用虚线构成的椭圆表示,椭圆中要标注协作的名字。, 用例 描述系统对一个特定角色执行的一系列动作。 在uml中,用例用标注了用例名称的实线椭圆表示,如下图所示。, 活动类 活动类是类对象有一个或多个进程或线程的类。 在uml中,活动类和类的表示法相同,只是边框用粗线条,如下图所示。, 组件 实现了一个接口集合的物理上可替换的系统部分。 在uml中,组件如下图所示。, 节点。 在运行时存在的一个物理元素。 代表一个可计算的资源,通常占用一些内存和具有处理能力。一个组件集合一般来说位于一个节点。 在uml中,节点如下图所示。,(2) 动作事物 动作事物是uml模型中的动态部分,代表时间和空间上的动作。 交互和状态机是uml中最基本的两个动态事物元素。 交互。 一组对象在特定上下文中,为达到某种特定的目的而进行的一系列消息交换组成的动作。 在uml中用带箭头的直线来表示。, 状态机。 状态机由一系列对象的状态组成。 在uml中,状态如下图所示。,(3)分组事物 分组事物是uml模型中组织的部分,分组事物只有一种,称为包。 包是一种有组织地将一系列元素分组的机制。在uml中包的图形如下图所示。,(4)注释事物 注释事物是uml模型的解释部分。 在uml中注释事物的图形如下图所示。,2)、关系 (1)关联关系 指一种对象和另一种对象有联系。,(2)依赖关系 对于两个对象x、y,如果对象x发生变化,可能会引起对另一个对象y的变化,则称y依赖于x。,(3)泛化关系 uml中的泛化关系定义了一般元素和特殊元素之间的分类关系,(4)实现关系 实现关系将一种模型元素(如类)与另一种模型元素(如接口)连接起来,(5)聚合关系 聚合关系描述元素之间部分与整体的关系。,1)、修饰 可以将图形修饰附加到uml图中的模型元素上。 为图中的模型元素增加语义。(粗体、下划线等) 2)、注释 添加不能用建模语言来表示的信息uml的注释功能。 注释:以自由的文本形式出现的,信息类型是不被uml解释的字符串。 在uml图中用一条虚线将注释连接到它为之解释的或细化的元素上。,(4)uml的通用机制,3)、规格说明 例如:文档、职责、永久性、并发性 4)、通用划分 型实例: 接口实现: 5)、扩展机制 允许自定义一些构造型语言成分。 3种主要的扩展组件:构造型 、标记值 和约束 。 扩展特性使得uml的应用不仅仅局限于软件建模。,6.3 uml图,用例图 类图 对象图 状态图 时序图(顺序图) 活动图 协作图 组件图(构件图) 配置图(部署图),用例图,1、概 述,用例图 显示谁将是相关的用户、用户希望系统提供什么服务以及用户需要为系统提供的服务,用来为系统的功能建模 最常用来描述系统以及子系统,用例图的概念,用例图包含6个元素 参与者(actor) 用例(use case) 关联关系(association) 包含关系(include) 扩展关系(extend) 泛化关系(generalization),关系,参与到系统中的“对象”,系统功能,2、参与者(actor),参与者 系统外部的一个实体。 参与用例的执行过程。 通过向系统输入或请求系统输入某些事件来触发系统的执行。,(1)概念,是指在系统外部与系统交互的人或其他系统,它以某种方式参与系统内用例的执行。,“与系统交互”是指执行者向系统发送消息、或从系统接受消息,或与系统交换信息。,注意 由参与用例时所担当的角色来表示。 每个参与者可以参与一个或多个用例。,参与者的种类 系统用户 与所建造的系统交互的其他系统 一些可以运行的进程,“人”,如在企业“财务管理系统”,“资金流动”,“进、销、存管理系统”,时间,(2)确定参与者,如何寻找系统的参与者 谁将使用该系统的主要功能 谁将需要该系统的支持以完成其工作 谁将需要维护、管理该系统,以及保持该系统处于工作状态 系统需要处理哪些硬件设备 与系统交互的是什么系统 谁或什么系统对本系统产生的结果感兴趣,(3)参与者间的关系,在用例图中,使用泛化关系来描述多个参与者之间的公共行为。,参与者间的泛化关系示例:,3、用 例,(1)概念 用例 外部可见的系统功能单元 用途 在不揭示系统内部构造的前提下定义连贯的行为 这些行为不但应包含正常使用的各种行为,而且应包括非正常使用时的各种行为 一个用例代表软件系统功能的划分,代表系统角色和系统的一次交互 不是需求或功能的规格说明,但是也展示和体现其所描述的过程中的需求情况,用例的名称 简单名:用例名 路径名:包名:用例名,(2)识别用例 从分析系统的参与者开始,考虑每个参与者是如何使用系统的 如何识别用例 (1)特定参与者希望系统提供什么功能。 (2)系统是否存储和检索信息,如果是,由哪个参 与者触发。 (3)当系统改变状态时,是否通知参与者 (4)是否存在影响系统的外部事件。 (5)哪个参与者通知系统这些事件。,(3)用例与事件流 事件流 从用户角度描述执行用例的具体步骤 简要说明:描述用例的作用 前提条件:用例之前必须要满足的条件 主事件流和其他事件流:用例的具体细节 事后条件:用例执行完后必须为真的条件,4、用例间的关系,1 关联关系 2 包含关系 3 扩展关系 4 泛化关系,关联关系 表示参与者和用例之间进行通信。 不同的参与者可以访问相同的用例。,用例间的关联关系示例,包含关系 客户用例可以简单地包含提供者用例具有的行为,并把它所包含的用例行为作为自身行为的一部分。 在具有包含关系的两个用例中,提供者用例不能单独存在,它只能以实例的形式存在于客户用例之中。 包含关系使得一个用例的功能可以在另一个用例中使用。,扩展关系 扩展用例被定义为基础用例的增量扩展,扩展关系是把新的行为插入到已有用例中的方法。 基础用例提供扩展点以添加新的行为。 基础用例可以独立于扩展用例单独存在。基础用例即使没有扩展用例也是完整的,这点与包含关系有所不同。,用例间的扩展关系示例,学校学分管理系统用例图中的包含、扩展关系,泛化关系 父用例也可以被特别列举为一个或多个子用例。 子用例表示父用例的特殊形式。 子用例从父用例处继承行为和属性,还可以添加行为或覆盖、改变继承的行为。 体现了用例共同行为和特殊行为的关系。,一个饮用水自动售水系统实例,例6.1 饮用水自动售水系统使用方法: 供水正常:绿灯亮,等待顾客投币 投一个一元硬币,自动放水5升 投一个五角硬币,自动放水2.5升 投两个五角硬币,自动放水5升 供水不足:红灯亮,要求顾客等待 将已经投入的硬币退出 供水恢复:红灯灭,绿灯亮 硬币回收:收银员定期收回顾客投入的硬币,一个atm系统实例,建立一个具有基本功能的atm机软件,客户可以存钱,取钱 客户可以查询节余 客户可以修改密码 客户可以使用信用卡付帐,需求分析的第一步 确定系统能够做什么? 谁来使用这个系统? 用例图显示用例(表示系统功能)与角色(表示提供或者接收系统信息的人或系统)之间的交互。 用户,项目管理员,分析人员,开发人员质保人员都可以通过用例图了解系统功能。,用例“取钱”的事件流,简要说明: 客户可以从atm机上取出自己帐目上的部分或者全部存款。 前提条件: 无 主事件流: 客户将卡插入atm机,开始用例。 atm显示欢迎消息并提示客户输入密码。 客户输入密码。 atm确认密码有效。如果无效则执行其他事件流a1。如果与主机联接有问题,则执行异常事件流e1。,5.atm提供以下选项:存钱,取钱,查询 。 6.用户选择取钱选项。 7.atm提示输入所取金额。 8.用户输入所取金额。 9.atm确定该帐户是否有足够的金额。如果余额不够,则执行a2,如果与主机联接有问题,则执行异常事件流e1。 10.atm从客户帐户中减去所取金额。 11.atm向客户提供要取的钱。 12.atm打印清单。 13.atm退出客户的卡,用例结束。,其他事件流a1:输入无效密码 atm告诉客户该密码错误。 atm退出客户的卡,用例结束。 其他事件流a2:余额不足 atm告诉客户该帐户余额不足。 atm退出客户的卡,用例结束。 异常事件流e1:联接主机出现错误 atm告诉客户联接主机出现错误。 atm在错误日志记下错误。 atm退出客户的卡,用例结束。 事后条件: 无,atm系统的用例图,论 坛,网上论坛主要包括:用户注册、登录、签写留言、回复留言、留言查看和管理员维护等功能。 本系统应该具有处理下面这些的业务的能力: 1. 用户功能需求: 用户注册、用户登录、签写留言、回复留言、查看留言 2. 管理员功能需求: 用户登录、签写留言、回复留言、查看留言、删除留言,习 题,一台饮料自动售货机能提供6种不同的饮料,售货机上有6个按钮,分别对应于这6种饮料,顾客可通过按钮来选择所要的饮料。每个按钮旁边有一个指示灯,用来表明该售货机中是否还有这种饮料可售。售货机有一个硬币槽和找零槽,用来收钱和找钱。请给出描述上述场景的用例图。,类图和对象图,类图例子,类图的概念,描述类、接口、协作及它们之间关系的图。 显示系统中各个类的静态结构。,1、 概述,类图的元素: 类(class) 接口(interface) 协作(collaboration) 依赖关系(dependency) 泛化关系(generalization) 关联关系(association) 实现关系(realization),2、 类,面向对象系统组织结构的核心类。 对一组具有相同属性、操作、关系和语义的对象的抽象。 包括名称部分(name)、属性部分(attribute)和操作部分(operation)。,1 名称 2 属性 3 操作 4 职责 5 约束 6 注释,类中的信息,1、名称,应该来自系统的问题域。 应该是一个名词,且不应该有前缀或后缀。 分为简单名称和路径名称。,唯一,2、属性,描述了类在软件系统中代表的事物(即对象)所具备的特性。 类可以有任意数目的属性,也可以没有属性。 在uml中,类属性的语法为:,1) 可见性 2) 属性名 3) 类型 4) 初始值 5) 属性字符串,(1) 可见性,属性的可见性类型: 公有(public) “” 私有(private)“” 受保护(protected)“” 实现(implementation)“”,(2) 属性名,每个属性都必须有一个名字以区别于类中的其他属性。 属性名由描述所属类的特性的名词或名词短语组成。 单字属性名小写,如果属性名包含了多个单词,这些单词要合并,且除了第一个单词外其余单词的首字母要大写。,(3) 类型,简单类型: 整型 布尔型 实型 枚举类型 系统中的其他类,不同编程语言有不同定义,属性可以使用任意类型,(4) 初始值,目的: 保护系统的完整性,防止漏掉取值或被非法的值破坏系统的完整性。 为用户提供易用性。,(5) 属性字符串,指定关于属性的其他信息。 任何希望添加在属性定义字符串值但又没有合适地方可以加入的规则,都可以放在属性字符串里。,对类的对象所能做的事务的抽象。 一个类可以有任意数量的操作或者根本没有操作。 返回类型、名称和参数一起被称为操作签名。 在uml中,类操作的语法为:,3、操作,1) 可见性 2) 操作名 3) 参数表 4)返回类型 5) 属性字符串,(1) 可见性,类型: 公有(public) “” 私有(private) “” 受保护(protected) “” 包内公有(package) “”,(2) 操作名,用来描述所属类的行为的动词或动词短语。 单字操作名小写,如果操作名包含了多个单词,这些单词要合并,并且除了第一个单词外其余单词的首字母要大写。,(3) 参数表,一些按顺序排列的属性定义了操作的输入。 是可选的,即操作不一定必须有参数才行。 定义方式:“名称:类型”。 若存在多个参数,将各个参数用逗号隔开。 参数可以具有默认值。,(4) 返回类型,是可选的,即操作不一定必须有返回类型。 绝大部分编程语言只支持一个返回值。 具体的编程语言一般要加一个关键字void来表示无返回值。,(5) 属性字符串,在操作的定义中加入一些除了预定义元素之外的信息。,4、职责,类或其他元素的契约或义务。 自由形式的文本。 非形式化的方法。,5、约束,指定了类所要满足的一个或多个规则。 形式化的方法。,6、注释,注释可以包含图形也可以包含文本。,3、 接口,在没有给出对象的实现和状态的情况下对对象行为的描述。 包含操作但不包含属性。 没有对外界可见的关联。 一个类可以实现一个或多个接口。,接口的类: 当一个接口是在某个特定类中实现时,使用该接口的类通过一个依赖关系与该接口的小圆圈相连接。,4、 类之间的关系,1. 依赖关系: 类之间使用关系 2. 泛化关系: 类之间一般和特殊关系 3. 关联关系: 对象之间结构关系 4. 实现关系: 类中规格说明和实现之间关系,依赖关系,表示两个或多个模型元素之间语义上的关系。 客户以某种形式依赖于提供者。提供者的改变会影响客户,称客户依赖于提供者。 关联、实现和泛化都是依赖关系。,基本依赖关系,1. 使用依赖(usage) 2. 抽象依赖(abstraction) 3. 授权依赖(permission) 4. 绑定依赖(binding),1. 使用依赖,表示客户使用提供者提供的服务以实现它的行为,包括: 使用(use) 调用(call) 参数(parameter) 发送(send) 实例化(instantiate),2. 抽象依赖,表示客户与提供者之间的关系,依赖于在不同抽象层次上的事物,包括: 跟踪(trace) 精化(refine) 派生(derive),3. 授权依赖,表达一个事物访问另一个事物的能力,包括: 访问(access) 导入(import) 友元(friend),4. 绑定依赖,较高级的依赖类型,用于绑定模板以创建新的模型元素,包括: 绑定(bind),泛化关系,存在于一般元素和特殊元素间的分类关系。 可以用于类、用例以及其他模型元素。 描述了一种“is a kind of” 的关系。,泛化的目的: 可以使子类共享父类的属性和操作,实现继承。 可以使子类的实例用于任何父类被声明使用的地方实现多态。,请同学们在rose上实践一下,看看是否实现了继承的特性,泛化关系 继承,泛化关系 多态,关联关系,一种结构关系。 指明事物的对象之间的联系。,关联的修饰,1. 名称(name) 2. 角色(role) 3. 多重性(multiplicity) 4. 聚合关系(aggregation) 5. 组合关系(composition) 6. 导航性(navigation),(1) 名称,使用一个动词或动词短语来命名关联。 清晰而简洁地说明对象间关系。 关联的名称并不是必需的。,(2) 角色,关联关系中一个类对另一个类所表现出来的职责。 角色的名称应该是名词或名词短语,以解释对象是如何参与关系的。,(3) 多重性,指有多少对象可以参与该关联。 可以表达一个取值范围、特定值、无限定的范围或一组离散值。 格式:“minimummaximum” (均为int型)。 赋给一个端点的多重性表示该端点可以有多少个对象与另一个端点的一个对象关联。,关联类,为关联建立类,关联约束/依赖,(4)聚合关系,一种特殊类型的关联。 表示整体与部分关系的关联。 描述了“has a”的关系。,(5) 组合关系,聚合关系中的一种特殊情况,是更强形式的聚合,又称强聚合。 成员对象的生命周期取决于聚合的生命周期。 聚合不仅控制着成员对象的行为,而且控制着成员对象的创建和解构。,“整体”拥有它的“部分”,(6) 导航性,描述一个对象通过链进行导航访问另一个对象,反过来不可以。 使用导航性可以降低类间的耦合度。 包括:单向关联和双向关联。,自反关联,对象跟自身之间的关联,请同学们在rose上实践一下,人类之间的父母子女之间的关系,怎么表示?,父母子女之间的关系,派生(derived)关联,一个关联是从另外一种关联推导出来的。,实现关系,一个元素完成另外一个元素的操作功能。 如接口类及其实现;接口没有属性,只有声明的操作方法(对方法没有实现部分),而由实现类具体定义实现部分。,泛化和实现都可以将一般描述与具体描述联系起来: 泛化将同一语义层上的元素连接起来, 并且通常在同一模型内。 实现将不同语义层内的元素连接起来, 并且通常建立在不同的模型内。,绘制类图的步骤: 分析问题域,确定需求 寻找类 定义类的属性和操作 确定类之间的关系 精化类和类间的关系 绘制类图,寻找类,1、使用名词/动词分析寻找类 收集相关信息 补充的需求规格说明 用例 项目词汇表 其他文档 分析信息 名词、名词短语 类或属性 动词、动词短语 操作,2、使用crc卡片分析寻找类 头脑风暴收集信息 关键业务用类表示,其他卡片作为 属性,正向工程和逆向工程,正向工程:将模型转化为代码 逆向工程:将代码转化为模型,包(package),包是将多个元素组织为语义相关的组的通用机制。作为模型组织结构的一种分组机制,包的实例没有任何语义,因此,包仅在建模时有意义。 一个包拥有或引用的模型元素称为该包的内容。可以是类的列表、类图或另一个包。,包的图标,1、 名称,有两种形式:简单名和路径名,简单名 路径名,2、 拥有的元素,包拥有的元素,包可以拥有其他元素,这些元素可以是类、接口、组件、节点、协作、用例、图和其他包。如果包被撤销,其中的元素也要被撤销。 一个包内不同种类的元素或不同包内的元素可以具有相同的名称,但实际建模中,最好将一个包内所有种类的元素的名称都设为唯一的。,3、可见性,包内元素具有可见性,包的可见性用来控制包外部的元素对包内元素的访问权限。包的可见性共有3种:,包的可见性类型: 公有(public) “” 受保护的(protected) “” 私有(private) “”,4、 引入与输出,引入(import)允许一个包中的元素单向访问另一包中的元素。在uml中,用一个由构造型import修饰的依赖为引入关系建模。包的公共部分称为输出。一个包的输出的部分仅对显式地引入这个包的其他包中的元素是可见的。,5、标准元素,uml中所有的扩展机制都适用于包,通常使用标记值来描述包的新特性,用构造型来描述包的新种类。,包之间的关系,包之间可以有如下两种关系: (1)引入和访问依赖,用于在一个包中引入另一个包输出的元素 (2)泛化,用于说明包的家族,具有继承关系,包 图 概 述,包图(package diagram)是维护和控制系统总体结构的重要建模工具。 在对复杂系统建模时,往往是把语义相近并倾向于同一变化的元素组织起来加入同一包中,以方便理解和处理整个模型。包图由包和包之间的关系组成的。,图书馆管理系统的包图,4个包: business object package(商业对象包) ui package (用户接口包) utility package (使用工具包) database package(数据库包),图书馆管理系统的包图,对象图,描述参与一个交互的各个对象在交互过程中某一时刻的状态。 可以被看作是类图在某一时刻的实例。,类图和对象图的区别,类图和对象图,图书馆管理系统的类图,7个类: item (书籍) title (记录) loan (罚款) reservation (预订信息) borrower (借阅者) administrator (系统管理员) librarian (图书管理员),某高校类图,汽车租赁公司中公司员工和客户的类图,person类是所有类的父类,它包含4个属性:性命(name),身份证号(id),地址(address)和电话号码(phoneno)。它所包含的方法都是用来设置和获取这些属性值的。 customer类是包含客户信息的类,除了继承父类的属性和方法之外,它包括车辆类型(cartype)和驾驶证号(licenseno)等属性。 employee类是包含员工信息的类,其中包含了员工的聘用日期等信息。同时,它还是manager、commonworker、skillworker3个类的父类。,manager类是管理人员的类,管理人员可以查看工作人员的工作记录。 commonworker类是普通工作人员的类,commissionrate属性是该员工任务完成率;方法calculate()用来计算该工作人员完成的任务率;checkrequest()用来查询是否有没有处理的申请单。 skillworker类是技术人员的类。skills属性代表该员工的技术特长,而qualifications属性则表示他的技术职称。,状态图,门的状态,状态机,状态机是展示状态与状态转换的图。 状态机由状态、转换、事件、活动和动作5部分组成。 (1)状态表示一个模型在其生存期内的状况,一个状态的生存期是有限的一个时间段。 (2)转换表示两个不同状态之间的联系,事件可以触发状态之间的转换。 (3)事件是在某个时间产生的,可以触发状态转换。 (4)活动是在状态机中进行的一个非原子的执行,由一系列动作组成。 (5)动作是一个可执行的原子计算,它导致状态的变更或者返回一个值。,状态图,状态图主要用于表现从一个状态到另一个状态的控制流。它不仅可以展现一个对象拥有的状态,还可以说明事件如何随着时间的推移来影响这些状态。 状态图由表示状态的节点和表示状态之间转换的带箭头的直线组成。若干个状态由一条或者多条转换箭头连接,状态的转换由事件触发。组成uml的图形元素有状态、转换、初始状态、终结状态和判定等,一个简单的状态图如下图所示。,一个简单的状态图示意图,1、 状态(正规),状态是状态机的重要组成部分,它描述了状态机所建模对象的动态行为产生的结果。 状态由一个带圆角的矩形表示,状态图的图标可以分为3部分:名称、内部转换和嵌套状态图。,状态图的图标表示, ,(1)名称。名称表示状态的名字,通常用字符串表示。 (2)内部转换。在内部转换中可以包含进入或者退出此状态应该执行的活动或动作,它们将响应对象所接收到的事件,但是不改变对象的状态。 (3)嵌套状态图。状态图中的状态有两种:一种是简单状态,简单状态不包含其他状态;一种是组成状态,组成状态是包含子状态的状态。,2、转换,转换用带箭头的直线表示,一端连接源状态,即转出的状态,箭头一端连接目标状态,即转入状态。转换可以标注与此转换相关的选项。,从图中可以看出,当源状态接收到一个事件,并且监护条件得到满足,则执行相应的动作,同时从源状态转换到目标状态。一个转换只允许一个事件,一个事件只允许一个动作。,3、 初始状态,每个状态机都应该有一个初始状态。初始状态代表状态机的起始位置,初始状态只能作为转换的源,而不能作为转换的目标,用一个实心的圆来表示。,初始状态,4、 终止状态,终止状态是模型元素的最后状态,是一个状态图的终止点。终止状态只能作为转换的目标,而不能作为转换的源。终止状态在一个状态图中可以有多个,它用一个含有实心圆的空心圆表示。,终止状态,5、 判定,判定处在状态图中这样一个位置:工作流在此处按监护条件的取值而发生分支。 因为监护条件为布尔表达式,所以通常条件下的判定只有一个入转换和两个出转换,根据监护条件的真假可以触发不同的分支转换。,判定的示例,状态,状态描述了对象生命期中某个条件或者状况,在此期间对象将: 满足某些条件 等待某些事件 执行某些活动 对象在任何时候都会处于某种状态中,所有对象都有状态。 对象所处的状态决定了它如何响应所检测到的事件或所接收的消息。,1、 概述,事实上,类对象的任何一个属性值都是一个状态,全部的状态构成一个庞大的状态空间。我们只关心那些明显影响对象行为的属性,以及由它们表达的对象状态,而不理睬那些与对象行为无关的状态。 状态分为简单状态和组成状态,状态包括状态名、活动、入口动作和出口动作等。,2、 状态名 3、 内部转换,内部转换只有源状态而没有目标状态,因此转换激发的结果并不改变状态本身。如果一个内部转换带有动作,动作也要被执行,但是由于没有状态改变发生,因此不需要执行入口和出口动作。,4、 入口动作与出口动作,入口动作和出口动作表示进入或退出某个状态所要执行的动作。入口动作用“entry/要执行的动作”表达,而出口动作用“exit/要执行的动作”表达。,5、 简单状态,简单状态是指不包含其他状态的状态。简单状态没有子结构,但它可以具有内部转换、进入动作和退出动作等。,6、 组成状态,组成状态可以使用 “与”关系分解为并发子状态,或者通过 “或”关系分解为互相排斥的顺序子状态。因此,嵌套的子状态可能是顺序子状态,也可能是并发子状态。如果包含顺序子状态的组成状态是活动的,则只有一个子状态是活动的;如果包含并发子状态的组成状态是活动的,则与它正交的所有子状态都是活动的。,(1)顺序子状态 如果一个组成状态的子状态对应的对象在其生命周期内的任何时刻都只能处于一个子状态,即多个子状态之间是互斥的,不能同时存在,这种子状态称为顺序子状态。,(2)并发子状态 有时组合状态有两个或者多个并发的子状态机,此时称组成状态的子状态为并发子状态。顺序子状态与并发子状态的区别在于并发子状态在同一层次给出两个或多个顺序子状态,对象处于同一层次中来自每个并发子状态的一个时序状态中。,7、 历史状态,当离开一个组成状态重新进入此状态时不希望从它的子初始状态开始执行,而是希望直接进入上次离开组成状态时的最后一个子状态,在这种情况下就要用到历史状态。 历史状态代表上次离开组成状态时的最后一个子状态,它用一个包含字母“h”的小圆圈表示。每当转换到组成状态的历史状态时,对象便恢复到上次离开该组成状态时的最后一个活动子状态,并执行入口动作。,事件,事件表示在某一特定的时间或空间出现的能够引发状态改变的运动变化。 事件有多种,大致可以分为入口事件、出口事件、动作事件、信号事件、调用事件、修改事件、时间事件和延迟事件等几种。,(1)入口事件 入口事件表示一个入口的动作序列,它在进入状态时执行。 (2)出口事件 出口事件表示一个出口的动作序列,它在退出状态时执行。 (3)动作事件 动作事件也称为“do事件”,它表示对一个嵌套状态机的调用。与动作事件相关的活动必定引用嵌套状态机,而非引用包含它的对象的操作。,(4)信号事件 信号是两个对象之间的通信媒介,信号的接收是信号接收对象的一个事件。 (5)调用事件 调用事件是一个对象对调用的接收,这个对象用状态的转换而不是用固定的处理过程实现操作。 调用事件至少涉及两个以上的对象,一个对象请求调用另一个对象的操作。,(6)修改事件 修改事件依靠特定属性值的布尔表达式所表示的条件满足来触发状态的转换。 监护条件与修改事件的区别:监护条件只是在引起转换的触发器事件触发时和事件接收者对事件进行处理时被赋值一次;修改事件则可以被多次赋值直到条件为真,多次赋值满足条件后转换也会被激发。,(7)时间事件 时间事件代表时间的流逝。时间事件既可以被指定为绝对形式,也可以被指定为相对形式。 (8)延迟事件 延迟事件是在本状态不处理,要推迟到另一个状态才处理的事件。,转换,转换表示两个状态之间的一种关系,当一个特定事件发生或者某些条件得到满足时,一个源状态下的对象在完成一定的动作后将发生状态转变,转向另一个称之为目标状态的状态。当发生转换时,转换进入的状态为活动状态,转换离开的状态变为非活动状态。 转换通常分为外部转换、内部转换、完成转换和复合转换4种。一个转换一般包括5部分的信息:源状态、目标状态、触发事件、监护条件和动作。,1、 外部转换,外部转换是一种改变对象状态的转换,它是最常见的一种转换。外部转换用从源状态到目标状态的箭头表示。下图描述了一个火车上的卫生间的简单状态转换,图中箭头上标注的都是引发状态转换的外部事件。这种转换就称之为外部转换。,2、 内部转换,内部转换有一个源状态但是没有目标状态,它转换后的状态仍旧是它本身。内部转换的激发规则和改变状态的外部转换的激发规则相同,如果一个内部转换带有动作,动作也要被执行。 内部转换用于对不改变状态的插入动作建立模型。,完成转换又称为自转换,它是由状态中活动的完成引起的,是自然而然地完成的转换。 内部转换和自转换的区别: 两者都不改变状态本身 自转换是离开本状态后重新进入该状态,它会激发状态的入口动作和出口动作的执行; 内部转换自始至终都不离开本状态,所以没有入/出口事件,也就不执行入/出口动作。,3、 完成转换,4、 复合转换,复合转换由简单转换组成,这些简单转换通过分支判定、分叉或接合组合在一起。判定参与的转换就是复合转换。除了简单的两个分支判定之外还可以有多条件的分支判定。多条件的分支判定又分为链式的和非链式的分支,这两种分支如下图所示。,链式分支,非链式分支,状态机描述了对象的具有事件驱动的动态行为,对象动作的执行、状态的改变都是以特定事件的发生为前提的,触发事件就是能够引起状态转换的事件。触发事件可以是信号、调用和时间段等。,5、 触发事件,6、 监护条件,转换可能具有一个监护条件,监护条件是触发转换必须满足的条件,它是一个布尔表达式。当事件被触发时,监护条件被赋值,如果布尔表达式的值为真,那么转换被触发,为假则不会引起转换,监护条件只能在触发事件发生时被赋值一次。,7、 动作,动作是一组可执行语句或者计算处理过程。动作可以包含发送消息给另一个对象、操作调用、设置返回值、创建和销毁对象等。动作也可以是一个动作序列,即一系列简单的动作的组合。动作的执行时间非常短,与外界事件所经历的时间相比是可以忽略的,因此,在动作的执行过程中不能再插入其他事件。下表列出了uml中的各种动作。,uml中的各种动作,图书馆管理系统中的状态图,在图书馆管理系统中,有明确状态转换的类包括:书籍和借阅者的帐户(相当于包含特定个人信息的电子借阅证)。可以在系统中为这两类事物建立状态图。,书的状态图,状态图说明: (1)new book:还未入库的新书。 (2)delete:已经从书库里删除的书。 (3)available:书籍处于可用状态,即可 以外借的状态。 (4)reserved:预订状态。 (5)borrowed:借出状态。,借阅者帐户的状态图,状态图说明: (1)new borrower:新加入的借阅者的帐户。 (2)account available:借阅帐户为可用状态,即未达到所规定的书籍借阅数目上限。 (3)account unavailable:借阅帐户为不可用状态,即所借的书籍已达到规定的书籍借阅数目上限,不能再借阅书籍了。 (4)delete account:个人帐户被删除状态。,cd机的状态图,洗衣机状态图,时序图,概述,时序图是强调消息时间顺序的交互图。 时序图描述了对象之间传送消息的时间顺序,用来表示用例中的行为顺序。 时序图将交互关系表示为一个二维图。其中,纵轴是时间轴,时间沿竖线向下延伸。横轴代表了在协作中各独立的对象。,时序图示例:,时序图的组成,时序图包含了4个元素: 对象(object) 生命线(lifeline) 消息(message) 激活(activation),1、 对象,时序图中对象的符号和对象图中对象所用的符号一样。 将对象置于时序图的顶部意味着在交互开始的时候对象就已经存在了,如果对象的位置不在顶部,那么表示对象是在交互的过程中被创建的。,2、 生命线,生命线是一条垂直的虚线,表示时序图中的对象在一段时间内的存在。每个对象的底部中心的位置都带有生命线。 生命线是一个时间线,从时序图的顶部一直延伸到底部,所用的时间取决于交互持续的时间。 对象与生命线结合在一起称为对象的生命线,对象的生命线包含矩形的对象图标以及图标下面的生命线。,对象的生命线:,3、 消息,消息定义的是对象之间某种形式的通信,它可以激发某个操作、唤起信号或导致目标对象的创建或撤销。 消息是两个对象之间的单路通信,从发送方到接收方的控制信息流。 消息可以用于在对象间传递参数。 消息可以是信号,也可以是调用。 在uml中,消息使用箭头来表示,箭头的类型表示了消息的类型。,4、 激活,激活表示该对象被占用以完成某个任务,去激活指的则是对象处于空闲状态、在等待消息。 在uml中,为了表示对象是激活的,可以将该对象的生命线拓宽成为矩形。其中的矩形称为激活条或控制期,对象就是在激活条的顶部被激活的,对象在完成自己的工作后被去激活。,激活条,对象的创建和撤销,如果对象位于时序图的顶部,说明在交互开始之前该对象已经存在了。如果对象是在交互的过程中创建的,那么它应当位于图的中间部分。 对象在创建消息发生之后才能存在,对象的生命线也是在创建消息之后才存在的。,创建对象的两种表示方法:,如果要撤销一个对象,只要在其生命线终止点放置一个“x”符号即可,该点通常是对删除或取消消息的回应。,1. 系统管理员添加书籍的时序图,图书管理员处理借书的时序图 (不包括预留书籍的情况),3. 系统管理员删除书目的时序图,4. 借阅者预留书籍的时序图,用顺序图描述打电话的操作过程。,存款过程的时序图,协作图,概述,协作图描述的是和对象结构相关的信息。 协作图的用途是表示一个类操作的实现。 协作图对交互中有意义的对象和对象之间的链建模。 在uml中,协作图表示交互作用中的对象和链,附在链的箭头代表消息,消息的发生顺序用消息箭头处的编号来说明。,协作图示例:,对象、链和消息,协作图包含了3个元素: 对象(object) 链(link) 消息(message),1、 对象,协作图与时序图中的对象的概念是一样,只不过在协作图中,无法表示对象的创建和撤销,所以对于对象在图中的位置没有限制。 在uml中用矩形表示。,2、 链,协作图中链的符号和对象图中链所用的符号是一样的,即一条连接两个类角色的实线。 为了说明一个对象如何与另一个对象连接,可以在链的末路上附上一个路径构造型。,3、 消息,协作图中的消息类型与时序图中的相同,只不过为了说明交互过程中消息的时间顺序,需要给消息添加顺序号。 顺序号是消息的一个数字前缀,是一个整数,由1开始递增,每个消息都必须由唯一的顺序号。可以通过点表示法代表控制的嵌套关系。 嵌套可以具有任意深度。与时序图相比,协作图可以显示更为复杂的分支。,时序图与协作图的比较,1、 相同点,1. 规定责任:两种图都直观地规定了发送对象和接受对象。 2. 支持消息:两种图都支持所有的消息类型。 3. 衡量工具:两种图还是衡量耦合性的工具。,1、 相同点,1. 规定责任:两种图都直观地规定

温馨提示

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

评论

0/150

提交评论