﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-永赫空间-随笔分类-UML</title><link>http://www.blogjava.net/lsshap/category/42775.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 18 Nov 2009 01:48:34 GMT</lastBuildDate><pubDate>Wed, 18 Nov 2009 01:48:34 GMT</pubDate><ttl>60</ttl><item><title>关联、组合、聚合、依赖关系比较 </title><link>http://www.blogjava.net/lsshap/archive/2009/11/18/302756.html</link><dc:creator>永赫</dc:creator><author>永赫</author><pubDate>Wed, 18 Nov 2009 01:03:00 GMT</pubDate><guid>http://www.blogjava.net/lsshap/archive/2009/11/18/302756.html</guid><wfw:comment>http://www.blogjava.net/lsshap/comments/302756.html</wfw:comment><comments>http://www.blogjava.net/lsshap/archive/2009/11/18/302756.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lsshap/comments/commentRss/302756.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lsshap/services/trackbacks/302756.html</trackback:ping><description><![CDATA[&nbsp; 类之间的关系<span style="font-family: 宋体">种类：</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US"> Generalization(</span><span style="font-family: 宋体">泛化</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">)</span><span style="font-family: 宋体">，</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">Dependency(</span><span style="font-family: 宋体">依赖关系</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">)</span><span style="font-family: 宋体">、</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">Association(</span><span style="font-family: 宋体">关联关系</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">)</span><span style="font-family: 宋体">、</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">Aggregation(</span><span style="font-family: 宋体">聚合关系</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">)、</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">Composition(</span><span style="font-family: 宋体">合成关系</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">)</span><span style="font-family: 宋体">。<br />
<span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; 其中</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">Aggregation(</span><span style="font-family: 宋体">聚合关系</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">)</span><span style="font-family: 宋体">、</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">Composition(</span><span style="font-family: 宋体">合成关系</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">)</span><span style="font-family: 宋体">属于</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">Association(</span><span style="font-family: 宋体">关联关系</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">)</span><span style="font-family: 宋体">，是特殊的</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">Association</span><span style="font-family: 宋体">关联关系。<span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">Generalization(</span><span style="font-family: 宋体">泛化</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">)</span><span style="font-family: 宋体">表现为继承或实现关系</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">(is a)</span><span style="font-family: 宋体">。具体形式为类与类之间的继承关系，接口与接口之间的继承关系，类对接口的实现关系。<br />
</span></span></span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US"><O:P>
<div align="left"><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/tinysun/isa.jpg" /><br />
&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">Association</span><span style="font-family: 宋体">关联 系表现为变量</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">(has a )</span><span style="font-family: 宋体">。类与类之间的联接，它使一个类知道另一个类的属性和方法。例如如果</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">A</span><span style="font-family: 宋体">依赖于</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">B</span><span style="font-family: 宋体">，则</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">B</span><span style="font-family: 宋体">体现为</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">A</span><span style="font-family: 宋体">的全局变量。关联关系有双向关联和单向关联。双向关联：两个类都知道另一个类的公共属性和操作。单向关联：只有一个类知道另外一个类的公共属性和操作。大多数关联应该是单向的，单向关系更容易建立和维护，有助于寻找可服用的类。<br />
<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/tinysun/association.jpg" /><br />
<br />
</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">&nbsp;&nbsp;&nbsp; Aggregat ion(</span><span style="font-family: 宋体">聚合关系</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">) </span><span style="font-family: 宋体">是关联关系的一种，是强的关联关系。聚合关系是整体和个体的关系。普通关联关系的两个类处于同一层次上，而聚合关系的两个类处于不同的层次，一个是整体，一个是部分。同时，是一种弱的&#8220;拥有&#8221;关系。体现的是</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">A</span><span style="font-family: 宋体">对象可以包含</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">B</span><span style="font-family: 宋体">对象，但</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">B</span><span style="font-family: 宋体">对象不是</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">A</span><span style="font-family: 宋体">对象的组成部分。具体表现为，如果</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">A</span><span style="font-family: 宋体">由</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">B</span><span style="font-family: 宋体">聚合成，表现为</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">A</span><span style="font-family: 宋体">包含有</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">B</span><span style="font-family: 宋体">的全局对象，但是</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">B</span><span style="font-family: 宋体">对象可以不在</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">A</span><span style="font-family: 宋体">创建的时刻创建。<br />
<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/tinysun/aggregation.jpg" /><br />
<br />
</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">&nbsp;&nbsp;&nbsp; Composition(</span><span style="font-family: 宋体">组合关系</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">)</span><span style="font-family: 宋体">是关联关系的一种，是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">Composition(</span><span style="font-family: 宋体">组合关系</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">)</span><span style="font-family: 宋体">是一种强的&#8220;拥有&#8221;关系，体现了严格的部分和整体的关系，部分和整体的生命周期一致。如果</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">A</span><span style="font-family: 宋体">由</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">B</span><span style="font-family: 宋体">组成，表现为</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">A</span><span style="font-family: 宋体">包含有</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">B</span><span style="font-family: 宋体">的全局对象，并且</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">B</span><span style="font-family: 宋体">对象在</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">A</span><span style="font-family: 宋体">创建的时刻创建。<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/tinysun/composition.jpg" /><br />
<br />
<span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">Dependency(</span><span style="font-family: 宋体">依赖关系</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">)</span><span style="font-family: 宋体">表现为函数中的参数</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">(use a)</span><span style="font-family: 宋体">。是类与类之间的连接，表示一个类依赖于另一个类的定义，其中一个类的变化将影响另外一个类。例如如果</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">A</span><span style="font-family: 宋体">依赖于</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">B</span><span style="font-family: 宋体">，则</span><span style="font-family: 'Verdana', 'sans-serif'" lang="EN-US">B</span><span style="font-family: 宋体">体现为局部变量，方法的参数、或静态方法的调用。</span><br />
<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/tinysun/dependency.jpg" /><br />
<br />
来至于<a href="http://blog.csdn.net/maybehelios/archive/2008/01/12/2038685.aspx" target="_blank">http://blog.csdn.net/maybehelios/archive/2008/01/12/2038685.aspx</a> <br />
</span></div>
</span></O:P>
 <img src ="http://www.blogjava.net/lsshap/aggbug/302756.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lsshap/" target="_blank">永赫</a> 2009-11-18 09:03 <a href="http://www.blogjava.net/lsshap/archive/2009/11/18/302756.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UML中几种类间关系：继承、实现、依赖、关联、聚合、组合的联系与区别</title><link>http://www.blogjava.net/lsshap/archive/2009/11/18/302755.html</link><dc:creator>永赫</dc:creator><author>永赫</author><pubDate>Wed, 18 Nov 2009 01:02:00 GMT</pubDate><guid>http://www.blogjava.net/lsshap/archive/2009/11/18/302755.html</guid><wfw:comment>http://www.blogjava.net/lsshap/comments/302755.html</wfw:comment><comments>http://www.blogjava.net/lsshap/archive/2009/11/18/302755.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lsshap/comments/commentRss/302755.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lsshap/services/trackbacks/302755.html</trackback:ping><description><![CDATA[转载：http://blog.csdn.net/sfdev/archive/2009/02/18/3906243.aspx<br />
