博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《设计模式 系列》- UML类图
阅读量:7014 次
发布时间:2019-06-28

本文共 1848 字,大约阅读时间需要 6 分钟。

hot3.png

前言

本文主要包含两部分。UML语法,类与类之间的6种关系。

它们分别为:依赖,关联,聚合,组合,继承,实现。他们的耦合度依次增强。

 

一、UML语法

设置权限:+ 代表 public 公共,- 代表 private 私有,# 代表 protected

设置属性:变量名在前,变量类型在后。如-car:Car

设置方法:方法名在前,后跟参数(参数名在前,类型在后),返回值在方法后面。如+driver(car:Car):void

 

二、依赖(Dependence)

定义

假设A类的变化引起了B类的变化,则说名B类依赖于A类。这种关系非常弱,具有临时性。

项目P依赖xx.1.1.jar包,也可以依赖xx.1.2.jar包。

图例

132103_tqPG_2330610.png

UML图,由依赖方指向被依赖的一方。

依赖项可以随着被替换掉,与依赖方的生命周期无关

使用

class Person{    //通过形参方式发生依赖关系     public void drive1(Car car) {	   car.run();    }     //通过局部变量发生依赖关系    public void drive2() {	   Car car = new Car();	   car.run();    }    //通过静态变量发生依赖关系    public void drive3() {	   Car.run();    }}

 

三、关联(Association)

定义

对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。一般是长期性。

图例

090452_mUx0_2330610.png

在UML类图中,通常将一个类的对象作为另一个类的属性。

通常依赖项是被依赖方的属性。

使用

class Driver {    private Car car = new Car();    public void drive() {	   car.run();    }}class Car {    public void run(){}}

四、聚合(Aggregation)

定义

表示的是整体和部分的关系,整体与部分 可以分开。

图例

134253_0O0B_2330610.png

聚合关系中作为成员变量的类一般使用 set 方法赋值

使用

class Person{    private Car car = null;    public void drive() {	   car.run();    }    public void setCar(Car c){	   car = c;    }}class Car {    public void run(){}}

 

五、组合(Composition)

定义

整体与部分的关系,但是整体与部分不可以分开。部分和整体具有统一的生存期。

图例

134304_4jxb_2330610.png

关联、聚合、组合只能配合语义,结合上下文才能够判断出来

使用

class Person{    private Hair hair;    private Eye eye;    public void(Hair hair) {	   this.hair= hair;    }    public void(Eye eye) {	   this.eye= eye;    }    public void breathe() {	    }}class Hair{}class Eye{}

 

六、继承(Generalization)

定义

继承表示类与类 (或者接口与接口) 之间的父子关系。

也称泛化关系,“is-a-kind-of”关系

图例

134854_zoI1_2330610.png

使用

class Person{    public void eat(){}    public void sleep(){}}class Chinese extends Person{  }class American extends Person{  }

 

七、实现(Implementation)

定义

是用来规定接口和实线接口的类或者构建结构的关系,接口是操作的集合,而这些操作就用于规定类或者构建的一种服务。

耦合度最强,如果实现了接口,就要实现接口中所有的方法。

图例

135613_yfS6_2330610.png

使用

interface Cloneable {    }class ArrayList implements Cloneable{}

 

转载于:https://my.oschina.net/kimisme/blog/1592168

你可能感兴趣的文章
laravel 增加不存在数据库的字段
查看>>
什么是“单播”“组播”和“多播”
查看>>
flex---->图表控件
查看>>
[游泳] developing A Good Mindset when learning freestyle_1
查看>>
关于Windows 8 用户使用习惯调查结果
查看>>
JAVA代码注释
查看>>
我也说 IEnumerable,ICollection,IList,List之间的区别
查看>>
RDBMS下scott.sql
查看>>
.Net关于日期的
查看>>
leetcode_question_115 Distinct Subsequences
查看>>
Android Developers:在命令行构建和运行
查看>>
firefox 不识别background-position-y / background-position-x
查看>>
分析函数调用关系图(call graph)的几种方法
查看>>
Dynamic Web Module 3.0 requires Java 1.6 or newer
查看>>
11.0592M晶振与12M晶振
查看>>
玩转docker
查看>>
Web Service学习笔记
查看>>
[转帖]cocos2D-X源码分析之从cocos2D-X学习OpenGL(3)----BATCH_COMMAND
查看>>
A380上11万一张的机票什么享受?来看看
查看>>
LeetCode: 103_Binary Tree Zigzag Level Order Traversal | 二叉树Zigzag层次遍历 | Medium
查看>>