【UML用户指南】-12-对高级结构建模-接口、类型和角色

目录

1、名称

2、操作

3、关系

4、理解接口

5、常用建模技术

5.1、对系统中的接缝建模

5.2、对静态类型和动态类型建模

5.2.1、对静态类型建模

5.2.2、对动态类型建模


使接口易于理解和易于访问

接口在关于一个抽象做什么的描述与关于这个抽象如何做的实现之间定义了一条界线。接口是一组操作的集合,其中的每个操作用于描述类或构件的一个服务。

用接口对系统中的接缝进行可视化、详述、构造和文档化。类型和角色提供了在特定的语境下为抽象与接口之间的静态和动态一致性进行建模的机制。

结构良好的接口能够清楚地把抽象的外视图与内视图分开,这样就使理解和访问抽象成为可能,而不必探究它的实现细节。

把房屋设计得每次重新粉刷墙壁都要毁坏建筑物,这是没有道理的。类似地,人们也不愿意生活在这样的地方:每当要换一个灯泡时,都要为这幢房子重接电线。大厦的主人更不高兴这样的情况发生:每当一个新的房客入住时,都要移动门或更换所有的电器和电话插座。

在UML中,用接口对系统中的接缝建模。接口是一组操作的集合,其中的每个操作用于描述类或构件的一个服务。通过声明一个接口,可以陈述对一个抽象所要得到的与其实现无关的行为。客户能够对照接口进行建造,你可以自己建造或购买接口的实现,只要接口的实现能满足接口所指定的职责和合约即可。

接口(interface)是一组操作的集合,其中的每个操作用于描述类或构件的一个服务。类型(type)是类的一个衍型,用于描述一组对象的域以及作用于对象的操作(不是方法)。角色(role)是一个参与特定语境的实体的行为。

在图形上,

把接口画成一个衍型化的类,以显露它的操作和其他性质。为了表示类和其接口之间的联系,提供了一种特殊的表示法。

供接口(provided interface)(表示类提供的服务)表示为与类框连接在一起的小圆圈。

需接口(required interface)(表示类需要的别的类的服务)表示为与类框连接在一起的半个小圆圈。

1、名称

每个接口都必须有一个有别于其他接口的名称。名称(name)是一个文字串。单独的一个名称称作简单名(simple name),路径名(path name)是以接口所在的包的名称为前缀的接口名。绘制接口时可以仅显示接口的名称,如图所示。

在一个包中的各接口的名称必须是唯一的

2、操作

接口是一组已命名的操作,其中的每个操作用于描述类或构件的一个服务。接口不同于类或类型,它不描述任何实现(因此不包含任何实现操作的方法)。像类一样,接口可以有一些操作。这些操作可以用可见性、并发性、衍型、标记值和约束来修饰。

在声明一个接口时,把接口画成衍型化的类,并在合适的分栏列出它的操作。可以仅显示操作的名称,也可以显示出操作的全部特征标记和其他特性,如图所示。


3、关系

像类一样,接口也可以参与泛化、关联和依赖关系。此外,接口也可以参与实现关系。实现是两个类目之间的语义关系,其中一个类目描述了另一个类目保证实现的合约。

用两种方式来表现一个元素实现一个接口。

第一种方式可以用简化形式,即把接口和它的实现关系画成一条位于类框和小圆(用于供接口)或者半圆(用于需接口)之间的连线。当要简单地显露系统的接缝时,这种形式是有用的,这通常是首选的形式。然而,这种方式的局限性是不能直接地对接口提供的操作或信号进行可视化。

第二种方式是使用展开的形式,即把接口表示成衍型化的类,这种方式允许对接口的操作和其他的特性进行可视化,然后画一个从类目或构件到接口框的实现关系(用于供接口)或依赖(用于需接口)。在UML中,把实现关系画成一条带有空心三角箭头并指向接口的有向虚线。这种表示法是泛化和依赖的混合。

4、理解接口

在处理一个接口时,首先看到的是一组操作,该组操作描述了类或构件的服务。看得更深些,会看到这些操作的全部特征标记,连同它们的各项具体特性,如可见性、范围和并发语义等。

首先,可以为各个操作附上前置和后置条件,以及为整个类或构件附上不变式。通过这样做,需要使用接口的客户就能理解接口做什么以及如何使用它,而不必深究其实现。若要求是严格的,可使用 UML 的OCL 形式化地描述其语义。

其次,给接口附上一个状态机。用状态机详述接口操作的合法的局部命令。最后,可以为接口附上协作。通过一系列的交互图,可以用协作详述接口的预期行为。

5、常用建模技术

5.1、对系统中的接缝建模

