【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.rhkb.cn/news/343656.html

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

相关文章

nvm安装使用

什么是 node.js&#xff1f;&#xff1a; Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时&#xff0c;可以在服务器端运行 JavaScript。由于其非阻塞 I/O 模型和事件驱动架构&#xff0c;Node.js 非常适合构建高并发、低延迟的应用程序。随着 Node.js 的不断发展&…

STM32作业实现(四)光敏传感器

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…

SSM框架整合,内嵌Tomcat。基于注解的方式集成

介绍&#xff1a; SSM相信大家都不陌生&#xff0c;在spring boot出现之前&#xff0c;SSM一直是Java在web开发中的老大哥。现在虽说有了spring boot能自动整合第三方框架了&#xff0c;但是现在市面上任然有很多老项目是基于SSM技术的。因此&#xff0c;能熟练掌握SSM进行开发…

BL104网关钡铼技术多协议设备互操作简单一键接入

在工业环境中&#xff0c;设备之间的通信和互操作性是实现智能化生产的关键。为了满足这一需求&#xff0c;钡铼技术推出了PLC物联网关BL104&#xff0c;一款专为工业环境设计的多协议设备&#xff0c;简化了设备互操作的复杂性&#xff0c;实现了一键接入的便捷性。 PLC物联网…

30、matlab现代滤波:维纳滤波/LMS算法滤波/小波变换滤波

1、信号1和信号2的维纳滤波 实现代码 N 2000; %采样点数 Fs 2000; %采样频率 t 0:1 / Fs:1 - 1 / Fs; %时间序列 Signal1 sin(2*pi*20* t) sin(2*pi*40* t) sin(2*pi*60* t); Signal2[2*ones(1,50),zeros(1,50),-1*ones(1,100),zeros(1,50),-2*ones(1,50),zeros(1,50),1…

国产主流软硬件厂商生态分析

国产领域主流厂商汇总 信创&#xff0c;即信息技术应用创新&#xff0c;由“信息技术应用创新工作委员会”于2016年3月4日发起&#xff0c;是专注于软硬件关键技术研发、应用与服务的非营利性组织。作为科技自强的关键力量&#xff0c;信创在我国信息化建设中占据核心地位&…

GWT 与 Python App Engine 集成

将 Google Web Toolkit (GWT) 与 Python App Engine 集成可以实现强大的 Web 应用程序开发。这种集成允许你使用 GWT 的 Java 客户端技术构建丰富的用户界面&#xff0c;并将其与 Python 后端结合在一起&#xff0c;后端可以运行在 Google App Engine 上。 1、问题背景 在 Pyt…

通过Excel,生成sql,将A表数据插入B表

文章目录 投机取巧的方式,进行表数据初始化通过navicat搜索A表数据,然后复制进excel中通过excel的函数方式,将该批量数据自动生成插入B表的sql语句然后一次性拷贝生成的sql语句,放进navicat中一次执行,直接完成数据初始化

fps游戏如何快速定位矩阵

fps游戏如何快速定位矩阵 矩阵特点: 1、第一行第一列值的范围在**-1 ---- 1**之间&#xff0c;如果开镜之后值会变大。 2、第一行第三列的值始终为 0。 3、第一行第四列 的值比较大 &#xff0c; >300或者**<-300**。 根据这三个特点&#xff0c;定位矩阵已经足够了…

如何安装 CleanMyMac X 4.15.3破解版

CleanMyMac X 4.15.3破解版是一款专业的Mac系统清理软件&#xff0c;可一键智能扫描清理mac系统日志缓存磁盘垃圾和多余语言安装包&#xff0c;快速释放电脑内存&#xff0c;轻松管理和升级Mac上的应用。同时CleanMyMac X 破解版可以强力卸载恶意软件&#xff0c;修复系统漏洞&…

WPF中读取Excel文件的内容

演示效果 实现方案 1.首先导入需要的Dll(这部分可能需要你自己搜一下) Epplus.dll Excel.dll ICSharpCode.SharpZipLib.dll 2.在你的解决方案的的依赖项->添加引用->浏览->选择1中的这几个Dll点击确定。(添加依赖) 3.然后看代码内容 附上源码 using Excel; usi…

变压器绕线完成之后要做的事

1 调整感量&#xff1a;测主绕组电感量&#xff0c;通过磨气隙或垫气隙&#xff0c;测得感量没错以后&#xff0c;用胶带封装磁芯 2 测验同名端是否正确&#xff1a;两绕组首尾相连&#xff0c;测试连接后的总感量&#xff0c;是否比感量大的那个绕组还大。如果是&#xff0c;…

EasyExcel导出多个sheet封装

导出多个sheet 在需求中&#xff0c;会有需要导出多种sheet的情况&#xff0c;那么这里使用easyexcel进行整合 步骤 1、导入依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><d…

ssti模板注入

一、Flask应用 1、介绍 定义 Flask&#xff1a;是一个使用Python编写的轻量级web应用框架。Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。 特点 良好的文档、丰富的插件、包含开发服务器和调试器、集成支持单元测试、RESTful请求调度、支持安全cookies、基于Unicode。 …

霸气的短视频:成都科成博通文化传媒公司

霸气的短视频&#xff1a;瞬间的力量与魅力 在数字化浪潮中&#xff0c;短视频以其独特的魅力迅速崛起&#xff0c;成为社交媒体的新宠。而在众多短视频中&#xff0c;那些充满霸气、让人热血沸腾的作品&#xff0c;总能引起广泛的关注和讨论。成都科成博通文化传媒公司将从内…

在线OJ项目测试(selenium+Junit5)

目录 在线OJ项目测试的思维导图 在线OJ的UI自动化测试 测试一&#xff1a;检查未登录时的页面访问以及一些未登录时的非法操作 测试二&#xff1a;测试注册界面 测试三&#xff1a;测试登录界面 测试四&#xff1a;测试题目列表界面 测试五&#xff1a;测试题目详情界面…

优化财务管理制度提升企业经营效益—以审计代理记账为例

随着社会经济的快速发展&#xff0c;企业经营规模不断扩大&#xff0c;面临的财务管理问题也日益复杂&#xff0c;而作为其中的重要一环&#xff0c;审计代理记账已经成为了企业的必要组成部分&#xff0c;本文将重点探讨审计代理记账对于优化企业财务管理&#xff0c;提高经营…

Vue 学习笔记 总结

Vue.js 教程 | 菜鸟教程 (runoob.com) 放一下课上的内容 Vue练习 1、练习要求和实验2的用户注册一样&#xff0c;当用户输入后&#xff0c;能在下方显示用户输入的各项内容&#xff08;不需要实现【重置】按钮&#xff09; 2、实验报告中的实验小结部分来谈谈用JS、jQuery和…

IO进程线程(十)进程间通信 消息队列 共享内存 信号灯集

文章目录 一、IPC(Inter-Process Communication)进程间通信相关命令 &#xff1a;&#xff08;一&#xff09;ipcs --- 查看IPC对象&#xff08;二&#xff09;获取IPC键值&#xff08;三&#xff09;删除IPC对象的命令&#xff08;四&#xff09;获取IPC键值的函数1. 函数定义…

django ORM model update常规用法

Django ORM&#xff08;对象关系映射&#xff09;提供了一种强大而直观的方式&#xff0c;通过Python类和方法与数据库交互。在Django模型中更新记录是一个常见的任务&#xff0c;可以通过多种方式完成。以下是一些常见的更新记录的方法&#xff1a; 1. 更新单条记录 使用 sa…