ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>樱花草国产18久久久久,91精品久久久久久久久久入口,狠狠狠综合7777久夜色撩人http://www.aygfsteel.com/flysky19/category/18233.htmljava之èµ\zh-cnWed, 28 Feb 2007 03:44:20 GMTWed, 28 Feb 2007 03:44:20 GMT60UML相关工具一览(择选)(j¨ª)http://www.aygfsteel.com/flysky19/articles/86780.html不断前进的小乌龟不断前进的小乌龟Sun, 10 Dec 2006 15:37:00 GMThttp://www.aygfsteel.com/flysky19/articles/86780.htmlhttp://www.aygfsteel.com/flysky19/comments/86780.htmlhttp://www.aygfsteel.com/flysky19/articles/86780.html#Feedback0http://www.aygfsteel.com/flysky19/comments/commentRss/86780.htmlhttp://www.aygfsteel.com/flysky19/services/trackbacks/86780.html原文åQ?a >http://www.umlchina.com/Tools/Newindex1.htm

Code Logic 2.1åQ?span lang="EN-US" style="COLOR: black; FONT-FAMILY: Helvetica">http://www.logicexplorers.com/products/codelogic/details.html
特色åQ?span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">强有力的、动态的双向工程åQŒç‰¹åˆ«æ˜¯ä»Žä»£ç åˆ°™åºåºå›„¡š„自动生成ã€?br />      相关åQšæœ‰è¯•ç”¨ç‰ˆï¼›

EclipseUML 2.0åQ?span lang="EN-US" style="COLOR: black; FONT-FAMILY: Helvetica">http://www.omondo.com/

特色åQ?br />

å’?/span> Eclipse å?/span> CVS 集成çš?/span> UML 工具。可以从字节码逆向工程到类囑֒Œåºåˆ—图ã€?br />

相关åQšæœ‰å…è´¹ç‰ˆï¼›

Poseidon for UML 5.0:

http://www.gentleware.com/

特色åQ?br />

åŸÞZºŽå¼€æºé¡¹ç›?/span>ArgoUML的商业äñ”品,支持多国语言。集成到EclipseåQŒä‹Éå¾?/span>Poseidon利用其他工具的方便性大大增加,减少äº?ji¨£n)许å?/span>import/export的工作。支持团队徏模。下载量已经­‘…过1,000,000份ã€?/span>3.2版本增强äº?/span>UML2.0序列囄¡š„支持ã€?br />版本åQ?/span>

Community Edition免费åQŒå…¶ä»–版本试ç”?br />
IBM RationalåQ?/span>

http://www.rational.com/

特色åQ?

Rose/XDE的新版本ã€?/span>åŸÞZºŽUML2.0的高端徏模以å?qi¨¢ng)工具集åQŒè¿˜åŒ…括应用开发ã€?/span>Web开发、èÊY仉™…¾|®ç®¡ç†ç­‰å·¥å…·. ˜q™äº›å·¥å…·ä¸­éƒ½å¢žåŠ äº?ji¨£n)å¯?/span>Eclipse3.0的支持,以及(qi¨¢ng)减少手工¾~–码的各¿Uæ–°åŠŸèƒ½
版本åQšæœ‰è¯•ç”¨ç‰ˆï¼›

Together 2006åQ?/span>

http://www.borland.com/together/index.html
特色åQ?br />

强有力的工具ã€?/span>2006版本支持UML2å’?/span>BPMN产生BPEL4WSã€?br />但太庞大åQŒjava实现åQŒå¾ˆæ…¢ï¼›

Visio 2003åQ?/span>

http://www.microsoft.com/office/visio/

å¾®èÊY的主åŠ?/span>UML工具

国内使用òq¿æ³›åQ?br />
Codagen Architect 3.2åQ?span lang="EN-US" style="COLOR: black; FONT-FAMILY: Helvetica">http://www.codagen.com/products/architect/default.htm
特色åQ?br />

遵åó@MDA‹¹ç¨‹åQŒèƒ½äº§ç”Ÿ­‘…过90%çš?/span>J2EEå’?/span>.Netòq›_°ä»£ç ã€?/span>2003òq´èŽ·å¾?/span>Jolt Productivity Awardã€?/span>

支持Rational Rose 2000e或更新版本,Rational XDE 2003åQ?/span>Borland Together ControlCenter 6.0, 或带Visioçš?/span>Visual Studio .NET for Enterprise Architectsã€?/span>

版本åQ?5天评估版åQ?br />
Visual Paradigm for UML 5.1:

http://www.visual-paradigm.com/

特色åQ?/p>

支持用例文档åQŒæ–‡æœ¬åˆ†æžã€?/span>SDE for Eclipseçš?/span>2.0版本åQ?/span>支持UML2.0åQ?/span>支持文本分析å’?/span>CRC卡能。支æŒ?/span>Robustness Analysis。支持自定义形状或导å…?/span>Visio的图形ã€?/span>


 



不断前进的小乌龟 2006-12-10 23:37 发表评论
]]>
Rational SoDA for Word中文ä¹Þq è§£å†³http://www.aygfsteel.com/flysky19/articles/86759.html不断前进的小乌龟不断前进的小乌龟Sun, 10 Dec 2006 13:46:00 GMThttp://www.aygfsteel.com/flysky19/articles/86759.htmlhttp://www.aygfsteel.com/flysky19/comments/86759.htmlhttp://www.aygfsteel.com/flysky19/articles/86759.html#Feedback0http://www.aygfsteel.com/flysky19/comments/commentRss/86759.htmlhttp://www.aygfsteel.com/flysky19/services/trackbacks/86759.html2006òq?2æœ?0æ—?br />参考资料:(x¨¬)http://www.rxiao.com/collection/csdn/软äšg工程/336991.xml

问:(x¨¬)
请问由Rational SoDA for Word生成的文档中的中文都æ˜?åQ?,如何解决呢?

ž®Þq®—用ctrl+cå’Œctrl+v复制到word中的中文也是"????????????????"åQï¼åQ?br />我该怎么办?åQŸï¼ŸåQŸï¼ŸåQŸï¼ŸåQŸï¼ŸåQŸï¼ŸåQŸï¼ŸåQ?br />½{”:(x¨¬)
在Rose建模的时候,应该讄¡½®å­—体为GB2312åQŒç„¶åŽå†ç”¨soda生成的文档就是中文的äº?ji¨£n)ã€?br />具体在那儿设åQŒæˆ‘忘了(ji¨£n)。手头也没有Rose

反正在菜单里é?br />问:(x¨¬)
to run
我在菜单的tools中的genernal中把所有的font都改成了(ji¨£n)宋体åQŒå­—½W¦é›†æ”ÒŽ(gu¨©)ˆäº?ji¨£n)chinese_gb2312,¾l“果生成的文档和文档å›ùN‡Œçš„中文还æ˜??"
我改的对不对åQ?br />

to run
okäº?谢谢åQå¤ªæ„Ÿè°¢äº?ji¨£n)!åQï¼
å…ÏxމroseåQŒå†æ‰“开后,ž®±okäº?ji¨£n)ï¼?x¨¬)åQ?br />
其他相关åQ?br />soda在从rose中生成文档的时候,对中文的支持非常不好åQŒæ‰€ä»¥çŽ°åœ¨ä»ç„¶å¾è®®å¤§å®¶å°½é‡åœ¨Rose的模型中使用英文ã€?br />
那么你们¾l™å®¢æˆïL(f¨¥ng)œ‹ä»€ä¹ˆå‘¢åQ?br />怎么让客户了(ji¨£n)解你们的˜q›åº¦å‘¢ï¼Ÿ
老板æ€ÀL˜¯è¯ß_(d¨¢)¼Œè§å®¢æˆäh—¶è¦ç»™ä»–看点什么,˜q™æ ·æ‰å¥½äº¤æµ

