【UML用户指南】-10-对高级结构建模-高级类

目录

1、类目

2、高级类

3、可见性

4、实例范围和静态范围

5、抽象元素、叶子元素和多态性元素

6、多重性

7、属性

8、操作

9、模板类

10、标准元素


1、类目

类目 (classifier)是描述结构特征和行为特征的机制。类目包括类、关联、接口、数据类型、信号、构件、结点、用况和子系统

2、高级类

在类的属性和操作基础上,允许按任何所希望的详细程度对类进行可视化、详述、构造和文档化,甚至足以支持模型和代码的正向工程和逆向工程。


3、可见性

对类目的属性和操作进行详述的设计细节之一是它的可见性。特征的可见性描述了它能否为

其他类目使用。在UML中,可以描述四级可见性中的任一级。

(1)公用的(public)【+】。任何对给定的类目可见的外部类目都可以使用这个特征

【一个类目可以看到在同一个范围内并且具有显式或隐式关系的其他类目】

(2)受保护的(protected)【#】。类目的任何子孙都可以使用这个特征

(3)私有的(private)【-】。只有类目本身能够使用这个特征

(4)包(package)【~】。只有在同一包中声明的类目能够使用这一特征

下图显示了一个类Toolbar的公用的、受保护的和私有的特征。

当指定类目特征的可见性时,一般要隐藏它的所有实现细节,只显露对于实现该抽象的职责

必要的特征。这正是信息隐藏的基础,对于建造坚固而有弹性的系统是很重要的。如果没有

显式地用可见性符号修饰一个特征,通常就假设这个特征是公用的。
 

4、实例范围和静态范围

对类目的属性和操作进行详述的另一个重要的细节是范围。特征的范围指出是否类目的每一

个实例都具有自己独特的特征值,还是类目的所有实例都共同拥有单独一个特征值。在UML

中,可以说明两种范围。

(1)实例(instance)。对于一个特征,类目的每个实例均有它自己的值。这是默认的,

不需要附加的符号。

(2)静态的(static)。对于类目的所有实例,特征的值是唯一的。也把它称为类范围

(class scope),通过对特性串加下划线来表示它。

静态范围的特征大多用于私有属性,它们必须为一个类的所有实例所共有,例如,为一个类的新实例生成的唯一ID。

5、抽象元素、叶子元素和多态性元素

泛化关系用于对类的网格结构建模,其中有位于顶层的较为一般的抽象和位于底层的较为特

殊的抽象。在这些层次中,经常要指明一些类是抽象的,这意味着这些类没有任何直接的实

例。在 UML 中,通过把一个类的名称写为斜体来指明这个类是抽象的。如图所示,Icon

、Rectangular和ArbitraryIcon都是抽象类。相反地,具体类(如类Button和类OKButton)是可以有直接实例的类。

当运行中要发送消息时,在这个层次中调用的操作就被多态地选择,即在运行时按照对象的类型决定匹配的操作。

例如,display和isInside是两个多态操作。

操作Icon::display()是抽象的,这意味着它是不完全的,要求子类提供这个操作的实现。在UML中,如同指明抽象类一样,通过把操作的名称写为斜体来指明这个操作是抽象的。

Icon::getID()是叶子操作,因此被指派了特性leaf,这意味着该操作不是多态的,不可以被覆写(这类似于java中的final操作)。

6、多重性

当使用类时,假设一个类具有任意数目的实例是合理的(当然,除非它是一个抽象类,因而

没有直接的实例,但它的具体的子类可以有任意数目的实例)。然而,有时可能要限制类所

具有的实例数目。

最常见的是指定以下几种情况:

没有实例(在这样的情况下,这个类是一个只暴露静态范围的属性和操作的实用程序的类)、

有一个实例(单体类)、有一定数目的实例或有多个实例(默认情况)。

多重性也应用于属性。可以通过在属性名后面的方括号内写一个合适的表达式来指定属性的

多重性。例如,图中,在类NetworkController的实例中有两个或多个consolePort实例。

7、属性

