在UML类图中此类如图1所示,在UML类图中此类如图1所示

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

注:本文摘自罗杰·马丁内斯先生的博客http://blog.csdn.net/lovelion/article/details/7838679,如有侵权,请联系本人!

  UML(统一建模语言)是当前软件开发中应用最为普遍的建模技术之一,通过利用UML可以协会软件系统的急需模型(用例模型)、静态模型、动态模型和架构模型

1.类的UML图示

1.类的UML图示

  

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

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

UML类图

图片 1

图片 2

  1、UML类图图示

图1 类的UML图示

图1 类的UML图示

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

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

    public void modifyInfo() {  
        ......  
    }  
}  
public class Employee {  
    private String name;  
    private int age;  
    private String email;  

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

图片 3

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

   在UML类图中,类一般由三片段组成:

  对应的java代码为:

     
(1) 第1、有的是类名:各个类都无法不有四个名字,类名是三个字符串。

     
(1) 第贰,有的是类名:每种类都必须有多个名字,类名是四个字符串。

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

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

     
(2) 第1、有的是类的质量(Attributes):属性是指类的习性,即类的成员变量。一个类可以有自由多少个属性,也得以没有品质。

     
(2) 第3、有个别是类的天性(Attributes):属性是指类的性质,即类的积极分子变量。二个类可以有私行四个属性,也得以没有质量。

方法中 后边的标志含义:+ public 
#protected -private

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

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

出于在Java语言中允许出现其中类,因而可能会出现包涵八个部分的类图,如图3所示:

 

 

图片 4

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

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

2、类与类之间的关系

 

 

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

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

     
其中:

     
其中:

如在1个登录界面类LoginForm中带有三个JButton类型的登记按钮loginButton,它们中间可以象征为关联关系,代码达成时方可在LoginForm中定义七个名为loginButton的特性对象,其体系为JButton。如图所示:

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

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

图片 5

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

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

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

public class JButton {  
    ……  
}

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

ƒ     
“类型”表示属性的数据类型,可以是主导数据类型,也得以是用户自定义类型。

双向关联

私行认同情况下,关联是双向的。例如:顾客(Customer)购买商品(Product)并具备商品,反之,卖出的货品总有某些顾客与之相关联。由此,Customer类和Product类之间有着双向关联关系,如图2所示:

图片 6

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

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

public class Product {  
private Customer customer;  
……  
}

 

„     
“缺省值”是三个可采取,即属性的开首值。

„     
“缺省值”是3个可挑选,即属性的开头值。

单向关系

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

图片 7

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

public class Customer {  
private Address address;  
……  
}  

public class Address {  
……  
}

 

(3) 第3有些是类的操作(Operations):操作是类的肆意贰个实例对象都可以应用的一坐一起,是类的分子方法。

(3) 第一部分是类的操作(Operations):操作是类的任意3个实例对象都可以利用的作为,是类的分子方法。

自关联

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

图片 8

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

public class Node {  
private Node subNode;  
……  
}

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

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

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

多重性关联

多重性关联关系又叫做重数性(Multiplicity)关联关系,表示七个事关对象在多少上的附和关系。在UML中,对象时期的多重性可以平素在关系直线上用2个数字或3个数字范围表示。

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

表1 多重性表示方式列表

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

比如:二个界面(Form)能够具备零个或几个按钮(Button),不过一个按钮只好属于三个界面,由此,二个Form类的目的可以与零个或七个Button类的靶子相关联,但三个Button类的靶子只好与一个Form类的对象关联,如图5所示:

图片 9

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

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

public class Button {  
……  
}

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

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

相会关系

汇集(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)关系是一种选拔关系,特定事物的改动有大概会潜移默化到利用该事物的任张宇彤西,在急需代表七个事物使用另多少个事物时选用正视关系。大部分气象下,倚重关系呈未来某些类的方法运用另1个类的对象作为参数。在UML中,正视关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。例如:驾驶员开车,在Driver类的drive()方法中将Car类型的靶子car作为2个参数传递,以便在drive()方法中可见调用car的move()方法,且驾驶员的drive()方法看重车的move()方法,由此类Driver正视类Car,如图1所示:

图片 12

在系统实施阶段,依赖关系一般经过三种情势来促成,首先种也是最常用的一种办法是如图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() {  
    ……  
    }  
}

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

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

(4)、接口与贯彻关系

在众多面向对象语言中都引入了接口的定义,如Java、C#等,在接口中,平常没有品质,而且富有的操作都以虚幻的,唯有操作的扬言,没有操作的贯彻。UML中用与类的表示法类似的法子意味着接口,如图3所示:

图片 14

接口之间也足以有与类之间涉及近乎的一而再关系和重视关系,可是接口和类之间还留存一种达成(Realization)关系,在那种关系中,类已毕了接口,类中的操作完结了接口中所表明的操作。在UML中,类与接口之间的兑现关系用带空心三角形的虚线来表示。例如:定义了壹个通行工具接口Vehicle,包蕴壹个浮泛操作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),否则提醒“输入错误”。

依照上述描述绘制起始类图。