客户äº?ji¨£n)è§£˜q›åº¦å¯ä»¥é€šè¿‡å¾ˆå¤šæ–¹å¼åQŒæ¯”如说åQšé¡¹ç›®å¼€å‘计划、äñ”品原型、用例阐˜q°è¿™äº›éœ€æ±‚方面的工äšg½{‰ç­‰ã€‚而实际上当项目进入分æž?设计阶段后äñ”生的工äšg一般是不需要用戯‚¿›è¡Œç¡®è®¤å’Œäº?ji¨£n)解的,用户只要通过™å¹ç›®å¼€å‘计划和™å¹ç›®è®¡åˆ’ž®±å¯ä»¥äº†(ji¨£n)解到™å¹ç›®çš„进度,如果要和用户交流åQŒé‚£ž®±é€šè¿‡äº§å“ç•Œé¢åŽŸåž‹½{‰å·¥ä»¶ä¸Žç”¨æˆ·˜q›è¡Œäº¤æµå›_¯ã€?br />
修改模板åQ?br />扑ֈ°ä½ çš„ROSE安装目录åQŒä¸‹é¢æœ‰SoDAWord->template->rose目录åQŒä¸‹é¢å­˜æ”„¡š„ž®±æ˜¯SoDAçš„word模板åQŒä½ å¯ä»¥æ ÒŽ(gu¨©)®éœ€è¦ä¿®æ”¹ï¼›





不断前进的小乌龟 2006-12-10 21:46 发表评论
]]>
Rational rose生成代码å?qi¨¢ng)其反向工程功能手å†?转蝲和补å…?http://www.aygfsteel.com/flysky19/articles/86616.html不断前进的小乌龟不断前进的小乌龟Sun, 10 Dec 2006 03:19:00 GMThttp://www.aygfsteel.com/flysky19/articles/86616.htmlhttp://www.aygfsteel.com/flysky19/comments/86616.htmlhttp://www.aygfsteel.com/flysky19/articles/86616.html#Feedback0http://www.aygfsteel.com/flysky19/comments/commentRss/86616.htmlhttp://www.aygfsteel.com/flysky19/services/trackbacks/86616.html原文åQ?/font> http://lzqdiy.bokee.com/5344025.html
2006òq?2æœ?0æ—?br />关键è¯?/b>åQ? rose    生成代码    反向工程                                          

 rose是最‹¹è¡Œçš„徏模工å…?一是标å‡?历史æ‚(zh¨¨n) ä¹…用的人多),二是自始至终贯穿体现äº?ji¨£n)RUP的思想(使用Rational suite)åQŒè™½ç„¶å®žé™…å·¥ä½œä¸­æˆ‘ä»¬å› äØ“(f¨´)诸多因素不能够完全按照RUPæ–ÒŽ(gu¨©)³•来指导整体开发过½E‹ï¼Œä½†ç›¸ä¿¡å¤šæ•°å›¢é˜Ÿè¿˜æ˜¯å›´¾l•在roseíw«è¾¹ä½¿ç”¨äº?½Ž€åŒ–版'的需求分析设计,而多半ä‹É用了(ji¨£n)不怎么地道çš?XP'å¼€å?)
      ROSE思想是复杂的åQŒå†…涉|˜¯ä¸°å¯Œçš„,操作是别扭的åQŒæ–‡æ¡£æ˜¯½Ž€å•çš„åQŒäh性是没有的。然而äh们对它趋之若鹜的原因恐怕是我们现在的TEAMLEADER,SA受RUPçš?毒害'颇深的原因,而这也将影响到徒å¼?-ž®†æ¥çš„SA们ã€?br />     
一 通过模型生成代码

rose帮助位于 HELP>>CONTENTS>>ROSE JAVA>>HOW TO >>FORWARD ENGINEER FROM  ROSE  TO JAVA SOURCE 


 当你ž®è¯•把模型组件è{化成代码框架时候,应该考虑到先‹‚€(g¨¨)查将要生成的¾cÀLœ‰æ— è¯­æ³•错误ã€?br /> 1 打开你要专化的目标diagram
 2 选择你要转化的包或者类
 3.单击  tools>java/j2ee>  Syntax Check 来检查目标代码是否符合规范,比如命名错误ã€?br /> 4 察看rose log½H—口(下方åQ‰å¯Ÿçœ‹æ£€éªŒç»“果,如果有错误,即errors那么生成的代码很可能无法é€?br /> ˜q‡ç¼–è¯?br /> 5 æ ÒŽ(gu¨©)®éœ€è¦æ ¡æ­£è¿™äº›ç»„件或者图
 6重复 步骤3直到‹‚€(g¨¨)验不出错误,然后你就可以˜q›å…¥ä¸‹ä¸€æ­¥äº†(ji¨£n)   
 假设以上步骤已经搞定äº?ji¨£n)error
 7 选择你要转化的包或者类
 8单击 Tools > Java/J2EE > Generate Code
 一般来说如果你˜q˜æ²¡æœ‰å°†ä¸€ä¸ªpackage或者组件映ž®„到一个roseçš„classpath目录ä¸?ž®±æ˜¯æŒ‡å®šç”?br /> 成的东西攑֓ªé‡?åQŒé‚£ä¹ˆç³»¾lŸä¸ä¼?x¨¬)å…è®æ€½ åœ¨æŽ¥ä¸‹æ¥çš„界面里点okåQŒé‚£ä¹ˆçŽ°åœ¨å°±¾~–辑目标路径
 9点classpath entries下的edit按钮åQŒå†å‡ºçŽ°çš„ç•Œé¢å³ä¸Šè§’æ‰¾new(insert)(删除左边那个),然后在列表里新增的行里选择目标路径åQŒä½ å¯ä»¥é€‰æ‹©ç›®æ ‡æ˜¯ç”Ÿæˆä¸€ä¸ªzipåQŒjar,˜q˜æ˜¯ä¸€ä¸ªç›®å½•,我们选择
 目录。指定目录,ok,那么你选择的èµ\径就新徏成功äº?ji¨£n),选择˜q™ä¸ªè·¯å¾„åQŒç‚¹ok回到界面åQˆå±‚‹Æ?br /> 好多阿,界面很丑阿)(j¨ª)
 10现在你看到classpath entries里有东西äº?ji¨£n),选择右侧列表里你要è{换的包或者组ä»Óž¼Œç‚¹assign
 åQŒå³åˆ†é…¾l™ç›®æ ‡classpthåQŒç†è®ÞZ¸Šä½ å¯ä»¥æŠŠé€‰æ‹©å¥½çš„包组件或者类囑ֈ†åˆ«åˆ†é…ä¸ªå¤šä¸ªclassptah
 对象。点ok开始生æˆ?br /> 11成功后就可以到指定的classpath下看代码äº?ji¨£n),生成的代码之间拥有如¾cÕd›¾æ‰€½Cºçš„关系ã€?br /> 
 
