uml 继承_【简易设计模式02】UML中的类图关系及类图符号表示法

0a50ad4c020681152ab0dbea6a3a9108.png

总第54篇

在第53篇中,我们已经对设计模式进行了系统性的介绍,为了更好地理解设计模式,本文将对UML(Unified Modeling Language) 描述的类图关系进行详细地介绍,并对其相应的符号表示方法进行归纳。

1.面向对象中的类间关系

在进行面向对象系统设计时,我需要根据系统的需求来抽象出一些类,并设计类与类之间的关系,这就是我们常说的业务建模。设计优良的类间关系是我们实现“高内聚、低耦合”系统的前提条件,这里就来详细总结梳理一下各种类间关系和它们之间的区别与联系。

A.继承

继承是指一个类(称为子类或子接口)继承另外一个类(称为父类或父接口)的功能,并可以增加它自己新功能的能力。继承是类与类或者接口与接口间最常见的关系。如果继承的父类是抽象类,并且父类中有抽象方法,那么,抽象方法必须在子类中实现。

B.实现

实现是指一个类实现接口的功能,它是类与接口之间最常见的关系。

C.依赖

依赖是指两个独立的对象,当一个对象负责构造另一个对象实例,或者依赖另一个对象的服务时,这两个对象间体现为依赖关系。简单来说,就是一个类A使用到了类B,而这种使用关系具有偶然性、临时性的弱关系,但是类B的改变会影响到类A。比如,我们写代码要用电脑,此时人与电脑间的关系就是依赖关系。在代码层面表现为, 类B作为类方法参数、或方法中的局部变量、或静态方法,被类A使用。

D.关联

关联体现为两个类或者类与接口间语义级别上的一种强依赖关系,这种关系比依赖更强,不是偶然性与临时性的,而是长期的,关联双方平等的。关联关系分为单向关联和双向关联。单向关联表现为:类A中使用了类B,其中类B作为类A的成员变量;双向关联表现为:类A中使用了类B作为成员变量,同时类B中也使用了类A作为成员变量。

E.聚合

聚合是关联关系的一种特例,耦合度强于关联,它体现的是整体与部分、占有(has-a)的关系。此时,整体与局部之间是可以分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以被多个整体对象所共享。在代码层面上,聚合与关联是一样的,仅在语义上有所区别,关联关系的对象间是相互独立的,而聚合关系的对象间存在包含关系。

F.组合

组合也是关联关系的一种特例,是比聚合的耦合度更强的关联关系,故也称为强聚合,它同样体现的整体与部分、必有(contains-a)的关系,但此时的整体与部分是不可分割的,整体的生命周期与部分的生命周期一致,共生共死,并且部分单独存在时没有任何意义。在代码层面上,组合与关联也是一样的,仅在语义上有所区别。

对于继承和实现,这两种关系体现的类与类、或者类与接口间的纵向关系;另外四种关系则体现的类与类、或者类与接口间的横向、引用关系,是比较难区分的,有些关系仅能从语义上进行区分,但总的来说,这四种关系所表现的强弱程度依次为:组合>聚合>关联>依赖

2.UML类图关系及其区别

A.类

类在UML图中包含三个组成部分:类名、类的成员变量(属性)和类的方法。其中,属性和方法前可以加修饰符,加号+表示具有public可见性,减号-表示具有private可见性,井号#表示具有protected可见性。 如果属性和方法具有下划线,表明它是静态的,如下图示例。第一层显示类的名称,若是抽象类,用斜体显示;第二层是成员变量(属性);第三层是类方法。

413219540c002bbaf79ae53edc0b2a85.png

B.包

UML图中,一个包直接对应于Java中的一个包, 在Java中,一个包可能包含其他包、类或者同时含有这两者。在进行建模时,系统会有逻辑性的包对你的模型进行组织,你还会拥有物理性的包,它将直接转换成系统中的Java包,包名称即是对这个包的唯一标识。

bf5407cb1f6f78cc78834d608a2941ec.png

C.接口

接口是一系列操作的集合,它指定了一个类所提供的服务,它直接对应Java中的一个标准类型 ,接口在UML图中可以用下图所示表示,也可以用附加了<<interface>>的标准类来表示。 如图所示,第一层是接口名称,第二层是接口方法。

3b83dcc848ae269a91f8ffdfe2cf04da.png

D.泛化(继承)

泛化表示一个泛化的元素与一个更具体的元素间的关系,用于对继承关系进行建模,如下图所示,用空心三角形+实线来表示。

27c3788be076eec3a379f3b5f992e1cc.png

E.实现

UML类图关系中,实现关系将一种模型元素与另一种模型元素连接起来,其中接口只是行为的说明。如图所示,用空心三角+虚线表示。

f4bd66f1b584e09b01910f79f33cafe2.png

F.依赖

UML类图关系中,依赖表示两个或多个模型元素间语义上的关系, 它表示:提供者的某此变化会要求或指示依赖关系中的客体的变化。如图所示,用虚线箭头表示。

c1819e119d19800f1421b4c17e612842.png

G.关联

UML类图关系中,关联描述了系统中对象或实例间的离散连接,关联带有系统中各个对象之间关系的信息。 如下图所示,用实线箭头表示,其中箭头是可选的,它用于指定导航能力。如果没有箭头,暗示一种双向导航能力,其后面的数字是多重性修饰符,暗示实例间的关系。比如,下图中Employee可以有0个或更多的TimeCard对象,而每个TimeCard只能从属于单独一个Employee

c6d83156afb145e909959cd6f8db80c8.png

H.聚合

聚合是关联关系的一种特例,代表两个类间的整体与局部关系。聚合是has-a关系,这暗示着 UML类图中不存在回路,即只能是一种单向关系。如下图所示,用空心菱形+实线箭头表示。

c20390586d28f3bda7f5f8829e3e0351.png

I.组合

组合也是关联的一种特例,是contains-a关系, 整体与部分有相同的生命周期,部分不可与其它整体共享。如下图所示,用实心菱形+实线箭头表示。

7e771544266719c628e9d85dc666e7ac.png

通过理解类间的各种关系以及这些关系在UML类图中的表示方法,你将可以更好地学习设计模式,更好地完成你自己的软件设计。

本文到此结束!下篇继续!

如果对你有帮助,请随手 点赞赞赏!关注本专栏,更多干货与你分享。

=======================================================

欢迎【关注、私信 @武三郎。我们一起交流一起进步。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值