„      “重回类型”是3个可挑选,表示方法的回到值类型,依赖于实际的编程语言,能够是主导数据类型,也得以是用户自定义类型,还是能是空类型(void),即使是构造方法,则无重回类型。

„      “重临类型”是一个可挑选,表示方法的回到值类型,依赖于实际的编程语言,可以是主导数据类型,也足以是用户自定义类型,还足以是空类型(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接口中声明的数据访问方法
 

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

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

图片 17

图片 18

图2 类图操作表明示意图

图2 类图操作表明示意图

出于在Java语言中允许出现其中类,因而或然会产出包罗三个部分的类图,如图3所示:

是因为在Java语言中允许出现其中类,由此或者会并发包罗多个部分的类图,如图3所示:

图片 19

图片 20

图3 包蕴其中类的类图

图3 蕴涵其中类的类图

 

 

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

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

关联(Association)关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象时期有联系,如小车和轮胎、师傅和徒弟、班级和学生等等。在UML类图中,用实线连接有关联关系的目标所对应的类,在使用Java、C#和C++等编程语言完结关系关系时,寻常将2个类的对象作为另三个类的分子变量。在利用类图表示关联关系时得以在关联线上标注解色名,一般采用一个意味两者之间关系的动词可能名词意味着角色名(有时该名词为实例对象名),关系的两岸代表二种差距的剧中人物,由此在一个关系关系中可以包括多个角色名,剧中人物名不是必须的,可以按照需要追加,其目标是使类之间的涉嫌更为旗帜鲜明。

关联(Association)关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系,如小车和轮胎、师傅和徒弟、班级和学员等等。在UML类图中,用实线连接有关联关系的靶子所对应的类,在使用Java、C#和C++等编程语言完结关系关系时,日常将多少个类的靶子作为另1个类的积极分子变量。在采取类图表示关联关系时得以在关联线上标注角色名,一般接纳一个代表两者之间关系的动词或然名词意味着角色名(有时该名词为实例对象名),关系的两端代表三种差别的剧中人物,因而在壹个涉及关系中可以涵盖三个角色名,剧中人物名不是必须的,可以依据须求充实,其目的是使类之间的涉及进一步明朗。

     
如在三个登录界面类LoginForm中含有一个JButton类型的注册按钮loginButton,它们之间可以代表为涉嫌关系,代码已毕时方可在LoginForm中定义二个名为loginButton的质量对象,其体系为JButton。如图1所示:

     
如在二个登录界面类LoginForm中蕴藏二个JButton类型的登记按钮loginButton,它们中间可以象征为关联关系,代码完毕时方可在LoginForm中定义1个名为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) 自关联

     
在系统中或然会存在部分类的习性对象类型为此类本人,那种新鲜的关联关系称为自关系。例如:1个节点类(Node)的成员又是节点Node类型的对象,如图4所示:

     
在系统中可能会设有部分类的性质对象类型为此类本人,那种奇特的关系关系称为自关系。例如:多个节点类(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)

 

 

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

     
例如:3个界面(Form)可以具备零个或两个按钮(Button),不过一个按钮只可以属于三个界面,由此,3个Form类的靶子可以与零个或多少个Button类的靶子相关联,但二个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),嘴巴是头的组成部分之1、而且若是头没了,嘴巴也就没了,由此头和嘴巴是整合关系,如图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)关系是一种采纳关系,特定事物的变动有只怕会影响到使用该事物的其余东西,在急需代表1个东西使用另多少个事物时接纳依赖关系。大部情状下,正视关系显示在有些类的方法应用另多少个类的对象作为参数。在UML中,倚重关系用带箭头的虚线表示,由正视的一方指向被依赖的一方。例如:驾驶员开车,在Driver类的drive()方法中校Car类型的对象car作为2个参数传递,以便在drive()方法中可见调用car的move()方法,且驾驶员的drive()方法倚重车的move()方法,因而类Driver器重类Car,如图1所示:

   依赖(Dependency)关系是一种拔取关系,特定事物的改变有大概会潜移默化到利用该事物的任李铁西,在须求代表一个事物使用另2个东西时行使看重关系。超过半数意况下,依赖关系浮以后有个别类的章程应用另五个类的目的作为参数。在UML中,倚重关系用带箭头的虚线表示,由看重的一方指向被看重的一方。例如:驾驶员开车,在Driver类的drive()方法少校Car类型的目标car作为贰个参数传递,以便在drive()方法中可见调用car的move()方法,且驾驶员的drive()方法看重车的move()方法,因而类Driver看重类Car,如图1所示:

图片 35

图片 36

图1 倚重关系实例

图1 正视关系实例

     
在系统实施阶段,依赖关系一般经过二种方式来贯彻,第3种也是最常用的一种方法是如图1所示的将三个类的目的作为另一个类中方法的参数,第贰种艺术是在三个类的章程大校另2个类的对象作为其有个别变量,第两种方法是在一个类的方法中调用另2个类的静态方法。图1对应的Java代码片段如下:

     
在系统实施阶段,依赖关系一般经过三种办法来促成,第2种也是最常用的一种格局是如图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中,类与接口之间的完结关系用带空心三角形的虚线来代表。例如:定义了1个直通工具接口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. }
     

相关文章