Java面向对象程序设计(第2版)第17章.ppt
《Java面向对象程序设计(第2版)第17章.ppt》由会员分享,可在线阅读,更多相关《Java面向对象程序设计(第2版)第17章.ppt(65页珍藏版)》请在装配图网上搜索。
统一建模语言UML UML模型系统体系结构 UML UnifiedModelingLanguage Unified Booch Rumbaugh Jacobson UML由世界著名的面向对象技术专家G Booch J Rumbaugh I Jacobson发起 在Booch方法 OMT方法和OOSE方法基础上 广泛征求意见 汲众家之长 几经修改而完成的 1997年被OMG ObjectManagementGroup 采纳为业界标准 Modeling 建模 UML用于建模 即表达模型设计 而且自身拥有四层体系结构 模型是系统一个抽象的概括 强调系统设计特定的重要方面 同时忽略大量底层的编程细节 而建模就是为了捕捉 描述系统的核心 同一研究对象不同人建立的模型可能同样好或同样差 Language 是一种可视化建模语言 有语法和语义 消除了自然语言的歧义 虽然与具体面向对象语言无关 但学会UML的关键之处是将UML模型与具体代码实现相互结合 UMLmodel Sourcecode Objectstructures Executingprogram UML Programminglanguage Abstractviewof Abstractviewof Specifies Specifies 模型与代码之间的关系 四层元模型体系结构 Run timeInstance运行实例层 Model模型层 Metamodel元模型层 Metametamodel元元模型层 Class person1 Person Person Tool Association InfrastructureLibrary Core Constructs Class InfrastructureLibrary Core Abstraction Relationships 规定元模型的语言 规定模型的语言 定义描述语义域的语言 UML的主要特点 建模设计上的标准化与可视化的结合建模设计上的语言无关性 建模设计上标准性与扩展性的统一 UML视图 View 描述软件系统的不同方面 结构视域 实现视域 行为视域 环境视域 用户视域 4 1视图模型 不同开发者对视图的关心角度 UML图 Diagram 用于描述模型 是模型元素的一个集合单元 敏捷软件原则 需要时再添加 UML的主要图类型 活动图 用例图 协作图 对象图 类图 状态图 序列图 Workflow Scenarios Inter classbehavior Inter classbehavior Structure Structure Interactionequencebetweenobjects UML图在设计过程中的演化关系 发现类方法 名词短语 公共类 用例导出 CRC 类 职责 协作 提炼类方法 系统范围内 清晰目的 不能孤立 有属性 类功能单一 Association Generalization Structure UML图的类型划分 UML视图与图对应关系 B A B A Usecase B A 用例图主要模型元素及其含义 参与者 角色 用例 包含关系 扩展关系 关联关系 泛化关系 参与者是针对用例所扮演的角色 可以人也可以是事物 用例是功能 功能是完整的 外部可见的 相互独立的 完整含义 用例的执行逻辑必须完整 即有主要执行的流程 也有各种次要流程和意外处理流程 外部可见的 不是内部功能 是参与者可以感知的 相互独立的 用例开始执行到最终结束不依赖于其他用例 是参与者和用例之间的通信渠道 如果没有箭头 则代表通信是双向的 是用例与用例的一种依赖关系 它允许被包含用例中的公共行为从包含用例中分解出来 如B用例包含A用例 则意味着B用例要执行 必须先执行A用例 是用例与用例的关系 B用例扩展A用例 表示A用例在某种条件满足下 可以执行B用例 因而B用例是A用例的额外功能 另外当B用例的执行可以由A用例而来 也可以由其他途径而来时 没有包含那种强制含义 B用例和A用例也是一种扩展关系 是用例与用例 参与者与参与者之间的一种继承关系 表示一个用例 角色 将继承另一用例 角色 的所有功能 语义含义 用例图是对需求中系统功能的规格说明 不对系统约束进行说明 并被作为验收测试的依据 用例图模型的建立过程 确定参与者和用例 确定参与者与用例之间的关系 确定参与者之间的关系 确定用例之间的关系 确定需求边界 在用例图中用矩形框表示 对用例功能进行描述 形成文档 例 包含二个角色 四个用例 其中B用例和A用例之间的关系为包含 即B用例执行前必须先执行A用例 C和A的关系为扩展 即A用例在某种条件满足下 可以扩展出C用例 D用例和A用例的关系为继承 表明D将拥有A用例的所有功能 参与者1和参与者2之间的关系为继承 表示参与者2除了可以驱动A B用例外 还可以驱动参与者1的所有用例 即图中的D用例 用例规格说明格式 表示类及其关联关系的图 类图 长短式 抽象类和具体类表示 类多重性表示 封装表示 Component 主要的模型元素 类 关联 泛化 依赖关系 接口 包 类中属性和操作的类范围和对象范围 Canister display getNumOpenSlots setStatus numCanisters int numWafers int size float Canister 静态属性 构造方法 静态方法 此三者专属于类 其他属性和方法虽然在类中定义 实际为对象而服务 对象图为类图实例 是类图的一个快照 对象图 长式 属性 值 对象名 类名 对象名 类名 短式 类图和对象图的比较 类是数据类型 UML在表示所有语言数据类型上不够 用构造型 stereotype 进行数据类型 模型元素 的扩展 基本int数据类型 MyInterface Java语言的接口 用户自定义枚举类型 泛化 抽象类与继承关系的UML表示泛化构造型 抽象类在编程上的可替换 Interchageable 与多态性 Accountac ac newCurrentAccount System out println ac getBalance ac newDepositAccount System out println ac getBalance 关联 一 关联名 关联方向 关联角色 关联多重性 classPerson Componyemployer classCompany Person employee 类A 类B 角色a 角色b 关联名 关联多重性 关联多重性 关联 二 实现 类图为关联 对象图为链接 代码实现为引用 类图中的关联关系将决定对象图 序列图中对象的交互关系 用代码表示类图多重性含义 一 classA Bb classB Aa A B两个类对象可以引用对方也可以不引用 总之可自由选择 用代码表示类图多重性含义 二 A类对象必须引用B类对象 B类对象则可以引用也可以不引用A对象 classA Bb A B b if b null throwNullLinkError b b classB Aa 用代码表示类图多重性含义 三 classA Bb A B b if b null throwNullLinkError b b b setA this classB Aa voidsetA A a if a null throwNullLinkError a a 先产生B类对象 再产生A类对象 只要A类对象产生时 二者就构成了相互引用 如果产生对象的方式反过来 如法炮制 关联 三 关联的元数 一元关联或自关联或递归关联 二元关联 三元关联 MailMessage Attachment composition Computer Processor 1 aggregation 关联 四 聚合 部分是整体的一部分 组合 整体拥有部分 关联 五 关联约束 委员会 人 subset 1 成员 主席 主席是成员中的一员 委员会有一个成员的引用集合 有一个 主席引用 主席对象被 主席引用 引用外 在成员引用集合中也存在一个引用指向主席对象 多边形 线段 ordered 多边形中存在一个线段的引用集合 多个线段对象的引用是以有序的方式加入集合当中 购房合同 人 公司 xor 购房合同的主体只能有一个 要么是人 要么是公司 老板 人 工人1 人 工人2 人 A 公司 老板 人 工人1 人 工人2 人 A 公司 B 公司 约束条件下的对象链接图 没有约束条件下的可能存在的对象链接关系图 关联 六 关联类 产生条件 多重性中的多对多 将对应关系进行存储 classRegistration privateintmark privateStudentstudent Registration Studentst student st mark 0 classModule privateVectorregistrations newVector publicvoidenroll Studentst registrations addElement newRegistration st 关联 七 关联与类的泛化 classDirectory privateHashtabletheFiles 关联 八 受限 qualified 关联的表示及实现 name是theFiles中的Key Directory File interface MyClass MyInterface MyClass MyInterface 接口表示及实现 classMyDependentClass voidmyFunction1 MyReferencedClassr MyReferencedClassmyFunction2 voidmyFunction3 MyReferencedClassm dependence referencetoaclass parameter orreturntype orlocalvariabletype MyDependentClass MyReferencedClass 依赖的表示和实现 依赖的表示和实现 MyClass MyInterface UseClass classUseClass voidmyFunction MyInterfacemi Student jack Student 包及包图 包是UML的模型元素之一 是一种分组机制 把一些模型元素组织成语义上相关的组 包可以包含类 接口 组件 结点和其他包 包之间有引入 依赖 继承的关系 包图用来描述系统模型的体系结构层次 一个包就是一个子系统 包图是设计中的概念 在建模时起到归类的作用 对于实际系统没有意义 不需要转化成可执行的系统 包图中涉及到的注解到包名边的构造型主要有 系统模型 子系统模型 是其他包的一个访问接口视图包 另一个包的代理 由模式组成的包 包名 可含有包路径 包层次 A包在类定义层次使用了B包继承了D包 在对象层次调用了C包中的对象 顺序图 序列 图 顺序图又称为序列图 描述对象之间动态的消息交互关系 体现对象间消息传递的时间顺序 图顶层的水平轴为交互的对象 对象下的虚线代表对象生命线 虚线上的矩形框表示对象接受消息后被激活期 代表方法的执行 对象间消息交互从图的最顶端开始 自上向下体现的是消息交互的时间顺序 Client端是消息的发送端 拥有myObject的引用 Operation 是MyClass的方法 该方法中有myClass1对象的引用 Operation1 是MyClass1的方法 a是MyClass的声明 a Operation b是MyClass1声明 b Operation1 交互图中的消息 1 消息格式 序号 条件 重复次数 回送值 操作名 参数表 2 消息四种类型 简单消息 同步消息 异步消息和返回消息 消息的类型 内部消息的表示方法 3 内部消息和循环消息表示方法 4 消息中的构造型 创建消亡用同步消息 建立顺序图步骤 1 确定交互的类对象2 在序列图左上角画一个矩形框代表该对象 使用UML标记方法 object Class3 画一个延长矩形框在该对象下面表示一个操作的执行 4 画一个箭头指向右边 myObject MyClass myObject1 MyClass1 operation1 合作图 协作 图 用于描述相互合作的对象间的交互关系 模型元素由类元或对象 链接 消息构成 类元角色 描述对象在交互中扮演的角色 winner Account 链接 用实线表示两个类元 对象 之间的链接 用构造型表明链接的种类 消息 格式同顺序图 合作图中的循环消息表示法 对象的创建与撤销 new 合作中新产生的对象或链接 destroy 合作中销毁的对象或链接 transient 合作中产生又销毁的对象或链接 消息构造型 链接撤销 对象撤销 顺序图和合作图的相互转化 活动图 活动图用于描述系统需求各用例内活动的执行顺序或类方法中主要活动的执行流程 活动 活动由子活动或动作构成 动作是不可再分的活动 其执行不能被打断 动作不能象活动那样拥有入口动作 出口动作和内部迁移 活动和动作都拥有相同的UML表示符号 模型元素 活动 迁移 分支与合并 开始活动 结束活动 分叉 汇合 迁移 由带箭头的实线表示 表示动作状态的转移 当迁移上无条件时 称为无条件动作流 当有条件时 条件满足迁移发生 分支与合并 一个入迁移 多个具有互斥条件的出迁移 迁移沿判定条件为真的分支迁移 合并 将多个具有互斥条件的入迁移合并成一个出迁移 即当有一个入迁移发生时 就会引起出迁移 迁移也可以分叉和汇合 分叉形成并发迁移 汇合则对迁移进行同步 开始活动与结束活动 开始活动是活动图的开始 只能有一个 结束活动是活动图的结束 一个活动图可以存在多个结束活动 状态图 描述系统或类可能有的不同状态及其引起状态迁移的事件 对象的状态决定了对象的行为 模型元素 迁移 开始状态 结束状态 状态 状态 由状态名和活动组成 在状态图中 状态名唯一 活动是在该状态下执行的事件和动作 是可选项 每个状态有有入口 执行和出口三个标准事件 每个事件对应一个动作 如果在状态的活动区还画有一个或多个状态图 则称为嵌套状态 迁移 由带箭头的实线表示 表示状态的转移 迁移的完整描述为 事件 参数 条件 动作 迁移可以接判断 判断一入多出 且出迁条件互斥 条件判断 开始状态与结束状态 开始状态是状态图的开始 对于同一层次状态图而言只能有一个 嵌套的状态图可以有自己的开始状态和结束状态 结束状态是状态图的结束 一个状态图可以有多个结束状态 状态图与活动图的相同点和不同点 相同点 1 图中的建模元素有相似之处 2 对系统或对象在生存周期的状态和行为进行描述 不同点 1 状态图中迁移发生时 必须有事件发生或条件满足 而活动图的迁移可以无条件或没有事件发生 2 状态图对于系统状态的描述可以横跨多个用例 而活动图则是针对同一用例内部的动作执行给出描述 构件图 构件图描述构件及其相互依赖关系 用于将系统逻辑设计与物理模块进行对应 模型元素 构件 接口 依赖 构件 相对逻辑设计上的类和对象 构件是和物理系统相关的一个概念 不同的语言对构件的定义有所不同 UML中的构件含义包括代码文件 也指数据库 动态链接库 web页面等 依赖 构件中的关系以依赖的形式表达 可分为编译依赖和调用依赖两类 接口 构件和接口存在实现和调用两种关系 构件构造型 构件依赖中使用的含义 部署图 部署图描述了构件在物理硬件上的分布情况 模型元素 构件 结点 关联 结点 表示某种计算资源的物理对象 包括计算机 外部设备 打印机 读卡器 通信设备等 结点内部放置构件 表示构件部署在该结点上 同一个结点内部的构件关系用依赖表达 关联 结点之间的关联表示结点之间物理连接以及其上用的通信协议 依赖 部署图中的构造型 用来表达结点通讯使用的协议等 经典案例 案例1工厂仓库管理信息管理 需求 publicclassPart privateStringname privatelongnumber privateDoublecost publicPart String name long numbr double cost name name number number cost cost publicStringgetName returnname publiclonggetNumber returnnumber publicdoublegetCost returncost 问题 潜在需求 仓库零件非常多 这样设计的问题有 1 对象属性冗余 造成内存浪费以及维护上的困难 2 仓库中没有零件无法记录零件类型 针对需求NO1 3的设计 publicclassPart privateCatalogueEntryentry publicPart CatalogueEntrye entry e Screws Bolts 上述问题的解决方案 publicclassPart privateCatalogueEntryentry publicPart CatalogueEntrye entry e publicdoublecost returnentry getcost Part成本查询的相应调整 针对需求NO4的设计 组合表示 场景描述 p3和p2组成a2 a2和p1组成a1 潜在需求 一个assembly可以对应多个part或assembly 设计要求 引用上存在多样性现象 Vector链表中的每个单元可引用任何对象 因而Assembly或Part的引用都可以放入 但组合物中加入构件时有两种方案 很明显方案2较好 publicclassAssembly privateVectorcomponents newVector publicvoidaddAssemble Assemblyc components add c publicvoidaddPart Partc components add c publicvoidadd Objectc components add c 方案1 方案2 多样性 上图中的组合关系又可以表示如下 为解决 黑洞 问题 同时也为了Vector中组成对象能用一致的接口进行调用 Assembly以及Part必须具有后天的 血缘 关系 而不是天然的Object的 血缘 关系 因而Object的角色最好由自定义的抽象类Component充当 它有一个抽象接口方法cost 类图语义 凡是Object的子类都可加入Assembly当中 但这样设计后 加入Assembly当中的对象都失去原来的特征 只剩Object的特征 且因为集合结构Vector中对象引用多样性 无法进行准确还原 好似 黑洞 针对需求NO5的设计 组合物成本查询 最终的类图和对应的代码 遍历 动态绑定 发统一消息 抽象类的定义保证了cost 接口在子类定义和对象调用中的一致性 案例1总结 案例2图形编辑器需求 图形编辑器用例图 图形编辑器界面 1 软件初始启动 处于创建长方形的状态 编辑区域默认产生第一个编辑图层 图形编辑提示区域提示为 第一页 2 创建图形 创建图形用例 用于创建直线 椭圆 矩形 用户首先选择创建图形的类型 之后将鼠标移至图形编辑区域 按下鼠标确定起始点 之后拖动鼠标 在绘图区域动态绘出相应图形 当鼠标释放时 在起始和终止点所包含的长方形区域内 将图形绘制在当前的图层上 3 选择图形 主事件流是 对已创建的图形进行选择 可单选也可多选 选择的图形应标出选中状态 当图形嵌套时 在其内部点击 可按图形创建的先后依次进行选择 备选流 如果要取消当前的选择状态 可在图形编辑层中的任一空白点点击 便可取消原先的所有选择状态 4 删除图形 前置条件为选择要删除的图形 再点击 删除元素 按钮 可删除选择的所有图形 5 改变图形主事件流是 在选择的图形中点击图形的控制点并移动 进行图形尺寸的改变 备选流 可对图形尺寸直接放大缩小 6 移动图形 主事件流是选择图形之后拖动图形至指定位置 备选流 当整个图形编辑器移动时 编辑器中所有图形也相应移动 7 创建图层 主事件流是可在图形编辑区域进行新图层的创建 新图层创建后 自动为当前图层 在其上可进行图形创建和管理工作 新图层产生的同时 图形编辑层提示给出编号提示 备选流 如果产生的图层超过16个 则不能再产生新的图层 同时 图形编辑层提示给出相应的提示信息 后置条件 新图层的处于创建 长方形 状态 8 管理图层 主事件流是可在图形编辑区域针对多个图层进行切换选择 并将选择的图层作为当前层 在其上可进行图形创建和管理工作 切换时 图形编辑层提示给出当前层的编号提示 备选流 如果当前图层为最后一个图层 则再切换时 当前图层为第一页图层 后置条件 当图层切换时 图层的操作状态重新处于创建 长方形 状态 Panel DiagramEditorControls Button Choice DiagramEditorApplet Applet Canvas Tool DiagramEditor Diagram CreationTool SeletionTool Element LineTool EllipseTool WrectangleTool Ellipse Wrectangle Line Label 类图 1 1 current 1 1 1 1 1 1 1 0 1 subset subset selected tool 1 resizing owns cur own select cur select 序列图 刷新 创建图形 以创建矩形为例 序列图 移动图形 序列图 改变图形尺寸 状态图 选择图形状态图 创建图形状态图 序列图 删除图形- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 面向 对象 程序设计 17
装配图网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文