首页 > 其他分享 >UML之泛化、特化和继承

UML之泛化、特化和继承

时间:2024-12-31 11:08:36浏览次数:1  
标签:泛化 继承 子类 Book 超类 UML 属性 特化

在UML(统一建模语言)中,泛化(Generalization)和特化(Specialization)是面向对象思想中继承(Inheritance)关系的重要概念,它们描述类与类(或用例与用例、参与者与参与者等)之间的一般与特殊的关系。
泛化是一种表示类之间继承关系的方式,它指定了子类如何特化超类(父类)的所有特征和行为。在UML中,泛化关系通过带空心三角箭头的实线表示,箭头指向超类。这种关系表明,子类是一种特殊的超类,它继承了超类的所有属性、操作(方法)以及与其他类的关系,并且可能添加新的属性、操作或改变超类某些行为的具体实现。泛化关系支持代码重用和多态,是实现软件设计复用性和灵活性的重要手段。
特化是泛化的逆过程,即从一般到特殊的过程。虽然UML中更常用“泛化”来描述这种关系,但“特化”一词在面向对象编程和UML的语境下,也常被用来描述子类如何成为超类的一个特定版本或实现。特化意味着子类不仅继承了超类的所有属性和操作,还可能对这些属性和操作进行特定的实现或限制,以满足特定的需求。特化是面向对象编程中实现多态性和代码复用的基础之一。
简而言之,泛化和特化是同一继承关系的两个不同视角:泛化沿空心三角箭头向上移动,它从父类的角度描述子类如何成为其特殊化版本,而特化则沿空心三角箭头向下移动,它从子类的角度描述其如何特化或具体化父类的属性和行为。这两个概念在UML中用于清晰地表示类之间的继承关系,促进软件设计的复用性和可维护性。
当然,泛化和特化这种继承关系不只可以用于描述类的关系,也可以应用于用例、参与者等UML元素。
下图使用继承关系描述了UML中不同图之间的关系。

在上图中,对其顶层关系可以做出如下解读:
·结构图(Structure Diagram)是一种图(Diagram)。
·结构图(Structure Diagram)是图(Diagram)的一种(或某类图)。
·结构图(Structure Diagram)是图(Diagram)的一种特化。
·图(Diagram)是结构图(Structure Diagram)的泛化。
·结构图(Structure Diagram)和行为图(Behavior Diagram)是图(Diagram)的子类型。
·图(Diagram)是结构图(Structure Diagram)和行为图(Behavior Diagram)的父类型。
特化关系允许子类替代超类,为了实现替代,超类上所有可用的特性(属性、操作、约束、信号、接收和关联)也必须在子类上可用。
在UML图中描述这种继承关系时,可以让所有子类在超类侧共享一个空心三角形,令其整体呈树状结构。当然,也完全可以让每个子类在超类侧使用自己独有的空心三角形。并且空心三角的位置只要是指向并紧贴对应的超类即可,其与超类的接触点及方向可以是任意的,我们可以基于布局需要和美观因素进行选择与调整。
下图展示了继承关系中的一些细节,通过阅读这张图我们可以了解继承是如何进行工作的。

注:在UML中如果类名是斜体,如图中的“Borrowable Material”则表示该类是一个抽象类。
超类“可借阅材料(Borrowable Material)”的特性,包含属性编号(number)、标题(title)及操作借阅(borrow()),被所有子类继承,即它们在所有子类上都是可用的。
子类“音频CD(Audio CD)”和“书籍(Book)”的类图描述中,上述属性编号(number)、标题(title)被重复描述了。UML建议使用插入符号(^)标记继承的特性,子类“音频CD(Audio CD)”遵循这个规则在属性number和title前添加了“^”符号表明这两个属性是继承自超类。但并非所有UML工具都遵循了这一建议,例如Enterprise Architect,它将属性列表按所属类进行分段,源自超类的属性它将使用“::超类名”进行命名空间标注,正如图中子类“书籍(Book)”那样,超类的属性number和title被展示在了“::Borrowable Material”之下的区域;而Visual Paradigm则在表示时不区分该特性是继承自超类还是当前类所特有的。
实际上,在描绘UML图形时,并不需要描画所有继承自超类的特性,例如上图中在超类“可借阅材料(Borrowable Material)”中的操作借阅borrow()在两个子类(Audio CD和Book)中均未展示,但子类确实会继承借阅borrow()这个操作。
在子类Audio CD中我们添加了另外一个新的属性ISRC,在子类Book中我们也添加了新的属性ISBN。这使得这两个子类均拥有三个属性,其中两个继承自它们的超类Borrowable Material,另外一个是这两个子类所特有的属性。
类Juvenile Book和类Adult Book均继承自类Book。它们又各自添加了一条自己特有属性,而继承自超类的属性类Juvenile Book采用了在属性前添加插入符号(^)的形式进行说明,此时,只能通过这个符号表明属性是继承自超类,而具体是继承自类Book还是Borrowable Material并没有办法进行区分;类Adult Book在表示属性时由于采用了命名空间的方式,它则可以明确地表明继承的属性来自哪个超类。
对于类Book,在图中还通过关联的方式与类Person建立关系,在关联的末端的“+author”表明在类Book中还有一个多重性为任意、有序的、类型为Person、名为author的属性;类似的,类Peron也有一个多重性为任意、类型为Book的名为myBook的属性。
对于类Book的子类Juvenile Book与Adult Book,上述类Book与类Person的关联关系也会由于存在继承关系而自动拥有。不过需要特别注意的是,子类Juvenile Book与Adult Book从关联中会继承角色名称author(作为属性author),而myBook是存在于类Person中的角色名称,它并不会产生任何继承关系。子类Juvenile Book采用在属性区域描画的方式展示了它继承于关联的角色名称author;而子类Adult Book则通过添加与类Person关联的方式展示它继承于关联的角色名称author,并且,它更改了它在类Person中的对应的角色名称(属性名称)。
当在一个子类中请求一个特性时,它会检索该特性的定义。如果在当前子类中找不到该特性的定义,它就会检索该子类的直接超类(父类),如果依然没有找到,则继续向上层超类检索,直到找到最近的该特性的定义为止。如果检索到超类链的顶端也未找到该特性的定义,UML规范并未说明这会发生什么,通常这是实现或者说编程语言层面的问题。
注:在具体的编程语言中,可能会面临更加复杂情况,例如在一个子类中定义与超类完全相同的属性与操作,而在实例化时,又通过超类类型的变量名指向一个子类的实例。此时,通过这个变量访问属性与操作将变得更加难以理解。
通过继承关系与其他关系结合,可以精确描述更为复杂的场景。例如继承关系与组合关系一起使用,可以描述复杂结构的构成。例如一个系统中包含有两种类型的结构:简单结构和复合结构。简单结构是单一结构,而复合结构由多个结构构成,这些结构既可以是简单结构也可以是复合结构。基于此,我们可以用下图来描述这个结构的关系。

