Java中的各种对象之间的关系,主要包含有这几种关系依赖,关联,聚合,组合,继承(泛化),实现。耦合度一次递增,关于耦合度,制度的是,当一个类变化时,对另一个类的影响,如果耦合度越低,影响越小,耦合度越高,对有关系的另一个类的影响越大。
依赖(Dependence)------->
表示俩个独立的对象,其中一个对象的返回值,或者形参,局部变量,或者静态方法的调用中包含另一个对象。

public class Person {
//Car作为形参传递进来
public void running(Car book){
...
}
}
关联(Association)
单向关联用实心箭头来表示,双向关联不用箭头,关联关系有单向关联,双向关联,多维关联,关联关系比依赖的耦合度强,人代步可以用车,但是也可以用其他工具,但是学生和老师,是一个老师一个学生。也可以是一个老师对应多个学生,也可以是一个学生对应一个老师,在俩个对象之间,如果一个对象中的成员变量是另一个对象这种是单向关联,如果另一个对象中的成员变量也包含对方,就是双向关联,如果一个对象中依赖多个其他对象就是多维关联。

public class Teacher {
private Student student;
private Student[] students;
public void giveClass(){
student.study();
}
}
public class Student {
private Teacher teacher;
public void study(){
teacher.giveClass();
}
}
聚合(Aggregation)
聚合用空心棱形加上实心箭头表示,聚合关系是一种"整体-个体"之间的关系,一般在定义一个整体的内容后,在然后找在整体中分析出个体,相对于整体而言,这些个体是可以独立存在。就像学校有学生,也有老师,学校包含学生,老师,学生老师也可以脱离学校而存在。

public class School {
//聚合中成员函数一般用set方法设置。
private Student student;
private Teacher teacher;
public void setStudent(Student student) {
this.student = student;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
public School (Student student,Teacher teacher){
...
}
public void train(){
...
}
}
public class Teacher {
private Student student;
public void giveClass(){
student.study();
}
}
public class Student {
private Teacher teacher;
public void study(){
teacher.giveClass();
}
}
组合(Composition)
组合用实心棱形和实心箭头表示,组合是一种强的聚合关系,也是"整体-个体"的关系,只不过这种"整体-个体"之间的关系是,个体不能脱离整体而存在,整体销毁,个体也就销毁了,就像人和心脏,汽车和发动机的关系。

public class Car {
//组合中成员变量 ,一般用构造函数。
private Engine engine;
public Car(Engine engine){
...
}
}
public class Engine {
....
}
继承 (Extends)
表示类与类之间或者接口与接口之间的关系继承关系,子类可以继承父类公共的方法。

public abstract class Animal {
abstract void eat();
}
public class Dog extends Animal {
@Override
void eat() {
}
}
实现(Implements)
表示一个类实现一个或者多个接口

public interface Study {
void study();
}
public class Computer implements Study {
@Override
public void study() {
}
}
public class Book implements Study {
@Override
public void study() {
}
}
网友评论