在大多数抽象层次上,当对类的结构特征(即属性)建模时,只需简单地写下每个属性的名

称。这些信息通常足以使一般读者理解模型的意图。如前面部分所述,也可以详述各个属性

的可见性、范围和多重性。更多地,还可以详述各属性的类型、初始值和可变性。

在UML中,属性的完整语法形式为:

[可见性] 属性名 [ ' : ' 类型] [ ' [ ' 多重性 ' ] ' ] [ ' = ' 初始值] [特性串{ ',' 特性串}]

origin        只有属性名

+ origin       可见性和属性名

origin : Point    属性名和类型

name : String[0..1]  属性名、类型和多重性

origin : Point = (0,0)  属性名、类型和初始值

id : Integer { readonly } 属性名、类型和特性

除非另行指定,否则属性总是可变化的(changeable)。可以用readonly特性指明在对象

初始化后不能改变属性的值。

在对常量建模或对创建实例时初始化后不能变化的属性建模时,主要使用readonly属性。

8、操作

在大多数抽象层次上,当对类的行为特征(即类的操作和类的信号)建模时,只需简单地写

下每个操作的名称。这些信息通常足以使一般读者理解模型的意图。然而,如前所述,也可

以详述各操作的可见性和范围。更多地,还可以详述各操作的参数、返回类型、并发语义和

其他特性。总体上,操作的名称加上它的参数(如果有的话,也包括返回类型)被称为操作

的特征标记。

类的每一个非抽象操作必须有一个方法,这个方法的主体是可执行

在UML中,操作的完整语法形式为:

[可见性] 操作名 [ '( ' 参数表 ' ) ' ] [ ' : ' 返回类型] [特性串 { ' ,' 特性串}]

例如,下列操作声明都是合法的。

display         操作名

+ display         可见性和操作名

set (n : Name,s : String)操作名和参数

getID ( ) : Integer    操作名和返回类型

restart ( ) {gaurded}   操作名和特性

在操作的特征标记中,可以不提供参数,也可以提供多个参数,其语法形式如下:

[方向] 参数名 : 类型 [=默认值]

方向可以取下述值之一。

in            输入参数,不能对它进行修改。

out           输出参数,为了向调用者传送信息可以对它进行修改。

inout          输入参数,为了向调用者传送信息可以对它进行修改。

9、模板类

模板是一个被参数化的元素。在诸如 C++和 Ada 这样的语言中,可以写模板类,每一个模板

类都定义一个类的家族(也可以写模板函数,每一个模板函数都定义一个函数的家族)。模

板可以包括类、对象和值的插槽,这些插槽起到模板参数的作用。不能直接使用模板,必须

首先对它进行实例化。实例化是要把这些形式模板参数绑定成实际参数。对一个模板类来说

,绑定后的结果就是一个具体类,能够像普通类一样使用

template<class Item,class VType,int Buckets>

class Map {

public:

virtual map(const Item&,const VType&);

virtual Boolean isMappen(const Item&) const;

...

};

然后可以对这个模板进行实例化,以便把对象Customer映射到对象Order。

m : Map<Customer,Order,3>;

在UML中也能对模板类建模。如上图所示,模板类的画法与普通类一样,只是在类图标的右

上角带有一个附加的虚框,虚框中列出模板参数。

如上图所示,可以用两种方法对模板类的实例化进行建模。

第一种方法是隐式的,即声明一个在其名称中提供了绑定的类。

第二种方法是显示的,即用一个被衍型化为bind的依赖,表明源端用实际参数对目标模板进行实例化。
 

10、标准元素

对类可以使用UML的所有扩展机制。最常见的情况是,

用标记值来扩展类的特性(如描述类的版本),

用衍型来描述新类型的构件(如特定模型的构件)。

UML定义了以下4种用于类的标准衍型。

(1)元类(metaclass)。说明一个类目,其对象全是类。

(2)幂类型(powertype)。说明一个类目,其对象是给定父类的子类。

(3)衍型(stereotype)。说明一个类目是可用于其他元素的衍型。

