这一篇來告诉一个不容易分辨的关系图式: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的更多相关文章

  1. 类图和对象图教程-类(Class)、接口(Interface)、协作(collaboration)、依赖关系(Dependency)、泛化关系(Generalization)、关联关系(Association)以及实现关系(Realization)

    类图的概念 (转) 一.概述 类图(Class Diagram)是描述类.接口.协作以及它们之间关系的图,用来显示系统中各个类的静态结构.类图是定义其他图的基础,在类图基础上,可以使用状态图.协作图. ...

  2. UML include、generalization、extend、association

    1.别人的说法 转自:http://www.cnblogs.com/shinings/archive/2009/04/21/1440765.html 共性:都是从现有的用例中抽取出公共的那部分信息,作 ...

  3. 关联,聚合和组合(复合)--Association, Aggregation and Composition

    概要 Association, Aggregation and Composition are terms that represent relationships among objects. Th ...

  4. Association, Composition and Aggregation in UI5, CRM, S/4HANA and C4C

    UI5 UI5使用Association和Aggregation描述控件之间的关系. Aggregation:parent和子控件在lifecycle上存在依赖关系: When a ManagedOb ...

  5. mybatis 一对一与一对多collection和association的使用

    在mybatis如何进行一对一.一对多的多表查询呢?这里用一个简单的例子说明. 一.一对一 1.association association通常用来映射一对一的关系,例如,有个类user,对应的实体 ...

  6. 基于孪生卷积网络(Siamese CNN)和短时约束度量联合学习的tracklet association方法

    基于孪生卷积网络(Siamese CNN)和短时约束度量联合学习的tracklet association方法 Siamese CNN Temporally Constrained Metrics T ...

  7. 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 ...

  8. Mybatis 高级结果映射 ResultMap Association Collection

    在阅读本文章时,先说几个mybatis中容易混淆的地方: 1. mybatis中的列不是数据库里的列而是查询里的列,可以是别名(如 select user_name as userName,这时col ...

  9. MyBatis关联查询 (association) 时遇到的某些问题/mybatis映射

    先说下问题产生的背景: 最近在做一个用到MyBatis的项目,其中有个业务涉及到关联查询,我是将两个查询分开来写的,即嵌套查询,个人感觉这样更方便重用: 关联的查询使用到了动态sql,在执行查询时就出 ...

随机推荐

  1. Head First 设计模式 --6 命令模式

    命令模式:将"请求"封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象.命令模式也支持可撤销的操作.用到的原则:1.封装变化2.组合优于继承3.针对接口编程,不能针对实现 ...

  2. Evolutionary Computing: 4. Review

    Resource:<Introduction to Evolutionary Computing> 1. What is an evolutionary algorithm? There ...

  3. junit基础篇、中级篇-实例代码

    学习文章: http://blog.csdn.net/andycpp/article/details/1327147 http://wenku.baidu.com/link?url=C27gDEj0l ...

  4. alter table的用法

    在数据库开发过程中,除了用得最多的数据库查询外,我们有时也需要去修改数据表的定义,比如在已存在的数据表中新增列和删除列等.这篇文章就总结一下alter table语句的用法. 示例代码如下. USE ...

  5. iOS开发UI篇—Quartz2D使用(绘图路径)

    iOS开发UI篇—Quartz2D使用(绘图路径) 一.绘图路径 A.简单说明 在画线的时候,方法的内部默认创建一个path.它把路径都放到了path里面去. 1.创建路径  cgmutablepat ...

  6. Windows Server 2003 Sp2 下无法安装SQL Server 2008 Management Studio Express问题

    Windows Server 2003 Sp2 下无法安装SQL Server 2008 Management Studio Express问题钉子 发表于 2010-5-22 1:42:51问题描述 ...

  7. C#面向对象学习笔记概要

    1.面向对象不是取代面向过程的. 2.面向对象的三个特性:封装.继承.多态. 3.字段.方法.属性(后面讲)都可以叫做类的成员,他们都需要定义访问级别.访问级别的用处在于控制成员在哪些地方可以被访问, ...

  8. 用qpython3写一个最简单的发送短信的程序

    到目前为止并没有多少手机应用是用python开发的,不过qpython可以作为一个不错的玩具推荐给大家来玩. 写一个最简单的发送短信的程序,代码如下: #-*-coding:utf8;-*- #qpy ...

  9. flexslider

    flexslider是一个出色的jquery滑动切换插件,支持主流浏览器,并有淡入淡出效果.适合初级和高级网页设计师. 查询了网上资料  总结一下flexslider属性 $(function(){ ...

  10. ubuntu下搭建samba服务器

    samba是用于linux和windows下文件共享的协议 首先,更新源并安装samba sudo apt-get update sudo apt-get install samba 然后创建一个共享 ...