文章目录

  • 一、UML类图关系总览
  • 二、依赖关系
    • 1.关系描述
    • 2.举例
  • 三、关联关系
    • 1.关系描述
    • 2.举例
    • 3.思考
  • 三、聚合、组合关系——关联关系的两种形式
    • 1.关系描述
    • 2.两者关系对比
    • 3.关系比较
  • 四、继承(泛化)关系
    • 1.关系描述
    • 2.举例
    • 3.思考:合成(聚合)复用原则由来
  • 五、实现关系
  • 六、最后总结

一、UML类图关系总览


文字解释下各个类及关系

含义及关系
Food类 食物类,People类依赖Food类
Adress类 地址类,People类关联Address类
PeopleGroup类 人群类,PeopleGroup类聚合People类
Heart类 心脏类,Hear类组合成People类
Animal类 动物类,People类继承Animal类
Eatting接口 People类实现此接口

关系耦合度:继承(泛化)=实现>组合>聚合>关联>依赖
下面依关系耦合度角度,从低向高依次介绍并给出对象的代码

二、依赖关系

1.关系描述

定义

  • 类之间的使用关系,即Use a,一个类使用了另一个类,或者一个类依赖另一个类的服务

对应java代码

  • 类A依赖于类B,类B可以作为类A方法的参数、局部变量、方法返回值类型
  • 或者类A方法中调用类B的静态方法
  • 类A方法中有类B类型的变量
2.举例

UML图

对应的代码

Class People{//Food类作为eat方法的参数public void eat(Food food){System.out.println("正在吃的食物是"+food.getName())}
}

People类想要完成eat方法,需要使用Food类,即需要Food类提供getName方法作为服务

三、关联关系

1.关系描述

定义

  • 表示类拥有另一个类,可以表示为has a

对应java代码

  • 类A关联类B,类B作为类A的成员变量
2.举例


每一个People对象都有一个联系地址
对应代码

Class People{//Address类作为成员变量private Address address;
}
3.思考

为什么依赖比关联的耦合度低?

依赖对应对象方法的局部变量,关联对应对象的成员变量。
成员变量和对象具有相同的生命周期,即类A一直和类B存在关联关系
局部变量只有在方法被调用时,类A才会和类B存在依赖关系
因此从关系存在的时间长短可以推断出依赖比关联耦合度低

三、聚合、组合关系——关联关系的两种形式

1.关系描述

聚合

  • 描述两个类之间存在“整体—部分”关系,部分类生命周期取决于本身,比关联关系耦合度高

组合

  • 是聚合的特殊情况,也是"整体—部分"关系,部分类生命周期取决于整体,比聚合耦合度高
2.两者关系对比

3.关系比较

共同点

  • "部分"类作为"整体"类的成员变量,成员变量类型也可以是"部分"类型的数组

不同点:构造函数不同

  • 聚合:"整体"类包含"部分"类作为参数,PeopleGroup类的构造函数要用到People类型的参数,People类可以脱离PeopleGroup类独立存在,即部分可以脱离整体独立存在
  • 组合:"整体"类包含"部分"类的实例化,在People类实例化之前一定要先实例化Heart(心脏)类,Heart类不可以脱离People类独立存在,即部分不能独立存在

四、继承(泛化)关系

1.关系描述

子类继承父类的属性和方法,除私有成员和构造函数外
关系描述为is a,比如人是一个动物

关于私有成员是否可以继承,java官方文档说是不可以
Private Members in a Superclass
A subclass does not inherit the private members of its parent class. However, if the superclass has public or protected methods for accessing its private fields, these can also be used by the subclass.

子类继承父类,父类泛化子类,继承对应java代码使用extends关键字

2.举例


对应代码

class People extends Animal{}
3.思考:合成(聚合)复用原则由来

此原则本质便为:为什么少用继承关系多用组合(合成)聚合关系
以下参考这篇大佬的博客

1.子类继承父类公有和受保护的所有方法,即使父类方法是有害或者对子类无用

2. 耦合度高,父类变化也会引起子类变化,也可能造成类体系无限膨胀

3. 继承的子类,实际上需要编译期确定下来,这满足不了需要在运行内才能确定对象的情况。而组合却可以比继承灵活得多,可以在运行期才决定某个对象。
对这句话理解:子类要想实例化其父类必先实例化,因此要实例的对象在编译时已经确定,不能够动态生成指定对象

组合聚合关系是结构型设计模式的核心,典型的设计模式有代理模式,适配器模式,装饰模式等

五、实现关系

关系描述及举例

  • 类实现接口,实现与泛化关系耦合度相同,下面看例子
  • 如People类实现了Eating接口,并重写了eat方法