�反向功能
rose帮助位于 HELP>>CONTENTS>>ROSE JAVA>>HOW TO >>REVERSE ENGINEER FROM  JAVA SOURCE TO ROSE          
反向工程ž®±æ˜¯é€šè¿‡java代码生成或者更æ–îC¸€ä¸ªæ¨¡åž‹çš„˜q‡ç¨‹ã€‚你可以用ROSE对以下文件进行反å?br />  A.Java source code (.java files)
  B.Java bytecodes (.class files)
  C.zip, .cab, and .jar files
 1. Open the model you want to create or update.
 打开一个你刚创建或者想更新的模åž?br /> 新徏一个class diagramåQˆå¦‚果你˜q˜ä¸ä¼?x¨¬),那么˜q™ç¯‡æ–‡ç« ž®±åˆ«çœ‹äº†(ji¨£n)åQ?br /> 2.单击Tools > Java/J2EE > Reverse Engineer
 那么现在大家可以惌™±¡ä¸€ä¸‹roseä¼?x¨¬)怎么å?刚才是选择äº?ji¨£n)图åQŒåˆ›å»ºç›®æ ‡èµ\径,生成代码åQŒé‚£ä¹?br /> 现在是否指定路径è¯ÀL–‡ä»¶ç”Ÿæˆå›¾å‘¢ï¼Œyou can say that again!!
 在出现的界面上选择一个classpathåQˆå¦‚果已¾lå­˜åœ¨ï¼‰(j¨ª)当然åQŒä½ ä¹Ÿå¯ä»¥é€šè¿‡edit classpath按钮æ–?br /> å»ÞZ¸€ä¸ªï¼ˆæ–°å¾è·¯å¾„的界面刚才讲˜q‡äº†(ji¨£n)åQŒä¸å†ç¯èµ˜ï¼‰(j¨ª)åQŒç„¶åŽé€‰æ‹©˜q™ä¸ªclasspathåQŒæ›´æ”¹ä¸‹é¢çš„filter
 下拉列表åQŒæ›´æ”¹ç›®æ ‡æ–‡ä»¶ç±»åž?注意不仅仅三行,可以滚动的,对rose的界面真是垃圾这一ç‚?br /> 又深有体ä¼?x¨¬)äº?ji¨£n))åQŒæˆ‘们这里选择.javaåQŒå¦‚果这个classptah下存åœ?javaæ–‡äšgåQŒé‚£ä¹ˆå°±ä¼?x¨¬)被列出æ?br /> ã€?br /> 注意åQšä½ å¯ä»¥é€šè¿‡ addæ·ÕdŠ é€‰ä¸­çš„æ–‡ä»Óž¼Œä¹Ÿå¯ä»¥é€šè¿‡add allæ·ÕdŠ æ‰€æœ‰åˆ—å‡ºæ¥çš„ï¼Œæ›´å¯ä»¥é€šè¿‡
 add recursive 递归æ·ÕdŠ ˜q™ä¸ªè·¯å¾„下所有的文äšg和子目录下所有文件等½{‰ã€‚可以看到roseòq¶ä¸ä¼?x¨¬)自动列出甚è‡Ïx˜¾½Cºæœ‰æ²¡æœ‰å­ç›®å½•(无ähæ€?
 从添加好的文仉™‡Œé€‰æ‹©ä½ æƒ³åå‘的文ä»Óž¼Œç‚¹Reverse 开始创建或者更æ–?br /> 无论成功˜q˜æ˜¯å¤ÞpÓ|都会(x¨¬)警告åQŒåƈ有log。有错你ž®±æ”¹åˆ°æ²¡é”™äØ“(f¨´)æ­¢ã€?br /> 假设你成功了(ji¨£n)åQŒç‚¹å‡»done¾l“束反向åQŒå›žåˆ°roseä¸È•Œé¢ã€‚          Â?
 注意:roseòq¶ä¸ä¼?x¨¬)针对你反向˜q‡æ¥çš„类和组件自动生成图åQŒç”Ÿæˆçš„class已经按照包关¾pÕdˆ—在你çš?br />        class diagram下面åQŒä½ éœ€è¦æŠŠä»–们加到你的图中åŽ?é?什么玩è‰? ,你有两种æ–ÒŽ(gu¨©)³•让这个半自动反向工程化上句号ã€?br />   1手工把class或者组件拖拉到目的å›ùN‡Œ
   2在目标图的界面下点击 Query > Add Classes 或è€?Query > Add Components åQŒé€‰æ‹©è§†å›¾æ–¹å¼
   åQŒä¸€èˆ¬æ˜¯logic view,选择要拖拉的¾cÀLˆ–者组ä»Óž¼Œ>>或者allåQŒç‚¹ok完成。生成的¾cÕd›¾å›_æ˜ äº†(ji¨£n)代码本èín之间的关¾p…R€?br />     ok.教程¾l“束,因䨓(f¨´)没有抓图软äšg,懒得拷屏òq•,加之文字比较详细åQŒç›¸ä¿¡æ‹¥æœ‰å†™ä»£ç èƒ½åŠ›å’?br />     自学能力的诸位看官理解没问题。作ä¸ÞZ¸€ä¸ªSE,SA,å¿…é¡»æŽŒæ¡çš„å·¥å…øP¼ŒROSE˜q˜æœ‰å¾ˆå¤šåŠŸèƒ½éš?br />     藏在½E€å¥‡å¤æ€ªçš„界面下,如果你不是一个RUPæ–ÒŽ(gu¨©)³•的顽固FANSåQŒä¹Ÿæ²¡æœ‰å—到¾lå…¸å­¦é™¢‹z„¡š„'
     教导',或者干脆就是一个开发ähå‘?那么推荐大家˜q˜æ˜¯å¿«é€Ÿçš„æŠ•入到together或者Poseidon的怀中吧ã€?br />



自己的补充:(x¨¬)
参考资料:(x¨¬)
怎样由rational rose¾cÕd›¾ç”Ÿæˆjava代码
http://topic.csdn.net/t/20030410/19/1644982.html

1.安ROSE前先安JDKåQŒÂ Â Â Â Â Â Â?br />  不然åQŒè¦è®„¡½®ä¸€ä¸‹jdkçš„èµ\径或者用ROSE找一下JDK的目录:(x¨¬)
  Tools-->java/J2EE-->Project Specification-->CLASSPATH-->new

2. 然后åQŒç”»å›„¡š„时候,  
  打开J2EEåQŒè¿™ä¸ªæœ€å…¨å•¦Â åQŒä¼š(x¨¬)自动导入三个包:(x¨¬)java、javax、orgåQ›Â Â?br />  否则åQŒå¤æ‚çš„¾c»ï¼Œå¯èƒ½è½¬çš„不对åQ?br /> 
  不过åQŒä‹É用J2EE model需要导入大量的包,ä¼?x¨¬)有ç‚Ò?gu¨©)…¢åQŒåªæ˜¯ç¬¬ä¸€‹Æ¡ç»ƒä¹?f¨¤n)“from  class diagram to java source”的话,打开rose时点cancle不选ä“Q何model
  ž®±å¯ä»¥ï¼›
3.斜菱形表½CºpublicåQŒé’¥åŒ™è¡¨½CºProtectedåQŒé”è¡¨ç¤ºprivateåQŒT表示defaultåQ?br />4.生成代码之前åQŒåœ¨â€œopen standard specification”中的“Attributes”和“Operations”中讄¡½®å±žæ€§çš„typeåQŒæ–¹æ³•çš„˜q”回值等åQ?br />5.可以在“关联关¾p Z€ç­‰çš„箭头中指定引用的名¿UŽÍ¼›
6.可以讄¡½®JAVADOCåQŒÂ Â Â?br />   ˜q˜èƒ½è‡ªåŠ¨äº§ç”ŸMAINåQŒï¼ˆæœªæ‰¾åˆ°ç›¸åº”项åQ?br />
  可以对类的属性,加READ WRITEæ–ÒŽ(gu¨©)³•åQŒè¿™ä¸ªè¿˜æ˜¯å¾ˆå¥½ç”¨çš„,不然åQŒGET
  的,SET的会(x¨¬)写好多,讄¡½®åQ?br />  右键单击要生成代码的¾c»ï¼Œé€‰open   standard   Specification->Attributes,再右键单
  击要生成setter/getter的属性,选specification->java.....
  然后按“edit   set� 
  ž®†â€œpropertyType”改为“simpleâ€?ž®±å¯ä»¥äº†(ji¨£n)åQ?br />åQˆread/write的默认值就已经是read/write);

参考:(x¨¬)
http://topic.csdn.net/t/20020624/11/825787.html

7.一个小技巧:(x¨¬)   
   把默认语­a€è®¾äØ“(f¨´)JAVAåQšÂ tools-option-notation-default
  因䨓(f¨´)åQŒä½ ä¸€èˆ¬ä¸ä¼?x¨¬)对使用的语­a€æ¢æ¥æ¢åŽ»çš„ï¼Œ  
  ˜q™æ ·çš„话åQŒÂ Â Â åªè¦ä¸€äº§ç”Ÿ¾c»ï¼Œž®±æ˜¯JAVA¾c»ï¼ŒÂ Â Â 
    
  òq¶ä¸”åQŒÂ Â?叛_‡»åQŒæœ‰ä¸€™å¹å°±ç›¸åº”å˜äØ“(f¨´)“java/J2EEâ€?
