1.关联关系
在java、c++中类的关联关系在实现时,通常将一个类的对象作为另一个类的成员变量。
实例:
代码片段如下:
class loginForm {
private:
JButton loginButton;
...
};
class JButton {
...
};
(1)双向关联
例如:顾客购买商品并拥有商品,反之,卖出的商品总有某个顾客与之相关联
class Customer {
private:
Product[] products;
...
};
class Product {
private:
Customer customer;
...
};
(2)单向关联
比如顾客拥有地址,这就是单向关联
代码片段:
class Customer {
private:
Address address;
...
};
class Address {
...
};
(3)自关联
比如:一个节点类(Node)又是节点Node类型的对象
代码片段:
class Node {
private:
Node subNode;
...
};
(4) 多重性关联
表示两个对象在数量上的对应关系
1..1 : 表示另一个类的一个对象只与该类的一个对象有关系
0..* : 表示另一个类的一个对象与该类的零个或多个对象有关系
1..* : 表示另一个类的一个对象与该类的一个或多个对象有关系
0..1 : 表示另一个类的 一个对象没有或只与该类的一个对象有关系
m..n : 表示另一个类的一个对象与该类至少m,最多n个对象有关系
例如:一个界面可以拥有零个或多个按钮,但是一个按钮只能对应一个界面
代码片段:
class Form {
private:
Button[] buttons;
...
};
class Button {
...
};
(5)聚合关系
表示整体与部分的关系。在聚合关系中,成员对象是整体形象的一部分,但是成员对象可以脱离整体对象独立存在,例如:汽车发动机是汽车的组成部分,但是汽车发动机可以独立存在。
代码片段:
class Car {
private:
Engine engine;
Car(Engine engine) {
this.engine = engine;
}
void setEngine(Engine engine) {
this.engine = engine;
}
...
};
class Engine {
...
};
2.依赖关系
特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用以来关系。
大多数情况下,以来关系体现在某个类的方法使用另一个类的对象作为参数
代码片段:
class Driver {
public:
void drive(Car car) {
car.move();
}
...
};
class Car {
public:
void move() {
...
}
...
};
3.泛化关系
也就是继承关系,用带空心三角形的直线来表示
代码片段:
class Person {
protected:
String name;
int age;
public:
void move() {
...
}
void say() {
...
}
};
class Students:public Person {
private:
String studentNo;
public:
void study() {
...
}
};
class Teacher:public Person {
private:
String teacherNo;
public:
void teach() {
...
}
};
4.接口与实现关系(c++中的纯虚函数)
在这种关系中,类实现了接口,类中的操作实现了接口中所声明的操作。用带空心三角形的虚线来表示。例如:定义了一个交通工具接口Vehile,包含一个抽象操作move(),在类Ship和类Car中实现了该move()操作,不过具体的实现细节将不一样。
代码片段:
class Vehile {
public:
virtual void move() = 0;
};
class Ship:public Vehile {
public:
void move() {
...
}
};
class Car:public Vehile {
public:
void move() {
...
}
};
总结:
学会通过看UML图来判断类之间的关系