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

166 篇文章 7 订阅
订阅专栏

关联的概念

      关联用来表示两个或多个类的对象之间的结构关系,它在代码中表现为一个类以属性的形式包含对另一个类的一个或多个对象的应用。

程序演示:关联关系(code/assocation)

      假设:一个公司只有三名员工:一个员工要么没有工作,要么只能在一个公司工作。(代码简化了,主要说明关联关系)

      Person类:

复制代码

 1 class person
 2     {
 3         public string name;
 4         public person(string eName)
 5         {
 6             name = eName;
 7         }
 8         public void startWork()
 9         {
10             Console.WriteLine("员工{0}开始工作",name);
11         }
12     }

复制代码

Person

      Company类:

复制代码

 1 class company
 2     {
 3         public string name;     //公司名称
 4       public person[ ] employee = new person[3]; 
 5      
 6         public company(string cName)  //构造函数
 7         {
 8             name = cName;
 9         }
10 
11         public void run()
12         {
13             Console.WriteLine("公司“{0}”开始运作",name);
14             employee[0].startWork();
15             employee[1].startWork();
16             employee[2].startWork();
17         }
18 
19         public void stop()
20         {
21             Console.WriteLine("公司“{0}”停止运作", name);
22         }    
23  }

复制代码

Company

      控制台程序:

复制代码

 1  class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             company c = new company("北京能力有限公司");
 6             c.employee[0] = new person("张三");
 7             c.employee[1] = new person("李四");
 8             c.employee[2] = new person("王二");
 9             c.run();
10             c.stop();
11             Console.Read();
12         }
13     }

复制代码

Program

      输出:

      对应的类图:

二元关联

       概念:两个类之间的关联成为二元关联。

       符号:

      比如:在一个大公司里,公司总裁只认识那些核心职员,不认识所有的普通职员,而所有的职员都认识总裁。

复制代码

 1 public class 大公司总裁 
 2  { 
 3        private 核心职员    A; 
 4  } 
 5  
 6  public class 核心职员 
 7  { 
 8        private 大公司总裁  B; 
 9  } 
10  
11  public class 普通职员 
12  { 
13        private 大公司总裁   B; 
14  }

复制代码

      对应的类图:

 

      单向关联关系对应的代码:

复制代码

1 public class A
2 {
3       private B b;
4 }
5 
6 public class B
7 {
8 }

复制代码

      双向关联关系对应的代码:

复制代码

1 public class A
2 {
3       private B b;
4 }
5 
6 public class B
7 { 
8       private A a;
9 }

复制代码

关联的名称

     关联的名称表达了关联的内容,一般使用动宾结构的短语。(例如上面的类图中:work)

     关联命名的原则是该命名是否有助于理解该模型。

关联的角色

     关联中的角色是类的对象在关联中所扮演的角色。例如上图中的:employer(雇佣方),employee(员工:受雇佣的人)。关联的角色会转换为代码。

复制代码

 1  class company
 2     {
 3         public string name;     //公司名称
 4         public person[ ] employee = new person[3]; 
 5      
 6         public company(string cName)  //构造函数
 7         {
 8             name = cName;
 9         }
10        ……
11     }

复制代码

关联的可见性

       用可见性修饰角色名称,以说明角色名称可以在哪些范围内可被访问到。

       代码:

复制代码

 1  class company
 2     {
 3         public string name;     //公司名称
           // "+"
 4         public person[] employee = new person[3]; 
 5      
 6         public company(string cName)  //构造函数
 7         {
 8             name = cName;
 9         }
10        ……
11     }

复制代码

关联的多重性

      多重性是指有多少个对象参与了关联。具体的说,是指类A的一个对象对应类B的对象的个数。

      举个例子说明吧:

      对应代码:   

复制代码

1 public class 狗 
2 { 
3   private 腿[] X = new 腿[4]; 
4 } 
5  
6 public class 腿 
7 { 
8   ……
9 }