åQˆå¦‚果默认语­a€æ—¶C++åQŒå³å‡Èš„那项是“ANSI C++”)(j¨ª)
  双击的项也变äº?ji¨£n), 不是General的项äº?ji¨£n)   直接是JAVA¾cÕd±žæ€§Â Â ï¼›
 
8.我们要做的第一个步骤就是要先进行语法检查,   
  ˜q™ä¸€æ­¥ï¼Œæ˜¯å…³é”®ï¼›
 有时需要语法检查之后,“java/J2EE”中的“Genarate codeâ€?br />  ˜q™é¡¹æ‰ä»Žç°è‰²å˜äØ“(f¨´)可用™å¹ï¼›
    
  然后讄¡½®å¥½CLASSPATH的输å‡?gu¨®)™µ\径就可以äº?ji¨£n)ï¼?br />
9.导出代码  
  在导å‡ÞZ»£ç çš„˜q‡ç¨‹ä¸­ï¼Œæˆ‘们可以看到“OK”按钮和两视å›ùN—´çš„“Assign”按钮都是灰色的。这时候,我们要选择两个部分åQ?br />一个是在视图中左侧的“CLASSPATH   Entries”要选择一个你要导å‡ÞZ»£ç çš„路径åQŒç‚¹å‡»è®©å®ƒå˜æˆè“è‰²å°±å¯ä»¥äº?ji¨£n)ã€? 
  ˜q™æ—¶å€™ï¼ŒæŒ‰é’®â€œOK”和“Assign”按钮仍然是灰色的ã€? 
  下面我们˜q˜è¦¼‹®å®šåŒ™¾¹å“ªä¸ªåŒ…是要导出的åQŒè¿™é‡Œå¾ˆæ˜Žæ˜¾ž®±æ˜¯â€œscInfoTech”。我们把它和它的¾l„äšg视图全部选中。这时候,“OK”按钮和“Assign”按钮都变成可用的了(ji¨£n)ã€?br />
10. ROSE产生的代码,每个¾c»ï¼Œæ¯ä¸ªæ–ÒŽ(gu¨©)³•åQŒéƒ½ä¼?x¨¬)打上一个ROSEåøP¼Œ  
  后期可反转,  
  ž®±æ˜¯ä»Žä»£ç åˆ°¾cÕd›¾åQÂ Â Â?br />  若想åŽÀLމroseidåQšTools-->java/J2EE-->Project Specification-->Code GenerationåQ?br />
11.不过åQŒå°±æœ¬èín而言åQ? 
   
  产生的代码水òq³ä¹Ÿæ˜¯ä¸æ•¢^%#%$@%$#**^*&^^&^%#^%#  
   
  好象没有写的好!
 
  不过可以修改代码åQšjava/J2EE-->edit code...;  
    
  但是ROSE的反转厉害的很,  
   
  可以转CLASS的,  
  生成的图åQŒå¸¦æœ‰å…³¾p»ï¼Œ  
   
  用来分析别äh的代码,  
  VERY爽 åQï¼åQÂ Â?br /> 
12.把类图、顺序图½{‰å›¾ç‰‡ä¿å­˜åˆ°word中:(x¨¬)
     点工å…äh ä¸­çš„“fit in window”->“copy”â€?gt;¾_˜è„“(chu¨¤ng)到wordåQ?br />     ˜q™æ ·å¾—到的图片又清晰又完整又ž®ï¼Œé€šå¸¸ä¸åˆ°10kåQ›å¦‚果图片太ž®ï¼Œåœ¨wordä¸?br />     可以ä»?00åQ…的比例阅读åQšâ€œè§†å›ä€èœå•â€?gt;“显½Cºæ¯”例”;

13.Rational Rose怎么导入java¾cÕdº“åQŸï¼š(x¨¬)
     问:(x¨¬)我想用java代码生成rose模型åQŒå¯æ˜¯æ€ÀL˜¯æœ‰ä¸€äº›ç±»æ‰¾ä¸åˆŽÍ¼Œéœ€è¦å¯¼å…¥jdk
             或者其他的¾cÕdŒ…,请问怎么操作åQ?br />      ½{”:(x¨¬)菜单   tools   ->   Java/J2EE   ->   Project   Specification  
              在Classpaths中加入类库èµ\径,比如  
              D:\JBuilder6\jdk1.3.1\src.jar

14.ç”Õd¥½äº?ji¨£n)类图、顺序图åQŒåƈ加上äº?ji¨£n)所有的操作åQŒæ³¨é‡Šï¼Œè¯´æ˜Ž½{‰ï¼Œæ€Žä¹ˆæ‰èƒ½è‡ªåЍ
     生成设计文æ¡£åQŸï¼ˆçŽ°åœ¨˜q˜ä¸ä¼?x¨¬),˜q˜æ²¡è£…SODAåQ?br />参考资料:(x¨¬)
http://topic.csdn.net/t/20021209/19/1245009.html

  问:(x¨¬)我在rose中画äº?ji¨£n)一个类图,所有操作什么的都有äº?ji¨£n),也都写äº?ji¨£n)注释ã€? 
           但怎么才能自动生成设计文档呢?æ€ÖM¸èƒ½æŠŠæ³¨é‡Šä¸€ä¸ªä¸€ä¸ªçš„æ‹·å‡ºæ¥å§ã€‚ Â?br />
 ½{”:(x¨¬)在report菜单总选择SoDA   ReportåQŒå†é€‰æ‹©report   templateåQˆæ¯”如Detail   of          all   of   attribute   and   operations   by   class   by   packageåQ?br />
 问:(x¨¬)怎么没有SoDA选项åQŸæ˜¯ä¸æ˜¯è¦å…ˆè£…soda   for   word

 ½{”:(x¨¬)先装sodaåQŒè¿˜è¦æœ‰word
         
http://www.rational.com/    上有不少文æ¡£

问:(x¨¬)è°¢è°¢è¯æ€½çš„回½{?我已¾lè£…上了(ji¨£n),     虽然生成的文档有点儿ä¹?  
         但可以看å‡?gu¨®)™¿™æ˜¯ä¸€ä¸ªåŠŸèƒ½å¾ˆå¼ºå¤§çš„å·¥å…?  

½{”:(x¨¬)其实最好的办法是根据你们文档的要求自己定制soda的模版,定制的过½E‹è¯´
         èµäh¥å¾ˆéº»çƒ?ch¨³),但是其实òq¶ä¸å¤æ‚åQŒçœ‹çœ‹soda的教学文档,半天ž®±å¯ä»¥æŽŒæ¡äº†(ji¨£n)

15.ç”ȝ±»å›„¡š„时候,最好把¾cÀLŒ‰â€œåŒ…”组¾l‡ï¼›òq¶è·Ÿjava代码实现时的包结构对应;没有包,所有的¾cÕd †¿U¯åœ¨ä¸€èµ·å°†æ˜¯ä¸€ç›˜æ•£æ²™ã€?br />


okåQ?br />




 
  




]]>
UML¾cÕd›¾å…³ç³»å…¨é¢å‰–析和C++代码表现åQˆè{载)(j¨ª)http://www.aygfsteel.com/flysky19/articles/86585.html不断前进的小乌龟不断前进的小乌龟Sat, 09 Dec 2006 13:27:00 GMThttp://www.aygfsteel.com/flysky19/articles/86585.htmlhttp://www.aygfsteel.com/flysky19/comments/86585.htmlhttp://www.aygfsteel.com/flysky19/articles/86585.html#Feedback0http://www.aygfsteel.com/flysky19/comments/commentRss/86585.htmlhttp://www.aygfsteel.com/flysky19/services/trackbacks/86585.htmlhttp://blog.csdn.net/dylgsy/archive/2006/08/16/1076044.aspx
2006òq?2æœ?0æ—?br />

