通过实例搞清类与类的关系以及类与接口的关系,同时学会类图。
注意:有资料对接口的表示法分为:矩形表示法,棒棒糖表示法,本文用Rational Rose工具画的图,Rational Rose没有矩形表示法表示接口一项。
看上面类图分三层:第一层:表示类名。第二层表示类的特性,通常是字段或属性。第三层表示类的操作,通常指的是方法和行为。
接口用一个带有圆圈来进行表示,同过一条Realize线与实现它的类相连接。
interface Language{ void speak(); }
class Bird extends Animal{ }关联关系,用实现箭头表示,企鹅需要知道气候变化来了解气候规律,当一个类知道另一个类时,可有关联表示。
class Penguin extends Bird{ private Climate climate; //在企鹅中引用到气候Climete 对象。 }
class WideGooseAggregate{ private WideGoose [] arraryWideGoose; //在雁群WideGooseAggregate类中,有大雁数组对象arrayWideGoose。 }聚合关系用空心的菱形和实现箭头表示。
合成也叫组合是一种强的”拥有关系“体现了严格的部分和整体的关系,部分和整体的生命周期一样。合成关系的连线两端有数字表示基数,表明这一段类可以有几个实例。一个鸟俨然只有两个翅膀。若一个类有无数个实例的话,用n表示。关联关系和聚合关系也可以有基数。合成关系用实心的菱形和实线箭头表示。
class Bird{ privite Wing wing; public Bird(){ wing = new Wing();//在Bird类中初始化时,实例化wing,它们之间同时生成。 } }
动物依赖水和氧气才能存在。它们是依赖关系,用虚线箭头表示。
abstract class Bird{ public metaBolism(Oxygen oxygen,Water water){ } }
上图用Enterprise Architect 7.5所画。
1. 通知分为一般通知、割接通知、重保通知。这个是继承关系。
2. NoticeService和实现类NoticeServiceImpl是实现关系。
3. NoticeServiceImpl通过save方法的参数引用Notice,是依赖关系。同时调用了BaseDao完成功能,也是依赖关系。
4. 割接通知和故障单之间通过中间类(通知电路)关联,是一般关联。
5. 重保通知和预案库间是聚合关系。因为预案库可以事先录入,和重保通知没有必然联系,可以独立存在。在系统中是手工从列表中选择。删除重保通知,不影响预案。
6. 割接通知和需求单之间是聚合关系。同理,需求单可以独立于割接通知存在。也就是说删除割接通知,不影响需求单。
7. 通知和回复是组合关系。因为回复不能独立于通知存在。也就是说删除通知,该条通知对应的回复也要级联删除。
注意:工具本身没有达到生成的代码准确无误。
步骤:【1】选择Tools(工具)|java/j2EE|Project Specification(项目规范)命令。
【2】在classpath下添成的路径,可以选择的目标是生成一个jar/zip文件中或在一个目录中
【3】选择Tools|java/j2EE|Generate Code(生成代码命令来生成代码)。
以下面的类模型为例:
//Source file: C:\\Users\\xx\\Desktop\\Book.java import Title; public class Book { private Long bookId; private Integer titleId; private String iSBN; private String author; private String publisher; private String name; private Date publishDate; /** * @roseuid 548EC70F0019 */ public Book() { } }
为了方便用刚刚生成的代码来逆向工程。选择工具Tools|java/j2EE|Reverse Engineer命令来逆向工程。
为了避免影响,我们把上面的代码:
//Source file: C:\\Users\\xx\\Desktop\\Book.java
/**
* @roseuid 548EC70F0019
*/ 去掉,最后生成的就是我们上面的那个类模型。
参考:
http://www.uml.org.cn/oobject/201104212.asp
注意注意
注意: