powerdsigner Association Multiplicity
这一篇來告诉一个不容易分辨的关系图式:Association(结合)的各种類型,除了了解它的涵义 外,也让各位可以看图說故事,知道它背后所要表达的意义。 Association结合 Association是用來表达類别彼此之间的关系,这样的关系有很多个涵意,不管是实质上或 是概念上,也就是资讯是否有在兩个類别之间传递。 在PowerDesigner图示上,association是 包含在兩个類别间的线条,然后根据不同的属性关系,再以不同的图示來表达。 我们必须使用图 示看懂association所表达的关系,这样才能强化讀取類别图的速度和意义。
Navigable导览知识服务平台淘知音
假设这里有類别A和類别B,使用PowerDesigner设计association,从類别A拖曳到類 别B,预设的图示就是表达類别A具备讀取或呼叫類别B的能力,用较技术上的說明,就是類 别A具备類别B的類别变數,藉由这个变數去呼叫類别B的函數或是讀取類别B的属性值。 同 时在图示上,你会看到一个箭头在association上,其箭头方向和位置是在類别B的端点,如图 一所示。 在图一的范例,分别有订单主档和订单明细兩个類别,是使用association图示从類别 A拖曳到類别B的结果。 由于订单主档可能会讀取内含的订单明细资料,所以从類别A拖曳到 類别B,也刚好是预设的图示结果。

我们可以针对图一修正更精准一些。 订单主档会讀取订单明细,这是一种navigable(一般 称之为导览)的结果,是一种具备方向性的association图示;反之,假如订单明细需要知道所隸 属的订单主档资料,那由订单明细也要有一个navigable的association,指向订单主档。 要设计 这样的association属性,各位只要开启association的属性视窗,切换到Detail页面,在订单主 档下的Navigable属性,点选使其enable即可。 如图二所示。 各位应该会发现,association的图示,原本订单明细的navigable已经enable,同时有箭头指向订单明细,之后在你设定订单主 档的navigable后,由于双方都互有navigable,最后反而兩端都没有箭头了。

Multiplicity多重性
在图二中,各位应该也会看到Multiplicity这个属性,这是一种數量上的关系,表示引用对 方实例(instance)的數目。 就以这个范例來看,订单主档会引用多个订单明细资料,从最少一个 到多个明细,所以在订单明细上的Multiplicity设定就是1..*;反之,每一个订单明细只会指向一 个订单主档,所以订单主档的Multiplicity,就是1..1,表示最少一个,最多也是一个订单主档。 最后的结果应会如图三所示。

Aggregation聚合和Composition组合 接下來,我们再明确的表达更紧密的关系,也就是aggregation或是composition。 要說明 这样的关系,一定会有一个包含者和被包含者的关聯。 包含者会因需要引用被包含者的资料,包 含者是主动,被包含者是被动。 我们以前述的范例來說,订单主档就是包含者,订单明细就是被 包含者。 接下來解释aggregation和composition。 Aggregation是表示兩个独立的類别,彼此在不 同的領域各自运作,因为需要,彼此在一起工作。 至于composition,则是一种紧密的结合关系, 被包含者无法独立存在,必须有包含者存在;假如包含者消失,则被包含者一定跟着消失,这样 的关系下,被包含者是和包含者同生死。 以前例來說,由于订单明细在没有订单主档存在的情况 下不可能存在,所以订单主档和订单明细就是一种composition的关系。 我们可以开启 association的属性视窗,就在General页面,可以设定这样的关系组合,以订单主档和订单明 细來說,其设定的关系就如图四所示。

最终的图示,应该会如图五所示: 图五:Composition Association

