UML如何描述类之间的关系(一)
作者:Balan
UML(The Unified Modeling Language)就是统一建模语言,不论它是怎么发展来的,也不论最新的官方Specification或工业标准是哪个版本,我想总结一下工作中最常用的一些知识:用UML语言描述类的关系。
1,关联关系(Association)
关联关系是类(也可以说是对象)之间特定的对应关系。按照对象的数量对比,可以分为:
A 一对一
比如公民和公民身份卡之间的对应关系。
B 一对多
一个部门对应0或者多位员工,一般而言一位员工只能属于某一个部门。
C 多对多
用户和服务是多对多的关系,一个用户可以注册0个或多个服务,一个服务则可以被0个或者多个用户复用。比如Windows Live用户可以激活邮件服务、Space服务等,而这些服务不是被一个用户所专有的。
关联的实质
从A类型到B类型的关联是指在A类型中定义了B类型作为属性。如下列代码:
package uml;
public class Citizen { private CitizenshipCard card;
//其他属性
public CitizenshipCard getCard() {
returncard;
}public void setCard(CitizenshipCard card) {
this.card=card;
}}
上述代码演示了从Citizen 到 CitizenshipCard 的关联。注意下图箭头方向:
同样可以建立CitizenshipCard 到 Citizen 的关联:
代码表示为:
package uml;
public class CitizenshipCard { private Citizen citizen;
//其他属性
public Citizen getCitizen() {
returncitizen;
}public void setCitizen(Citizen citizen) {
this.citizen=citizen;
}}
如果仅仅建立从Citizen 到 CitizenshipCard 的关联或者仅仅建立CitizenshipCard 到 Citizen 的关联,都属于单向关联,如果两个方向的关联都建立,就是双向关联:
是否建立双向关联要在实际项目中酌情而定。再看个双向关联的例子:
Department -----------------------------------------------------------------
package uml;
import java.util.Set;
public class Department {
privateStringname;
private Set<Employee> employees;public String getName() {
returnname;
}public void setName(String name) {
this.name=name;
}public Set<Employee> getEmployees() {
returnemployees;
}public void setEmployees(Set<Employee> employees) {
this.employees=employees;
}}
Employee --------------------------------------------------------------------
package uml;
public class Employee {
privateStringname;
privatelongjoinTime;
private Department department;public String getName() {
returnname;
}public void setName(String name) {
this.name=name;
}public long getJoinTime() {
returnjoinTime;
}public void setJoinTime(long joinTime) {
this.joinTime=joinTime;
}public Department getDepartment() {
returndepartment;
}public void setDepartment(Department department) {
this.department=department;
}}