UML类图

本文详细介绍了UML类图中的重要概念,包括继承、泛化、实现、依赖、关联、聚合和组成。通过实例解析了它们的区别和使用场景,如Java中的接口继承、类的实现以及不同类型的关联关系。
摘要由CSDN通过智能技术生成

目录

UML类图

统一建模语言(英语:Unified Modeling Language,缩写 UML)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iwCtO8nq-1604042182857)(https://upload.wikimedia.org/wikipedia/commons/9/93/Uml_classes_en.svg)]

PS:上述链接没办法直接被CSDN爬取到,需要查看的话,可以直接访问Uml_classes_en

本文内容大多来自维基百科《类图》或者UML类图官网-The Unified Modeling Language

继承(Inheritance, IS-A)

如果一个类别B“继承自”另一个类别A,就把这个B称为“A的子类”,而把A称为“B的父类别”也可以称“A是B的超类”。用带实线的空心三角箭头表示。继承可以使得子类具有父类别的各种属性和方法,而不需要再次编写相同的代码。在令子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能。另外,为子类追加新的属性和方法也是常见的做法。

现今面向对象程序设计技巧中,继承并非以继承类别的“行为”为主,而是继承类别的“类型”,使得组件的类型一致。另外在设计模式中提到一个守则,“多用合成,少用继承”,此守则也是用来处理继承无法在运行期动态扩展行为的遗憾。

比如医院中有病人、医生、护工、护士等等各行各业的人,为了整个模型建立,同时减少重复的模型定义,我们可以定义一个具有标准人(Person)属性的抽象类,然后对于每一个实际人做一个具体的实现,比如下图的病人(Patient)和抽象的人(Person)的继承关系图。

继承

实际例子:

典型的比如Oracle JDK 11java.util中:

  • SetListMapSortedSetSortedMap等接口均继承自Collection接口
  • HashMapLinkedHashMapTreeMap等均继承自AbstractMap
  • ArrayListLinkedListVector等均继承自AbstractList(**注:**这里其实存在一个Java圈比较著名的jdk设计问题,也即Stack为了便捷实现,选择继承Vector而不是最基础的AbstractList,从而造成用户在使用过程中,可以对Stack的任意位置进行直接插入,破坏了Stack的定义,因此官方建议使用Deque模拟栈而不是直接使用Stack类。)

泛化(Generalization)

泛化,即继承的反方向,指的是一个类(称为父类、父接口)具有另外的一个(或一些)类(称为子类、子接口)的共有功能。子类可视为其父类的特例,并可以增加新功能。用带空心三角形箭头的实线表示。

**注:**继承和泛化是同一个关系图(inheritance)的两端。

实现(Realization)

实现(Realization)指的是一个class类实现interface接口(可以是多个)的功能;在Java中此类关系通过关键字implements明确标识。用带空心三角形箭头的虚线表示。

比如一个网站提供给外部一个查询的接口,外部不用关注这个网站怎么实现的查询,只需要知道单击查询(调用查询接口)就可以获得返回结果,所以外部只需要拿到SiteSearch接口即可,而网站自己为了提供服务,需要自己在SearchService中实现对外承诺的功能。

Interface realization dependency from a classifier to an interface.

实际例子

典型的比如Oracle JDK 11java.util中:

  • ArrayListLinkedListVectorAbstractList等均是List接口的实现<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值