这一篇來告诉一个不容易分辨的关系图式: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. leetcode-188 买卖股票4

    题目 给定一个数组表示股票每天的价格,最多交易k次,且手上最多只能拥有一支股票(即只能先卖出手上现有的股票再去购买新的股票),求最大的收益.     题目链接:买卖股票4     开始思路不清楚,参考 ...

  2. android应用锁之监听应用前后台切换方式

    今天在做技术总结,顺便就把知识共享,个人崇尚分享. 通过以下方式来监听是不是发生了应用的前后台切换: 1. android api 10 – 15 通过ActivityManager register ...

  3. mysql数据库与oracle数据库的切换

    1.从mysql数据库中导出ambition(数据库名)结构和数据的ambition.sql文件. 2.将ambition.sql用Power Designer转换成mysql数据模型. 给模型起个名 ...

  4. C# Enum 简易权限设计 使用FlagsAttribute属性

    基本權限設計: /// <summary> /// 權限列舉 /// </summary> [FlagsAttribute] public enum Permissions { ...

  5. iOS开发Swift篇—(十)方法

    iOS开发Swift篇—(十)方法 一.简单说明 跟其他面向对象语言一样,Swift中的方法可以分为2大类: (1)实例方法(Instance Methods) 在OC中,实例方法以减号(-)开头 ( ...

  6. Zabbix点滴

    [ZABBIX需试验的项] 1. 手工设置ITEM, 采用descr为依据值,用SNMP取流量 2. 通过aggregate item类型,设置取虚拟机数量的值(描绘出虚拟机的增长与下降曲线) [20 ...

  7. python基础教程-第二章-列表和元组

    本章将引入一个新的概念,:数据结构.数据结构是通过某种方式(例如对元素进行编号)组织在 一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其他数据结构.在python中,最基本的数据结构 ...

  8. offset client scroll

    offsetHeight offsetWidth返回为元素在屏幕上显示大小,不包括外边距 clientHeight clientWidht 和上面两个类似,不同的是,这两个不包括外边距高度. < ...

  9. 网站优化之Asp.Net篇<一>

    一>禁用viewstate. 二>禁用动态编译.访问一个Aspx文件时 会编译为一个新的类放在C盘Asp.net临时文件夹下.下次请求不会再编译,会把先前的编译结果返回. 任何对Asp.n ...

  10. XCode6.0的iOS免证书真机测试方法(MAC及黑苹果均有效)

    目前在XCode上开发的iOS程序只能在模拟器Simulator中运行,如果要放到真机上测试,需要苹果官方认证的开发者账号,购买开发者证书iDP,99美金一年啊!!! 作为刚开始学习iOS编程的菜鸟, ...