类图是最常用的UML图形,也是开发人员在设计和修改代码时的重要工具。下面介绍一下常用图形:

1.类

面向对象编程中,类是对象的骨架,它了包含3个组成部分:

第一个是Java中定义的类名

第二个是属性(attributes)。

第三个是该类提供的方法
对于标准的UML类图,他的第一行表示类的名称,如下图的annimal。

第二行是类的属性,也就是它的成员变量,如name、age、trueName、sex这四个属性。

第三行表示类的方法,如getName()和setName()方法。

当然,他们都是有可见范围的。

在UML类图中,加号(+)表示具有公共可见性(public)。减号(-)表示私有可见性(private)。#号表示受保护的可见性(protected)。

省略这些修饰符表示具有package(包)级别的可见性。

如果属性或操作具有下划线,表明它是静态的。在操作中,可同时列出它接受的参数,以及返回类型,如图:

对应代码如下:

 1 public class Annimal {
 2     public String name;
 3     private int age;
 4     protected String trueName;
 5     String sex;
 6 
 7     public String getName() {
 8         return name;
 9     }
10 
11     private void setName(String name) {
12         this.name = name;
13     }
14 }

 

2.接口

接口是一系列操作的集合,它指定了一个类所提供的服务。它直接对应于Java中的一个接口类型。

接口既可用下图的那个图标来表示,也可由附加了<<interface>>的一个标准类来表示。

通常,根据接口在类图上的样子,就能知道与其他类的关系。

对应代码如下:

1 public interface CollegePerson {
2     public void getSchedule();
3 }

 

3.关系

 

3.1 依赖关系

实体之间一个“使用”关系暗示一个实体的规范发生变化后,可能影响依赖于它的其他实例。

更具体地说,它可转换为对不在实例作用域内的一个类或对象的任何类型的引用。

其中包括一个局部变量,对通过方法调用而获得的一个对象的引用(实例方法返回值),或者对一个类的静态方法的引用(静态方法返回值)。

也可利用“依赖”来表示包和包之间的关系。由于包中含有类,所以你可根据那些包中的各个类之间的关系,表示出包和包的关系。

对应代码如下:

 1 public class Annimal {
 2 
 3     public String name;
 4     private int age;
 5     protected String trueName;
 6     String sex;
 7 
 8     public String getName() {
 9         return name;
10     }
11 
12     private void setName(String name) {
13         this.name = name;
14     }
15     
16     public void drink(Water water) {
17         
18     }
19 }
20 
21 class Water{
22     private String name;
23 }

 

3.2关联

实体之间的一个结构化关系表明对象是相互连接的。箭头是可选的,它用于指定导航能力。

如果没有箭头,暗示是一种双向的导航能力。

在Java中,关联转换为一个实例作用域的变量,如下图所示。

可为一个关联附加其他修饰符。多重性(Multiplicity)修饰符暗示着实例之间的关系。

在示范代码中,Employee可以有0个或更多的TimeCard对象。但是,每个TimeCard只从属于单独一个Employee。

代码如下:

 1 public class Employee {
 2 
 3     public Employee() {
 4         // TODO Auto-generated constructor stub
 5     }
 6     
 7     private TimeCard timeCard;
 8 
 9 }
10 
11 class TimeCard {
12 
13 }

 

3.2.1 聚合

聚合是关联的一种形式,代表两个类之间的整体/局部关系。组合是一种比较紧密的关系,整体和局部“同生共死”。

聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的级别。聚合也转换成Java中的一个实例作用域变量。

代码如下:

 1 public class People {
 2 
 3     public People() {
 4         // TODO Auto-generated constructor stub
 5     }
 6     private Person person;
 7 }
 8 
 9 class Person{
10     
11 }

 

3.2.2 组合

合成是聚合的一种特殊形式,暗示“局部”在“整体”内部的生存期职责。合成也是非共享的。

所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局部的存活状态,要么负责将其销毁。

局部不可与其他整体共享。但是,整体可将所有权转交给另一个对象,后者随即将承担生存期职责。

代码如下:

 1 public class People {
 2 
 3     public People() {
 4         // TODO Auto-generated constructor stub
 5     }
 6     private Person person1;
 7     private Person person2;
 8 }
 9 
10 class Person{
11     
12 }

 

3.2.3 泛化

泛化表示一个更泛化的元素和一个更具体的元素之间的关系(子类继承父类)。泛化是用于对继承进行建模的UML元素。在Java中,用extends 关键字来直接表示这种关系。

代码如下:

 1 public abstract class Annimal {
 2 
 3     public String name;
 4     private int age;
 5     protected String trueName;
 6     String sex;
 7 
 8     public String getName() {
 9         return name;
10     }
11 
12     private void setName(String name) {
13         this.name = name;
14     }
15     
16     public abstract void drinkWater(Water water);
17 }
18 
19 class Cat extends Annimal{
20 
21     @Override
22     public void drinkWater(Water water) {
23         // TODO Auto-generated method stub
24         
25     }
26     
27 }
28 
29 class Water{
30     private String name;
31 }

 

3.2.4 实现

实例关系指定两个实体之间的一个合同。换言之,一个实体定义一个合同,而另一个实体保证履行该合同。(子类继承接口)

对Java应用程序进行建模时,实现关系可直接用implements关键字来表示。

代码如下:

 

 1 public interface IAnnimal {
 2     public void drinkWater(Water water);
 3 }
 4 
 5 class Cat implements IAnnimal{
 6 
 7     @Override
 8     public void drinkWater(Water water) {
 9         // TODO Auto-generated method stub
10         
11     }    
12 }

 

posted on 2020-12-15 09:23  Sempron2800+  阅读(503)  评论(0编辑  收藏  举报