类和类的关系

类和类的关系涉及 依赖 关联 聚合 组合 泛化 这五种关系 ,耦合度依次递增 

1.依赖 

使用虚线加箭头表示  

class Phone
{
public static void start(){
       System.printf("手机开机")
    } 
};
class Man
{
public
    //返回值构成依赖
 return new Phone();
    //形参构成依赖
    void program(Phone phone);
    void playGame()
    {
        //局部变量构成依赖
        Phone phone=new Phone();
        ...
        //静态方法调用构成依赖
        Phone.star();
    }
};

类A为了完成某个功能使用了类B,则类A对类B产生了依赖 ,在代码中的主要体现为 类A的某个成员函数的返回值 形参 局部变量 或者静态方法的调用,则表示类A引用了类B  用人和手机打比方 人在需要打电话的时候需要使用手机 就说明 人依赖了手机 

2.关联 

使用实线加箭头表示

class Wife;

class Husband {

Wife wife;

void playPhone();

}

wife类是husband类的成员变量,但是,不参与husband类的构造函数

类之间的关系比依赖强,丈夫和妻子是关联的 ,丈夫可以不玩手机,但是丈夫不能没有妻子 ,关联和依赖的相似之处,关联暗示了依赖 二者都用来表示无法使用聚合和组合表示的关系 ,关联和依赖的区别 依赖关系的两个类都不会增加属性 ,其中的一个类作为另一个类的方法的参数或者返回值,或者是某个方法的变量,而发生关联的两个类 类A会成为类B的属性 ,而属性是一种更为紧密的耦合,更为长久的持有关系 从生命周期来看 ,依赖关系仅仅当类的方法被调用的时候产生,伴随着方法的结束而结束 ,关联关系当类实例化的时候产生,当类对象销毁的时候关系结束 关联的生存周期更长

3.聚合

聚合关系使用实线加空心菱形表示

class Girl;

class Family {

Girl girl;

Family(Girl girl ){

};

}

Girl类是Family类的成员变量,参与Family类的构造函数,在构造函数的形参当中,实例从外部传进来

聚合用来表示集体和个体之间的关联关系 ,例如家庭和女儿之间存在聚合关系

在代码上与关联关系表现一致

4.组合

组合关系使用实线加实心菱形表示

class Woter;

class Man {

Woter woter;

Man (){

woter=new Woter ();

};

}

Woter 类是Man 类的成员变量,参与Man 类的构造函数,在构造函数当中实例化,无法脱离

组合用来表示个体与组成部分之间的关联关系,例如人体和水分之间存在组合关系

组合关系和关联关系在代码上表现一致

组合和聚合的区别

聚合关系没有组合关系紧密

女儿不会因为嫁人而无法存在,聚合关系的类具有不同的生命周期,而人体没有水分将无法存活,组合关系的类具有相同的生命周期

构造函数也有不同,聚合类的构造函数中包含另一个类的实例作为参数,因为构造函数传递另一个类的实例,所以说明聚合个体可以脱离集体而独立存在,组合类的构造函数包含了另一个类的实例化,因为在构造函数中实例化,因为两者紧密联合在一起,同生同灭

信息的封装性不同

在聚合关系中,别人可以同时看到女儿和家庭,因为他们是独立的

而在组合关系中,别人看不到你的心脏,因为心脏被严密的保护在身体里

理解聚合与组合的区别,主要在于聚合的成员可独立,组合的成员必须依赖于整体才有意义。

5.泛化 

泛化通俗的讲就是 类和类之间的继承关系,类和接口之间的实现关系

继承关系使用直线加空心三角形表示

类接口的实现关系使用虚线加空心三角形表示

 

总结 

依赖关系容易区分,在编码中表现为类的成员函数的局部变量,形参,返回值或静态方法的调用

而关联,聚合,组合在编码上都以类成员变量的形式来表示,所以无法一段代码来判断,需要结合上下文语境,关联表示类之间存在联系,不存在个体与集体的关系,个体和组成部分的关系,聚合表示存在个体和集体之间的关系,组合表示存在个体和组成部分的关系。

依赖,关联,聚合,组合是逻辑上的关联,泛化是物理上的关联,所以,笼统的区分,这五种关系都是关联关系,物理上的关联是指类体上的耦合,所以泛化耦合性最强

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值