在UML类图中此类如图1所示,类应用含有类名、属性和操作且含有分隔线的星型来代表

注:本文摘自拉米雷斯先生的博客http://blog.csdn.net/lovelion/article/details/7838679,如有侵权,请联系本人!

  UML(统一建模语言)是当前软件开发中运用最为普遍的建模技术之一,通过行使UML可以组织软件系统的需要模型(用例模型)、静态模型、动态模型和架构模型

注:本文摘自杨家威先生的博客http://blog.csdn.net/lovelion/article/details/7838679,如有侵权,请联系本人!

1.类的UML图示

  

1.类的UML图示

 
在UML中,类应用含有类名、属性和操作且含有分隔线的长方形来表示,如定义1个Employee类,它含有属性name、age和email,以及操作modifyInfo(),在UML类图中此类如图1所示:

UML类图

 
在UML中,类应用含有类名、属性和操作且含有分隔线的长方形来表示,如定义一个Employee类,它含有属性name、age和email,以及操作modifyInfo(),在UML类图中此类如图1所示:

图片 1

  一,UML类图图示

图片 2

图1 类的UML图示

  在UML中,类使用带有类名、属性和操作且富含分隔线的纺锤形来代表,如定义一个Employee类,它含有属性name、age和email,作modifyInfo(),在UML类图中此类如图1所示:

图1 类的UML图示

public class Employee {  
    private String name;  
    private int age;  
    private String email;  

    public void modifyInfo() {  
        ......  
    }  
}  

图片 3

public class Employee {  
    private String name;  
    private int age;  
    private String email;  

    public void modifyInfo() {  
        ......  
    }  
}  

   在UML类图中,类一般由三有个别构成:

  对应的java代码为:

   在UML类图中,类一般由三部分组成:

     
(1) 第叁局地是类名:每种类都必须有一个名字,类名是三个字符串。

public class Employee {  
    private String name;  
    private int age;  
    private String email;  

    public void modifyInfo() {  
        ......  
    }  
}

     
(1) 第壹片段是类名:逐个类都必须有1个名字,类名是3个字符串。

     
(2) 第2部分是类的天性(Attributes):属性是指类的性质,即类的成员变量。贰个类可以有自由两个天性,也足以没有质量。

办法中 前边的记号含义:+ public 
#protected -private

     
(2) 第3局地是类的品质(Attributes):属性是指类的属性,即类的分子变量。三个类可以有擅自多少个属性,也足以没有质量。

     
UML规定属性的表示方法为:

由于在Java语言中允许出现其中类,因而只怕会并发包蕴三个部分的类图,如图3所示:

     
UML规定属性的表示方法为:

 

图片 4

 

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

2、类与类之间的关系

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

 

(1)、关联关系
    关联(Association)关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系,如汽车和轮胎、师傅和徒弟、班级和学生等等。
  在UML类图中,用实线连接有关联关系的对象所对应的类,在使用Java、C#和C++等编程语言实现关联关系时,通常将一个类的对象作为另一个类的成员变量。在使用类图表示关
  联关系时可以在关联线上标注角色名,一般使用一个表示两者之间关系的动词或者名词表示角色名(有时该名词为实例对象名),关系的两端代表两种不同的角色,因此在一个关联

  联关系中可以包含两个角色名,角色名不是必须的,可以根据需要增加,其目的是使类之间的关系更加明确。

 

     
其中:

如在三个登录界面类LoginForm中含有三个JButton类型的挂号按钮loginButton,它们之间可以表示为涉及关系,代码完结时得以在LoginForm中定义三个名为loginButton的习性对象,其种类为JButton。如图所示:

     
其中:

     
?“可知性”表示该属性对于类外的成分而言是还是不是可知,包蕴国有(public)、私有(private)和受保险(protected)二种,在类图中分别用符号+、-和#表示。

图片 5

     
?“可知性”表示该属性对于类外的要素而言是不是可知,包罗国有(public)、私有(private)和受保证(protected)二种,在类图中分头用符号+、-和#表示。

‚     
“名称”表示属性名,用贰个字符串表示。

