UML建模与分析UML建模与分析2第3章类图、对象图和包图类图1类之间的关系2构造类图模型3抽象类4接口5对象图6包图7UML建模与分析3第3章类图、对象图和包图学习重点:理解类图的基本概念为系统建模类建模类之间的关联关系理解并建模泛化关系了解依赖关系和实现关系了解对象图和包图的概念构造类图UML建模与分析4静态模型的基本概述静态模型类图组件图部署图对象图包图类图:描述系统中类的静态结构,它不仅定义系统中的类,表示类之间的关系(如关联、依赖、聚集等),也表达类的内部结构(即类的属性和操作)。类图描述的这种静态关系涉及软件系统开发的整个生命周期。对象图:类图的实例,符号与类图非常相似,可以认为它是类图在程序执行的某个过程中一瞬间的快照。包图:由包或类组成(有时也包括组件),表示包与包之间的关系。包图可以用于描述系统的分层结构。组件图和部署图涉及程序的物理实现。UML建模与分析53.1类图的概念描述类、接口、协作及它们之间关系的图。显示系统中各个类的静态结构。UML建模与分析63.1.1概述类图的元素:①类(Class)②接口(Interface)③协作(Collaboration)④依赖关系(Dependency)⑤泛化关系(Generalization)⑥关联关系(Association)⑦实现关系(Realization)UML建模与分析73.1.2类面向对象系统组织结构的核心。对一组具有相同属性、操作、关系和语义的对象的抽象。包括名称部分(Name)、属性部分(Attribute)和操作部分(Operation)。UML建模与分析83.1.2类类的另外几种形式:名称名称属性名称操作UML建模与分析93.1.2类类的名称、属性和操作等在类图中的具体表示方法和含义:1名称2属性3操作4职责5约束6注释UML建模与分析10名称应该来自系统的问题域。应该是一个名词,且不应该有前缀或后缀。分为简单名称和路径名称。命名时应该遵守以下几条准则:使用标准术语。使用具有确切含义的名词。必要时用名词短语作名字。UML建模与分析11属性描述了类在软件系统中代表的事物(即对象)所具备的特性。类可以有任意数目的属性,也可以没有属性。UML1.3Specification中定义的格式:[可见性]属性名[[多重性]][:类型][=初始值][{属性字符串}]UML1.4/1.5Specification中定义的格式:[可见性]属性名[:类型][[多重性[次序]]][=初始值][{属性字符串}]UML建模与分析12属性1.可见性2.属性名3.类型4.初始值5.属性字符串UML建模与分析13(1)可见性类型:①公有(Public)“+”②私有(Private)“-”③受保护(Protected)“#”④实现(implementation)~UML建模与分析14(2)属性名每个属性都必须有一个名字以区别于类中的其他属性。属性名由描述所属类的特性的名词或名词短语组成。单字属性名小写,如果属性名包含了多个单词,这些单词要合并,且除了第一个单词外其余单词的首字母要大写。UML建模与分析15(3)类型简单类型:①整型②布尔型③实型④枚举类型系统中的其他类UML建模与分析16(4)初始值目的:①保护系统的完整性,防止漏掉取值或被非法的值破坏系统的完整性。②为用户提供易用性。UML建模与分析17(5)属性字符串指定关于属性的其他信息。任何希望添加在属性定义字符串值但又没有合适地方可以加入的规则,都可以放在属性字符串里。例如“{只读}”UML建模与分析18属性举例:+size:Area=(100,100)#visibility:Boolean=false-origin:Point;Colors:color[3]Points:Point[2..*ordered]//可见性尚未定义//多重性为2个或多个,有序UML建模与分析19操作对类的对象所能做的事务的抽象。一个类可以有任意数量的操作或者根本没有操作。返回类型、名称和参数一起被称为操作签名。在UML中,类操作的语法为:[可见性]操作名[(参数列表)][:返回类型][{属性字符串}]UML建模与分析20操作1.可见性2.操作名3.参数表4.返回类型5.属性字符串UML建模与分析21(1)可见性类型:①公有(Public)“+”②私有(Private)“-”③受保护(Protected)“#”④包内公有(Package)“~”UML建模与分析22(2)操作名用来描述所属类的行为的动词或动词短语。单字操作名小写,如果操作名包含了多个单词,这些单词要合并,并且除了第一个单词外其余单词的首字母要大写。UML建模与分析23(3)参数表一些按顺序排列的属性定义了操作的输入。是可选的,即操作不一定必须有参数才行。定义方式:“名称:类型”。若存在多个参数,将各个参数用逗号隔开。参数可以具有默认值。+newStudent(inID:string,inName:string)UML建模与分析24(4)返回类型是可选的,即操作不一定必须有返回类型。绝大部分编程语言只支持一个返回值。具体的编程语言一般要加一个关键字void来表示无返回值。UML建模与分析25(5)属性字符串在操作的定义中加入一些除了预定义元素之外的信息。UML建模与分析26职责类或其他元素的契约或义务。自由形式的文本。非形式化的方法。UML建模与分析27约束指定了类所要满足的一个或多个规则。形式化的方法。UML建模与分析28注释注释可以包含图形也可以包含文本。UML建模与分析293.2类之间的关系1关联关系2泛化关系3依赖关系4实现关系UML建模与分析303.2.1关联关系关联关系:在对系统建模时,特定的对象间将会彼此关联,我们称这种关系为关联关系,它反映了对象之间相互依赖、相互作用的关系。角色角色UML建模与分析31关联关系1.名称2.导航性3.角色4.多重性5.定序6.约束7.可变性8.双向关联9.单向关联10.聚合关联11.组合关系12.自身关联与或关联13.关联类14.受限关联15.派生关联UML建模与分析32(1)名称使用一个动词或动词短语来命名关联。清晰而简洁地说明对象间关系。关联的名称并不是必需的。可以前缀或后缀一个指引阅读方向的方向指示符,以消除歧义。关联端点关联名称UML建模与分析33(2)导航性描述一个对象通过链进行导航访问另一个对象。使用导航性可以降低类间的耦合度。从一个类(对象)可以找到另外一个,反过来却不可。UML建模与分析34(3)角色关联关系中一个类对另一个类所表现出来的职责。角色的名称应该是名词或名词短语,以解释对象是如何参与关系的。可见性UML建模与分析35(4)多重性指有多少对象可以参与该关联。可以表达一个取值范围、特定值、无限定的范围或一组离散值。格式:“minimum..maximum”(均为Int型)。0..10..n1(1..1的简写)1..n*(即0..n)73,6..90(0..0的简写)(表示没有实例参与关联,一般不用)赋给一个端点的多重性表示该端点可以有多少个对象与另一个端点的一个对象关联。UML建模与分析36(4)多重性一个教师可以开设一到三门课,一门课有一到多名教师讲授UML建模与分析37(5)定序PersonCarholds1..*0..*{ordered}一个Person对象可以拥有多个Car对象,这些Car对象被要求按照一定顺序进行排序UML建模与分析38(6)约束PersonCarholds1..*0..*{ordered,price$100000}关联端点上的约束PersonCarholds1..*0..*{ordered,price$100000homemade}关联中的约束UML建模与分析39(7)可变性ContractCompanybind1..*1{frozen}可变性允许建模者对某个关联的链进行操作。如:添加删除等。可变性选项中,{frozen}表示链一旦被建立,就不能移动或改变;如允许创建新链而不允许删除链,则可使用{addOnly}选项。UML建模与分析40(8)双向关联关联总是被假定是双向的。这意味着,两个类彼此知道它们间的联系。一个双向关联用两个类间的实线表示。在线的任一端,可以放置角色名和多重值。UML建模与分析41(9)单向关联虽然两个类是相关的,但是只有一个类知道这种联系的存在。一个单向的关联表示为一条带有指向已知类的开放箭头的实线。单向关联只包含已知类的角色名和多重值描述UML建模与分析42(10)聚合关系一种特殊类型的关联。表示整体与部分关系的关联。描述了“hasa”的关系。UML建模与分析43(11)组合关系聚合关系中的一种特殊情况,是更强形式的聚合,又称强聚合。成员对象的生命周期取决于聚合的生命周期。聚合不仅控制着成员对象的行为,而且控制着成员对象的创建和解构。UML建模与分析44(12)自身关联与或关联类也可以使用自身关联与它本身相关联。当一个类关联到它本身时,并不意味着类的实例与它本身相关,而是类的一个实例与类的另一个实例相关。UML建模与分析45(12)自身关联与或关联一个类可以参与多个关联关系,但是当两个关联不能同时并存时,应该怎样表示呢?UML建模与分析46(12)自身关联与或关联个人持有的合同不同于一般公司持有的合同,个人与保险合同的关联关系不能跟公司与保险合同的关联关系同时发生。UML提供了或关联来建模这样的关联关系。InsurerContractPersonCompany10..*1..*0..*1..*0..*保险业务类图UML建模与分析47(13)关联类把关联建立类,与关联关系相连的类UML建模与分析48(14)受限关联受限关联由关联类和限制符可以唯一确定受限制的类例:一名顾客有多个银行账户,但指定的一个账户只能对应一个客户,甚至没有客户;UML建模与分析49(15)派生关联派生(Derived)关联一个公司有多个部门,一个职员为其中某个部门工作,则可推导该职员为该公司工作UML建模与分析503.2.2泛化关系存在于一般元素和特殊元素间的分类关系。可以用于类、用例以及其他模型元素。描述了一种“isakindof”的关系。UML建模与分析513.2.2泛化关系泛化的目的:可以使子类共享父类的属性和操作,实现继承;可以使子类的实例用于任何父类被声明使用的地方,实现多态。UML建模与分析523.2.2泛化关系继承UML建模与分析533.2.2泛化关系多态尽管每个子类的实现方法各自不同,但外界调用的方式完全一样UML建模与分析543.2.2泛化关系抽象类(abstract,斜体表示):不能产生实例的类,因为类中的方法往往只是声明,而没有实现。所有的基类都应该是抽象类,所有的抽象类都应该是基类。UML建模与分析55泛化的层次与多重继承泛化可能跨越多个层次。一个子类的超类也可以是另一个超类的子类。如图所示。AutomobileCarSedanSportsCar...UML支持多重泛化,但大多数情况下,多重泛化在实际中的应用并不多。UML建模与分析56泛化约束泛化有一个与其相关的约束,也被称为受限泛化。1、如果有多个泛化使用相同的约束,可以绘制虚线穿过两个泛化,并且在花括号({…})中标注约束名。2、如果只有一个泛化,或多个泛化共享关联的空箭头部分,就只需在朝向空箭头的括号中建模约束即可,如图AnimalTigerMonkey{constraint}AnimalTigerMonkey{constraint}UML建模与分析573.2.3依赖关系依赖关系:依赖也是类与类之间的连接,并且依赖总是单向的。实体之间的“依赖”关系暗示一个实体的值发生变化后可能影响依赖于它的其他实例。表示两个或多个模型元素