对UML几种对象关系的理解

【关联关系】

===================================================================

关联关系是一种最简单、最抽象的对象间关系描述。它只是描述了对象A于对象B之间存在一种业务上、概念上的逻辑关系,但是关联关系的双方不包含对方的属性。

【聚合关系】

===================================================================

聚合关系是一种特殊的关联关系,除了具备关联关系的特性之外,还包括了以下的一些规则:

A. 对象A和对象B之间存在一种包含的关系

B. 对象A和对象B之间必有一方为“容器”,另外一方为“元素”。即“whole-part”关系

C. 容器方和元素方对象的生命周期是彼此独立的,并不依赖于对方而存在,也就是说是一

种“松散”的关联。容器和元素可以被独立创建、销毁,容器不存在了不影响元素的存在,元素不存在了容器可以依然存在

D. 容器方可以没有元素,也可以有一个至多个元素

E. 元素方可以“被包含于”一个容器,也可以“被包含于”多个容器

F. 向容器添加元素,或者从容器中移除元素并不影响容器

【组合关系】

===================================================================

组合关系是一种特殊的聚合关系,除了具备关联关系、聚合关系的特性之外,还包括了以下的一些规则:

A. 容器方和元素方对象的生命周期是互相依赖的。即元素依赖于容器而存在,一旦容器不存在了那么元素也就不可能存在。容器必须优先于元素而被创建,元素必须优先于容器而被销毁。

B. 元素方只能“被包含于”一个容器

【举例分析】

===================================================================

A. 关联关系的例子分析:

学生 ------------- 成绩

学生与成绩之间就是一个关联关系,你不能把学生的属性写到成绩对象中去,同理不能把成绩的属性写到学生对象中去,但两者之间确实存在一种业务上的联系,而且是固定的

B. 聚合关系的例子分析:

班级 ------------- 学生 /   汽车 ------------- 配件

班级与学生,汽车与配件之间的关系就是一个聚合关系。首先一个班级可以包含零至多个学生,一部汽车可以包含零(未组装之前)至多个配件。

其次学生可以先被创建,然后创建班级,再向班级中添加,移除学生。配件可以先被创建并保存到仓库,然后再组装成汽车。在班级,汽车对象没有形成之前,学生与配件的对

象可以已经存在(即容器和元素对象的生命周期是独立的)

C. 组合关系的例子分析:

基金账户 ------------- 单笔交易

基金账户与单笔交易就是一个组合关系。首先单笔交易必须依赖于基金账户而存在,也就是说我们必须先创建基金账户这个“容器方”,之后才能够创建单笔交易这个“元素方”,然后再把单笔交易挂到(添加)基金账户下。没有基金账户预先存在,我们不能执行单笔交易。我们不能先创建单笔交易,再创建基金账户,然后再挂靠交易。

这一点就不同于上面的班级与学生,汽车与配件的存在关系了。

其次单笔交易只能挂靠在某一个特定的基金账户下,也就是说元素方只能“被包含于一个”容器

【延伸思考】

===================================================================

在对象和对象之间的关系中,有时会提到“依赖”关系,即对象A依赖于对象B而完成某项操作,那么这种关系是不是也属于“关联关系”呢?

个人认为这不属于一种“关联关系”。因为上面我们提到的三种关系中,每一种关系除了是固定的关系之外,还有一个重要的特点就是这些关系是需要“被持久化,被保存”起来的。

而依赖关系只是对象和对象之间的引用(或称调用)关系,这种关系只发生在运行期间而不是业务上,概念上的联系,并不需要被保存。所以“依赖关系”并不属于UML中的对象关系。

时间: 2024-10-07 20:23:32

对UML几种对象关系的理解的相关文章

大话UML中类之间的关系