(4)实用程序(utility)。说明一个类,其属性和操作都是静态范围的。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/688624.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【YOLOv10改进[CONV]】使用DualConv二次创新C2f模块实现轻量化 + 含全部代码和详细修改方式 + 手撕结构图 + 全网首发

本文将使用DualConv二次创新C2f模块实现轻量化,助力YOLOv10目标检测效果的实践,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法。 改进前和改进后的参数对比: 目录 一 DualConv 1 结合33卷积和11卷积核 2 DualConv 3 可视化 二 C2f_DualConv助…

Python 知识图谱补全,Knowledge Graph Completion,基于大模型的知识图谱补全,基于LLMs的KGC任务

今天讲一篇文章《Exploring Large Language Models for Knowledge Graph Completion》 &#xff0c;这篇文章主题&#xff1a;基于大模型做知识图谱补全 1.文章主要思想&#xff1a; 本章描述知识图谱补全中的三个任务&#xff1a;三元组分类、关系预测和实体(链接)预测&…

2024Dragon Knight CTF复现web

穿梭隐藏的密钥 知识点&#xff1a;fuzz技术、ssrf、本地绕过、data伪协议、md4弱比较、数组绕过 首先看看页面的源代码&#xff0c;但是发现f12和鼠标右键都被禁用了 用ctrlu查看&#xff0c;发现一个可疑页面 访问看看&#xff0c;发现还是只有一张图&#xff0c;查看源代…

短视频的景别:成都鼎茂宏升文化传媒公司

短视频的景别&#xff1a;探索视觉艺术的魅力 在短视频的浩瀚海洋中&#xff0c;每一个画面都承载着独特的情感和信息。这些画面&#xff0c;通过不同的景别展现&#xff0c;构成了短视频的叙事基础和视觉美感。成都鼎茂宏升文化传媒公司旨在探讨短视频中景别的运用&#xff0…

揭露:抖音外卖区域代理骗局真相,绝不可错过!

自2023年11月23日抖音发布清退服务商的公告后&#xff0c;由官方认证的抖音外卖平台全国代理正式成为历史&#xff0c;而后&#xff0c;抖音外卖平台区域代理接棒&#xff0c;帮助抖音开拓本地生活市场。在此背景下&#xff0c;抖音外卖平台区域代理的申请人数与日俱增&#xf…

AIConnect赋能加持丨AI+DEPIN 共同推动AI发展的技术与运用峰会圆满落幕

6月6日&#xff0c;由AIConnect主办&#xff0c;JuCoin协办的「AIDePIN 共同推动AI发展的技术与应用」峰会在胡志明市圆满落幕&#xff01;此次活动不仅是AIConnect生态在市场推广和技术应用方面的重要一步&#xff0c;也标志着JuCoin在推动AI与DePIN技术融合中的又一里程碑。 …

算法金 | 这次终于能把张量(Tensor)搞清楚了!

大侠幸会&#xff0c;在下全网同名[算法金] 0 基础转 AI 上岸&#xff0c;多个算法赛 Top [日更万日&#xff0c;让更多人享受智能乐趣] 1. 张量&#xff08;Tensor&#xff09;基础概念 1.1 张量的定义与重要性 张量是深度学习中用于表示数据的核心结构&#xff0c;它可以视…

K8s存储对象的使用

背景和概念 容器中的文件在磁盘上是临时存放的&#xff0c;这给在容器中运行较重要的应用带来一些问题&#xff1a; 当容器崩溃或停止时&#xff0c;此时容器状态未保存&#xff0c; 因此在容器生命周期内创建或修改的所有文件都将丢失。另外 在崩溃期间&#xff0c;kubelet 会…

javaWeb4 Maven

Maven-管理和构建java项目的工具 基于POM的概念 1.依赖管理&#xff1a;管理项目依赖的jar包 &#xff0c;避免版本冲突 2.统一项目结构&#xff1a;比如统一eclipse IDEA等开发工具 3.项目构建&#xff1a;标准跨平台的自动化项目构建方式。有标准构建流程&#xff0c;能快速…

