一 :

二 :

三 :

四 :

五 :

类与类之间的关系对于理解面向对象具有很重要的作用,存在以下关系:

(1)泛化(Generalization) :狗与动物 (空箭头)

(2)关联(Association) :公司与员工有特定的某种关系 (实线)

(3)依赖(Dependency) :人依赖螺丝刀 (虚线箭头)

(4)聚合(Aggregation) : 电脑和CPU,主板 (菱形空间头)

详细展开 :

一 .泛化(Generalization)

表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。

一般泛化的关系是从子类指向父类的:

父类 父类实例=new 子类()

1/** *//**
2*  动物类
3*/
4public class Animal{
5
6}    
1/** *//**
2* 老虎类 
3*/
4public class Tiger extends Animal{
5
6}  
1/** *//**
2* 一个测试类
3*/
4public class Demo{    
5    public void test() {
6        //老虎的实例 也属于动物类型 
7        Animal animal = new Tiger();  
8    }    
9

二 .依赖(Dependency)

对于两个相对独立的对象,当一个对象(螺丝刀)负责构造另一个对象(人)的实例,或者一个对象(人)依赖另一个对象(螺丝刀)的服务时,这两个对象之间主要体现为依赖关系。

下面这个例子显然属于后者 :人要做一个拧螺丝的动作,他就要依赖于 螺丝刀对象,因为只有螺丝刀对象才提供拧螺丝的服务。

 1/** *//**
 2 * 说明 :人 这个 类 
 3 */
 4public class Person {
 5    /** *//**
 6     * 人拥有的一个  拧螺丝  的  动作 依赖于螺丝刀这个类
 7     * @param screwdriver :螺丝刀类
 8     */
 9     public void screw(Screwdriver screwdriver)
10        //螺丝刀类提供了拧螺丝这个服务
11        screwdriver.screw();    
12    }  
13}

三 .关联(Association)

对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。

关联关系是使用实例变量来实现

