UML
定义:
UML即
统一建模语言(Unified Modeling Language)
,它是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。
UML类图就是一种供软件设计师们看的可以表达类的关系的一种统一语言,只不过是用图的形式来表达。
下面有个Student类,age默认值为1,提供了get和set方法。
public class Student {
private String name;
private int age = 1;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
下面我们来看一下该类的UML类图。
上面的类图中主要有三个部分类名、类的属性和方法,三个部分使用分隔符分隔。
类的属性和方法的表达格式:
类的属性格式:访问权限 属性名:类型[=默认值]
类的方法格式:访问权限 方法名称:类型[:返回类型]
"+“表示public,”-“表示private,”#"表示protected。
类之间的关系
类与类之间有下面几种关系: 泛化(Generalization)、实现(Realization)、依赖(Dependence)、关联(Association)、聚合(Aggregation)、组合(Composition)。 下面用Java代码和类图之间的对比来解释上述的关系。
泛化(Generalization)
泛化就是Java中的继承关系,很好理解。
Student类继承于Person类,那么两个对象就是泛化关系,使用带空心三角形的实线箭头表示。
public class Student extents Person {
}
实现(Realization)
实现就是Java中实现接口的方法。
Studen类中实现了一个Skil接口,那么Student类和Skill接口之间就是实现关系,使用带空心三角形的虚线箭头表示。
public interface Skill {
void code();
}
public class Student implments Skill {
@Override
public void code() {
}
}
依赖(Dependence)
依赖是一种很弱的关系,如果类A访问类B的属性或者方法,或者类A负责实例化类B,那么可以说类A依赖类B。比如下面的例子,Student如果要在图书馆借书,图书馆管理员需要记录该学生的学号,Librarian类就需要访问Student类的getSno()方法来获取sno属性,那么就说Librarian类依赖于Student类,使用虚线箭头表示,箭头指向被依赖的对象。
public class Librarian {
public void record(int sno) {
//记录sno;
}
}
关联(Association)
关联关系是一种比较强的关系,两者的关系是比较长久的,比如学生和家的关系,就是一种关联关系。关联关系分为两种,一种是单向关联,一种是双向关联, 如果一个类知道或者引用了另一个类,而另一个类不知道或者没有引用这个类,则这两个类是单向关联的。 比如学生和家的关系,每个学生都有家,但是每个家里并不是都有学生。单项关联使用实线箭头表示,箭头指向被引用的类。
public class Student {
Home home;
}
双向关联是双方都知道对方的存在,比如学生和老师的关系就是双向关联,双向关联用实直线表示。
public class Student {
Teacher teacher;
}
public class Teacher {
Student student;
}
聚合(Aggregation)
聚合关系强调的是整体和部分的关系,其部分可以脱离整体而存在。比如大雁和雁群的关系,就是聚合关系,大雁离开雁群也是可以独立存在的。聚合关系使用带空心菱形的虚线箭头表示,菱形指向整体。
public class Geese {
String shape;
ArrayList<Goose> geese;
}
组合(Composition)
组合关系也是强调的整体和部分的关系,而在此关系中部分不可以脱离整体存在。比如大雁和翅膀,就是组合关系,翅膀不能脱离大雁的存在而存在。。。组合关系使用是带实心菱形的虚线箭头表示,菱形指向整体。
public class Goose {
Wing wing;
}
关系,翅膀不能脱离大雁的存在而存在。。。组合关系使用是带实心菱形的虚线箭头表示,菱形指向整体。
public class Goose {
Wing wing;
}
组合、聚合、关联、依赖这几种关系关联程度也就显而易见了,依赖程度:组合>聚合>关联>依赖。