VS2019创建c++动态链接库dll与调用方法

VS2019创建c动态链接库dll与调用方法 1.点击文件-》新建-》项目&#xff0c;输入dll,选择具有导出项的(DLL)动态链接库 2.输入一个文件名&#xff1a;dll2 头文件.h 3.添加加减法函数&#xff1a; // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的…

【高频】什么是索引的下推和覆盖

面试回答&#xff1a; 索引的下推是指数据库引擎在执行查询时&#xff0c;将过滤条件尽可能地应用到索引上&#xff0c;以减少需要检索的数据量&#xff0c;从而提高查询性能。这样可以减少数据库引擎从磁盘加载的数据量&#xff0c;提高查询效率。覆盖索引是指一个索引包含了…

C++青少年简明教程:C++函数

C青少年简明教程&#xff1a;C函数 C函数是一段可重复使用的代码&#xff0c;用于执行特定的任务&#xff0c;可以提高代码的可读性和可维护性。函数可以接受参数&#xff08;输入&#xff09;并返回一个值&#xff08;输出&#xff09;&#xff0c;也可以没有参数和返回值。 …

范闲获取到庆帝与神庙的往来信件,用AES进行破解

关注微信公众号 数据分析螺丝钉 免费领取价值万元的python/java/商业分析/数据结构与算法学习资料 在《庆余年2》中&#xff0c;范闲与庆帝和神庙之间的权谋斗争愈演愈烈。一次偶然的机会&#xff0c;范闲从庆帝的密室中获取到几封与神庙往来的密信。然而&#xff0c;这封信件…

算法-分治策略

概念 分治算法&#xff08;Divide and Conquer&#xff09;是一种解决问题的策略&#xff0c;它将一个问题分解成若干个规模较小的相同问题&#xff0c;然后递归地解决这些子问题&#xff0c;最后合并子问题的解得到原问题的解。分治算法的基本思想是将复杂问题分解成若干个较…

电源变压器的作用和性能

电源变压器的主要作用是改变输入电压的大小&#xff0c;通常用于降低电压或升高电压&#xff0c;以便适应不同设备的需求。它们还可以提供隔离&#xff0c;使得输出电路与输入电路之间电气隔离&#xff0c;从而提高安全性。性能方面&#xff0c;电源变压器需要具有高效率、低温…

二叉树-堆的详解

一&#xff0c;树的概念 1&#xff0c;树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有…

小学一年级数学上册,我终于学完了

目录 一、背景二、过程1.我对课程中的一些知识的思考2.我对于产品的思考3.我对自己儿子与知识产品结合的思考4.产品反馈的那些有意思的数据 三、总结 一、背景 简约而不简单&#xff0c;即是曾经的再现&#xff0c;也是未来的延伸&#xff0c;未来已来&#xff0c;就在脚下。 …

泛微开发修炼之旅--10基于Ecology实现附件上传,并将上传后的文件id存入表单附件控件中的示例及源码

文章链接&#xff1a;泛微开发修炼之旅--10基于Ecology实现附件上传&#xff0c;并将上传后的文件id存入表单附件控件中的示例及源码

微信如何防止被对方拉黑删除?一招教你解决!文末附软件!

你一定不知道&#xff0c;微信可以防止被对方拉黑删除&#xff0c;秒变无敌。只需一招就能解决&#xff01;赶快来学&#xff01;文末有惊喜&#xff01; 惹到某些重要人物&#xff08;比如女朋友&#xff09;&#xff0c;被删除拉黑一条龙&#xff0c;那真的是太令人沮丧了&a…

如何快速学习掌握PMP考试知识?

要快速学习掌握PMP考试知识&#xff0c;有几个关键的步骤和方法可以帮助大家有效地准备考试。 首先&#xff0c;建议你购买一本权威的PMP考试教材&#xff0c;例如PMBOK指南。这本教材是PMP考试的权威指南&#xff0c;包含了所有考试所需的知识点和内容。你可以通过系统地阅读…