对应代码

class People implements Eating(){//重写的方法,接口的方法就不写了,哈哈public void eat(Food food){System.out.println("正在吃的食物是"+food.getName())}
}

六、最后总结


关系耦合度:继承(泛化)=实现>组合>聚合>关联>依赖

絮叨一句:过了一年又重学了一次UML,其实在软考的时候就想写了,只不过还不成体系,现在对面向对象的理解渐渐深入,这就是一个进步。

【重学UML】UML类图关系及其对应代码相关推荐

  1. UML类图关系全面剖析[转]

    UML类图关系全面剖析      本文随便转载,请保留出处:http://blog.csdn.net/dylgsy/ UML的类图关系分为: 关联.聚合/组合.依赖.泛化(继承).而其中关联又分为双向 ...

  2. UML 之 C++类图关系全面剖析

    UML的类图关系分为: 关联.聚合/组合.依赖.泛化(继承).而其中关联又分为双向关联.单向关联.自身关联:下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里. 1.关联 双向关联: C1 ...

  3. mysql中unl是什么健_UNL类图关系全面剖析

    UML的类图关系分为: 关联.聚合/组合.依赖.泛化(继承).而其中关联又分为双向关联.单向关联.自身关联:下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里. 1.关联 双向关联: C1 ...

  4. UML类图关系大全 and 报表的基本用法

    UML类图关系大全 1.关联 双向关联: C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法. 在 GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描 ...

  5. 【UML】UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)

    http://www.cnblogs.com/olvo/archive/2012/05/03/2481014.html 继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的 ...

  6. 【转】 UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合

    目录(?)[-] 继承 实现 依赖 关联 聚合 组合 类图及类图中的关系 继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是一个类(称为子类.子接口)继承另外的一个类( ...

  7. UML类图关系表示方法

    本文转载: http://blog.csdn.net/fengsh998/article/details/8105631 分类: UML2012-10-24 10:18 1175人阅读 评论(0) 收 ...

  8. UML软件工程--类图

    UML 基础:类图 选自:IBM 这是关于统一建模语言.即UML 里采用的基本图的一系列文章的一部分.在我 先前关于序列图的文章 里,我把重点从 UML 1.4 版,转移到 OMG的采用UML 2.0 ...

  9. [UML]UML系列——类图class的关联关系(聚合、组合)

    关联的概念 关联用来表示两个或多个类的对象之间的结构关系,它在代码中表现为一个类以属性的形式包含对另一个类的一个或多个对象的应用. 程序演示:关联关系(code/assocation) 假设:一个公司 ...

最新文章

  1. 商汤科技宣布C轮战略融资6亿美元 阿里领投苏宁跟投
  2. linunx获取命令帮助
  3. linux 如何以树形结构显示文件目录结构
  4. 核心概念——节点/边/Combo——内置节点——Diamond
  5. QT5.4 vs2013静态加载插件的sqlite静态编译
  6. Android之android.os.NewWorkOnMainThreadException解决办法
  7. 生产消费是什么设计模式_快速消费品的完整形式是什么?
  8. android 获取当前时间_js如何获取当前时间并显示
  9. c语言2阶数组指针,C语言的指针(进阶篇章之二)
  10. nodejs与php通信,使用DNode实现php和nodejs之间通信的简单实例
  11. Ajax请求生成中文乱码问题
  12. mysql 中时间和日期函数应用
  13. QCSPCChart SPC for JS
  14. vb 远程连接 SQLserver数据库的连接语句
  15. 现代计算机发展各个阶段的主要特点是什么,计算机的发展历史 现代计算机发展的6个阶段...
  16. meanshift算法通俗讲解
  17. text to image(八):《Image Generation from Scene Graphs》
  18. Yolov4-tiny pth转onnx转tensorrt
  19. 物理学/数学中常用的“等号”
  20. 《哲学史讲演录》——思辨节选---塞诺芬尼 、巴门尼德

热门文章

  1. artifact is missing.
  2. Android 短信验证码输入框
  3. 怎样用matlab把视频转gif动画,Matlab制作视频并转换成gif动态图的两种方法
  4. 查看LINUX放开端口,linux如何查看端口是否开放?
  5. matlab第二章实训总结,matlab实训小结
  6. OpenAI 宣布将对战 DOTA2 世界冠军 OG,最终决战! 1
  7. GoogleCode中git push密码错误提示解决方案(Invalid username/password)
  8. python 计算一年内的所有周的具体日期
  9. 【操作系统】《计算机的心智:操作系统之哲学管理》读书笔记
  10. 中国小三多,是因为女人缺乏精神上的独立,男人缺乏人格上的体面。