uml图之类图

类图地位:

面向对象的基础是类,在面向对象处理中,类图处于核心地位,它提供了用于定义和使用对象的主要规则,同时,类图是正向工程的主要资源,是逆向工程的生成物,因此类图是任何面向对象系统额核心,类图随之也成了最常用的uml

类图是描述类,接口以及他们之间关系的图,它显示了系统中各个类的静态结构。类图是面向对象系统建模中最常用的基本图之一,其他许多图,如状态图,组件图和配置图都是在类图的基础上进一步描述了系统的其他方面的特征。

类图的表示:

名称

属性

操作

补充:

职责:可以在类标记中操作分栏下面另加一个分栏,用于说明类的职责,所谓指责是指类或其他元素的契约或者义务。

约束:在类的标记中说明类的职责是消除二义性的一种非形式化的方法,而使用约束则是一种形式花的方法。约束指定了类应该满足的一个或者多个规则。


类的关联:

他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;

1.类的关联的属性(二元关联):

  1. 名称:关联的名称表达了关联的内容,含义确切的名称使人更容易理解。
  2. 关联的端点

每个关联端点都包含以下内容:

  1. 端点上的对象在关联中扮演什么角色,
  2. 有多少对象可以参与关联,
  3. 对象之间是否按一定顺序排列,
  4. 是否可以用对象的一些特征对该对象进行访问,
  5. 一个端点的对象是否可以访问另一个端点的对象等
  1. 关联中的角色:
    1. 示例:

 

 

 

 

  1. 可见性:

 

  1. 多重性:
    1. 多重性用来表达一个取值范围,特定值,无限定的范围或者一组离散值。
    2. uml图之类图_第1张图片
  2. 定序:
    1. 在关联中使用多重性时,意味着可能有多个对象参与关联,当有多个对象时,还可以使用定序约束,定序就是指将一组对象按一定的顺序排列。在uml规范中,布尔标记值ordered用于说明是否要对对象进行排序。要指出参与关联的一组对象需要按一定的顺序排序,只需将关键字{ordered}置于关联端点处就可以了。
  3. 约束:
    1. Uml定义了3种扩展机制,即标记,原型和约束。其中,约束定义了附加于模型元素之上的限制条件,保证了模型元素在系统生命周期中的完整性。约束的格式实际上是一个文本字符串(使用特定的语言表达),几乎可以被附加到模型中德任何元素上。约束使用的语言可以是ocl,某种编程语言甚至也可以是自然语言,如英文,中文。
    2. 约束条件作用对象是靠近它的关联端点的类,在模型中使用约束时,要是约束条件靠近它所作用的类。在不熟悉ocl之前可以使用自然语言约束。
  4. 限定符:
    1. 当需要使用某些信息作为关键字来识别对象集合中的一个对象时,可以使用限定符。限定符定义了被参考对象的一个属性,并使用该属性作为直接访问被参考对象的关键字,使用限定符的关联被称为受限关联。
  5. 导航性:
    1. 描述的是一个对象通过链进行导航访问另一对象。也就是说,对一个关联端点设置导航属性意味着本端的对象可以被另一端的对象访问。
  6. 可变性:
    1. 可变性允许建模者对属于某个关联的链接进行操作,默认情况是允许任何形式的编辑,例如,添加,删除等。在uml中,可变性默认值可以不在模型中表现出来。但是如果需要对可变性做些限定,则需要将可变性的取值放在特性字符串中。和定序以及约束放在一起。在预定的可变选项中,{frozen}表示链一旦被建立,就不能移动或者改变,如果应用程序只允许创建新链而不允许删除链,则可以使用{addOnly}选项。
  1. 关联类
    1. 关联类是一种将数据值和链接关联在一起的手段,在uml中,关联类是一种模型元素,它同时具有关联和类的特征。关联类可以像关联那样将两个类连接在一起,并且可以像类一样具有属性,关联类的属性用来存储向关联的信息。
    2. 关联类和其他的类非常相似,两者之间的区别就在于对他们的使用需求不同。一般的类描述的是某个实体,即看得见摸得着的东西,而关联类描述的则是关系。由于关联类也是一个类,所以关联类也可以参与其他的关联。
  2. 或关联与反身关联:
    1. 或关联是指对多个关联附加约束条件,使类中的对象一次只能参与一个关联关系。当两个关联不能同时发生时,用一条虚线连接这两个关联,并且虚线的中间带有{OR}关键字。
    2. 如果参与关联的对象属于同一个类,那么关联直线的起点和终点都是该类。
  3. 聚合:
    1. 聚合关系是在关联之上进一步的紧密耦合,用来表明一个类实际上拥有但可能共享另一个类的对象。在聚合关系中,其中一个类是整体,它由一个或者多个部分类组成,当整体类不存在时,部分类仍能存在,但是当它们聚集在一起时,就用于组成相应的整体类。表示聚集关系时,要在关联实线的连接整体类那一端添加一个菱形。
    2. uml图之类图_第2张图片
  4. 组成:
    1. 在类的众多关系中,再加强一步的耦合是组合关系。它与聚合关系的异同之处在于组成的关联中,整体类同样都是有部分类组成,但是部分类需要整体类才能存在,当整体类被销毁时,部分类将同时被销毁。这正是组合所表达的内涵:为组成类的内在部分建模。表示组成关系的符号与聚集关系类似,但是末端的菱形是实心的。
    2. uml图之类图_第3张图片
  5. 泛化关系:
    1. 泛化和继承用于描述一个类是另一个类的类型。指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系。
    2. uml图之类图_第4张图片
    3. 泛化有两个用途。
      1. 第一个用途是用来定义下列情况:当一个变量(如参数或过程变量)被声明承载某个给定类的值时,可使用类(或其他元素)的实例作为值,这被称作可替代性原则(由 Barbara Liskov 提出)。该原则表明无论何时祖先被声明了,则后代的一个实例可以被使用。例如,如果一个变量被声明拥有借贷,那么一个抵押对象就是一个合法的值。
      2. 泛化使得多态操作成为可能,即操作的实现是由它们所使用的对象的类,而不是由调用者确定的。
    4. 泛化的层次和多重继承:

泛化的层次:一个子类的超类也可以是另一个超类的子类。

多重继承:同一个子类拥有多个父类。

  1. 泛化的约束
  1. 实现
    1. 指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;
    2.  
  2. 依赖

可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用;

uml图之类图_第5张图片

UML类图关系中依赖表示两个或多个模型元素之间语义上的关系。它只将模型元素本身连接起来而不需要用一组实例来表达它的意思。它表示了这样一种情形,提供者的某些变化会要求或指示依赖关系中客户的变化。

依赖的种类

访问:允许一个包访问另一个包【access

绑定:为模板参数赋值以生成一个新的模型元素【bind

调用:声明一个类调用其他类的方法【call

导出:声明一个实例可以从另一个实例中到处【derive

友元:允许一个元素访问另一个元素而不论被访问元素的可见性【friend

引入:允许一个包访问另一个包的内容并未被访问包的组成部分添加别名【import

实例化:关于一个类的方法生成了另一个类的实例的生命【instantate

参数:一个操作和他参数之间的关系【parameter

实现:说明和其实之间的映射关系【realize

精化:声明具有两个不同层次上元素的映射关系【refine

发送:信号发送者和信号接受者之间的关系【send

跟踪:声明不同模型中元素之间的连接,没有映射精确【trace

使用:声明使用一个模型元素需要已存在的另一个模型元素,这样才能正确实现使用者的功能(调用,实例化,参数,发送)【use

 

对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;

但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;


 


你可能感兴趣的:(编程)