public class LoginForm {  
private JButton loginButton; //定义为成员变量  
……  
}  

public class JButton {  
    ……  
}

‚     
“名称”表示属性名,用3个字符串表示。

ƒ     
“类型”表示属性的数据类型,能够是骨干数据类型,也可以是用户自定义类型。

双向关联

暗中同意景况下,关联是双向的。例如:顾客(Customer)购买商品(Product)并持有商品,反之,卖出的货色总有某些顾客与之相关联。由此,Customer类和Product类之间有着双向关联关系,如图2所示:

图片 6

图2对应的Java代码片段如下:

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

public class Product {  
private Customer customer;  
……  
}

 

ƒ     
“类型”表示属性的数据类型,可以是基本数据类型,也足以是用户自定义类型。

„     
“缺省值”是一个可挑选,即属性的早先值。

单向关系

类的关系关系也可以是单向的,单向关系用带箭头的实线表示。例如:顾客(Customer)拥有地址(Address),则Customer类与Address类具有单向关系关系,如图3所示:

图片 7

图3对应的Java代码片段如下:

public class Customer {  
private Address address;  
……  
}  

public class Address {  
……  
}

 

„     
“缺省值”是一个可选择,即属性的开端值。

(3) 第3片段是类的操作(Operations):操作是类的肆意三个实例对象都可以行使的表现,是类的分子方法。

自关联

在系统中可能会存在有的类的习性对象类型为此类本人,那种新鲜的关系关系称为自关系。例如:二个节点类(Node)的分子又是节点Node类型的靶子,如图4所示:

图片 8

图4对应的Java代码片段如下:

public class Node {  
private Node subNode;  
……  
}

0…………………………………………………….

(3) 第贰有个别是类的操作(Operations):操作是类的随意2个实例对象都得以采取的行事,是类的积极分子方法。

     
UML规定操作的代表方法为:

多重性关联

多重性关联关系又称为重数性(Multiplicity)关联关系,表示多少个涉及对象在数额上的呼应关系。在UML中,对象之间的多重性可以直接在关乎直线上用多个数字或2个数字范围表示。

目的之间可以存在三种多重性关联关系,常见的多重性表示方法如表1所示:     
          

表1 多重性表示方式列表

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

比如说:三个界面(Form)可以有所零个或八个按钮(Button),然而壹个按钮只可以属于1个界面,因而,三个Form类的靶子足以与零个或多少个Button类的对象相关联,但多少个Button类的目的只可以与多个Form类的靶子关系,如图5所示:

图片 9

图5对应的Java代码片段如下:

public class Form {  
private Button[] buttons; //定义一个集合对象  
……  
}  

public class Button {  
……  
}

     
UML规定操作的意味方法为:

可见性  名称(参数列表) [ : 返回类型]

聚拢关系

聚拢(Aggregation)关系表示全体与一些的关系。在汇集关系中,成员对象是共同体目的的一有些,可是分子对象足以退出全体目的独立存在。在UML中,聚合关系用带空心菱形的直线表示。例如:小车引擎(Engine)是小车(Car)的组成部分,不过汽车引擎可以单独存在,因而,汽车和发动机是汇集关系,如图6所示:

图片 10

在代码完成聚合关系时,成员对象平时作为构造方法、Setter方法或业务方法的参数注入到一体化目的中,图6对应的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中,组合关系用带实心菱形的直线表示。例如:人的头(Head)与嘴巴(Mouth),嘴巴是头的组成部分之壹,而且只要头没了,嘴巴也就没了,因而头和嘴巴是结合关系,如图7所示:

图片 11

在代码已毕组合关系时,平时在全体类的构造方法中一向实例化成员类,图7对应的Java代码片段如下:

 

