前言
类与类之间存在关系,本文章说一说类之间的关系怎么产生,从设计层面分析类与类之间应该用哪种方式关联,以及列举常见的类关系。
面向对象编程
众所周知面向对象编程是一种编码思维即将一件事当作一个对象,需要多少个对象完成多少件事。这些事的集合就是要做的业务。
面向对象编程分为三个阶段:
- OOA(Object Oriented Analysis)面向对象分析
先针对现有的对象进行分析,归类
eg: 张三 李四 王五 赵六都是人,那么我可以先定义一个人类 - OOD(Object Oriented Design)面向对象设计
人的特征和行为有很多 特征: 名字,有钱,长得高。。行为:打篮球 吃饭 睡觉。。
定义一个人类的时候不可能穷举出所有的特征(属性)和行为(方法),那么我们可以在设计类的时候用啥就定义啥 - OOP(Object Oriented Programming)面向对象编程
将设计的类用代码表示出来
接下来用面向对象的思维进行打篮球 - 1.先分析找出人用手打篮球需要的对象即人/手/篮球
// 篮球类
public class Basketball {
}
//器官类
public class Organ {
}
//人类
public class Person {
}
-2.对象具有哪些特征和行为
// 篮球类
public class Basketball {
private String brand;
private String name;
}
//器官类
public class Organ {
private String name;
public Organ(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//人类
public class Person {
private String name;
private String gender;
private int age;
private Organ organ; //器官
public Person(String name, String gender, int age, Organ organ) {
this.name = name;
this.gender = gender;
this.age = age;
this.organ = organ;
}
// 打篮球
public void play(Plane plane){
System.out.println(this.name+"用"+this.organ.getName()+"打了"+plane.getBrand()+"公司生产的"+plane.getName()+"型号篮球");
}
}
- 3.设计完成执行代码
public class Test {
public static void main(String[] args) {
Basketball basketball = new Basketball("斯伯丁", "橘色");
Organ organ = new Organ("手");
Person person = new Person("小明", "男", 18, organ);
person.play(plane); // 小明用手打了斯伯丁公司生产的747橘色型号篮球
}
}
类与类产生关联的方式
- 类形参关联
在打篮球的例子中 Person与Basketball产生了关系,产生关系的方式为Person的play方法形参为Basketball类型,这种关联方式叫做类形参关联 - 类属性关联
同样在打篮球的例子中Person与Organ产生关联,产生关系的方式为Person有一个Organ类型的属性,这种关联方式叫做类属性关联 - 类设计时如何选取关联方式?
在这里要宏观分析类与类的关系是强关联还是弱关联.就像上面打篮球的例子,
人的器官是与生俱来的是强关联所以Organ应该作为Person的属性存在
人的行为是玩,他可以玩任何东西只是在当前业务场景中他玩的是篮球,这就是弱关联所以Basketball类应该作为Person类方法的形参出现.
列举类与类的关系
类与类的关系共有六种即继承关系/实现关系/依赖关系/关联关系/聚合关系/组合关系
其中聚合关系和组合关系属于关联关系的子集,语法上和关联关系一样,逻辑上有区别.
- 继承关系
类继承类,接口继承接口
public class Primate {
//灵长类
}
public class Person extends Primate{
//人类
}
public interface Interface01{
}
public interface Interface02 extends Interface01{
}
- 实现关系
类来实现接口
public interface Interface01{
public abstract void eat();
}
public class Class01 implements Interface01{
@Override
public void eat() {
System.out.println("吃");
}
}
- 依赖关系
将一个类当作另一个类的形参两类之间产生关系,打篮球例子里的Person与Basketball的关系 - 关联关系
将一个类当作另一个类的属性两类之间产生关系,打篮球例子里的Person与Organ的关系 - 聚合关系
关联关系较为强烈的关系,可以没有关联。例如家庭和孩子的关联只要有关系必定是关联关系,但是要让他俩没有关联也不是不可以.家庭可以没有孩子,孩子也可以没有家庭只不过生活惨点单时能过. - 组合关系
关联关系很强烈,不可以没有关联.比如人和心脏的关系必定是关联关系,人如果没有心脏必死无疑,死人就不是Person了。。
写在后面
以上按我的理解的六种关系做了些列举中间的例子可能不太恰当。有问题的话赶紧联系我,我已经块一个月没挨骂了。