<p>UML中几种类间关系：继承、实现、依赖、关联、聚合、组合的联系与区别</p>
<h3>继承</h3>
<p>指的是一个类（称为子类、子接口）继承另外的一个类（称为父类、父接口）的功能，并可以增加它自己的新功能的能力，继承是类与类或者接口与接口之间最常见的关系；在Java中此类关系通过关键字extends明确标识，在设计时一般没有争议性；<br />
<img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/winzheng/UML/Generalization.jpg" width="293" height="204" /></p>
<h3>实现</h3>
<p>指的是一个class类实现interface接口（可以是多个）的功能；实现是类与接口之间最常见的关系；在Java中此类关系通过关键字implements明确标识，在设计时一般没有争议性；<br />
<img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/winzheng/UML/Realization.jpg" width="121" height="203" /></p>
<h3>依赖</h3>
<p>可以简单的理解，就是一个类A使用到了另一个类B，而这种使用关系是具有偶然性的、、临时性的、非常弱的，但是B类的变化会影响到A；比如某人要过河，需要借用一条船，此时人与船之间的关系就是依赖；表现在代码层面，为类B作为参数被类A在某个method方法中使用；<br />
<img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/winzheng/UML/Dependence.jpg" width="430" height="97" /></p>
<h3>关联</h3>
<p>他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系，比如我和我的朋友；这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性 的，一般是长期性的，而且双方的关系一般是平等的、关联可以是单向、双向的；表现在代码层面，为被关联类B以类属性的形式出现在关联类A中，也可能是关联 类A引用了一个类型为被关联类B的全局变量；<br />
<img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/winzheng/UML/Association.jpg" width="430" height="105" /></p>
<h3>聚合</h3>
<p>聚合是关联关系的一种特例，他体现的是整体与部分、拥有的关系，即has-a的关系，此时整体与部分之间是可分离的，他们可以具有各自的生命周期， 部分可以属于多个整体对象，也可以为多个整体对象共享；比如计算机与CPU、公司与员工的关系等；表现在代码层面，和关联关系是一致的，只能从语义级别来 区分；<br />
<img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/winzheng/UML/Aggregation.jpg" width="430" height="108" /></p>
<h3>组合</h3>
<p>组合也是关联关系的一种特例，他体现的是一种contains-a的关系，这种关系比聚合更强，也称为强聚合；他同样体现整体与部分间的关系，但此 时整体与部分是不可分的，整体的生命周期结束也就意味着部分的生命周期结束；比如你和你的大脑；表现在代码层面，和关联关系是一致的，只能从语义级别来区 分；<br />
<img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/winzheng/UML/Composition.jpg" width="430" height="106" /></p>
<p>对于继承、实现这两种关系没多少疑问，他们体现的是一种类与类、或者类与接口间的纵向关系；其他的四者关系则体现的是类与类、或者类与接口间的引 用、横向关系，是比较难区分的，有很多事物间的关系要想准备定位是很难的，前面也提到，这几种关系都是语义级别的，所以从代码层面并不能完全区分各种关 系；但总的来说，后几种关系所表现的强弱程度依次为：组合&gt;聚合&gt;关联&gt;依赖；</p>
 <img src ="http://www.blogjava.net/lsshap/aggbug/302755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lsshap/" target="_blank">永赫</a> 2009-11-18 09:02 <a href="http://www.blogjava.net/lsshap/archive/2009/11/18/302755.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>