<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>简单生活@NET &#187; 设计</title>
	<atom:link href="http://lee.kometo.com/archives/tag/%e8%ae%be%e8%ae%a1/feed" rel="self" type="application/rss+xml" />
	<link>http://lee.kometo.com</link>
	<description>正确的判断来自经验，但经验往往来自错误的判断</description>
	<lastBuildDate>Mon, 06 Feb 2012 02:26:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>UML关系定义的解析及思维导向图</title>
		<link>http://lee.kometo.com/archives/255</link>
		<comments>http://lee.kometo.com/archives/255#comments</comments>
		<pubDate>Mon, 05 Jan 2009 12:51:32 +0000</pubDate>
		<dc:creator>Emeric lee</dc:creator>
				<category><![CDATA[WEB应用开发]]></category>
		<category><![CDATA[深入PHP]]></category>
		<category><![CDATA[uml]]></category>
		<category><![CDATA[设计]]></category>

		<guid isPermaLink="false">http://lee.kometo.com/?p=255</guid>
		<description><![CDATA[对UML的关系定义一直有点感觉混乱，这是一天的学习总结，主要成果是下面的这张图，这张图没有按照一般的 Has a / Use a / Is a的3类法进行分类，而是把 Has a 作为了 Use a的一个子集来分析。因为没有看到任何其他参考资料使用了这种方式，所以这种方法未必完全准确，仅供参考。 引用解析 UML类图中5中关系的辨析(修订) 问题域、解域混合，编译时、运行时混合是这5种关系的特点。 关系 用词 问题域 解 域 编译时 运行时 Dependency uses a 短暂的或者对非业务类的（如工具类）依赖 作用域在方法内部的reference（可能是方法参数或方法内部声明的 reference ） 作用域在方法内部的reference（可能是方法参数或方法内部声明的 reference ） 短暂的 Association has a 相对固定的，对业务类的依赖 类属性 类属性 持续一定时间的 Aggregation owns but may share owns but may share 类属性 类属性 生命线可能相关联 Composition [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">对UML的关系定义一直有点感觉混乱，这是一天的学习总结，主要成果是下面的这张图，这张图没有按照一般的 <strong>Has a </strong>/ <strong>Use a</strong> / <strong>Is a</strong>的3类法进行分类，而是把<strong> Has a</strong> 作为了<strong> Use a</strong>的一个子集来分析。因为没有看到任何其他参考资料使用了这种方式，所以这种方法未必完全准确，仅供参考。</p>
<p><br class="spacer_" /></p>
<div id="attachment_259" class="wp-caption aligncenter" style="width: 510px"><a href="http://lee.kometo.com/wp-content/uploads/2009/01/classdiagram1.jpg"><img class="size-medium wp-image-259" title="UML" src="http://lee.kometo.com/wp-content/uploads/2009/01/classdiagram1-500x327.jpg" alt="UML关系解析思维导向图" width="500" height="327" /></a><p class="wp-caption-text">UML关系解析思维导向图</p></div>
<p><br class="spacer_" /></p>
<p><span id="more-255"></span></p>
<h4>引用解析</h4>
<blockquote><p><a href="http://blog.sina.com.cn/s/blog_4c4d6e740100buag.html" target="_blank">UML类图中5中关系的辨析(修订)</a></p>
<p>问题域、解域混合，编译时、运行时混合是这5种关系的特点。<br id="x514" /></p>
<table border="0" cellspacing="0" cellpadding="3">
<thead>
<tr id="ci05">
<td id="ali6" width="16%">关系<br id="znji" /></td>
<td id="ku3o" width="16%">用词<br id="drrt" /></td>
<td id="r-o2" width="16%">问题域<br id="pmls" /></td>
<td id="h2uh" width="16%">解 域<br id="lnr5" /></td>
<td id="mgxk" width="16%">编译时<br id="i1tn" /></td>
<td id="ifkl" width="16%">运行时<br id="abk3" /></td>
</tr>
</thead>
<tbody id="gn6t">
<tr id="fugi">
<td id="pw8q" width="16%">Dependency</td>
<td id="zy65" width="16%">uses a<br id="xia2" /></td>
<td id="smi7" width="16%">短暂的或者对非业务类的（如工具类）依赖<br id="rhnx" /></td>
<td id="g6n1" width="16%">作用域在方法内部的reference（可能是方法参数或方法内部声明的 reference ）</td>
<td id="idpi" width="16%">作用域在方法内部的reference（可能是方法参数或方法内部声明的 reference ）</td>
<td id="zwlx" width="16%">短暂的<br id="ky1s" /></td>
</tr>
<tr id="swos">
<td id="zh-g" width="16%">Association</td>
<td id="s76y" width="16%">has a<br id="fb-m" /></td>
<td id="jcxz" width="16%">相对固定的，对业务类的依赖<br id="z4iz" /></td>
<td id="ouu-" width="16%">类属性</td>
<td id="g333" width="16%">类属性</td>
<td id="io_p" width="16%">持续一定时间的<br id="mrc9" /></td>
</tr>
<tr id="m16m">
<td id="cze4" width="16%">Aggregation</td>
<td id="srd2" width="16%">owns but may share<br id="k-0q" /></td>
<td id="k8.i" width="16%">owns but may share</td>
<td id="chou" width="16%">类属性</td>
<td id="w6pv" width="16%">类属性</td>
<td id="z5l_" width="16%">生命线可能相关联<br id="dfpd" /></td>
</tr>
<tr id="ft9q">
<td id="k4bs" width="16%">Composition</td>
<td id="hm1y" width="16%">is part of<br id="utr8" /></td>
<td id="z9sv" width="16%">is part of</td>
<td id="ic26" width="16%">类属性</td>
<td id="k9yt" width="16%">类属性</td>
<td id="cts-" width="16%">生命线总是关联<br id="mo_8" /></td>
</tr>
<tr id="evfk">
<td id="kq9z" width="16%">Generalization</td>
<td id="yj35" width="16%">is a type of<br id="a-2c" /></td>
<td id="sd:n" width="16%">is a type of</td>
<td id="s-8d" width="16%">继承<br id="o_xb" /></td>
<td id="byr0" width="16%">继承<br id="ugne" /></td>
<td id="rp_o" width="16%"><br id="n2o4" /></td>
</tr>
</tbody>
</table>
</blockquote>
<h4>引用解析</h4>
<blockquote>
<div class="content">
<p><a href="http://www.koyoz.com/blog/?action=show&amp;id=108" target="_blank">UML系列学习之——关系定义</a></p>
<p>uml定义的关系主要有六种：依赖、类属、关联、实现、聚合和组合。下面对其定义和表示方法逐一说明。</p>
<p>依赖 （Dependency）：元素A的变化会影响元素B，但反之不成立，那么B和A的关系是依赖关系，B依赖A；类属关系和实现关系在语义上讲也是依赖关 系，但由于其有更特殊的用途，所以被单独描述。uml中用带箭头的虚线表示Dependency关系，箭头指向被依赖元素。</p>
<p>类属（Generalization）：通常所说的继承（特殊个体 is kind of 一般个体）关系，不必多解释了。uml中用带空心箭头的实线线表示Generalization关系，箭头指向一般个体。</p>
<p>实现（Realize）：元素A定义一个约定，元素B实现这个约定，则B和A的关系是Realize，B realize A。这个关系最常用于接口。uml中用空心空心箭头和虚线表示Realize关系，箭头指向定义约定的元素。</p>
<p>关联（Association）：元素间的结构化关系，是一种弱关系，被关联的元素间通常可以被独立的考虑。uml中用实线表示Dependency关系，箭头指向被依赖元素。</p>
<p>聚合（Aggregation）：关联关系的一种特例，表示部分和整体（整体 has a 部分）的关系。uml中用带空心菱形头的实线表示Aggregation关系，菱形头指向整体。</p>
<p><br class="spacer_" /></p>
<p>组 合（Composition）：组合是聚合关系的变种，表示元素间更强的组合关系。如果是组合关系，如果整体被破坏则个体一定会被破坏，而聚合的个体则可 能是被多个整体所共享的，不一定会随着某个整体的破坏而被破坏。uml中用带实心心菱形头的实线表示Composition关系，菱形头指向整体。</p>
<p><span style="color: #000000;"><strong>关系 </strong><span style="display: none;"> J+m1d\lBu </span><br />
 </span></p>
<p><span style="color: #000000;">后面的例子将针对某个具体目的来独立地展示各种关系。虽然语法无误，但这些例子可进一步精炼，在它们的有效范围内包括更多的语义。<span style="display: none;"> xE- �_Fv9 </span><span style="display: none;">l_\9J913 </span> <br />
 </span></p>
<p><span style="color: #000000;"><strong>依赖（Dependency） </strong><span style="display: none;"> &gt;  1=]. </span><br />
 </span></p>
<p><span style="color: #000000;">实体之间一个“使用”关系暗示一个实体的规范发生变化后，可能影响依赖于它的其他实例（<strong>图D</strong>）。 更具体地说，它可转换为对不在实例作用域内的一个类或对象的任何类型的引用。其中包括一个局部变量，对通过方法调用而获得的一个对象的引用（如下例所 示），或者对一个类的静态方法的引用（同时不存在那个类的一个实例）。也可利用“依赖”来表示包和包之间的关系。由于包中含有类，所以你可根据那些包中的 各个类之间的关系，表示出包和包的关系。</span></p>
<p style="text-align: center;"><span style="color: #000000;">图D</span></p>
<p style="text-align: center;"><span style="color: #000000;"><img style="width: 470px;" src="http://www.uml.org.cn/oobject/images/image004.gif" alt="" width="543" height="153" /></span></p>
<p><span style="color: #000000;"><span style="display: none;"> MB+a?u</span><strong>关联（Association）</strong><span style="display: none;"> Sb^o`~ Eh </span> <br />
 </span></p>
<p><span style="color: #000000;">实体之间的一个结构化关系表明对象是相互连接的。箭头是可选的，它用于指定导航能力。如果没有箭头，暗示是一种双向的导航能力。在Java中，关联（<strong>图E</strong>） 转换为一个实例作用域的变量，就像图E的“Java”区域所展示的代码那样。可为一个关联附加其他修饰符。多重性（Multiplicity）修饰符暗示 着实例之间的关系。在示范代码中，Employee可以有0个或更多的TimeCard对象。但是，每个TimeCard只从属于单独一个 Employee。</span></p>
<p style="text-align: center;"><span style="color: #000000;">图E</span></p>
<p style="text-align: center;"><span style="color: #000000;"><img style="width: 470px;" src="http://www.uml.org.cn/oobject/images/image005.gif" alt="" width="543" height="153" /></span></p>
<p><span style="color: #000000;"><strong>聚合（Aggregation） </strong><span style="display: none;"> {  a_&amp;L </span><br />
 </span></p>
<p><span style="color: #000000;">聚合（<strong>图F</strong>）是关联的一种形式，代表两个类之间的整体/局部关系。聚合暗示着整体在概念上处于比局部更高的一个级别，而关联暗示两个类在概念上位于相同的级别。聚合也转换成Java中的一个实例作用域变量。<span style="display: none;"> 7MIrrhk </span> <br />
 <span style="display: none;"> yC7lR#N8j0 </span> <br />
 关联和聚合的区别纯粹是概念上的，而且严格反映在语义上。聚合还暗示着实例图中不存在回路。换言之，只能是一种单向关系。</span></p>
<p style="text-align: center;"><span style="color: #000000;">图F</span></p>
<p style="text-align: center;"><span style="color: #000000;"><img style="width: 470px;" src="http://www.uml.org.cn/oobject/images/image006.gif" alt="" width="543" height="153" /></span></p>
<p align="left"><span style="color: #000000;"><span style="display: none;"> V`}u:t7r </span><span style="display: none;">xn	a</span><strong>合成（Composition） </strong><span style="display: none;"> {/i&amp;o </span><br />
 </span></p>
<p><span style="color: #000000;">合成 （<strong>图G</strong>） 是聚合的一种特殊形式，暗示“局部”在“整体”内部的生存期职责。合成也是非共享的。所以，虽然局部不一定要随整体的销毁而被销毁，但整体要么负责保持局 部的存活状态，要么负责将其销毁。局部不可与其他整体共享。但是，整体可将所有权转交给另一个对象，后者随即将承担生存期职责。</span></p>
<p><span style="color: #000000;">Employee和TimeCard的关系或许更适合表示成“合成”，而不是表示成“关联”。</span></p>
<p style="text-align: center;"><span style="color: #000000;">图G</span></p>
<p style="text-align: center;"><span style="color: #000000;"><img style="width: 470px;" src="http://www.uml.org.cn/oobject/images/image007.gif" alt="" width="543" height="153" /></span></p>
<p align="left"><span style="color: #000000;"><strong>泛化（Generalization） </strong><span style="display: none;"> _%	i!LyG </span><br />
 </span></p>
<p><span style="color: #000000;">泛化（<strong>图H</strong>）表示一个更泛化的元素和一个更具体的元素之间的关系。泛化是用于对继承进行建模的UML元素。在Java中，用<em>extends</em>关键字来直接表示这种关系。</span></p>
<p style="text-align: center;"><span style="color: #000000;">图H</span></p>
<p style="text-align: center;"><span style="color: #000000;"><img style="width: 470px;" src="http://www.uml.org.cn/oobject/images/image008.gif" alt="" width="543" height="153" /></span></p>
<p align="left"><strong><span style="color: #000000;"><span style="display: none;"> = oTj3+7 </span>实现（Realization）<span style="display: none;"> 3\K;y&gt;NK </span> <br />
 </span></strong></p>
<p><span style="color: #000000;">实例（<strong>图I</strong>）关系指定两个实体之间的一个合同。换言之，一个实体定义一个合同，而另一个实体保证履行该合同。对Java应用程序进行建模时，实现关系可直接用<em>implements</em>关键字来表示。</span></p>
<p style="text-align: center;"><span style="color: #000000;">图I</span></p>
<p style="text-align: center;"><span style="color: #000000;"><img style="width: 470px;" src="http://www.uml.org.cn/oobject/images/image009.gif" alt="" width="543" height="153" /></span></p>
</div>
</blockquote>
<h4>引用解析1</h4>
<blockquote><p><span style="font-family: Verdana;">常见的关系有：<strong>一般化关系（Generalization）</strong>，<strong>关联关系（Association）</strong>，聚合关系（Aggregation），合成关系（Composition），<strong>依赖关系（Dependency）</strong>。</span><span style="font-family: Verdana;"> 其中，聚合关系（Aggregation），合成关系（Composition）属于关联关系（Association）。</span></p>
<p><span style="font-family: Verdana;"> 一般关系表现为继承或实现关系(is a)，关联关系表现为变量(has a )，依赖关系表现为函数中的参数(use a)。</span></p>
<p><span style="font-family: Verdana;"> 一般化关系：表示为类与类之间的继承关系，接口与接口之间的继承，类对接口的实现关系。<br />
 表示方法： 用一个空心箭头＋实线，箭头指向父类。或空心箭头＋虚线，如果父类是接口。</span></p>
<p><span style="font-family: Verdana;"> 关联关系：类与类之间的联接，它使一个类知道另一个类的属性和方法。<br />
 表示方法：用 实线＋箭头， 箭头指向被使用的类。</span></p>
<p><span style="font-family: Verdana;"> 聚合关系：是关联关系的一种，是强的关联关系。聚合关系是整体和个体的关系。关联关系的两个类处于同一层次上，啊聚合关系两个类处于不同的层次，一个是整体，一个是部分。<br />
 表示方法：空心菱形＋实线＋箭头，箭头指向部分。</span></p>
<p><span style="font-family: Verdana;"> 合成关系：是关联关系的一种，是比聚合关系强的关系。它要求普通的聚合关系中代表整体的<a href="http://www.itisedu.com/phrase/200603090845215.html" target="_new"><span style="color: #0000ff;"><span style="text-decoration: underline;">对象</span></span></a>负责代表部分的对象的生命周期，合成关系不能共享。<br />
 表示方法：实心菱形＋实线＋箭头，</span></p>
<p><span style="font-family: Verdana;"> 依赖关系：是类与类之间的连接，表示一个类依赖于另一个类的定义。例如如果A依赖于B，则B体现为局部变量，方法的参数、或静态方法的调用。<br />
 表示方法：虚线＋箭头</span></p>
<p><br class="spacer_" /></p>
</blockquote>
<h4>引用解析2</h4>
<blockquote><p>1依赖：最弱的关系，A依赖B，就是说A的声明或者实现必须include B类的头文件。</p>
<p>2关联：在设计模式中叫做‘相识’。具有这种关系的两个类彼此没有拥有关系，并且互相之间没有创建和销毁的责任，只是存在某种调用关系。</p>
<p>3聚集：和关联比较想象，A聚集B的确切含义指：A类的某个成员是B类实例的指针，B类对象实例不是在构造A对象时隐含构造的，必须通过其它途径构造，但是在A类对象析构的时候必须析构B类对象实例。</p>
<p>4包含：实际上是值聚集，A包含B的确切含义指：A类的某个成员是B类的对象实例，A类构造时同时构造B类，A类析构时也必须析构B类。</p>
<p>5继承：较容易理解。</p>
</blockquote>
<h4>参考资料</h4>
<ul>
<li><a href="http://www.koyoz.com/blog/?action=show&amp;id=108" target="_blank">UML系列学习之——关系定义 <br />
 </a></li>
<li><a href="http://fluagen.blog.51cto.com/146595/46634" target="_blank">http://fluagen.blog.51cto.com/146595/46634</a></li>
<li><a href="http://www.koyoz.com/blog/?action=show&amp;id=108" target="_blank">UML系列学习之——关系定义</a></li>
</ul>
<p style="text-align: center;"><strong><span style="color: #ff6600;">这是一个Beta版的文档，随时可能会更新和完善。</span><br />
 </strong></p>
]]></content:encoded>
			<wfw:commentRss>http://lee.kometo.com/archives/255/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

