类与类的关系

前言

类与类之间存在关系,本文章说一说类之间的关系怎么产生,从设计层面分析类与类之间应该用哪种方式关联,以及列举常见的类关系。

面向对象编程

众所周知面向对象编程是一种编码思维即将一件事当作一个对象,需要多少个对象完成多少件事。这些事的集合就是要做的业务。
面向对象编程分为三个阶段:

  • 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了。。

写在后面

以上按我的理解的六种关系做了些列举中间的例子可能不太恰当。有问题的话赶紧联系我,我已经块一个月没挨骂了。

你可能感兴趣的:(类与类的关系)