﻿<?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/frankhou/category/3322.html</link><description>学习Java的过程犹如唐玄奘西天取经的过程，不经历各种困难是无法取得成功的。</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 08:50:25 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 08:50:25 GMT</pubDate><ttl>60</ttl><item><title>使用UML建模时的3种关系</title><link>http://www.blogjava.net/frankhou/archive/2005/09/05/12123.html</link><dc:creator>Frank Hou</dc:creator><author>Frank Hou</author><pubDate>Mon, 05 Sep 2005 15:04:00 GMT</pubDate><guid>http://www.blogjava.net/frankhou/archive/2005/09/05/12123.html</guid><wfw:comment>http://www.blogjava.net/frankhou/comments/12123.html</wfw:comment><comments>http://www.blogjava.net/frankhou/archive/2005/09/05/12123.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/frankhou/comments/commentRss/12123.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/frankhou/services/trackbacks/12123.html</trackback:ping><description><![CDATA[<P><FONT size=2>面向对象的建模中<FONT face=Arial>3</FONT>种特别重要的关系：<BR>依赖（<FONT face=Arial><EM>dependency</EM></FONT>）是一种使用关系，多数情况下指的是一个类把另一个类作为自己操作的参数类型，如：</P>
<P align=center><IMG height=118 alt=dependency.gif src="http://www.blogjava.net/images/blogjava_net/frankhou/uml/dependency.gif" width=342 align=center border=0></FONT></P>
<P><FONT size=2>泛化（<FONT face=Arial><EM>generalization</EM></FONT>）是父类和子类之间的关系，也称为“<FONT face=Arial>is-a-kind-of</FONT>”关系。没有父类且最少有一个子类的类称为根类或基类；把没有子类的类称为叶子类。如：</P>
<P align=center><IMG height=345 alt=generalization.gif src="http://www.blogjava.net/images/blogjava_net/frankhou/uml/generalization.gif" width=402 border=0></P>
<P><BR>在上图中<FONT face=Arial>Shape</FONT>是基类，<FONT face=Arial>Square</FONT>、<FONT face=Arial>Circle</FONT>、<FONT face=Arial>Polygon</FONT>是叶子类。</FONT></P>
<P><FONT size=2>关联（<FONT face=Arial><EM>association</EM></FONT>）是一种结构关系，指明了一个事物的对象与另一个事物的对象间的联系。 
<P>
<P align=center><IMG height=200 alt=association.gif src="http://www.blogjava.net/images/blogjava_net/frankhou/uml/association.gif" width=553 border=0></P>
<P><BR>上图显示的是取自一个学校的信息系统中的一组类。它描述了以下几个内容：</FONT></P>
<OL>
<LI><FONT size=2>每一名学生可以学习任意门的课程，并且每一门课程也可以有任意名学生来学习。</FONT> 
<LI><FONT size=2>每门课至少要有一名教师，每一名教师可以不教课也可以教多门课。</FONT> 
<LI><FONT size=2>一所学校可以没有学生，或有多名学生，一名学生可以是多所学校的学生，通过聚合关系可以知道<FONT face=Arial>School</FONT>是个整体，<FONT face=Arial>Student</FONT>是<FONT face=Arial>School</FONT>的一部分。</FONT> 
<LI><FONT size=2>一所学校可以有一个或多个系，每个系只能属于一个学校，通过聚合关系可以知道<FONT face=Arial>School</FONT>是个整体，<FONT face=Arial>Department</FONT>是<FONT face=Arial>School</FONT>的一部分。</FONT> 
<LI><FONT size=2>在<FONT face=Arial>Department</FONT>和<FONT face=Arial>Instructor</FONT>之间有两个关联。其中一个关联说明一名教师可以被分配到一个或多个系中，并且一个系可以有一名或多名教师，在学校组织中，系比教师的层次要高，所以这里用聚合来建模。另一个关联说明一个系只能有一名教师是系主任。</FONT></LI></OL>
<P><FONT size=2>在<FONT face=Arial>UML</FONT>中对关系建模时，要遵循如下策略：</FONT></P>
<UL>
<LI><FONT size=2>仅当被建模的关系不是结构关系时，才能使用依赖。</FONT> 
<LI><FONT size=2>仅当关系是“<FONT face=Arial>is-a-kind-of</FONT>”关系时，才使用泛化。往往可以用聚合代替多继承。</FONT> 
<LI><FONT size=2>小心不要引入循环的泛化关系。</FONT> 
<LI><FONT size=2>一般要保持泛化关系的平衡；继承的层次不要太深（大约多于5层就应该想一想），也不要太宽（代之以寻找可能的中间抽象类）。</FONT> 
<LI><FONT size=2>在对象间有结构关系的地方，要以使用关联为主。</FONT></LI></UL><img src ="http://www.blogjava.net/frankhou/aggbug/12123.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/frankhou/" target="_blank">Frank Hou</a> 2005-09-05 23:04 <a href="http://www.blogjava.net/frankhou/archive/2005/09/05/12123.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>