设计模式之UML类图
学习设计模式,UML类图是基础,通过UML类图,能更好地和大家交流,也能很容易就表达出自己的设计想法,它就好比普通话,是一种标准语言。
现在流行的主要工具有两种:RationalRose和MicrosoftVisio,这两种工具都比较易用,选择哪种工具就看个人的喜好了。本人对Microsoft的软件比较有好感,所以自然MicrosoftVisio2003是我的首选。
类:
矩形框代表一个类(如图-1),类图分为三层,第一层为类的名称,如果是抽象类类名用斜体字表示,如图中动物类所示。第二层是类的特性(通常就是类的字段和属性)。第三层为类的操作(通常就是方法或行为)。注意前面的符号,“+”表示public,“-”表示private,“#”表示protected.
图一
动物类是一抽象类,它是不能被实例化的,而猪类可以被实例化。
接口:
UML类图中接口有两种表示方法:矩形表示法(如图-2中的飞翔的接口)和棒棒糖表示法(如图-2中唐老鸭类中实现讲人话的接口)。矩形表示法,顶端有<<接口>>或者<<interface>>,第一行:接口名称,第二行:接口方法。棒棒糖表示法,圆圈旁为接口名称,接口方法在实现类中出现,如唐老鸭类中的讲话。
(图-2)
泛化(Generalization)
UML类图中泛化关系表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般化的关系是从子类指向父类的,与继承或实现的方法相反。具体表现:父类父类实例=new子类();
(图-3)
(图-4)
用空心三角形+实线来表示继承(如图-3)。在静态结构图中,在父类和子类间拖放归纳连接,箭头指向父类,另一段指向子类。关联关系是使用实例变量来实现。
用空心三角形+虚线来表示实现接口(如图-4)。在静态结构图中,右击任意类形状(“类”、“参数化的类”、“实用程序”或“元类”),单击“形状显示选项”,然后在“常规选项”下选择“实现链接”。将类形状上的实现链接的控制手柄(黄色小菱形)粘附到接口、类或其他元素的连接点上。
关联(Association)
UML类图中对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。关联又分为双向关联、单向关联、自身关联。
双向关联:双向关联是两个类之间的联接。关联总是被假定是双向的;这意味着,两个类彼此知道它们间的联系,除非你限定一些其它类型的关联。如(图-5)Flight的例子,显示了在Flight类和Plane类之间的一个标准类型的关联。
(图-5)
一个双向关联用两个类间的实线表示。在线的任一端,你放置一个角色名和多重值。图-5显示Flight与一个特定的Plane相关联,而且Flight类知道这个关联。因为角色名以Plane类表示,所以Plane承担关联中的“assignedPlane”角色。紧接于Plane类后面的多重值描述0...1表示,当一个Flight实体存在时,可以有一个或没有Plane与之关联(也就是,Plane可能还没有被分配)。图-5也显示Plane知道它与Flight类的关联。在这个关联中,Flight承担“assignedFlights”角色;图-5的图告诉我们,Plane实体可以不与flight关联(例如,它是一架全新的飞机)或与没有上限的flight(例如,一架已经服役5年的飞机)关联。
由于对那些在关联尾部可能出现的多重值描述感到疑惑,下面列出了一些多重值及它们含义的例子(0..1:0个或1个;1:只能1个;0..*:0个或多个;*:0个或多个;1..*:一个或多个;等等。)
UML类图单项关联:在一个单向关联中,两个类是相关的,但是只有一个类知道这种联系的存在。(图-6)显示单向关联的透支财务报告的一个实例。
(图-6)
一个单向的关联,表示为一条带有指向已知类的开放箭头(不关闭的箭头或三角形,用于标志继承)的实线。如同标准关联,单向关联包括一个角色名和一个多重值描述,但是与标准的双向关联不同的时,单向关联只包含已知类的角色名和多重值描述。在(图-6)中的例子中,OverdrawnAccountsReport知道BankAccount类,而且知道BankAccount类扮演“overdrawnAccounts”的角色。然而,和标准关联不同,BankAccount类并不知道它与OverdrawnAccountsReport相关联。
【编辑推荐】