public class Head {  
    private Mouth mouth;  

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

public class Mouth {  
    ……  
}

 

(2)、依赖关系
  

依靠(Dependency)关系是一种采纳关系,特定事物的变更有恐怕会潜移默化到利用该事物的其余东西,在要求代表2个事物使用另二个事物时利用依赖关系。半数以上场馆下,看重关系浮以后某些类的方式应用另三个类的目标作为参数。在UML中,着重关系用带箭头的虚线表示,由依赖的一方指向被珍惜的一方。例如:驾驶员开车,在Driver类的drive()方法中校Car类型的靶子car作为二个参数传递,以便在drive()方法中可见调用car的move()方法,且驾驶员的drive()方法倚重车的move()方法,因而类Driver敬重类Car,如图1所示:

图片 12

在系统实施阶段,器重关系一般通过二种办法来贯彻,率先种也是最常用的一种艺术是如图1所示的将2个类的目标作为另1个类中方法的参数,第1、种办法是在2个类的主意元帅另2个类的目的作为其部分变量,第两种形式是在多少个类的章程中调用另三个类的静态方法。图1对应的Java代码片段如下:

public class Driver {  
    public void drive(Car car) {  
        car.move();  
    }  
    ……  
}  

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

     
其中:

?     
“可知性”的概念与性子的可见性定义相同。

(3)、 泛化关系

泛化(Generalization)关系约等于继承关系,用于描述父类与子类之间的涉及,父类又称作基类或超类,子类又称作派生类。在UML中,泛化关系用带空心三角形的直线来表示。在代码完结时,大家应用面向对象的两次三番机制来贯彻泛化关系,如在Java语言中使用extends

 

关键字、在C++/C#中采用冒号“:”来兑现。例如:Student类和Teacher类都以Person类的子类,Student类和Teacher类继承了Person类的本性和形式,Person类的性子包蕴姓名(name)和年龄(age),每1个Student和Teacher也都负有这一个属性,此外Student类伸张了品质学号(studentNo),Teacher类增加了质量教师编号(teacherNo),Person类的措施包罗行走move()和说话say(),Student类和Teacher类继承了那七个方式,而且Student类还新增方法study(),Teacher类还新增方法teach()。如图2所示:

图片 13

图2对应的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() {  
    ……  
    }  
}

?     
“可知性”的概念与品质的可见性定义相同。

     
‚“名称”即方法名,用三个字符串表示。

(4)、接口与贯彻关系

在很多面向对象语言中都引入了接口的定义,如Java、C#等,在接口中,寻常没有质量,而且具有的操作都以虚幻的,只有操作的宣示,没有操作的贯彻。UML中用与类的表示法类似的格局意味着接口,如图3所示:

图片 14

接口之间也可以有与类之间关系看似的继承关系和正视关系,不过接口和类之间还设有一种落成(Realization)关系,在那种关涉中,类落成了接口,类中的操作落成了接口中所评释的操作。在UML中,类与接口之间的已毕关系用带空心三角形的虚线来代表。例如:定义了1个直通工具接口Vehicle,包涵1个华而不实操作move(),在类Ship和类Car中都落实了该move()操作,可是具体的达成细节将会不一致,如图4所示:

图片 15

大吉大利关系在编程已毕时,区其他面向对象语言也提供了不一致的语法,如在Java语言中采纳implements关键字,而在C++/C#中利用冒号“:”来完成。图4对应的Java代码片段如下:

public interface Vehicle {  
public void move();  
}  

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

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

 

     
‚“名称”即方法名,用二个字符串表示。

     
ƒ“参数列表”表示方法的参数,其语法与质量的概念相似,参数个数是不管三七二十一的,几个参数之间用逗号“,”隔开。

3. 实例分析——登录模块

某基于C/S的立即聊天系统登录模块功效描述如下:

用户通过登录界面(LoginForm)输入账号和密码,系统将输入的账号和密码与储存在数据库(User)表中的用户消息举办比较,验证用户输入是还是不是正确,固然输入正确则跻身主界面(MainForm),否则指示“输入错误”。

基于以上描述绘制初叶类图。

     
ƒ“参数列表”表示方法的参数,其语法与品质的概念相似,参数个数是自由的,两个参数之间用逗号“,”隔开。

„      “重临类型”是一个可选用,表示方法的归来值类型,依赖于实际的编程语言,可以是主导数据类型,也得以是用户自定义类型,还能是空类型(void),如果是构造方法,则无重返类型。

参照化解方案

参考类图如下:

图片 16

设想到系统扩展性,在本实例中引入了画饼充饥数据访问接口IUserDAO,再将切实多少访问对象注入到事情逻辑对象中,可经过安排文件(如XML文件)等形式来落成,将切实的多少访问类类名存储在安顿文件中,即使急需转移新的实际数额访问对象,只需修改配置文件即可,原有程序代码无须做其余改动。

类说明:

类 名 说 明
LoginForm 登录窗口,省略界面组件和按钮事件处理方法(边界类)
LoginBO 登录业务逻辑类,封装实现登录功能的业务逻辑(控制类)
IUserDAO 抽象数据访问类接口,声明对User表的数据操作方法,省略除查询外的其他方法(实体类)
UserDAO 具体数据访问类,实现对User表的数据操作方法,省略除查询外的其他方法(实体类)
MainForm 主窗口(边界类)

艺术求证:

方法名 说 明
LoginForm类的LoginForm()方法 LoginForm构造函数,初始化实例成员
LoginForm类的validate()方法 界面类的验证方法,通过调用业务逻辑类LoginBO的validate()方法实现对用户输入信息的验证
LoginBO类的validate()方法 业务逻辑类的验证方法,通过调用数据访问类的findUserByAccAndPwd()方法验证用户输入信息的合法性
LoginBO类的setIUserDAO()方法 Setter方法,在业务逻辑对象中注入数据访问对象(注意:此处针对抽象数据访问类编程)
IUserDAO接口的findUserByAccAndPwd()方法 业务方法声明,通过用户账号和密码在数据库中查询用户信息,判断该用户身份的合法性
UserDAO类的findUserByAccAndPwd()方法 业务方法实现,实现在IUserDAO接口中声明的数据访问方法
 

