【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)。说明一个类,其属性和操作都是静态范围的。
 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常见硬件工程师面试题(一)

大家好&#xff0c;我是山羊君Goat。 对于硬件工程师&#xff0c;学习的东西主要和电路硬件相关&#xff0c;所以在硬件工程师的面试中&#xff0c;对于经验是十分看重的&#xff0c;像PCB设计&#xff0c;电路设计原理&#xff0c;模拟电路&#xff0c;数字电路等等相关的知识…

数据库设计步骤、E-R图转关系模式、E-R图的画法

一、数据库设计步骤 ①需求分析阶段 准确了解与分析用户需求。 ②概念结构设计阶段 通过对用户需求进行综合、归纳与抽象&#xff0c;形成一个独立于具体数据库管理系统的概念模型。 ③逻辑结构设计阶段 将概念结构转换为某个数据库管理系统所支持的数据模型&am…

“安全生产月”专题报道:AI智能监控技术如何助力安全生产

今年6月是第23个全国“安全生产月”&#xff0c;6月16日为全国“安全宣传咨询日”。今年全国“安全生产月”活动主题为“人人讲安全、个个会应急——畅通生命通道”。近日&#xff0c;国务院安委会办公室、应急管理部对开展好2024年全国“安全生产月”活动作出安排部署。 随着科…

SpringBoot的maven项目自定义打包结构

文章目录 1. 背景2. 自定义打包结构3. 打包结果 1. 背景 加入新团队&#xff0c;发现项目打包后只有一个大大的jar包&#xff0c;每次修改了一个模块的代码&#xff0c;都要整个上传。效率低还浪费流量呢&#xff0c;哈哈。假如每次修改一个模块的一点代码&#xff0c;单独打包…

RLHF(从人类反馈中进行强化学习)详解(三)

在经过了前两节的内容学习之后&#xff0c;我们对于RLHF&#xff08;从人类反馈中进行强化学习&#xff09;有了比较深入的认知&#xff0c;并且初步了解了RLHF中偏好数据集的引入&#xff0c;奖励模型的设置以及baseLLM的训练过程。在本节的学习中&#xff0c;我们将深入LLM的…

【ssh命令】ssh登录远程服务器

命令格式&#xff1a;ssh 用户名主机IP # 使用非默认端口: -p 端口号 ssh changxianrui192.168.100.100 -p 1022 # 使用默认端口 22 ssh changxianrui192.168.100.100 然后输入密码&#xff0c;就可以登录进去了。

Java使用GDAL来解析KMZ及KML实战

目录 前言 一、在GQIS中浏览数据 1、关于空间参考 2、属性表格 二、GDAL的相关驱动及解析实战 1、GDAL中的KMZ驱动 2、GDAL实际解析 三、数据解析成果 1、KML解析结果 2、KMZ文件入库 四、总结 前言 在前面的博客中讲过纯Java实现Google地图的KMZ和KML文件的解析&…

问题:歌剧序曲是用什么曲式写成? #学习方法#其他#经验分享

问题&#xff1a;歌剧序曲是用什么曲式写成&#xff1f; A、贝多芬 B、海顿 C、肖邦 D、莫扎特 参考答案如图所示

天诚公租房、人才公寓NB-IOT人脸物联网智能门锁解决方案

近期&#xff0c;全国已有超70城推出商品房“以旧换新”。各地商品房“以旧换新”主要采取国企收购、市场联动、税费补贴三种模式&#xff0c;二手房和新房市场交易活跃度均有提升。 一、人才公寓掀起建设浪潮 事实上&#xff0c;旧房被收购后将被纳入保障性租赁住房&#xf…

【MySQL数据库】my.ini文件参数中文注释

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

【调试笔记-20240606-Linux-为 OpenWrt 的 nginx 服务器添加Shell CGI 支持】