复制代码

    (就是上面的数字描述)

     多重性有哪些表示?

  • 1:        表示1个
  • 0..*:    表示任意多个( ≥0)(*可以换成n)
  • *:       表示任意多个( ≥0)
  • 1..*:    表示1个或多个(≥1)
  • 0..1:    表示0个或1个
  • 5..11:   表示5-11个
  • 1,3,8: 表示个1或3个或8个
  • 0,3..8: 表示0个或3-8个

     在Rose中怎么设置?

聚合与组合

       聚合(聚集)与组合(合成、组成)是两种特殊的关联。

       1、聚合(关联的特例)

       聚合的概念:聚合表示类之间的整体与部分的关系。聚合意味着一个类拥有但共享另一个类的对象。

       程序演示:聚合(code/associationB)

复制代码

 1     class cpu
 2     {
 3         public string name; //品牌
 4         public string rate; //主频
 5 
 6         public cpu(string cpuName,string cpuRate)
 7         {
 8             name = cpuName;
 9             rate = cpuRate;
10         }
11     }

复制代码

复制代码

 1  class computer
 2     {
 3         public string buyTime;
 4         public string color;
 5         public cpu mycpu;
 6 
 7         public computer(string computerBuyTime,string computerColor)
 8         {
 9             buyTime = computerBuyTime;
10             color = computerColor;
11         }
12         public void cpuInfo()
13         {
14             Console.WriteLine("该电脑的CPU品牌为:{0}",mycpu.name);
15             Console.WriteLine("该电脑的CPU主频为:{0}", mycpu.rate);
16         }
17     }

复制代码

复制代码

 1     class Program
 2     {
 3         static void Main(string[ ] args)
 4         {
 5             cpu cpuA = new cpu("Intel","2.93");
 6             cpu cpuB = new cpu("AMD","2.61");
 7 
 8             computer computerC = new computer("2008-9-1","黑色");
 9             Console.WriteLine("购买时间为:{0}", computerC.buyTime);
10             Console.WriteLine("颜色为:{0}\n", computerC.color);
11 
12             Console.WriteLine("现在安装第一块CPU");
13             computerC.mycpu = cpuA;  //将cpuA装入该电脑中
14             computerC.cpuInfo();
15 
16             Console.WriteLine("\n现在安装第二块CPU");
17             computerC.mycpu = cpuB;  //将cpuA装入该电脑中
18             computerC.cpuInfo();
19         }
20     }

复制代码

      聚合的符号
      在整体类端加空心菱形。

      当整体类不存在时,不分类仍可能存在。部分类销毁时,整体类也将能够存在。

      关联关系和聚合关系在语法上是没办法区分的,得从语义上才能更好的区分两者的区别。

      2、组成

      组成的概念:组成是一种特殊形式的聚合。

      与聚合相比,它有两个特点:

  •  一个部分类最多只能属于一个整体类
  • 当整体类不存在时,部分类将同时被销毁。

     最容易理解的一个例子就是窗体和文本框,当窗体不存在时,文本框也将不存在。

      组成的符号:

      在整体类端加实心菱形。如图:

聚合与组成的区别

关联与聚合(包括组合)的区别

       关联关系所涉及的两个类是处于同一个层次上的。比如学生和课程就是一种关联关系,而不是聚合关系,因为学生不是有课程组成的。

       聚合关系涉及的两个类处于不平等的层次上,一个代表整体,一个代表部分。比如电脑和显示器、键盘、主板、内存就是聚合关系,因为主板是电脑的组成部分。而键盘等部件不会因为电脑没了,就不存在了。

聚合与组合的区别:

      组合:整体类端的重数必须是1,部分类的重数是任意的。

      聚合:整体类端的重数可以大于1,部分类的重数是任意的。

关联关系的Rose建模

       1、二元关联关系

      2、设置关联名和角色名

      

      3、设置多重性

      4、设置关联的可见性

      5、添加双向关联按钮(工具栏上默认是没有双向关联的按钮的,得自己添加)

       6、聚合:(1)添加关联,并设置关联的名称与角色名

          (2)双击关联线,弹出右窗, 选中Aggregate

          7、组合:(1)添加关联,并设置关联的名称与角色名

        (2)双击关联线,弹出右窗,选中Aggregate和By Value

 