本文随便转蝲åQŒè¯·ä¿ç•™å‡ºå¤„åQ?a >http://blog.csdn.net/dylgsy/

UML的类囑օ³¾pÕdˆ†ä¸ºï¼š(x¨¬) 兌™”、聚å?¾l„合、依赖、泛化(¾l§æ‰¿åQ‰ã€‚è€Œå…¶ä¸­å…³è”åˆåˆ†äØ“(f¨´)双向兌™”、单向关联、自íw«å…³è”;下面ž®Þp®©æˆ‘们一èµäh¥çœ‹çœ‹˜q™äº›å…³ç³»½I¶ç«Ÿæ˜¯ä»€ä¹ˆï¼Œä»¥åŠ(qi¨¢ng)它们的区别在哪里ã€?/font>

1、关�/strong>


双向兌™”åQ?br />C1-C2åQšæŒ‡åŒæ–¹éƒ½çŸ¥é“å¯¹æ–¹çš„å­˜åœ¨åQŒéƒ½å¯ä»¥è°ƒç”¨å¯ÒŽ(gu¨©)–¹çš„公共属性和æ–ÒŽ(gu¨©)³•ã€?br />
在GOF的设计模式书上是˜q™æ ·æè¿°çš„:(x¨¬)虽然在分析阶ŒDµè¿™¿Uå…³¾pÀL˜¯é€‚用的,但我们觉得它对于描述设计模式内的¾cÕd…³¾pÀL¥è¯´æ˜¾å¾—太抽象äº?ji¨£n),因äØ?f¨´)在设计阶ŒDµå…³è”å…³¾pÕd¿…™å»è¢«æ˜ å°„为对象引用或指针。对象引用本íw«å°±æ˜¯æœ‰å‘çš„åQŒæ›´é€‚合表达我们所讨论的é‚£¿Uå…³¾p…R€‚所以这¿Uå…³¾pÕdœ¨è®¾è®¡çš„æ—¶å€™æ¯”较少用到åQŒå…³è”一般都是有向的ã€?br />
使用ROSE 生成的代码是˜q™æ ·çš„:(x¨¬)

class C1 
{
public:
    C2
* theC2;

}
;

class C2 
{
public:
    C1
* theC1;

}
;

双向兌™”在代码的表现为双斚wƒ½æ‹¥æœ‰å¯ÒŽ(gu¨©)–¹çš„一个指针,当然也可以是引用或者是倹{€?/font>





单向兌™”:
C3->C4åQšè¡¨½Cºç›¸è¯†å…³¾p»ï¼ŒæŒ‡C3知道C4åQŒC3可以调用C4的公共属性和æ–ÒŽ(gu¨©)³•。没有生命期的依赖。一般是表示ä¸ÞZ¸€¿Uå¼•用ã€?br />
生成代码如下åQ?/font>

class C3 
{
public:
    C4
* theC4;

}
;

class C4 
{

}
;

单向兌™”的代码就表现为C3有C4的指针,而C4对C3一无所知ã€?/font>




自èínå…Œ™”åQˆåíw«å…³è”)(j¨ª)åQ?br />自己引用自己åQŒå¸¦ç€ä¸€ä¸ªè‡ªå·Þqš„引用ã€?br />
代码如下åQ?/font>

class C14 
{
public:
    C14
* theC14;

}
;

ž®±æ˜¯åœ¨è‡ªå·Þqš„内部有着一个自íw«çš„引用ã€?br />
2、聚å?¾l„合

当类之间有整ä½?部分关系的时候,我们ž®±å¯ä»¥ä‹É用组合或者聚合ã€?/font>



聚合åQšè¡¨½CºC9聚合C10åQŒä½†æ˜¯C10可以¼›Õd¼€C9而独立存在(独立存在的意思是在某个应用的问题域中˜q™ä¸ª¾cȝš„存在有意义。这句话怎么解,è¯ïL(f¨¥ng)œ‹ä¸‹é¢¾l„合里的解释åQ‰ã€?br />
代码如下åQ?/font>

class C9 
{
public:
    C10 theC10;

}
;

class C10 
{

}
;

 



¾l„合åQˆä¹Ÿæœ‰äh¿UîCØ“(f¨´)包容åQ‰ï¼š(x¨¬)一般是实心(j¨©)菱åŞ加实¾U¿ç®­å¤´è¡¨½Cºï¼Œå¦‚上图所½Cºï¼Œè¡¨ç¤ºçš„æ˜¯C8被C7包容åQŒè€Œä¸”C8不能¼›Õd¼€C7而独立存在。但˜q™æ˜¯è§†é—®é¢˜åŸŸè€Œå®šçš„,例如在关å¿?j¨©)汽车的领域里,轮胎是一定要¾l„合在汽车类中的åQŒå› ä¸ºå®ƒ¼›Õd¼€äº?ji¨£n)汽车就没有意义了(ji¨£n)。但是在卖轮胎的店铺业务里,ž®Þq®—轮胎¼›Õd¼€äº?ji¨£n)汽车,它也是有意义的,˜q™å°±å¯ä»¥ç”¨èšåˆäº†(ji¨£n)。在《敏捷开发》中˜q˜è¯´åˆŽÍ¼ŒA¾l„合BåQŒåˆ™A需要知道B的生存周期,卛_¯èƒ½A负责生成或者释放BåQŒæˆ–者A通过某种途径知道B的生成和释放ã€?br />
他们的代码如下:(x¨¬)

class C7 
{
public:
    C8 theC8;

}
;

class C8 
{
}
;

可以看到åQŒä»£ç å’Œèšåˆæ˜¯ä¸€æ ïL(f¨¥ng)š„。具体如何区别,可能ž®±åªèƒ½ç”¨è¯­ä¹‰æ¥åŒºåˆ†äº†(ji¨£n)ã€?br />
3、依�/strong>




依赖:
指C5可能要用到C6的一些方法,也可以这栯‚¯´åQŒè¦å®ŒæˆC5里的所有功能,一定要有C6的方法协助才行。C5依赖于C6的定义,一般是在C5¾cȝš„头文件中包含äº?ji¨£n)C6的头文äšg。ROSE对依赖关¾pÖM¸äº§ç”Ÿå±žæ€§ã€?br />
注意åQŒè¦é¿å…åŒå‘依赖。一般来è¯ß_(d¨¢)¼Œä¸åº”该存在双向依赖ã€?br />
ROSE生成的代码如下:(x¨¬)

// C5.h
#include "C6.h"

class C5 
{

}
;

// C6.h
#include "C5.h"

class C6
{

}
;

虽然ROSE不生成属性,但在形式上一般是A中的某个æ–ÒŽ(gu¨©)³•把B的对象作为参æ•îC‹Éç”?假设A依赖于B)。如下:(x¨¬)

#include "B.h"
class A
{
          
void Func(B &b);
}

那依赖和聚合\¾l„合、关联等有什么不同呢åQ?/font>

å…Œ™”是类之间的一¿Uå…³¾p»ï¼Œä¾‹å¦‚老师教学生,老公和老婆åQŒæ°´å£¶è£…æ°´ç­‰ž®±æ˜¯ä¸€¿Uå…³¾p…R€‚è¿™¿Uå…³¾pÀL˜¯éžå¸¸æ˜Žæ˜¾çš„,在问题领域中通过分析直接ž®Þpƒ½å¾—出ã€?br />
依赖是一¿Uå¼±å…Œ™”åQŒåªè¦ä¸€ä¸ªç±»ç”¨åˆ°å¦ä¸€ä¸ªç±»åQŒä½†æ˜¯å’Œå¦ä¸€ä¸ªç±»çš„å…³¾pÖM¸æ˜¯å¤ªæ˜Žæ˜¾çš„æ—¶å€™ï¼ˆå¯ä»¥è¯´æ˜¯â€œuses”了(ji¨£n)那个¾c»ï¼‰(j¨ª)åQŒå°±å¯ä»¥æŠŠè¿™¿Uå…³¾pȝœ‹æˆæ˜¯ä¾èµ–åQŒä¾èµ–也可说是一¿Uå¶ç„¶çš„关系åQŒè€Œä¸æ˜¯å¿…然的关系åQŒå°±æ˜¯â€œæˆ‘在某个方法中偶然用到äº?ji¨£n)它åQŒä½†åœ¨çŽ°å®žä¸­æˆ‘å’Œå®ƒåÆˆæ²¡å¤šå¤§å…³¾p Z€ã€‚例如我和锤子,我和锤子本来是没关系的,但在有一‹Æ¡è¦é’‰é’‰å­çš„æ—¶å€™ï¼Œæˆ‘用åˆîCº†(ji¨£n)它,˜q™å°±æ˜¯ä¸€¿Uä¾èµ–,依赖锤子完成钉钉子这件事情ã€?/font>

