美文网首页
Class Diagram

Class Diagram

作者: 好小葱1 | 来源:发表于2018-07-31 11:50 被阅读1次

    关系强弱

    没关系 < 依赖 < 关联 < 聚合 < 组合

    依赖(dependency)

    可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用。用带虚线的箭头。

    类图0.jpg

    关联(association)

    他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量。

    类图1.jpg

    依赖和关联区别

    我用锤子修了一下桌子,我和锤子之间就是一种依赖,我和我的同事就是一种关联。依赖是一种弱关联,只要一个类用到另一个类,但是和另一个类的关系不是太明显的时候(可以说是“uses”了那个类),就可以把这种关系看成是依赖,依赖也可说是一种偶然的关系,而不是必然的关系。关联是类之间的一种关系,例如老师教学生,老公和老婆这种关系是非常明显的。依赖是比较陌生,关联是我们已经认识熟悉了。


    聚合

    聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分。

    类图2.jpg

    组合

    组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分。

    类图3.jpg

    聚合与组合区别

    聚合与组合唯一的差别是否在于分享!聚合关系的中的部件可以与其类分享! 比如 : 计算机与cpu ,把计算机拆了,cpu可以用于另外的计算机。但是 人与脑袋,脑袋不能用其他人上(至少现在技术还达不到!)但是 肾可以用来分享!

    代码举例

    雁群0.gif 雁群1.gif
    public class Goose {
    
    }
    public Goose goose;
    
    public GooseGroup(Goose goose)
    {
        this.goose = goose;
    }
    
    public class Goose {
    }
    public Wings wings;
    
    public Goose(){
            wings=new Wings();
    }
    

    相关文章

      网友评论

          本文标题:Class Diagram

          本文链接:https://www.haomeiwen.com/subject/qlmfvftx.html