LOGO《UML建模》第4章对象图和包图目录2包图1对象图1.1对象图的概念1.2使用对象图2.2包图的概念2.3使用包图2.1包的概念•对象图(ObjectDiagram)就是类图的实例,它用来描述的是参与交互的各个对象在交互过程中某一时刻的状态,它可以看作是类图在某一时刻的实例。对象图和类图一样,反映了系统的静态过程,但它是以实际的或原型化为基础来表达对象间的关系。•从某种情况来说,对象图也是一种结构图,它可以用来呈现系统在特定时刻的对象以及对象之间的链接•对象图的组成元素:对象、链、注释、约束。链把多个对象连接在一起构成一个对象图。对象图的概念对象图的表示•UML中,表示一个对象,主要是标识它的名称、属性。对象由一个矩形表示,它包含2栏,在第一栏写入对象名,在第二栏列出属性名及属性值,格式如:”属性名=属性值”•对象名有下面三种表示格式,不同点在于第一栏表示对象的格式不同:•(1)对象名:类名•对象名在前,类名在后,用冒号来连接。对象名和类名都加下划线。对象名属性名=属性值邓小平:Personname=“邓小平”birthday=21October1983•(2):类名•这是对匿名对象的表示方法。这种格式用于尚未给对象取名的情况,前面的冒号不能省略。•(3)对象名•省略格式,即省略掉类名。只有对象名,对象名必须加下划线。匿名对象属性名=属性值邓小平name=“邓小平”birthday=21October1983:Personname=“”birthday=21October1983对象图的表示•链是两个对象间的语义关系。关联是两个类间的关系。对象是类的实例一样,链是关联的实例。链分单向链和双向链。•1.双向链•其中,队长、秘书和成员都是角色名称。分别表示小王,小刘,小陈在链接中充当的角色。•双向链对象图的表示•2.单向链:PersonDetails:Address源对象目标对象单向链接•单向链对象图的表示8类图对象图对象图的表示9类图和对象图的区别类图对象图类具有三个分栏:名称、属性和操作对象只有两个分栏:名称和属性在类的名称分栏中只有类名对象的名称形式为“对象名:类名”,匿名对象的名称形式为“:类名”或者“对象名”类中列出了操作对象图中不包含操作,因为对于属于同一个类的对象而言,其操作是相同的类使用关联连接,关联使用名称、角色、多重性以及约束等特征定义。类代表的是对对象的分类,所以必须说明可以参与关联的对象的数目对象使用链连接,链拥有名称、角色,但是没有多重性。对象代表的是单独的实体,所有的链都是一对一的,因此不涉及到多重性类的属性分栏定义了所有属性的特征对象则只定义了属性的当前值,以用于测试用例或例子中目录2包图1对象图1.1对象图的概念1.2使用对象图2.2包图的概念2.3使用包图2.1包的概念11对象图的使用:何时绘制对象图•使用对象图测试类图:当设计了类模型时,你可以通过对象图来模拟出一个运行时的状态,这样就可以研究在运行时设计的合理性。同时,也可以作为开发人员讨论的一个基础。•分析和说明源代码:由于类图只是展示了程序的静态类结构,因此通过类图看懂代码的意图是很困难的。因此在分析源代码时,可以通过对象图来细化分析。而对于开发人员,对于逻辑较复杂的类交互时,可以考虑画出一些对象图来做补充说明12绘制对象图的策略•识别准备使用的建模机制。建模机制了为其建模的系统的部分功能和行为,它们是由类、接口和其他元素之间的交互作用产生的。•针对所使用的建模机制,识别参与协作的类、接口和其他元素以及它们之间关系•考虑贯穿所用机制的脚本。冻结某一时刻的脚本,并且汇报参与所用的对象。•根据需要显示每个对象的状态和属性值。•显示出对象之间的链。目录2包图1对象图1.1对象图的概念1.2使用对象图2.2包图的概念2.3使用包图2.1包的概念14包的概念•在面向对象软件开发的视角中,类显然是构建整个系统的基本构造块。但是对于庞大的应用系统而言,其包含的类将是成百上千,再加上其间复杂的关联关系、多重性等,必然是大大超出了人们可以处理的复杂度。这也就是引入了“包”这种分组事物构造块。•包是UML中的主要结构,它是一种对模型元素进行成组组织的通用机制,它把语义上相近的可能一起变更的模型元素组织在同一个包中,方便理解复杂的系统,控制系统结构各部分间的接缝。•包是一种常规用途的组合机制。UML中的一个包直接对应于Java中的一个包。在Java中,一个包可能含有其他包、类或者同时含有这两者。•进行建模时,通常使用逻辑性的包,用于对模型进行组织;使用物理性的包,用于转换成系统中的Java包。包的概念161)对语义上相关的元素进行分组2)定义模型中的“语义边界”3)提供配置管理单元4)在设计时,提供并行工作的单元5)提供封装的命名空间,其中所有名称必须惟一包的作用包的表示•UML中,用文件夹符号来表示一个包。包由一个矩形表示,它包含2栏。下面是最常见的几种包的表示法PageNamePageNameClassName-1ClassName-2…..PageName类名Rose常用表示法包名放在第一栏在第二栏画出所包含的类图形表示第二栏列出包含的类名包名放在第二栏System:WebUIclass嵌套包•包的名称–每个包必须有一个与其他包相区别的名称。标识包名称的格式有两种:简单名和全名。–其中,简单名仅包含包一个简单的名称;全名是用该包的外围包的名字作为前缀,加上包本身的名字。–例如,Rose常用表示方法中,其包名UI就是一个简单名。而包System.Web.UI才是一个完整带路径的名称,表示UI这个包是位于System.Web命名空间中的。UISystem:Web:UI简单名含路径名(全名)包的表示包所拥有的元素•包自身所拥有的元素,如类、接口、组件、节点和用例等•从另一个包中合并或导入的元素•另外一个包所访问的元素•像类中的属性和方法一样,包中的元素也有可见性,包内元素的可见性控制了包外部元素访问包内部元素的权限。–包的可见性有3种:•“+”表示“public”,对所有的包都是可见的•“#”表示“protected”,对外包是不可视的•“-”表示“private”,只能对该包的子包是可视化的包的可见性包的嵌套里层包中的元素能够访问外层包中的定义的可见性为公共的元素,也有访问其外层包通过访问或引入依赖而得来的元素。一个包要访问它的内部包的元素,就与内部包有引入,访问关系或使用限定名。里层包中元素的名称会掩盖外层包中的同名元素的名称,在这种情况下需要用限定名引入外层包听同名元素划分和组织包•识别低层包:每个具有泛化关系或聚合关系的元素位于一个包中,关联密集的类划分到一个包,独立的类暂时作为一个包。•如果低层包数量过多则把它们合并,或者使用高层包组织它们。组织包的层次时应该遵循两个原则:层次不宜过多和包的划分不是唯一的。•标识包中的模型:对每个包确定哪些元素在包外可访问的,把它们标记为公共的,把所有其他的元素标记为受保护的或私有的。•建立包间的关系根据需要在包之间建立引入依赖、访问依赖或泛化关系。23设计包的原则•重用等价原则(ReuseEquivalencyPrinciple)–把类放入包中时,应考虑把包作为可重用的单元.•共同闭包原则(CommonClosurePrinciple)–把需要同时改变的类放在同一个包中.•一个类改变要求另一个类随之改变•删除了一个类后,另一个类多余•两个类之间有大量消息发送•共同重用原则(CommonReusePrinciple)–不会一起使用的类不要放在同一个包中.•为了表示包的新特性,用构造型来描述包的新特征。包的构造型有5种,下面分别举例说明。•1.《system》构造型:《system》构造型的包表示整个系统.•2.《subsystem》构造型:subsystem》构造型的包则表示正在建模的系统中某个独立的子系统.•3.《facade》构造型:只是某个其它包的视图,它主要用来为其它一些复杂的包提供简略视图•4.《stub》构造型:是一个代理包,它服务于某个其他包的公共内容,这通常应用于分布式系统的建模中.•5.《framework》构造型:用来表示一个框架的,框架是一个领域内的应用系统提供可扩充模板的体系结构模式包的构造型目录2包图1对象图1.1对象图的概念1.2使用对象图2.2包图的概念2.3使用包图2.1包的概念包图的概念•包以及类所建立的图形就是包图,使用包图可以将相关元素归入一个系统,一个包中可以包含包、图表或单个元素。包图经常用于查看包之间的依赖性,因为一个包所依赖的其他包若发生变化,则该包可能会被破坏,所以理解包之间的依赖性对软件的稳定性至关重要。包图中的关系•包图中的关系有2种:依赖关系、泛化关系。•1、依赖关系–依赖关系可以分为4种。在依赖关系中,我们把箭尾端的包称为客户包,把箭头端的包称为提供者包。•(1)《use》关系•《use》关系是一种默认的依赖关系,说明客户包中的元素以某种方式使用提供者包的公共元素,也就是说客户包依赖于提供者包。如果没有指明依赖类型,则默认为《USE》关系。•例如,有两个《USE》依赖,Client包将通过Server包来完成Order的存储,而Server包使用System.Data.SqlClient包来实现数据库的存储。包图中的关系•(2)《import》关系(输入依赖或引入依赖)•《import》关系:最普遍的包依赖类型,提供者包中的内容增加到客户包中,因此在使用《import》关系时建模人员应该注意不要让客户包中和提供者包中元素的名称冲突。•例如,Client包引入了(import)了Rule包,Rule包又引入了GUI包。同时,这还表示Client包间接引入了GUI包。包图中的关系•(3)《access》关系(访问依赖)•如果只想使用提供者包中的元素,而不想将两个包合并,则应使用该关系。在客户包中必须使用路径名,才能访问提供者包中的所有公共元素。•(4)《trace》关系•想表示一个包到另一个包的历史发展,则需要使用《trace》关系来表示包之间的依赖关系不要形成循环.如果确实有此类情况出现,不妨将几个循环依赖的包中全部放到一个更大的包中包图中的关系•2、泛化关系•包间的泛化关系类似于类间的泛化关系,使用一般包的地方,可以用特殊包代替。•在系统设计中,对某一个特定的功能,有多种实现方法。例如,实现多数据库支持;实现B/S和C/S双界面。这时就需要定义一些高层次的“抽象包”和实现高层次功能的“实现包”。目录2包图1对象图1.1对象图的概念1.2使用对象图2.2包图的概念2.3使用包图2.1包的概念创建包图网上炒股系统