至於 aggregation,我們舉一個例子來說明。例如車輛和輪胎的關係,車輛是包含者,輪胎
是被包含者,兩個結合起來,就可以提供駕駛的功能。可是萬一車輛報廢,則該輪胎可以離開車
輛,而與其他的車輛搭配來繼續使用,所以這樣的關係就是一種 aggregation 的關係。
結論
要清楚分辨 association 關係的各種屬性和圖示,就是這篇最重要表達的目的,尤其是
aggregation 和 composition,最容易為常人混淆。希望在這樣的解說之後,大家對於 Class diagram
所表示的 association 關係,就有正確的觀念以及有共同的解讀能力,這樣就能做到溝通的目的了。
powerdsigner Association Multiplicity的更多相关文章
- 类图和对象图教程-类(Class)、接口(Interface)、协作(collaboration)、依赖关系(Dependency)、泛化关系(Generalization)、关联关系(Association)以及实现关系(Realization)
类图的概念 (转) 一.概述 类图(Class Diagram)是描述类.接口.协作以及它们之间关系的图,用来显示系统中各个类的静态结构.类图是定义其他图的基础,在类图基础上,可以使用状态图.协作图. ...
- UML include、generalization、extend、association
1.别人的说法 转自:http://www.cnblogs.com/shinings/archive/2009/04/21/1440765.html 共性:都是从现有的用例中抽取出公共的那部分信息,作 ...
- 关联,聚合和组合(复合)--Association, Aggregation and Composition
概要 Association, Aggregation and Composition are terms that represent relationships among objects. Th ...
- Association, Composition and Aggregation in UI5, CRM, S/4HANA and C4C
UI5 UI5使用Association和Aggregation描述控件之间的关系. Aggregation:parent和子控件在lifecycle上存在依赖关系: When a ManagedOb ...
- mybatis 一对一与一对多collection和association的使用
在mybatis如何进行一对一.一对多的多表查询呢?这里用一个简单的例子说明. 一.一对一 1.association association通常用来映射一对一的关系,例如,有个类user,对应的实体 ...
- 基于孪生卷积网络(Siamese CNN)和短时约束度量联合学习的tracklet association方法
基于孪生卷积网络(Siamese CNN)和短时约束度量联合学习的tracklet association方法 Siamese CNN Temporally Constrained Metrics T ...
- Hibernate -- A unidirectional one-to-one association on a foreign key
at sometime we usually need to create two tables that one table relate another.Such as a husband onl ...
- Mybatis 高级结果映射 ResultMap Association Collection
在阅读本文章时,先说几个mybatis中容易混淆的地方: 1. mybatis中的列不是数据库里的列而是查询里的列,可以是别名(如 select user_name as userName,这时col ...
- MyBatis关联查询 (association) 时遇到的某些问题/mybatis映射
先说下问题产生的背景: 最近在做一个用到MyBatis的项目,其中有个业务涉及到关联查询,我是将两个查询分开来写的,即嵌套查询,个人感觉这样更方便重用: 关联的查询使用到了动态sql,在执行查询时就出 ...
随机推荐
- (转载) PowerDesigner 生成sql文件
Powerdesigner15-物理模型-导出建表sql语句 博客分类: Powerdesigner Powerdesigner15-物理模型-导出建表sql语句 1.设置哪种数据库导出的sql语句, ...
- 关于tomcat会在url末尾自动追加斜杠(/)
今天,突然发现一个问题, 比如我的请求路径为 http://ip:port/my_project/myapp, 在浏览器中敲入这个地址,然后会显示 http://ip:port/my_project ...
- Linux 指令
cat cdchmod chowncp cut 名称:cat使用权限:所有使用者使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName说明:把档案串连 ...
- 整理一下以前的Html+css3复习笔记
一.html5新特性 常用语义标签:nav footer header section mark 功能标签 video audio iframe canvas(画布和绘图功能) input新ty ...
- mysql 存储过程简介
存储过程类似一个存储在数据库的一个数据库脚本.它类似一个方法,可以批量执行一些数据库的操作. 本文编写一个简单的存储过程来快速了解存储过程. 1.因为存储过程类似编程语言的方法,所以方法中可能会用到 ...
- 介绍开源的.net通信框架NetworkComms框架之八 UDP通信
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 许可是 ...
- golang的第一个deadlock
package main import ( "fmt" "math/rand" ) func push(c chan []int) { ...
- git学习(这个我没有整理,是我不断在学习的过程中,自己总结的,对象是我,不过有问题的,我们可以相互交流)
每次git提交,都会有一个parent指针,指向上一次的commit , 如果合并,master就和hotfix河道一起,就直接删除hotfix就OK 此时,虽然操作一样,大底层实现不一样 ...
- Android 每次访问网络时,都需要判断是否有网络
/** * 在执行网络操作之前判断网络是否链接可用 * * @return true 可用 false 不可用 */ private boolean isOnline() { Connectivity ...
- HDU 3709 Balanced Number
发现只要Σa[i]*i%Σa[i]==0就可以. #include<iostream> #include<cstdio> #include<cstring> #in ...