在图中简单结构(Simple Structure)和复合结构(Compound Structure)这两者均继承于不能实例化的(抽象)结构(Structure);抽象结构与复合结构之间存在组合关系,一个复合结构可能包含有任意多个结构,而这个结构要么是简单结构要么是复合结构。

标签:泛化,继承,子类,Book,超类,UML,属性,特化
From: https://www.cnblogs.com/gtyan/p/18643544

相关文章

  • UML之关联
    关联指两个类之间的各种联系。UML使用各种单实线表示关联,这个单实线可以是直线(垂直的、水平的或者倾斜的)、折线甚至曲线。事实上,关联也是展示类的属性的另一外的一种形式。例如在下图中,我们通过一条实线连接类Book和类Person,表示它们之间存在关联。在关联的末端,标出多重性[*]......
  • UML图
    用例图(UseCaseDiagram):描述系统功能及其与外部用户(角色)的交互关系。用于识别系统的用例,以便了解系统的需求。类图(ClassDiagram):显示系统中的类、属性、方法以及类之间的关系(如继承、关联等)。用于静态结构设计,是面向对象设计的核心图表。顺序图(SequenceDiagram):......
  • UML之组合与聚合
    关联和链接关系在很多情况下是对称的,即被关联的两个类都有以自己为源端对方为目标端的角色存在,而且角色与源端类的属性是等价的,即在关联一端的关联端(角色)等价于另外一端的属性。例如,在下图中,我们可以认为author:Person是类Book的一个属性,而myBooks:Person是类Person的一个属性。......
  • UML类图
    在UML(统一建模语言)中,类是最基本的构造块之一,用于描述系统中的实体以及它们之间的关系。类图(ClassDiagram)展示了系统中类的结构,包括类名、属性、操作(方法)以及类之间的关系。一个典型的类在UML中的表示通常如下所示:+------------------+|类名|+------------------+|......
  • 2024-12-12《UML类图》
    UML九图  1.类图类图(ClassDiagram)是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。类图不仅用于可视化描述和记录系统的不同方面,也为构建可执行代码的软件应用程序。类图描述......
  • UML之关联
    关联指两个类之间的各种联系。UML使用各种单实线表示关联,这个单实线可以是直线(垂直的、水平的或者倾斜的)、折线甚至曲线。事实上,关联也是展示类的属性的另一外的一种形式。例如在下图中,我们通过一条实线连接类Book和类Person,表示它们之间存在关联。在关联的末端,标出多重性[*]和关......
  • NLP论文速读(NeurIPS 2024)|树状结构两阶段推荐系统的泛化误差边界Generalization Err
    论文速读|GeneralizationErrorBoundsforTwo-stageRecommenderSystemswithTreeStructure论文信息:简介:   本文讨论的是两阶段推荐系统(Two-stageRecommenderSystems)在具有树结构的情况下的泛化误差界限。两阶段推荐系统在许多在线服务中扮演着重要角色,例......
  • UML之集合类型
    无论何时当我们要使用一个多值对象时,我们必须要清楚两个问题,一是这些值的顺序重要吗?二是允许重复值的存在吗?在编程语言中还会有其他的明确的信息,在UML中,只需明确这两个问题的答案即可确定对应的集合类型。1.SetSet是一个不允许存在重复值且未排序的集合。例如一个骑行活动中,有......
  • uml类图总结
    类图用于描述系统的静态结构,通过展示类、接口及其之间的关系,以便理解和设计系统类图的基本元素1.类(Class):类通常使用矩形框表示,其中包含三部分:类名、属性和方法。示例: 2.接口(Interface):表示方法类似类,但是会在矩形框顶部加上<<interface>>标识示例: 3.......
  • uml上机实验 4
    一实验目的 理解顺序图、协作图、活动图、状态机图的概念及其在系统分析设计中的作用; 了解和掌握软件工程中用例逻辑时序的分析方法; 掌握两种交互图(顺序图和协作图)的差别; 掌握描述一个操作执行过程中所完成工作(动作)的方法; 掌握描述对象内部工作的具体步骤; 掌握使用Rational......