¾l„合是一¿Uæ•´ä½?部分的关¾p»ï¼Œåœ¨é—®é¢˜åŸŸä¸­è¿™¿Uå…³¾pÕd¾ˆæ˜Žæ˜¾åQŒç›´æŽ¥åˆ†æžå°±å¯ä»¥å¾—出的。例如轮胎是车的一部分åQŒæ ‘(w¨¨i)叶是æ ?w¨¨i)的一部分åQŒæ‰‹è„šæ˜¯íw«ä½“的一部分˜q™ç§çš„å…³¾p»ï¼Œéžå¸¸æ˜Žæ˜¾çš„æ•´ä½?部分关系ã€?br />
上述的几¿Uå…³¾p»ï¼ˆå…Œ™”、聚å?¾l„合、依赖)(j¨ª)在代码中可能以指针、引用、值等的方式在另一个类中出玎ͼŒä¸æ‹˜äºŽåŞ式,但在逻辑上他们就有以上的区别ã€?br />
˜q™é‡Œ˜q˜è¦è¯´æ˜Žä¸€ä¸‹ï¼Œæ‰€è°“çš„˜q™äº›å…³ç³»åªæ˜¯åœ¨æŸä¸ªé—®é¢˜åŸŸæ‰æœ‰æ•ˆï¼Œ¼›Õd¼€äº?ji¨£n)这个问题域åQŒå¯èƒ½è¿™äº›å…³¾pÕd°±ä¸æˆç«‹äº†(ji¨£n)åQŒä¾‹å¦‚可能在某个问题域中åQŒæˆ‘是一个木匠,需要拿着锤子åŽÕd¹²‹z»ï¼Œå¯èƒ½æ•´ä¸ªé—®é¢˜çš„æ˜q°å°±æ˜¯æˆ‘拿着锤子怎么钉桌子,钉椅子,钉柜子;既然整个问题ž®±æ˜¯æè¿°˜q™ä¸ªåQŒæˆ‘和锤子就不仅是偶然的依赖关系äº?ji¨£n),我和锤子的关¾pÕd˜å¾—非常的紧密åQŒå¯èƒ½å°±ä¸Šå‡ä¸ºç»„合关¾p»ï¼ˆè®©æˆ‘½Hç„¶æƒŒ™“v武侠ž®è¯´çš„剑不离íw«ï¼Œå‰‘亡äºÞZº¡...åQ‰ã€‚è¿™ä¸ªä¾‹å­å¯èƒ½æœ‰ç‚¹è’è°¬ï¼Œä½†ä¹Ÿæ˜¯äØ“(f¨´)äº?ji¨£n)说明一个道理,ž®±æ˜¯å…³ç³»å’Œç±»ä¸€æ øP¼Œå®ƒä»¬éƒ½æ˜¯åœ¨ä¸€ä¸ªé—®é¢˜é¢†åŸŸä¸­æ‰æˆç«‹çš„åQŒç¦»å¼€äº?ji¨£n)这个问题域åQŒä»–们可能就不复存在äº?ji¨£n)ã€?br />

4、泛化(¾l§æ‰¿åQ?/strong>




泛化关系åQšå¦‚果两个类存在泛化的关¾pÀL—¶ž®×ƒ‹É用,例如父和子,动物和老虎åQŒæ¤ç‰©å’ŒèŠÞq­‰ã€?br />ROSE生成的代码很½Ž€å•,如下åQ?/font>

#include "C11.h"

class C12 : public C11
{
}
;


5、这里顺便提一下模�/font>



上面的图对应的代码如下:(x¨¬)

template<int>
class C13 
{
}
;

˜q™é‡Œå†è¯´ä¸€ä¸‹é‡å¤åº¦åQŒå…¶å®žçœ‹å®Œäº†(ji¨£n)上面的描˜qîC¹‹åŽï¼Œæˆ‘们应该清楚äº?ji¨£n)各个关¾p»é—´çš„å…³¾pÖM»¥å?qi¨¢ng)具体对应到代码是怎么æ ïL(f¨¥ng)š„åQŒæ‰€è°“的重复度,也只不过是上面的扩展åQŒä¾‹å¦‚Aå’ŒB有着â€?对多”的重复度,那在A中就有一个列表,保存着B对象的N个引用,ž®±æ˜¯˜q™æ ·è€Œå·²ã€?br />
好了(ji¨£n)åQŒåˆ°˜q™é‡ŒåQŒå·²¾læŠŠä¸Šé¢çš„类囑օ³¾p»è¯´å®Œäº†(ji¨£n)åQŒå¸Œæœ›ä½ èƒ½æœ‰æ‰€æ”¶èŽ·äº?ji¨£n),我也费äº?ji¨£n)不少工夫啊(ç”Õd›¾ã€ç”Ÿæˆä»£ç ã€æˆªå›¾ã€å†™åˆ°BLOG上,唉,一头大汗)(j¨ª)。不˜q‡å¦‚果能让你å½Õdº•理解UML¾cÕd›¾çš„这些关¾p»ï¼Œä¹Ÿå€¼å¾—äº?ji¨£n)ã€?)


#  index 发表äº?006-08-17 11:42:00  I(y¨ªng)P: 218.81.82.*
对象åQˆæˆ–¾c»ï¼‰(j¨ª)间的关系ž®×ƒ¸¤¿Uï¼š(x¨¬)引用和ç‘ôæ‰Ñ€?其他关系都是在这两种基础上演化而成ã€?br />
#  jackezou 发表äº?006-08-17 22:04:00  I(y¨ªng)P: 221.216.173.*
聚合和组合那部分好象有些问题åQŒä¸¤è€…生成的代码怎么ä¼?x¨¬)是一æ ïL(f¨¥ng)š„呢?
è®°å¾—vckase.com有一½‹‡æ–‡ç« ã€ŠC++¾~–程杂谈之四åQšæ˜Oè°ˆUML
》,里面说聚合是一¿Uç›¸å¯ÒŽ(gu¨©)¾æ•£çš„关系åQŒå› æ­¤C9应该含有C10的指针而不是C10的对象ã€?

希望作者能¾l§ç®‹ž®Þp¿™é—®é¢˜è§£é‡Šä¸€ä¸‹ï¼Œè°¢è°¢åQï¼