识别系统中的接缝涉及到识别在系统体系结构中的明确的分界线。在这些分界线的每一边,都会发现一些可独立变化的构件,只要在分界线两边的构件遵循由接口描述的合约,在一边变化的构件就不会影响另一边的构件。

下图展示了取自一个财务系统的构件Ledger周围的接缝。这个构件提供(实现)了3个接口:IUnknown、ILedger和IReports。在图中以展开形式显示了IUnknown;另外两个接口以简单形式(棒棒糖形式)显示。这3个接口由Ledger实现,并向要使用它的其他构件引出。

该图还表示,Ledger需要(使用)两个接口,即IStreaming和ITransaction,后者以展开形式显示。Ledger构件为其适当的操作而需要这两个接口。因此,在一个运行系统中,必须提供实现这两个接口的构件。通过识别诸如 ITransaction 这样的接口,已经有效地减弱了接口每一边的构件耦合,允许使用任何符合接口要求的构件。

像 ITransaction 这样的接口并不只是一堆操作。这种特殊的接口有一些关于其操作应被调用的次序的假设。可以向该接口附加用况,并枚举它的常用方式,虽然这里并未显示出来。
 

5.2、对静态类型和动态类型建模

5.2.1、对静态类型建模

对象的静态性质建模可以在类图中进行可视化。然而,当对业务对象这样的事物建模时,这些对象在整个工作流中会自然地变化它们的角色,显式地对对象类型的动态性质建模有时是有用的。在这种情况下,对象在它的生存期内能获得或丢弃类型。也可以用状态机为对象的生存期建模

5.2.2、对动态类型建模

通过把每一个类型表示为类(若该抽象需要结构和行为)或接口(若该抽象仅需要行为)来详述对象可能的各种不同类型。

对象类在任何时间点上可能扮演的角色建模。可以用«dynamic»衍型(这不是一个预定义的UML衍型,但是可以增加这种衍型)来标记它们。

在交互图中,适当地表示每个被动态类型化的类的实例。在对象名下面的括号中指明实例的类型,就像一个声明一样

描述了类Person的实例可以是3种类型(Candidate、Employee或Retiree)中的任何一种

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

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

相关文章

硬盘坏了数据能恢复吗 硬盘数据恢复一般多少钱

在数字化时代,我们的生活和工作离不开电脑和硬盘。然而,硬盘故障是一个常见的问题,可能会导致我们的数据丢失。当我们的硬盘坏了,还能恢复丢失的数据吗?今天我们就一起来探讨关于硬盘坏了数据能恢复吗,硬盘…

ENSP校园网设计实验

前言 哈喽,我是ICT大龙。本次更新了使用ENSP仿真软件设计校园网实验。时间比较着急,可能会有错误,欢迎大家指出。 获取本次工程文件方式在文章结束部分。 拓扑设计 拓扑介绍---A校区 如图,XYZ大学校园网设计分为3部分&#xff0…

ssm629基于SSM的二手交易平台设计与开发+jsp【已测试】

前言:👩‍💻 计算机行业的同仁们,大家好!作为专注于Java领域多年的开发者,我非常理解实践案例的重要性。以下是一些我认为有助于提升你们技能的资源: 👩‍💻 SpringBoot…

【nerf】nvidia-smi

当cmd下nvidia -smi不能使用时候 沿着以下路径打开cmd,再输入,可以查看cuda版本 然后查看电脑安装的

【Redis】什么是Redis缓存 雪崩、穿透、击穿?(一篇文章就够了)

目录 什么是Redis? Redis的正常存储流程? 什么是Redis缓存雪崩? 缓存雪崩 缓存预热 缓存失效时间的随机性 什么是Redis缓存穿透? 缓存穿透 缓存空对象 BloomFilter(布隆过滤器) 什么是Redis缓存击穿&#…

Segment Anything CSharp| 在 C# 中通过 OpenVINO™ 部署 SAM 模型实现万物分割

​ OpenVINO™ C# API 是一个 OpenVINO™ 的 .Net wrapper,应用最新的 OpenVINO™ 库开发,通过 OpenVINO™ C API 实现 .Net 对 OpenVINO™ Runtime 调用.Segment Anything Model(SAM)是一个基于Transformer的深度学习模型&#x…

poi4.1导出excel支持xlx,xlsx格式,解决导出execl提示‘文件已经被损坏,无法打开‘

目录 一.maven jar包引入 二.xls格式 三.xlsx格式 一.maven jar包引入 注意&#xff0c;如果要用到xlsx格式&#xff0c;需要导入poi-ooxml <!-- https://mvnrepository.com/artifact/org.apache.poi/poi fx--><!-- 使用xls格式时,只要导入poi-version-yyyymmdd.ja…

