一个类在图中的表示方法有六大类:泛化(Generalization)、实现(Realization)、依赖(Dependence)、关联(Association)、聚合(Aggregation)、组合(Composition)
泛化
在java中就是继承关系,继承被称为is-a 关系,因为从一个类继承而来的类能够被当成父类来使用。当一个类被多个类共享特征的时候也就是泛化;类似的,当一个类表示一般类的特殊实例,这是特化,在UML中我们用带空心三角形的直线来表示,指向父类。在UML术语中,泛化就是描述的继承关系
实现
在UML中的实现就是说明类与接口的关系,也可以表述成面向对象中类的接口编程。在UML中我们用带空心三角形的虚线表示,指向接口。这里是RestTemplate的继承实现类图;RestTemplate实现了RestOperations接口,这里定义了一堆的请求方法,
依赖
依赖是最通用的UML关系类型之一,是Users-A的关系,表示一个类以某种方式依赖于另外一个类,另外的一个类可能依赖或者不依赖第一个类。这种依赖关系我们用带箭头的虚线表示,箭头指向被依赖对象。在面向对象编程语言中,依赖关系用于描述一个类在方法的声明中是否包含第二个类的参数,或者说它只是通过方法将第二个类传递给其他类,而不是通过创建第二个类的实例。
关联
关联表示两个实体之间的关系,通常关系用箭头表示。有两种类型:聚合和组合
聚合
聚合是一种特殊类型的关系,可以视为 Has-a的关系:一个类在逻辑上包含一个类,但所包含的类的实例又可以独立于第一个类在其上下文之外使用。在UML类图中聚合用带空心菱形的直线表示,其中菱形指向整体
组合
一个类是另外一个类的组成部分就可以称两者间存在组合关系。和聚合不同的是,当主类不存在的时候,依赖类也不存在。
在UML类图中,用带实心的菱形直线表示,其中菱形指向整体。
这是简单的六大关系的描述。类图之后补充。
======================摘录 《Thinking.in.UML》======================
面向对象的精髓是抽象,同时也是面向对象的困难所在,解决这个鸿沟:
■ 一种把现实世界映射到对象世界的方法。
■ 一种用对象世界描述现实世界的方法。
■ 一种验证对象世界行为正确反映了现实世界的方法。
UML之后代表的就是面向对象的分析设计方法。这里是《Thinking.in.UML》对面向对象的经典描述
从微观角度说,这些独立的对象有着一系列奇妙而古怪的特性。例如,对象有着坚硬的外壳,从外部看来,除了它用来与外界交互的消息通道之外,对象内部就是一个黑匣子,什么也看不到,这称为封装;再例如对象可以结合在一起形成新的对象,结合后的对象具有前两者特性的总和,这称为聚合;对象可以繁育,产下的孩子将拥有父辈全部的本领,这称为继承;每个对象都有多个外貌,在不同情况下可以展现不同的外貌,但本质只有一个,这就是接口;而多个对象却可能长着相同的脸,但同样的这张脸背后却是不同的对象,它们有着不同的行为,这就是多态。
从宏观角度说,对象是“短视”的,它不知道也无法理解它所处的宏观环境,也不知道它的行为会对整个宏观环境造成怎样的影响。它只知道与它有着联系的身边的一小群伙伴,这称为依赖,并与小伙伴间保持着信息交流的关系,这称为耦合。同时对象也是“自私”的,即便在伙伴之间,每个对象也仍然顽固地保护着自己的领地,这称为类属性,只允许其他人通过它打开的小小窗口,这称为方法,进行交流,从不允许对方进入它的领地。
然而对象也喜欢群居,并且总是“物以类聚,人以群分”。这些群居的对象有着一些相似的性质,它们依靠这些相似的性质来组成一个部落。对象们寻找相似性质并组成部落的过程称为抽象,它们组成的部落称为类;部落里的每个成员既有共同的性质又有自己的个性,我们只有把特有的个性赋给部落成员才能区分它们并使它们活动起来,这称为实例化。