#  一雨田 发表äº?006-08-17 22:33:00  I(y¨ªng)P: 219.136.188.*
对,聚合是一¿Uç›¸å¯ÒŽ(gu¨©)¾æ•£çš„关系åQŒæ–‡ç« é‡Œä¹Ÿè¯´äº?ji¨£n),在ROSE里面生成的代码确实和¾l„合是一æ ïL(f¨¥ng)š„。他们的松散应该不在于是指针、值或者引用,你可以尝试用ROSEç”ÖM¸¤ä¸ªå›¾â€”—聚合和¾l„合åQŒä½ å¯èƒ½å‘现ROSE不提供“组合关¾p Z€è¿™¿Uå›¾å½¢ï¼ˆå®žå¿ƒ(j¨©)菱åÅžåQŒæˆ‘用的是ROSE2002åQ‰ï¼Œç„¶åŽä½ æ‰“开关系(Aggregation)çš„Specification->Role B DetailåQŒä½ ä¼?x¨¬)发现有三项选(By Value, By Reference, UnspecifiedåQ‰ï¼Œåœ¨ä½ é€‰ä¸ŠBy Value的时候,菱åÅžž®±å˜æˆå®žå¿?j¨©)的了(ji¨£n),其他两个都是½Iºå¿ƒ(j¨©)菱åÅžåQŒè¿™ä¸‰ç§æˆ‘都试过äº?ji¨£n),生成的代码都是一æ ïL(f¨¥ng)š„åQŒæ‰€ä»¥æˆ‘想组合和聚合的区别应该是一¿Uè¯­ä¹‰ä¸Šçš„åŒºåˆ«ï¼Œè¯­ä¹‰ä¸Šçš„æ¾æ•£ã€‚å½“ç„¶åœ¨æˆ‘ä»¬çš„å°è±¡ä¸­å¯èƒ½æŒ‡é’ˆæ˜¯æ¯”å¯¹è±¡è¦æ¾æ•£ä¸€ç‚¹ï¼Œå› äØ“(f¨´)如果是对象的话,ž®Þp¦½Ž¡å®ƒçš„生命期äº?ji¨£n),所以实际应用时åQŒæˆ‘觉得可以象你说的那样åQŒèšåˆç”¨æŒ‡é’ˆåQŒç»„合用对象。:(x¨¬)åQ?br />
#  jackezou 发表äº?006-08-19 09:17:00  I(y¨ªng)P: 61.149.248.*
OK, 谢谢åQ?br />
#  sheismylife 发表äº?006-08-31 14:09:00  I(y¨ªng)P: 218.1.97.*
字太ž®äº†(ji¨£n)

#  一雨田 发表äº?006-09-07 22:36:00  I(y¨ªng)P: 222.129.97.*
˜q™ä¸ªå­—是按照IE 讄¡½®çš„,如果惛_¿«æ¯‚®¾¾|®å­—的大ž®å°±æŒ‰ä½CTRL然后用鼠标滚轮上下滚ž®×ƒ¼š(x¨¬)看到效果äº?ji¨£n)ã€?/div>


]]>¾cÖM¸Ž¾cÕd…³¾pȝš„UML图与代码表现åQˆè{载和自己的补充)(j¨ª)http://www.aygfsteel.com/flysky19/articles/86524.html不断前进的小乌龟不断前进的小乌龟Sat, 09 Dec 2006 04:08:00 GMThttp://www.aygfsteel.com/flysky19/articles/86524.htmlhttp://www.aygfsteel.com/flysky19/comments/86524.htmlhttp://www.aygfsteel.com/flysky19/articles/86524.html#Feedback0http://www.aygfsteel.com/flysky19/comments/commentRss/86524.htmlhttp://www.aygfsteel.com/flysky19/services/trackbacks/86524.html 原文åQ?a >http://www.javaeye.com/post/182099
2006òq?2æœ?0æ—?br />
关键å­?   OO 泛化,依赖,å…Œ™”,聚合

¾cÖM¸Ž¾cÖM¹‹é—´çš„关系对于理解面向对象å…ähœ‰å¾ˆé‡è¦çš„作用åQŒä»¥å‰åœ¨é¢è¯•的时候也¾lå¸¸è¢«é—®åˆ°è¿™ä¸ªé—®é¢˜ï¼Œåœ¨è¿™é‡Œæˆ‘ž®×ƒ»‹¾lä¸€ä¸‹ã€?br />¾cÖM¸Ž¾cÖM¹‹é—´å­˜åœ¨ä»¥ä¸‹å…³¾p?
(1)泛化(Generalization)
(2)å…Œ™”(Association)
(3)依赖(Dependency)
(4)聚合(Aggregation)

UML图与应用代码例子:
1.泛化(Generalization)
[泛化]
表示¾cÖM¸Ž¾cÖM¹‹é—´çš„¾l§æ‰¿å…³ç³»åQŒæŽ¥å£ä¸ŽæŽ¥å£ä¹‹é—´çš„ç‘ô承关¾p»ï¼Œæˆ–ç±»å¯ÒŽ(gu¨©)Ž¥å£çš„å®žçŽ°å…³ç³»ã€‚ä¸€èˆ¬åŒ–çš„å…³¾pÀL˜¯ä»Žå­¾cÀLŒ‡å‘父¾cȝš„åQŒä¸Ž¾l§æ‰¿æˆ–实现的æ–ÒŽ(gu¨©)³•相反ã€?br />[具体表现]
父类 父类实例åQnew 子类()
[UML图](�.1)

å›?.1Animal¾cÖM¸ŽTiger¾c?Dog¾cȝš„依赖关系

[代码表现]

  1. class  Animal{}   
  2. class  Tiger  extends  Animal{}   
  3. public   class  Test   
  4. {   
  5.      public   void  test()   
  6.     {   
  7.         Animal a= new  Tiger();   
  8.     }   
  9. }  

2.依赖(Dependency)
[依赖]
对于两个相对独立的对象,当一个对象负责构造另一个对象的实例åQŒæˆ–者依赖另一个对象的服务æ—Óž¼Œ˜q™ä¸¤ä¸ªå¯¹è±¡ä¹‹é—´ä¸»è¦ä½“çŽîCØ“(f¨´)依赖关系ã€?br />[具体表现]
依赖关系表现åœ?font color="#ff0000">局部变é‡?/font>åQ?font color="#ff0000">æ–ÒŽ(gu¨©)³•的参æ•?/font>åQŒä»¥å?qi¨¢ng)å¯?font color="#ff0000">é?r¨´n)态方法的调用

[现实例子]
比如说你要去拧螺丝,你是不是要借助(也就是依èµ?èžÞZ¸åˆ€(Screwdriver)来帮助你完成拧螺ä¸?screw)的工ä½?br />[UML表现](å›?.2)


å›?.2 Person¾cÖM¸ŽScrewdriver¾cȝš„依赖关系

