UML类图快速入门篇

简单整理了下,以备以后查看

类之间的几种关系:

  • 泛化(Generalization)
  • 关联(Association)(又分一般关联、聚合(Aggregation)组合(Composition))
  • 依赖(Dependency)

一、类图

类图(Class Diagram)使用出现在系统中的不同类来描述系统的静态结构,它用来描述不同的类以及它们之间的关系。

 类是对一组具有相同属性、操作、关系和语义的对象的抽象,它是面向对象系统组织结构的核心,包括类名(Name)、属性(Attribute)和操作(Operation),见下图。

示例

  接口在没有给出对象的实现和状态的情况下对对象行为的描述。一个类可以实现一个或多个接口。与类图的区别主要是顶端有<<interface>>显示:

接口示例
也可以用一个空心圆表示(棒棒糖表示法)(只在参考2中看到,待确定):
这里写图片描述

类属性的语法:

        [可见性] 名称 [:类型] [=缺省值] 
  • “可见性”表示该属性对于类外的元素而言是否可见,包括公有(public) “+”、私有(private)“-”和受保护(protected)“#”三种。
  • “名称”表示属性名,用一个字符串表示。
  • “类型”表示属性的数据类型,可以是基本数据类型,也可以是用户自定义类型。
  • “缺省值”是一个可选项,即属性的初始值。

类操作的语法为:

    [可见性] 操作名 [(参数表)] [:返回类型] [{属性字符串}]
  • “可见性”的定义与属性的可见性定义相同,包括公有(Public)“+”、私有(Private)“-”、受保护(Protected)“#”、包内公有(Package)“~”四种。
  • “名称”即方法名,用一个字符串表示。
  • “参数列表”表示方法的参数,其语法与属性的定义相似,参数个数是任意的,多个参数之间用逗号“,”隔开。
  • “返回类型”是一个可选项,表示方法的返回值类型,依赖于具体的编程语言,可以是基本数据类型,也可以是用户自定义类型,还可以是空类型(void),如果是构造方法,则无返回类型。
  • “属性字符串”在操作的定义中加入一些除了预定义元素之外的信息。

二、类之间的几种关系
1、泛化(Generalization)

  • 也就是继承关系,用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。
  • 在UML中,泛化关系用带空心三角形的实线来表示,箭头指向父类。

泛化
对应java代码如下:

//父类
public class Person {
protected String name;
protected int age;

public void move() {
        ……
}

    public void say() {
    ……
    }
}

//子类
public class Student extends Person {
private String studentNo;

public void study() {
    ……
    }
}

//子类
public class Teacher extends Person {
private String teacherNo;

public void teach() {
    ……
    }
}

2、接口与实现

  • 在很多面向对象语言中都引入了接口的概念,如Java、C#等,在接口中,通常没有属性,而且所有的操作都是抽象的,只有操作的声明,没有操作的实现。
  • UML中类与接口之间的实现关系用带空心箭头的虚线表示,箭头指向接口。
    接口
    对应java代码如下:
public interface Vehicle {
public void move();
}

public class Ship implements Vehicle {
public void move() {
    ……
    }
}

public class Car implements Vehicle {
public void move() {
    ……
    }
}

3、关联(Association)

是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系,如汽车和轮胎、师傅和徒弟、班级和学生等等。

  • 双向关联:
    默认情况下,关联是双向的。在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联关系必须被映射为对象引用或指针。对象引用本身就是有向的,更适合表达我们所讨论的那种关系。所以这种关系在设计的时候比较少用到,关联一般都是有向的。

双向关联示例
对应java代码如下:

public class Customer {
private Product[] products;
……
}

public class Product {
private Customer customer;
……
}
  • 单向关联:
    表示相识关系,指C3知道C4,C3可以调用C4的公共属性和方法。没有生命期的依赖。一般是表示为一种引用。
    单向关联示例
    对应java代码如下
public class Customer {
private Address address;
……
}

public class Address {
……
}
  • 自关联:
    在系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系称为自关联。即,自己引用自己,带着一个自己的引用。
    自关联
    对应java代码如下:
public class Node {
private Node subNode;
……
}
  • 聚合(Aggregation)

    表示整体与部分的关系。在聚合关系中,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。
    在UML中,组合关系用带空心菱形的直线表示。


    聚合
    对应java代码如下:

public class Car {
    private Engine engine;

    //构造注入
    public Car(Engine engine) {
        this.engine = engine;
    }

    //设值注入
public void setEngine(Engine engine) {
    this.engine = engine;
}
……
}

public class Engine {
    ……
} 
  • 组合(Composition)
    表示类之间整体和部分的关系,但是在组合关系中整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也将不存在,成员对象与整体对象之间具有同生共死的关系。
    在UML中,组合关系用带实心菱形的直线表示。
    组合
    对应java代码如下:
public class Head {
    private Mouth mouth;

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

public class Mouth {
    ……
} 

4、依赖(Dependency)

  • 是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。
  • 在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。
    依赖
    对应java代码如下:
public class Driver {
    public void drive(Car car) {
        car.move();
    }
    ……
}

public class Car {
    public void move() {
        ......
    }
    ……
}  

三、总结

各种关系的强弱顺序如下:

泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

参考来源:
http://www.uml.org.cn/oobject/201211231.asp
http://www.360doc.com/content/13/0304/13/10504424_269223190.shtml
http://blog.csdn.net/feiying008/article/details/8001419

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值