„      “重临类型”是三个可选拔,表示方法的回来值类型,倚重于现实的编程语言,可以是着力数据类型,也足以是用户自定义类型,仍是可以是空类型(void),就算是构造方法,则无重返类型。

     
在类图2中,操作method1的可知性为public(+),带入了一个Object类型的参数par,重返值为空(void);操作method2的可知性为protected(#),无参数,再次来到值为String类型;操作method3的可知性为private(-),包涵多少个参数,其中一个参数为int类型,另壹个为int[]类型,再次来到值为int类型。

     
在类图2中,操作method1的可知性为public(+),带入了2个Object类型的参数par,重回值为空(void);操作method2的可知性为protected(#),无参数,重临值为String类型;操作method3的可知性为private(-),包涵五个参数,其中贰个参数为int类型,另1个为int[]花色,重临值为int类型。

图片 17

图片 18

图2 类图操作表达示意图

图2 类图操作表达示意图

是因为在Java语言中允许出现其中类,因而恐怕会油但是生包括两个部分的类图,如图3所示:

鉴于在Java语言中允许出现其中类,因而或者会合世包蕴两个部分的类图,如图3所示:

图片 19

图片 20

图3 包蕴其中类的类图

图3 包罗其中类的类图

 

 

2.类与类之间的关联关系

2.类与类之间的涉嫌关系

关联(Association)关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象时期有关联,如小车和轮胎、师傅和徒弟、班级和学生等等。在UML类图中,用实线连接有关联关系的靶子所对应的类,在使用Java、C#和C++等编程语言落成关系关系时,平日将三个类的目的作为另3个类的分子变量。在运用类图表示关联关系时得以在关联线上标明角色名,一般拔取贰个表示两者之间关系的动词可能名词意味着角色名(有时该名词为实例对象名),关系的两端代表三种不一致的角色,由此在贰个涉及关系中得以包涵八个角色名,角色名不是必须的,可以按照必要充实,其目标是使类之间的涉嫌愈来愈分明。

关联(Association)关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有关联,如小车和轮胎、师傅和徒弟、班级和学生等等。在UML类图中,用实线连接有关联关系的目标所对应的类,在使用Java、C#和C++等编程语言完成关系关系时,寻常将1个类的对象作为另一个类的分子变量。在应用类图表示关联关系时得以在关联线上标注角色名,一般采取贰个表示两者之间关系的动词恐怕名词意味着角色名(有时该名词为实例对象名),关系的彼此代表三种分歧的角色,因而在3个关系关系中可以涵盖多少个剧中人物名,剧中人物名不是必须的,能够依据须求充实,其目标是使类之间的涉及更是精晓。

     
如在三个登录界面类LoginForm中富含二个JButton类型的挂号按钮loginButton,它们之间可以代表为涉及关系,代码完结时可以在LoginForm中定义二个名为loginButton的性质对象,其种类为JButton。如图1所示:

     
如在3个登录界面类LoginForm中包含二个JButton类型的挂号按钮loginButton,它们之间可以表示为关联关系,代码完毕时方可在LoginForm中定义两个名为loginButton的习性对象,其系列为JButton。如图1所示:

图片 21

图片 22

图1 关联关系实例

图1 关联关系实例

 

 

      图1对应的Java代码片段如下:

      图1对应的Java代码片段如下:

public class LoginForm {  
  private JButton loginButton; //定义为成员变量  
  ……  
  }  

  public class JButton {  
      ……  
}  
public class LoginForm {  
  private JButton loginButton; //定义为成员变量  
  ……  
  }  

  public class JButton {  
      ……  
}  

 在UML中,关联关系一般又包涵如下二种样式:

 在UML中,关联关系一般又饱含如下两种样式:

     
(1) 双向关联

     
(1) 双向关联

     
暗中认同处境下,关联是双向的。例如:顾客(Customer)购买商品(Product)并具备商品,反之,卖出的货色总有某些顾客与之相关联。因而,Customer类和Product类之间具有双向关联关系,如图2所示:

     
暗中同意情状下,关联是双向的。例如:顾客(Customer)购买商品(Product)并负有商品,反之,卖出的货物总有某些顾客与之相关联。因此,Customer类和Product类之间有着双向关联关系,如图2所示:

图片 23

图片 24

图2
 双向关联实例

图2
 双向关联实例

      图2对应的Java代码片段如下:

      图2对应的Java代码片段如下:

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

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

public class Product {  
    private Customer customer;  
    ……  
}  

     
(2) 单向关系

     
(2) 单向关系

     
类的关联关系也得以是单向的,单向关系用带箭头的实线表示。例如:顾客(Customer)拥有地址(Address),则Customer类与Address类具有单向关系关系,如图3所示:

     
类的关联关系也得以是单向的,单向关系用带箭头的实线表示。例如:顾客(Customer)拥有地址(Address),则Customer类与Address类具有单向关系关系,如图3所示:

图片 25

图片 26

图3 单向关系实例

图3 单向关系实例

      图3对应的Java代码片段如下:

      图3对应的Java代码片段如下:

public class Customer {  
    private Address address;  
    ……  
}  

public class Address {  
    ……  
}  
public class Customer {  
    private Address address;  
    ……  
}  

public class Address {  
    ……  
}  

     
(3) 自关联

     
(3) 自关联

     
在系统中大概会存在一些类的属性对象类型为此类自己,这种奇特的关系关系称为自关系。例如:三个节点类(Node)的成员又是节点Node类型的目标,如图4所示:

     
在系统中或者会设有有的类的质量对象类型为此类本人,那种卓殊的关联关系称为自关系。例如:3个节点类(Node)的积极分子又是节点Node类型的靶子,如图4所示:

图片 27

图片 28

图4 自关系实例

图4 自关系实例

 

 

      图4对应的Java代码片段如下:

      图4对应的Java代码片段如下:

public class Node {  
    private Node subNode;  
    ……  
}  
public class Node {  
    private Node subNode;  
    ……  
}  

 
(4) 多重性关联

 
(4) 多重性关联

      多重性关联关系又称作重数性(Multiplicity)关联关系,表示多个事关对象在数量上的应和关系。在UML中,对象时期的多重性可以直接在提到直线上用三个数字或几个数字范围表示。

      多重性关联关系又称为重数性(Multiplicity)关联关系,表示多少个关系对象在多少上的附和关系。在UML中,对象之间的多重性可以直接在事关直线上用三个数字或五个数字范围表示。

     
对象时期可以存在各样多重性关联关系,常见的多重性表示方法如表1所示:

     
对象之间可以存在二种多重性关联关系,常见的多重性表示方法如表1所示:

表1  多重性表示方式列表

表1  多重性表示格局列表

 

 

表示方式

多重性说明

1..1

表示另一个类的一个对象只与该类的一个对象有关系

0..*

表示另一个类的一个对象与该类的零个或多个对象有关系

1..*

表示另一个类的一个对象与该类的一个或多个对象有关系

0..1

表示另一个类的一个对象没有或只与该类的一个对象有关系

m..n

表示另一个类的一个对象与该类最少m,最多n个对象有关系 (m≤n)

表示方式

多重性说明

1..1

表示另一个类的一个对象只与该类的一个对象有关系

0..*

表示另一个类的一个对象与该类的零个或多个对象有关系

1..*

表示另一个类的一个对象与该类的一个或多个对象有关系

0..1

表示另一个类的一个对象没有或只与该类的一个对象有关系

m..n

表示另一个类的一个对象与该类最少m,最多n个对象有关系 (m≤n)

 

 

     
例如:2个界面(Form)可以拥有零个或五个按钮(Button),可是三个按钮只能够属于三个界面,因而,二个Form类的对象足以与零个或多少个Button类的目的相关联,但一个Button类的目的只可以与二个Form类的靶子关系,如图5所示:

     
例如:1个界面(Form)可以享有零个或八个按钮(Button),可是三个按钮只好属于2个界面,由此,二个Form类的对象足以与零个或多个Button类的目的相关联,但2个Button类的目标只可以与一个Form类的靶子关系,如图5所示:

图片 29

图片 30

图5 多重性关联实例

图5 多重性关联实例

      图5对应的Java代码片段如下:

      图5对应的Java代码片段如下:

public class Form {  
    private Button[] buttons; //定义一个集合对象  
    ……  
}  

public class Button {  
    ……  
}  
public class Form {  
    private Button[] buttons; //定义一个集合对象  
    ……  
}  

public class Button {  
    ……  
}  

(5) 聚合关系

(5) 聚合关系

     
聚合(Aggregation)关系表示完全与部分的关联。在集合关系中,成员对象是总体目标的一有个别,不过成员对象足以退出全部目的独立存在。在UML中,聚合关系用带空心菱形的直线表示。例如:小车引擎(Engine)是汽车(Car)的组成部分,不过汽车发动机可以独立存在,由此,小车和引擎是聚众关系,如图6所示:

     
聚合(Aggregation)关系表示完全与局地的关系。在集结关系中,成员对象是完整目的的一有的,不过成员对象可以脱离全部目标独立存在。在UML中,聚合关系用带空心菱形的直线表示。例如:小车发动机(Engine)是小车(Car)的组成部分,不过小车发动机可以单独存在,由此,汽车和引擎是聚众关系,如图6所示:

图片 31

图片 32

图6
 聚合关系实例

图6
 聚合关系实例

     
在代码完毕聚合关系时,分子对象常常作为构造方法、Setter方法或作业方法的参数注入到全部目的中,图6对应的Java代码片段如下:

     
在代码已毕聚合关系时,分子对象一般作为构造方法、Setter方法或工作方法的参数注入到全部目标中,图6对应的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 {  
    ……  
}  
public class Car {  
    private Engine engine;  

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

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

public class Engine {  
    ……  
}  

(6) 组合关系

(6) 组合关系

     
组合(Composition)关系也象征类之间完全和一部分的关系,不过在构成关系中完全目的可以操纵成员对象的生命周期,一旦全部目标不设有,成员对象也将不存在,成员对象与完整目的之间有着同舟共济的关联。在UML中,组合关系用带实心菱形的直线表示。例如:人的头(Head)与嘴巴(Mouth),嘴巴是头的组成部分之1、而且若是头没了,嘴巴也就没了,由此头和嘴巴是组成关系,如图7所示:

     
组合(Composition)关系也代表类之间完全和一些的涉嫌,不过在构成关系中总体指标足以操纵成员对象的生命周期,一旦完全目的不存在,成员对象也将不设有,成员对象与全体目标期间有着风雨同舟的关系。在UML中,组合关系用带实心菱形的直线表示。例如:人的头(Head)与嘴巴(Mouth),嘴巴是头的组成部分之一,而且假如头没了,嘴巴也就没了,因此头和嘴巴是组成关系,如图7所示:

图片 33

图片 34

图7  组合关系实例

图7  组合关系实例

     
在代码达成组合关系时,平时在全体类的构造方法中向来实例化成员类,图7对应的Java代码片段如下:

     
在代码达成组合关系时,日常在全部类的构造方法中一直实例化成员类,图7对应的Java代码片段如下:

public class Head {  
    private Mouth mouth;  

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

public class Mouth {  
    ……  
} 
public class Head {  
    private Mouth mouth;  

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

public class Mouth {  
    ……  
} 

 

 

 

 

3.类与类之间依赖关系

3.类与类之间依赖关系

   依赖(Dependency)关系是一种拔取关系,特定事物的改动有大概会影响到利用该事物的任马建波西,在须求代表三个事物使用另贰个东西时接纳尊崇关系。一大半境况下,依赖关系呈以后某些类的主意应用另2个类的目的作为参数。在UML中,倚重关系用带箭头的虚线表示,由重视的一方指向被正视的一方。例如:驾驶员开车,在Driver类的drive()方法中校Car类型的靶子car作为二个参数传递,以便在drive()方法中能够调用car的move()方法,且驾驶员的drive()方法看重车的move()方法,由此类Driver依赖类Car,如图1所示:

   依赖(Dependency)关系是一种采用关系,特定事物的改变有只怕会潜移默化到使用该事物的别样东西,在须要代表贰个事物使用另多少个东西时使用器重关系。大部状态下,着重关系显示在有些类的方式应用另两个类的靶子作为参数。在UML中,保养关系用带箭头的虚线表示,由倚重的一方指向被倚重的一方。例如:驾驶员开车,在Driver类的drive()方法上将Car类型的对象car作为2个参数传递,以便在drive()方法中可以调用car的move()方法,且驾驶员的drive()方法倚重车的move()方法,由此类Driver依赖类Car,如图1所示:

图片 35

图片 36

图1 依赖关系实例

图1 看重关系实例

     
在系统实施阶段,敬爱关系一般通过三种方法来促成,第三,种也是最常用的一种办法是如图1所示的将一个类的对象作为另3个类中艺术的参数,第三种方法是在多个类的方法将官另1个类的靶子作为其有个别变量,第2种办法是在二个类的法门中调用另二个类的静态方法。图1对应的Java代码片段如下:

     
在系统实施阶段,正视关系一般通过二种艺术来贯彻,第叁种也是最常用的一种方法是如图1所示的将三个类的目的作为另多少个类中方法的参数,第二,种艺术是在3个类的方法司令员另二个类的目的作为其有个别变量,第1、种格局是在几个类的章程中调用另3个类的静态方法。图1对应的Java代码片段如下:

public class Driver {  
    public void drive(Car car) {  
        car.move();  
    }  
    ……  
}  

public class Car {  
    public void move() {  
        ......  
    }  
    ……  
}  
public class Driver {  
    public void drive(Car car) {  
        car.move();  
    }  
    ……  
}  

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

 

 

 

 

4.类与类之间的泛化关系

4.类与类之间的泛化关系

 泛化(Generalization)关系也等于后续关系,用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。在UML中,泛化关系用带空心三角形的直线来表示。在代码达成时,大家使用面向对象的接续机制来兑现泛化关系,如在Java语言中使用extends关键字、在C++/C#中使用冒号“:”来促成。例如:Student类和Teacher类都以Person类的子类,Student类和Teacher类继承了Person类的性质和格局,Person类的习性包罗姓名(name)和年龄(age),每二个Student和Teacher也都存有那八个属性,其它Student类增添了质量学号(studentNo),Teacher类增加了质量教授编号(teacherNo),Person类的章程包蕴行走move()和说话say(),Student类和Teacher类继承了那三个法子,而且Student类还新增方法study(),Teacher类还新增方法teach()。如图2所示:

 泛化(Generalization)关系相当于继续关系,用于描述父类与子类之间的关联,父类又称作基类或超类,子类又称作派生类。在UML中,泛化关系用带空心三角形的直线来代表。在代码已毕时,大家利用面向对象的存续机制来贯彻泛化关系,如在Java语言中使用extends关键字、在C++/C#中使用冒号“:”来兑现。例如:Student类和Teacher类都以Person类的子类,Student类和Teacher类继承了Person类的天性和办法,Person类的属性包罗姓名(name)和年龄(age),每一个Student和Teacher也都拥有那多少个属性,此外Student类增添了质量学号(studentNo),Teacher类增加了质量教授编号(teacherNo),Person类的法门包涵行走move()和说话say(),Student类和Teacher类继承了那七个艺术,而且Student类还新增方法study(),Teacher类还新增方法teach()。如图2所示:

图片 37

图片 38

图2
 泛化关系实例

图2
 泛化关系实例

      图2对应的Java代码片段如下:

      图2对应的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() {  
        ……  
    }  
} 
//父类  
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() {  
        ……  
    }  
} 

 

 

5. 接口与达成关系

5. 接口与贯彻关系

     
在诸多面向对象语言中都引入了接口的概念,如Java、C#等,在接口中,寻常没有质量,而且拥有的操作都是空洞的,唯有操作的扬言,没有操作的兑现。UML中用与类的表示法类似的格局表示接口,如图3所示:

     
在许多面向对象语言中都引入了接口的定义,如Java、C#等,在接口中,日常没有品质,而且装有的操作都以空泛的,唯有操作的宣示,没有操作的兑现。UML中用与类的表示法类似的格局表示接口,如图3所示:

图片 39

图片 40

图3  接口的UML图示

图3  接口的UML图示

     
接口之间也得以有与类之间涉及近乎的持续关系和着重关系,不过接口和类之间还存在一种达成(Realization)关系,在那种关联中,类完毕了接口,类中的操作完结了接口中所申明的操作。在UML中,类与接口之间的已毕关系用带空心三角形的虚线来代表。诸如:定义了一个通畅工具接口Vehicle,包蕴二个空洞操作move(),在类Ship和类Car中都落到实处了该move()操作,然则现实的达成细节将会不等同,如图4所示:

     
接口之间也可以有与类之间涉及看似的一而再关系和依靠关系,不过接口和类之间还设有一种达成(Realization)关系,在那种关涉中,类完成了接口,类中的操作完成了接口中所申明的操作。在UML中,类与接口之间的贯彻关系用带空心三角形的虚线来代表。比如:定义了二个通行工具接口Vehicle,包含贰个虚无操作move(),在类Ship和类Car中都兑现了该move()操作,不过现实的贯彻细节将会不相同,如图4所示:

图片 41

图片 42

图4  落成关系实例

图4  达成关系实例

     
已毕关系在编程完结时,不相同的面向对象语言也提供了分化的语法,如在Java语言中行使implements关键字,而在C++/C#中使用冒号“:”来促成。图4对应的Java代码片段如下:

     
完成关系在编程完结时,不相同的面向对象语言也提供了不相同的语法,如在Java语言中动用implements关键字,而在C++/C#中应用冒号“:”来促成。图4对应的Java代码片段如下:

public interface Vehicle {  
    public void move();  
}  

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

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

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

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

 

 

图1对应的Java代码片段如下:

图1对应的Java代码片段如下:

[java] view
plain
 copy

[java] view
plain
 copy

 

 

  1. public class Employee {  
  2.     private String name;  
  3.     private int age;  
  4.     private String email;  
  5.       
  6.     public void modifyInfo() {  
  7.         ……  
  8.     }  
  9. }
     
  1. public class Employee {  
  2.     private String name;  
  3.     private int age;  
  4.     private String email;  
  5.       
  6.     public void modifyInfo() {  
  7.         ……  
  8.     }  
  9. }
     

相关文章