总结

      在介绍关联关系中,又介绍了聚合和组合这两种特殊的关联,在使用的时候一定要注意这两者的区别。容易混淆。不能按字面意义来理解......

      本来打算把类图的四种关系介绍完的,这才发现,就关联关系也是个长篇大论了,写的多了,你也烦,我也烦,LZ不喜欢看太长的文章,不利于理解。

      好了,一起慢慢消化吧.......如果您觉得对您有点帮助,不妨点一下推荐.....

欢迎关注技术公众号:架构师成长营

 

UML类图关系大全(关联、组合聚合、依赖、泛化)
04-14
NULL 博文链接:https://abcity.iteye.com/blog/1740763
UML类图的关联、聚合组合
06-03
UML类图的关联、聚合组合 UML类图的关联、聚合组合
[UML]UML系列——类图class关联关系聚合组合
weixin_34413802的博客
11-13 595
关联的概念       关联用来表示两个或多个类的对象之间的结构关系,它在代码表现为一个类以属性的形式包含对另一个类的一个或多个对象的应用。 程序演示:关联关系(code/assocation)       假设:一个公司只有三名员工:一个员工要么没有工作,要么只能在一个公司工作。(代码简化了,主要说明关联关系)       Person类: 1 class person ...
2024年Python最全UML类图与对应的代码归类总结【软件工程】
最新发布
2401_84688608的博客
04-30 765
🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新。🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
架构师修养 --UML
绿浪的成长
10-12 318
类与类之间由弱到强关系是: 没关系 > 依赖 > 关联 > 聚合 > 组合。 依赖关系 类A使用到类B,这种使用关系是偶然的、临时的、非常弱的,但是B类的变化会影响到A。 在代码层面,类B作为参数在A的方法使用。 场景1 ![依赖关系](https://img-blog.csdnimg.cn/20201012105040126.png#pic_center) 关联关系 是类与类、类与接口之间的强依赖关系,这个依赖关系是长期的,平等的,可以单向、双向。
设计模式之UML(一)类图以及类间关系(泛化 、实现、依赖、关联、聚合组合
IT小智博客
12-07 2006
类图用于描述系统所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。接下来我们就来谈谈类图的组成,在下一篇我们将讨论一下类图之间的关系。 一、类图的组成 1. 普通类 上图就是一个UML的普通类图,从上图我们看出,一个UML通常由三部分组成。 第一部分是类名:每个类都必须有一个名字,类名
UML 类图 所有的关联关系
lihongtai的专栏
07-08 366
继承 指的是Java一个类 (子类) 继承 另外一个类(父类),或者 一个接口(子接口)继承另外一个 接口(父接口); 子类具有父类的所有特性,其本身还可以添加新的特性,接口一样;在Java使用关键字 extends 表示 实现 指Java一个类实现一个接口,或者多个接口,指的是类与接口之间的关系 依赖 这种关系是指,一个类D 使用到另一个类E,而这种关系,具有偶然性,临...
UML的下一步——UML2.0类图
03-03
火龙果软件工程技术心 尽管统一建模语言,也就是UML语言从1997年被承认以来在软件开发者得到普遍认可并且得到...所有这些方面共同促使OMG组织——此组织拥有并进行标准化UML——开始了对UML语言的巨大修改。目前正
UML类图与类的关系详解
01-27
关联又分为一般关联关系聚合关系(Aggregation),合成关系(Composition)。下面我们结合实例理解这些关系。在画类图的时候,理清类和类之间的关系是重点。类的关系有泛化(Generalization)、实现(Realization)...
UML:类图关系总结
01-08
UML类图几种关系的总结,泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖 在UML类图,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition...
UML类图画法及其之间的几种关系
热门推荐
wanmeirongyan100的博客
06-07 4万+
类图,发现类图的画法及其之间的几种关系已经淡忘了很多,所以整理总结一下,有问题的地方大家可以一起讨论下。文章目录如下:类图画法类之间的几种关系:泛化(Generalization)、实现(Realization)、关联(Association)(又分一般关联、聚合(Aggregation)、组合(Composition))、依赖(Dependency)一、类图画法1、 类
[UML] 类图之间的关系 | 1.关联关系
他叫小胖子呐
07-01 5902
[UML] 类图之间的关系 | 1.关联关系 1.关联关系 关联(Association)关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系 在UML类图,用实线连接有关联关系的对象所对应的类,在使用Java、C++和C#等编程语言实现关联关系时,通常将一个类的对象作为另一个类的成员变量 在使用类图表示关联关系时可以在关联线上标注角色名 1.1 双向关联 默认情况下,关联是双向的。 用一条实线表示 例子: 顾客购买商品,并拥有商品 商品可以被卖给某个顾
UML类图的六大关系:关联(单向、双向、自关联)、聚合组合、依赖、继承、实现
qq_46248819的博客
05-22 1万+
一、简介        在UML类图,类之间的关系可以分成:关联(association)、聚合(aggregation)、组合(composition)、依赖(dependency)、泛化(generalization)/继承(inheritance)和实现(realization)。这六种关系如下图所描绘:               上面的关系可以.
类图的关系
我的编程世界
08-25 511
类图涉及的关系有“依赖”、“泛化”、“关联”、“组合”、“聚合”和“实现”等,它们长得还有些相像,于是我总是有些傻傻分不清楚。于是借助这幅图帮助自己梳理一遍它们的用法及区别: 第一组:泛化&实现 鸟属于动物的一种,因此鸟为子类,动物为父类。父类泛化子类,子类继承父类;用实线+三角表示; 同“泛化”长得相像的是“实现”,大雁实现“飞翔”这个接口,用虚线+三角表示;
类图的关联类
每天进步一点点
03-13 1027
https://docs.google.com/open?id=0B-aNSlaQ-ClzdjVFeUJLaU1Td3lteTNLV1pDUTgxdw 点击打开链接
UML类图的4种常用关系(关联,聚合组合,依赖)
T-cog的博客
10-22 1358
关联 Association 表示一类对象对另一类对象之间有联系,如汽车和轮胎、师傅和徒弟、班级和学生等 【UML类图表示】:实线连接 【代码实现】:一个类的对象作为另一个类的成员变量。 聚合 Aggregation 表示整体与部分的关联关系(关联的一种)(生命周期不同),例如汽车发动机是汽车的组成部分,但发动机可以独立存在。 【UML类图表示】:带空心菱形的直线表示(菱形为整体,箭头指向部分) 【代码实现】:成员对象通常作为构造方法、Setter方法或业务方法的参数“注入”整体对象。(并没有直接..
UML类图的关系
weixin_43298884的博客
02-21 522
概述 类图的关系主要有:泛化(Generalization),实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) 泛化(Generalization) 类的继承关系在UML为:泛化(generalize)与实现(realize): 泛化关系,就是类的继承关系,但泛化关系是继承非抽象类 注意:是继承的非抽象类,下图A是基类,B是子类; 比如可以定义A为汽车类,B为SUV;关系即可定义为下图的关系;
UML --类图的关系详解
yuolligeng的专栏
12-03 484
1、一般化关系:标示类与类之间的继承关系,接口与接口之间的继承关系或者类对接口的实现关系。java: extends 、 implements 2、关联关系:类与类之间的联接,它使一个类知道另一个类的属性和方法。java:实例变量。 3、聚合关系:属于关联关系的一种,是强的关联关系聚合是整体和个体之间的关系。java:实例变量 与关联关系区别:前者两个类在同一层次,后者两个类处于不平等的层
UML类图关联关系
E大叔的博客
05-18 1200
1类和接口 1.1 类 类(Class)是指具有相同属性、方法和关系的对象的抽象,它封装了数据和行为,是面向对象程序设计(OOP)的基础,具有封装性、继承性和多态性等三大特性。 类名(Name) 属性(Attribute)格式如下: [可见性]属性名:类型[=默认值] “可见性”表示该属性对类外的元素是否可见, 可见性 代表符号 公有(Public) + 私有(Private) - 受保护(Protected) # 友好(Friendly) ~ 1.2 接口 2 类
UML类图关联关系组合关系、聚合关系的区别是什么
03-30
关联关系:表示不同类之间的联系,是一种对象与对象之间的连通性关系,用一条线表示,箭头可以指示方向。关联关系可以是单向的,也可以是双向的,它们之间没有从属关系,是平等的。 组合关系:是一种强关联关系,表示某个类对象拥有另一个类对象,且后者的生命周期依赖于前者的存在,用实心菱形表示,箭头指向被拥有者。组合关系是一种整体与部分之间的关系,如果整体不存在了,部分也将不存在了。 聚合关系:是一种弱关联关系,表示某个类对象拥有另一个类对象,但后者的生命周期不依赖于前者的存在,用空心菱形表示,箭头指向被拥有者。聚合关系是一种整体与部分之间的关系,但整体的存在不会影响部分的存在。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

分类专栏

  • 产品需求 1篇
  • 存储 3篇
  • 性能测试 16篇
  • 移动开发 11篇
  • python 1篇
  • 微服务 17篇
  • 数据库 44篇
  • LVS负载均衡原理 8篇
  • NoSql 2篇
  • linux 8篇
  • CDN 12篇
  • docker 21篇
  • 架构设计 166篇
  • 分布式 14篇
  • 开发 10篇
  • 数据结构与算法 5篇
  • java 87篇
  • 人工智能 5篇
  • 网络 8篇
  • 创业帮 1篇
  • 程序人生 10篇
  • 缓存 30篇
  • 中间件 9篇
  • Devops 6篇
  • 前端 21篇
  • 安全 31篇
  • C++ 6篇
  • 数据挖掘 6篇
  • 统计分析 8篇
  • 云计算 11篇
  • 自动化测试 3篇
  • Kubernetes 18篇

最新评论

  • 史上最全的CDN内容分发网络实战技巧 -完结

    编程的牛牛: 大佬,图片都被毙了

  • Goolge-Guava Concurrent中的Service

    不带刺仙人球: 写的真不错

  • docker安装fastdfs碰到storage的IP地址映射宿主地址问题

    m0_68402804: 请问一下博主,iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 22122 -d 172.17.0.2 -j SNAT --to 192.168.1.98是在容器内执行还是在宿主机

  • Win10如何切换Administrator账户

    enzymeCat: 牛啊,谢了

  • SpringBoot+MyBatis+PostgreSQL配置

    西门不止会吹雪: 根据参数指定schma

大家在看

  • python数据分析--- ch12-13 python参数估计与假设检验
  • 图书管理系统代码(Java) 219

最新文章

  • java中BigDecimal类的几种舍入模式的详细介绍
  • IPD流程中,PDCP评审的内容、评审要素和评审标准
  • IPD流程中,TR2评审的内容、评审要素和评审标准
2023年18篇
2020年101篇
2019年338篇
2018年131篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司阳江网站优化推广报价曲靖企业网站设计邯郸网站设计公司普洱高端网站设计报价天水模板推广多少钱楚雄关键词排名包年推广哪家好阳江百搜标王价格邯郸高端网站设计公司上海SEO按天扣费随州网站搜索优化报价本溪高端网站设计公司文山网站定制报价平湖网络推广价格贵港百姓网标王价格鹤岗阿里店铺运营价格运城百姓网标王公司秦皇岛模板网站建设多少钱甘孜网站建设设计多少钱光明网站设计报价衢州网站优化推广公司鞍山阿里店铺运营公司仙桃网站优化按天收费公司淮南企业网站建设推荐深圳模板网站建设东营网站推广报价聊城建站报价飞来峡网页设计绵阳网站设计价格海口高端网站设计延安网站优化按天计费价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化