关于uml的内容在大学的时候学习过,感觉是花拳绣腿的一些知识,想用但是限于自己的认知和经验,实在是很难运用,到了工作的时候,感觉不需要这些工作也照样能做得很出色,过度的自信就这样维持了几年,等到积累了一定的项目经验,对于设计的关注程度也逐渐提升,有时候想表达一些设计的思想,自己DIY的图表可能只有自己能够看懂,看一些设计思想中的图也是似懂非懂,看来刚学外语也是不够的,还得学习UML,无规矩不成方圆嘛,让UML来作为我们设计中的思想转化器. 说起UML中类之间的关系,大体有以下几类 继承关系(Ge

<十>面向对象分析之UML核心元素之关系

关系        --->在UML中关系是非常重要的语义,它抽象出对象之间的联系,让对象构成特定的结构.        一,关联关系(association)         --->关联关系是用一条直线表示的.        --->描述不同类的对象之间的结构关系.它在一段时间内将多个类的实例链接在一起,这与依赖关系是不同的.依赖关系通常表示两个实例之间的临时关联关系.        --->单行关联关系,A知道B的存在,B不知道A的存在.比如UML建模中,参与者知道用例的存在

详解PHP的Laravel框架中Eloquent对象关系映射使用_php技巧

零.什么是 EloquentEloquent 是 Laravel 的 'ORM',即 'Object Relational Mapping',对象关系映射.ORM 的出现是为了帮我们把对数据库的操作变得更加地方便. Eloquent 让一个 'Model类' 对应一张数据库表,并且在底层封装了很多 'function',可以让 Model 类非常方便地调用. 来看一段如下代码: <?php class Article extends \Eloquent { protected $fillable

UML中的依赖关系

问题描述 我是小白,刚学设计模式,被一些概念性问题困住了UML中的依赖关系说是如果有其中一个类变化,有可能会引起另一个类的变化这个变化我就不明白了,是类的设计(比如增加属性,修改方法)变化呢,还是类的对象变化啊? 解决方案 很久没看资料了.印象中,UML的类的关系有3种:1.继承.实现关系: 这个不用多说了 (UML图中的空心.或实心三角形) (Java代码中的extends.implements)2.组合.聚合关系: 某个对象是另一个对象的一部分. 如果容器对象 对子对象的生命周期负责,那么是

UML九种图

  1.用例图(use case diagrams) [概念]描述用户需求,从用户的角度描述系统的功能 [描述方式]椭圆表示某个用例:人形符号表示角色 [目的]帮组开发团队以一种可视化的方式理解系统的功能需求 [用例图]  2.静态图     类图(class  diagrams)  [概念]显示系统的静态结构,表示不同的实体是如何相关联的 [描述方式]三个矩形   [目的]表示一个逻辑类或实现类,逻辑类通常是用户的业务所涉及的事物:实现类是程序员处理的实体 [类图]      对象图(obje

VB.Net中文教程(6) 母子对象关系

对象|教程|中文 1. 特殊Whole-Part关系 ---- 母子对象关系 大家已经熟悉父子类别关系﹐也就是「继承」关系了.于此说明另一种常见关系── 母子对象.一般称之为「组合/部分」关系.日常生活中﹐处处可见到这种母子对象.例如﹐客厅内有沙发.桌子.椅子等等.客厅是母对象﹐沙发.桌子.椅子是子对象.再如计算机屏幕上的窗口内有按钮.选择表.对话盒等等.窗口是母对象﹐按钮.选择表是子对象.于此将说明如何建立母子对象关系.有了关系﹐母子就能互相沟通了.母子对象之间﹐如何沟通呢﹖也就是说﹐母对象如

.NET 的对象关系持久化机制(1)

对象 翻译的目的一是锻炼E文,二是为学些东西,如果这是有任何翻译问题,请通知我一声(mailto:wonderf2100@sina.com 或者 http://wonderf.blogone.net/) 由于本人E文有限,错误还请包涵. 原文:http://www.15seconds.com/issue/040112.htm 关键字:ORP ObjectSpaces 对象 关系 持久 .NET 的对象关系持久化机制 第一章 关于一种新的数据访问方式 介绍在几个星期前,.NET对象关系持久化(ob

Hibernate及JPA 对象关系映射的简单映射策略

简单映射 近年来 ORM(Object-Relational Mapping,对象关系映射,即实体对象和数据库表的映射)技术市场 热闹非凡,各种各样的持久化框架应运而生,其中影响最大的是 Hibernate 和 Toplink.Sun 公司在充分吸收现有的优秀 ORM 尤其是 Hibernate 框架设计思想的基础上,制定了新的 JPA(Java Persistence API)规范,对现在乱象丛生的持久 化市场带来一个标准,大有统一持久化市场的气势.JPA 是通过 JDK5.0 注解或 XML

Hibernate及JPA对象关系映射:关联关系映射策略

关联关系映射 关联关系映射,是映射关系中比较复杂的一种映射关系,总的说来有一对一.一对多和多对多几种 关系.细分起来他们又有单向和双向之分.下面我们逐一介绍一下. 单向 OneToOne 单向一对一是关联关系 映射中最简单的一种,简单地说就是可以从关联的一方去查询另一方,却不能反向查询.我们用下面的例子来举例说明,清 单 1 中的 Person 实体类和清单 2 中的 Address 类就是这种单向的一对一关系,我们可以查询一个 Person 的对应的 Address 的内容,但是我们却不能由一