java UML类图的使用

作者: mesen_liu | 来源:发表于2016-09-21 23:46 被阅读0次

    类图 是用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。学习好类图的绘制,是一位合格的软件工程师应有的技能。

    1.类的UML图示

    在UML中,类使用包含类名,属性和方法且带有分隔线的长方形来表示

    例如定义一个Person类,包含属性name,age,拥有eating方法,则UML类图如下图示:


    Person类

    对应的java代码为:

    public class Person {  
        private String name;  
        private int age;   
          
        public void eating() {  
            ......  
        }  
    }  
    

    在UML类图中,类一般由三部分组成:
    (1) 第一部分是类名:每个类都必须有一个名字,类名是一个字符串。
    (2) 第二部分是类的属性(Attributes):属性是指类的性质,即类的成员变量。一个类可以有任意多个属性,也可以没有属性。
    UML规定属性的表示方式为:

    可见性 名称:类型 [=缺省值]

    其中:
    �“可见性”表示该属性对于类外的元素而言是否可见,包括公有(public)私有(private)友好的(friendly,代表package)受保护(protected)三种,在类图中分别用符号+-,~#表示。
    � “名称”表示属性名,用一个字符串表示。
    � “类型”表示属性的数据类型,可以是基本数据类型,也可以是用户自定义类型。
    � “缺省值”是一个可选项,即属性的初始值。
    (3) 第三部分是类的操作(Operations):操作是类的任意一个实例对象都可以使用的行为,是类的成员方法。
    UML规定操作的表示方式为:
    可见性 名称(参数列表) [ : 返回类型]
    其中:
    � “可见性”的定义与属性的可见性定义相同。
    �“名称”即方法名,用一个字符串表示。
    �“参数列表”表示方法的参数,其语法与属性的定义相似,参数个数是任意的,多个参数之间用逗号“,”隔开。
    � “返回类型”是一个可选项,表示方法的返回值类型,依赖于具体的编程语言,可以是基本数据类型,也可以是用户自定义类型,还可以是空类型(void),如果是构造方法,则无返回类型。

    2.类之间的关系

    类不是孤立存在的,类与类之间存在各种关系包括:关联关系,聚合关系,组合关系,依赖关系,泛化关系。每种关系对应i不同的图示

    (1)依赖关系
    依赖关系是类与类之间最弱的关系,是指一个类(依赖类)使用或知道另外一个类(目标类)。它是一个典型的瞬时关系,依赖类和目标类进行简单的交互,但是依赖类并不维护目标类的对象,仅仅是零时使用而已。例如对于窗体类window,当它关闭时会发送一个类windowclosingevent对象,这里也就可以说窗体类window使用了类windowclosingevent,他们之间的依赖关系如下图示:

    依赖关系.PNG

    依赖关系用虚线箭头表示

    (2)关联关系
    关联关系是一种比依赖关系更强的关系,是指一个类“拥有”另一个类,表示类之间的一种持续一段时间的合作关系,包括有单向关联和双向关联关系。
    单向关联:类A与类B是单向关联关系,是指类A包含类B对象的引用,但是类B并不包含类A对象的引用,例如银行用户类(client)包含账户类(Bankacount)的引用,但是反过来却不是。在类图中,通过从类A画一条带箭头的单向实线到类B来表示他们之间的单项关联关系,箭头方向指向B。如下图:

    单向关联.PNG

    在上图中,连接两个类的箭头线两头的数字即代表它们之间的数量关系,例如上图,代表一个client类包含了0到多个BankAcount类的引用,并且BankAcount类在client中的引用是私有变量:accounts.

    表达数量的形式有:

    表达方式 数量说明
    1..1 表示另一个类的一个对象只与该类的一个对象有关系
    0..* 表示另一个类的一个对象与该类的零个或多个对象有关系
    1..* 表示另一个类的一个对象与该类的一个或多个对象有关系
    0..1 表示另一个类的一个对象没有或只与该类的一个对象有关系
    m..n 表示另一个类的一个对象与该类最少m,最多n个对象有关系 (m≤n

    双向关联:类A与类B如果包含对方的引用,则称类A与类B是双向关联的关系。例如,在一个需求描述中,一个学生(student)可以拥有其选秀的六门课程的信息,一门课程(course)可以包含选修该门课程的任意多个学生的信息。如下图:

    双向关联

    双向关联用双向箭头连接两个类

    (3)聚合关系
    聚合(Aggregation)关系表示整体与部分的关系。在聚合关系中,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。在UML中,聚合关系用带空心菱形的直线表示。例如:汽车发动机(Engine)是汽车(Car)的组成部分,但是汽车发动机可以独立存在,因此,汽车和发动机是聚合关系,如下图所示:

    聚合关系

    在代码实现聚合关系时,成员对象通常作为构造方法、Setter方法或业务方法的参数注入到整体对象中:

    public class Car {  
        private Engine engine;  
      
        //构造注入  
        public Car(Engine engine) {  
            this.engine = engine;  
        }  
          
        //设值注入  
    public void setEngine(Engine engine) {  
        this.engine = engine;  
    }  
    ……  
    }  
      
    public class Engine {  
        ……  
    }  
    

    (4)组合关系
    组合(Composition)关系也表示类之间整体和部分的关系,但是在组合关系中整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也将不存在,成员对象与整体对象之间具有同生共死的关系。在UML中,组合关系用带实心菱形的直线表示。例如:人的头(Head)与嘴巴(Mouth),嘴巴是头的组成部分之一,而且如果头没了,嘴巴也就没了,因此头和嘴巴是组合关系,如下图所示:

    组合关系

    在代码实现组合关系时,通常在整体类的构造方法中直接实例化成员类

    public class Head {  
        private Mouth mouth;  
      
        public Head() {  
            mouth = new Mouth(); //实例化成员类  
        }  
    ……  
    }  
      
    public class Mouth {  
        ……  
    }  
    

    (5)泛化关系
    泛化(Generalization)关系也就是继承关系,用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。在UML中,泛化关系用带空心三角形的直线来表示,如下图:

    泛化关系
    ***在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示 接口实现关系

    以上便是UML类图的一些简单实用了,希望对你有帮助,另外,此文章参考了csdn版主刘伟老师的博客

    相关文章

      网友评论

        本文标题:java UML类图的使用

        本文链接:https://www.haomeiwen.com/subject/dubaettx.html