[代码表现]

  1. public class Person{   
  2.     /** 拧螺丝�/  
  3.     public void screw(Screwdriver screwdriver){   
  4.         screwdriver.screw();   
  5.     }   
  6. }  

3.å…Œ™”(Association)
[å…Œ™”]
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系æ—Óž¼Œ˜q™ä¸¤ä¸ªå¯¹è±¡ä¹‹é—´äØ“(f¨´)å…Œ™”关系ã€?br />[具体表现]
å…Œ™”关系是ä‹Éç”?font color="#ff0000">实例变量
来实�br />[现实例子]
æ¯”å¦‚å®¢æˆ·å’Œè®¢å•ï¼Œæ¯ä¸ªè®¢å•å¯¹åº”ç‰¹å®šçš„å®¢æˆøP¼Œæ¯ä¸ªå®¢æˆ·å¯¹åº”一些特定的订单åQ›å†ä¾‹å¦‚公司和员工,每个公司对应一些特定的员工åQŒæ¯ä¸ªå‘˜å·¥å¯¹åº”一特定的公å?br />[UML图] (å›?.3)

å›?.3 公司和员工的兌™”关系


[代码表现]
  1. public class Company{   
  2.     private Employee employee;   
  3.     public Employee getEmployee(){   
  4.         return employee;   
  5.     }   
  6.     public void setEmployee(Employee employee){   
  7.         this.employee=employee;   
  8.     }   
  9.     //公司˜qä½œ   
  10.     public void run(){   
  11.         employee.startWorking();   
  12.     }   
  13. }  
(4)聚合åQˆAggregationåQ?/font>
[聚合]
当对象A被加入到对象Bä¸­ï¼ŒæˆäØ“(f¨´)对象B的组成部分时åQŒå¯¹è±¡B和对象A之间䏸™šé›†å…³¾p…R€‚聚合是兌™”关系的一¿Uï¼Œæ˜¯è¾ƒå¼ºçš„å…Œ™”关系åQŒå¼ºè°ƒçš„æ˜?font color="#ff0000">整体ä¸?font color="#ff0000">部分
之间的关¾p…R€?br />[具体表现]
与关联关¾pÖM¸€æ øP¼Œèšåˆå…³ç³»ä¹Ÿæ˜¯é€šè¿‡å®žä¾‹å˜é‡æ¥å®žçŽ°è¿™æ ·å…³¾pȝš„。关联关¾pÕd’Œèšåˆå…³ç³»æ¥è¯­æ³•上是没办法区分的,ä»?font color="#ff0000">语义
上才èƒ?font color="#ff0000">更好的区åˆ?/font>两者的区别ã€?br />[å…Œ™”与聚合的区别]
(1)å…Œ™”关系所涉及(qi¨¢ng)的两个对象是处在同一个层‹Æ¡ä¸Šçš„。比如äh和自行èžRž®±æ˜¯ä¸€¿Uå…³è”å…³¾p»ï¼Œè€Œä¸æ˜¯èšåˆå…³¾p»ï¼Œå› äØ“(f¨´)äºÞZ¸æ˜¯ç”±è‡ªè¡Œè½¦ç»„成的ã€?br />聚合关系涉及(qi¨¢ng)的两个对象处于不òq³ç­‰çš„层‹Æ¡ä¸ŠåQŒä¸€ä¸ªä»£è¡¨æ•´ä½“,一个代表部分。比如电(sh¨´)脑和它的昄¡¤ºå™¨ã€é”®ç›˜ã€ä¸»æ¿ä»¥å?qi¨¢ng)内存就是聚集关¾p»ï¼Œå› äØ“(f¨´)ä¸ÀL¿æ˜¯ç”µ(sh¨´)è„‘çš„¾l„成部分ã€?br />(2)对于å…ähœ‰èšé›†å…³ç³»åQˆå°¤å…¶æ˜¯å¼ø™šé›†å…³¾p»ï¼‰(j¨ª)的两个对象,整体对象ä¼?x¨¬)制¾U¦å®ƒçš„组成对象的生命周期。部分类的对象不能单独存在,它的生命周期依赖于整体类的对象的生命周期åQŒå½“整体消失åQŒéƒ¨åˆ†ä¹Ÿž®±éšä¹‹æ¶ˆå¤±ã€‚比如张三的ç”?sh¨´)脑被偷了(ji¨£n),那么电(sh¨´)脑的所有组件也不存在了(ji¨£n)åQŒé™¤éžå¼ ä¸‰äº‹å…ˆæŠŠä¸€äº›ç”µ(sh¨´)è„‘çš„¾l„äšgåQˆæ¯”如硬盘和内存åQ‰æ‹†äº?ji¨£n)下来ã€?br />[UML图](å›?.4)

å›?.3 ç”?sh¨´)脑和组件的聚合关ç³?/font>

[代码表现]
  1. public class Computer{   
  2.     private CPU cpu;   
  3.     public CPU getCPU(){   
  4.         return cpu;   
  5.     }   
  6.     public void setCPU(CPU cpu){   
  7.         this.cpu=cpu;   
  8.     }   
  9.     //开启电(sh¨´)è„?  
  10.     public void start(){   
  11.         //cpu˜qä½œ   
  12.         cpu.run();   
  13.     }   
  14. }  


[参考资料]
1.《Java与模式ã€?阎宏 ¾~–è‘—) ½W?ç«?¾lŸä¸€å»ºæ¨¡è¯­è¨€UML½Ž€ä»?/strong>



补充åQ?br />1.¾cÖM¹‹é—´çš„关系一般分为四¿Uï¼š(x¨¬)å…Œ™”åQŒä¾èµ–,泛化åQŒå®žçŽŽÍ¼›
而聚合和¾l„合只是一¿Uç‰¹ŒDŠçš„å…Œ™”关系åQ?
另外åQŒå…³è”,泛化和实çŽîC¸¥æ ¼æ¥è¯´ä¹Ÿéƒ½æ˜¯ä¾èµ–关系åQ?br />
而楼ä¸ÀLŠŠå®žçŽ°å½’äØ“(f¨´)泛化关系中了(ji¨£n)åQŒè¿™æ˜¯ä¸å¯¹çš„åQ?br />泛化对应extendsåQ›å®žçŽ°å¯¹åº”implementsåQ›å¯¹åº”java语法ž®±å¾ˆå¥½ç†è§£ï¼›

参考资料:(x¨¬)
《UML参考手册》:(x¨¬)½W¬å››ç«?4.3关系 36™å?05òq?月出版;
《UML用户指南》:(x¨¬)
97™åµä¸­è¯ß_(d¨¢)¼š(x¨¬)
“泛化、关联,甚至包括实现其实都是某种依赖åQŒåªä¸è¿‡å®ƒä»¬æœ¬èín有èƒö够重要的语义。如果你先对泛化、关联和实现建模åQŒç„¶åŽæŠŠæ‰€æœ‰å…¶ä»–å…³¾p»éƒ½çœ‹ä½œæ˜¯ä¾èµ–,你就不会(x¨¬)犯错误。â€?br />
101™åµï¼ˆé«˜çñ”关系一章)(j¨ª)中说åQ?br />“Aggregation/Composition 聚合/¾l„合 只是 Association å…Œ™” 的一¿Uä¿®é¥ŽÍ¼Œä¸€¿Ué«˜¾U§ç”¨æ³•,用于¾l†èŠ‚å»ºæ¨¡åQˆç»„合表½CÞZ¸€¿Uå¼ºæ‹¥æœ‰çš„聚合,整体与部分的生命周期一è‡ß_(d¨¢)¼‰(j¨ª)。â€?br />
åQˆå‚考:(x¨¬)http://www.umlchina.com/best/g24/u1127470.htmåQ?br />
2.¾l™ä¸Š˜q°æ–‡ç« è¡¥å……一个实现的例子åQ?br />å›?10åQšProfessor¾cÕd’ŒStudent¾cÕd®žçްPerson接口的类囑֮žä¾? src=
åQˆä¸˜q‡ï¼Œåº”该¾l™æŽ¥å£å’Œå®žçŽ°éƒ½åŠ ä¸ŠgetEmailåQŒgetTel之类的方法,˜q™æ ·æ‰æ›´å¥½çš„体现接口的含义;囑֒Œjava代码有待自己完善。)(j¨ª)

3.补充¾l„合的例子和uml图(实心(j¨©)åQ‰ï¼š(x¨¬)
¾l„合关系的uml图:(x¨¬)
先画聚合关系åQŒï¼ã€‹â€œopen specification”-》“by value”;
˜q™æ—¶èšåˆå…³ç³»çš„图形就变成实心(j¨©)的了(ji¨£n)åQ?/p>

]]> Ö÷Õ¾Ö©Öë³ØÄ£°å£º ÁÙÒÊÊÐ| ¸»Ô´ÏØ| ÕØÔ´ÏØ| ˼éÊÐ| ·áÏØ| ¸·³ÇÏØ| º¬É½ÏØ| ÃÖÀÕÏØ| ÌìÕòÏØ| ÄÛ½­ÏØ| ¾ÅÕ¯¹µÏØ| ×ÊÑôÊÐ| ÇåË®ÏØ| »³ÈáÇø| ³¤Í¡ÏØ| ʯ¼ÒׯÊÐ| ·ÚÎ÷ÏØ| ͨ»¯ÊÐ| Ê¯Â¥ÏØ| äÒÔ´ÏØ| ãòË®ÏØ| Áé´¨ÏØ| äàË®ÏØ| ʯ×ìɽÊÐ| ÍþÐÅÏØ| ³¤º£ÏØ| º«³ÇÊÐ| Ì«ºÍÏØ| »ôÇñÏØ| ÁÙÎäÏØ| ·Ê¶«ÏØ| À¶ÌïÏØ| Ð˳ÇÊÐ| ³½ÏªÏØ| ÄþÎäÏØ| ½øÏÍÏØ| Î÷»ªÏØ| ÉñÅ©¼ÜÁÖÇø| ºÓ±±Çø| °¢°Ó| ¼Î¶¨Çø|