调试笔记-系列文章目录 调试笔记-20240606-Linux-为 OpenWrt 的 nginx 服务器添加Shell CGI 支持 文章目录 调试笔记-系列文章目录调试笔记-20240606-Linux-为 OpenWrt 的 nginx 服务器添加Shell CGI 支持 前言一、调试环境操作系统&#xff1a;Windows 10 专业版调试环境调试…

片机+ISD1760智能家用语音唤醒系统设计

在节奏过快的生活中,人们承受的精神和心理压力十分巨大,这就使得现代人都希望在当代繁忙而枯燥的工作和学习中能身心愉悦的生活。随着信息化发展水平的逐步提高,智能化系统越来越受到人们的重视。市场上普遍的闹钟只是一种到了人们设定的时间就被令人烦躁的声音而吵醒的机械化…

【Redis】Redis主从复制(一)————主从搭建

目录 背景主从复制主从复制的工作流程主从复制的优点 配置 redis 主从结构复制配置文件&#xff0c;修改配置主从结构启动 redis 服务备注 查看复制状态 背景 单节点服务器的问题问题&#xff1a; 可用性&#xff1a;如果这个机器挂了&#xff0c;意味着服务就中断了.性能&am…

重回1990短视频全集:成都鼎茂宏升文化传媒公司

重回1990短视频全集&#xff1a;时光之旅的温情回顾 在数字技术的浪潮中&#xff0c;短视频以其独特的魅力迅速崛起&#xff0c;成为我们记录生活、分享故事的新方式。而当我们回望过去&#xff0c;那些充满怀旧情怀的年份总是让人心生感慨。今天&#xff0c;就让我们一起踏上…

JavaScrip轮播图

前言 在网页设计中&#xff0c;轮播图&#xff08;Carousel&#xff09;已经成为一种常见的元素&#xff0c;用于展示一系列的图片或内容卡片。它们不仅能够吸引用户的注意力&#xff0c;还能节省空间&#xff0c;使得用户可以在有限的空间内获得更多的信息。今天&#xff0c;我…

承德露露“不进则退”的十年:毛利率持续下滑,如何实现南北通喝?

《港湾商业观察》廖紫雯 日前&#xff0c;承德露露发布2023年年报及2024年一季报&#xff0c;披露营收、净利均取得一定增长的大好局面&#xff0c;然而时间线拉长来看&#xff0c;2014年、2015年&#xff0c;公司营收已超27亿&#xff0c;小十年时间过去&#xff0c;公司2023…

flask_sqlalchemy时间缓存导致datetime.now()时间不变问题

问题是这样的&#xff0c;项目在本地没什么问题&#xff0c;但是部署到服务器过一阵子发现&#xff0c;这个时间会在某一刻定死不变。 重启uwsgi后&#xff0c;发现第一条数据更新到了目前最新时间&#xff0c;过了一会儿再次发送也变了时间&#xff0c;但是再过几分钟再发就会…

RE_Python

python的exe文件解包 要确保使用工具的环境是和Python version一样&#xff08;我这里是需要3.11&#xff09; 不然&#xff0c;ezpy.exe_extracted文件夹点进去&#xff0c;类似PYZ-00.pyz_extracted的文件夹会是空的&#xff01;&#xff01; pyc反编译问题 ImportError:…

如何执行VMware P2V迁移|VMware Converter和替代方案

VMware中的P2V是什么&#xff1f; 我们常说的VMware P2V其实指的就是“物理到虚拟”&#xff0c;将工作负载从物理机器转换或迁移到虚拟机&#xff08;VM&#xff09;的过程&#xff0c;能够使您无需从头开始费力地创建和配置新虚拟机。 就像您可以使用Disk2vhd执行Hyper-V物理…

关闭文件及使用with语句

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 1 关闭文件 打开文件后&#xff0c;需要及时关闭&#xff0c;以免对文件造成不必要的破坏。关闭文件可以使用文件对象的close()方法实现。close()方…