比如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再例如公司和员工,每个公司对应一些特定的员工,每个员工对应一特定的公司

 1/** *//**
 2 * 公司
 3 */
 4public class Company{   
 5    //员工
 6    private Employee employee;
 7
 8    /** *//**
 9     * 公司运作
10      */
11    public void run(){    
12        employee.startWorking();    
13    }
14    
15    public Employee getEmployee(){    
16        return employee;    
17    }    
18    public void setEmployee(Employee employee){    
19        this.employee=employee;    
20    }  
21

四 : 聚合(Aggregation)

当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚集关系。聚合是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。

[关联与聚合的区别]

(1)关联关系所涉及的两个对象是处在同一个层次上的。比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是由自行车组成的。
聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。比如电脑和它的显示器、键盘、主板以及内存就是聚集关系,因为主板是电脑的组成部分。

(2)对于具有聚集关系(尤其是强聚集关系)的两个对象,整体对象会制约它的组成对象的生命周期。部分类的对象不能单独存在,它的生命周期依赖于整体类的 对象的生命周期,当整体消失,部分也就随之消失。比如张三的电脑被偷了,那么电脑的所有组件也不存在了,除非张三事先把一些电脑的组件(比如硬盘和内存) 拆了下来。

 1public class Computer{    
 2    private CPU cpu;    
 3    public CPU getCPU(){    
 4        return cpu;    
 5    }    
 6    public void setCPU(CPU cpu){    
 7        this.cpu=cpu;    
 8    }    
 9    //开启电脑    
10    public void start(){    
11        //cpu运作    
12        cpu.run();    
13    }    
14}  

转载于:https://blog.51cto.com/ezonemax/427999

类与类关系的UML图与代码表现相关推荐

  1. 设计模式(一)认识UML图提升代码阅读与设计能力

    目的   几乎是程序员就都知道或者了解设计模式,但大部分小伙伴写代码总是习惯于一把梭. 无论多少业务逻辑就一个类几千行,这样的开发也可以归纳为三步:定义属性.创建方法.调用展示,Done!只不过开发一 ...

  2. 软件设计师备考(三)——UML(关系和UML图)

    软件设计师备考(三)--UML 一.事物 二.关系 三.UML中的图 1.类图 2.对象图 3.用例图 4.交互图 (1)序列图 (2)通信图 5.状态图 6.活动图 7.构件图 8.部署图 9.包图 ...

  3. python类与类的关系_python 类与类之间的关系

    一.依赖关系(紧密程度最低) (1)简单的定义:就是方法中传递一个对象.此时类与类之间存在依赖关系,此关系比较低. (2)实例植物大战僵尸简易版 题目要求:创建一个植物,创建一个僵尸 1.植物:名字. ...

  4. UML类图简介及类与类之间的关系

    UML(Unified Modeling Language,统一建模语言)建模是面向对象开发设计方法中的第一步,用UML来表达设计模式不仅方便了开发人员的交流,而且更加清晰.准确.UML定义了5类10 ...

  5. 带你了解软件工程中的类与类的关系

    带你了解软件工程中的类与类的关系 一.UML图 1.UML图简介 2.UML图分类 3.类图 二.六大关系 1.依赖关系(Dependence) 2.泛化关系(Generalization) 3.实现 ...

  6. 类与类之间的交互关系

    类与类之间都哪些交互关系呢? UML 统一建模语言中定义了六种类之间的关系.它们分别是:泛化.实现.关联.聚合.组合.依赖.关系比较多,而且有些还比较相近,比如聚合和组合,接下来我就逐一讲解一下. 泛 ...

  7. 软考下午题详解---uml图

    在上篇博客中,小编主要简单的对软考下午题当中的数据流图设计进行了一系列总结,今天我们继续来看软考下午题当中大题部分,uml图的相关知识,在我们学习的过程中,我们也已经接触过,西安交大刘惠老师讲解过um ...

  8. UML图中的关系符号解释

    UML图中的关系符号解释 UML图是程序设计最基本的操作,可以很好地梳理各个类之间的关系,方便我们对代码框架的理解和实现思路的形成: 在面向对象程序设计时,类与类之间的关系主要分为 继承,实现,依赖, ...

  9. UML类图与类间六种关系表示

    1.类与类图 类封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性,操作,关系的对象集合的总称. 类图是使用频率最高的UML图之一. 类图用于描述系统中所包含的类以及它们之间的相互关系,帮助 ...

最新文章

  1. Ubuntu下搭建sun-jdk和Maven2
  2. AIX 访问Linux NFS共享错误案例
  3. 函数实现不放在头文件的原因,及何时可以放头文件的情况
  4. 按任意字段排序的分页存储过程
  5. sublime c语言如何编译,Sublime Text 3 实现C语言代码的编译和运行(示例讲解)
  6. 罕见!特斯拉一座超级充电站起火
  7. 运行php程序cpu 100%,php 应用 cpu 100% 调试方法
  8. Struts2零配置属性详解(2)
  9. npm下载以来版本问题 npm ERR! code ERESOLVE
  10. 2021-06-02使用Digispark(ATTINY85)制作一个Badusb
  11. 比尔·盖茨持有过的中国股票
  12. 关于实习、校招的科普
  13. 数仓工具—Hive实战之占比同比环比(10)
  14. SSL 1231 容易的网络游戏
  15. Bootstrap DataTable自定义表格 设置某列不排序
  16. etsme--Me盒使用初体验
  17. 2020-11-3(安卓开发入门)
  18. C#毕业设计——基于C#+asp.net+SQL Server的电子书城系统设计与实现(毕业论文+程序源码)——电子书城系统
  19. 【工作日记】这一年来完全用Linux工作的感受
  20. 如何把手机app的视频下载到手机上?网页上的视频怎么下载?

热门文章

  1. 一个简单的性能计数器:CodeTimer
  2. jQuery: 操作select option方法集合
  3. PHP浮点运算结果出现误差原因分析及解决方案
  4. Linux shell中的那些小把戏
  5. SLAM常用数据集(2)
  6. 记一起因证书引发的支付宝支付异步通知接收不到的事故
  7. 关于udelay(); mdelay(); ndelay(); msleep();
  8. Linux——Linux下安装tree
  9. 【三维深度学习】多视角场景点云重建模型PointMVS
  10. 【GPU编程】The Cg Runtime:OpenGL中调用Cg程序