Llama模型家族之Stanford NLP ReFT源代码探索 (四)Pyvene论文学习

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

通过双模式对抗提示越狱视觉语言模型

最近&#xff0c;将视觉整合到大型语言模型&#xff08;LLMs&#xff09;中的兴趣显著增加&#xff0c;催生了大型视觉语言模型&#xff08;LVLMs&#xff09;。这些模型结合了视觉和文本信息&#xff0c;如LLaVA和Gemini&#xff0c;已经在包括图像字幕、视觉问题回答和图像检…

「动态规划」打家劫舍的变形题,你会做吗?

213. 打家劫舍 IIhttps://leetcode.cn/problems/house-robber-ii/description/ 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈&#xff0c;这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#x…

下载安装Thonny并烧录MicroPython固件至ESP32

Thonny介绍 一、Thonny的基本特点 面向初学者&#xff1a;Thonny的设计初衷是为了帮助Python初学者更轻松、更快速地入门编程。它提供了直观易懂的用户界面和丰富的功能&#xff0c;降低了编程的门槛。轻量级&#xff1a;作为一款轻量级的IDE&#xff0c;Thonny不会占用过多的…

中国各省份简称的命名根据是什么?省份简称顺口溜

我国共有34个省级行政区域,包括23个省,5个自治区,4个直辖市,2个特别行政区。每个省份都有自己对应的简称,而省份简称的由来,可以分为以下三种: 一、取省份全称中的一部分作为简称 比如,北京的简称是“京”,天津的简称是“津”,东北三兄弟的简称是“黑吉辽”,这种简单…

数据库之PostgreSQL详解

一、PostgreSQL介绍 PostgreSQL是一个功能强大的 开源 的关系型数据库。底层基于C实现。 PostgreSQL的开源协议和Linux内核版本的开源协议是一样的。。BDS协议&#xff0c;这个协议基本和MIT开源协议一样&#xff0c;说人话&#xff0c;就是你可以对PostgreSQL进行一些封装&a…

OpenFeign远程接口调用使用公共模块出现的错误

今天在使用openfeign和sentinel实现fallback服务降级时遇到找不到类型的异常 检查代码发现没有错误&#xff0c;EnableFeignClients也在启动类上标注了 错误信息&#xff1a;A component required a bean of type com.zxc.cloud.apis.PayFeignSentinelApi that could not be f…

类和对象(下+)_const成员、初始化列表、友元、匿名对象

类和对象&#xff08;下&#xff09; 文章目录 类和对象&#xff08;下&#xff09;前言一、const成员二、友元1.友元函数2.友元类 三、初始化列表四、explicit关键字五、匿名对象总结 前言 static成员、内部类、const成员、初始化列表、友元、匿名对象 一、const成员 将cons…

[Cloud Networking] Layer 2

文章目录 1. 什么是Mac Address?2. 如何查找MAC地址&#xff1f;3. 二层数据交换4. [Layer 2 Protocol](https://blog.csdn.net/settingsun1225/article/details/139552315) 1. 什么是Mac Address? MAC 地址是计算机的唯一48位硬件编码&#xff0c;嵌入到网卡中。 MAC地址也…

100道面试必会算法-32-二叉树右视图用栈实现队列

100道面试必会算法-32-二叉树右视图&用栈实现队列 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4]示例 2: 输入: [1,n…

基于vue的音乐播放器的设计与实现(论文+源码)_kaic

摘 要 当下&#xff0c;如果还依然使用纸质文档来记录并且管理相关信息&#xff0c;可能会出现很多问题&#xff0c;比如原始文件的丢失&#xff0c;因为采用纸质文档&#xff0c;很容易受潮或者怕火&#xff0c;不容易备份&#xff0c;需要花费大量的人员和资金来管理用纸质文…

java版spring cloud 深入探究ERP管理系统源码:功能模块详解与操作流程梳理

随着数字化转型的深入&#xff0c;企业对于高效、稳定且具有扩展性的管理系统的需求日益增加。为此&#xff0c;我们开发了一套基于Java技术的鸿鹄ERP管理系统&#xff0c;该系统整合了Spring Cloud Alibaba、Spring Boot、MybatisPlus、Redis等前沿技术&#xff0c;并采用了VU…

Tensorflow入门实战 P03-天气识别

目录 1、完整代码 2、运行结果 2.1 查看20张图片 2.2 程序运行 2.3 运行结果 3、小结 ① 代码运行过程中有报错&#xff1a; ② 修改代码如下&#xff1a; ③ 分析原因&#xff1a; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&…