当前位置: 首页 > news >正文

【UML用户指南】-16-对高级结构建模-构件

目录

1、概念

2、构件与接口

3、可替换性

4、组织构件

5、端口

6、内部结构

6.1、部件

6.2、连接件

7、常用建模技术

7.1、对结构类建模

7.2、对API建模


        构件是系统中逻辑的并且可替换的部分,它遵循并提供对一组接口的实现。好的构件用定义良好的接口来定义灵活的抽象,这样就可能容易用新的兼容构件代替旧的构件。

        接口是连接逻辑模型和设计模型的桥梁。例如,可以为逻辑模型中的一个类定义一个接口,而这同一个接口将延续到一些实现它的设计构件。通过把构件上的端口连接在一起,接口允许用小的构件来建造对大构件的实现。

        可以把应用程序做成一个单一的大单元,但是当需求改变时,它太僵化并很

难修改。此外,也无法利用一些现有的功能。即使一个现存的系统有很多你需要的功能,

它也会有许多你不想要的部分,并且很难或者不可能被剔除。对于软件系统的解决方法类

似于电气系统:把程序做成可灵活连接起来的、定义良好的构件,当需求发生变化时,这

些构件可以单独被替换。

1、概念

1)接口 (interface)是一组操作的集合,其中的每个操作描述了一个由类或构件所请求或者

所提供的服务。

2)构件 (component)是系统中可替换的部分,它遵循并提供了一组接口的实现

3)端口 (port)是被封装的构件的特定窗口,符合特定接口的构件通过它来收发消息。

4)内部结构 (internal structure)是由一组以特定方式连接起来的部件来表示的构件实现

5)部件 (part)是角色的规约,该角色组成构件的局部实现。在构件的实例中,有相应的部

件实例。

6)连接件 (connector)是在构件语境中的两个部件或者端口之间的通信关系。

2、构件与接口

几乎所有流行的基于构件的操作系统工具(例如COM+、CORBA和Enterprise Java Beans)都以接口作为把构件绑定在一起的粘合剂。

        基于构件来构造系统,通过描述接口(表示系统中的主要接缝)来分解系统。然后提供实

现这些接口的构件和通过访问接口获得服务的其他构件。这样的机制允许部署一个系统,

它的服务在某种程度上独立于位置,而且(如下一节所述)是可以替换的。

        构件所实现的接口称为供接口(provided interface),意思是构件向其他构件提供的作

为一个服务的接口。一个构件可以声明许多供接口。构件所使用的接口称为需接口

(required interface),意思是一个构件向其他构件请求服务时所遵从的接口。一个构

件可以遵从许多需接口。此外,一个构件可以既有供接口也有需接口。

        构件被表示成右上角标有 图标的矩形。

矩形中有构件的名字。构件可以有属性和操作,但在图中这些经常被省略。

构件可以表示内部结构

可以用两种方式来表示构件和接口之间的关系。

1、第一种方式(最通用的)是用简略的图符形式表示接口。供接口表示成用线连着构件的一个圆(一个“棒棒糖”)。需接口表示成用线连着构件的一个半圆(一个“插口”)。这两种情况下,接口的名字都写在图形符号的旁边。

2、第二种方法是用展开形式来表示,这种方式可以显示出接口的操作。实现接口的

构件用一个完整实现关系连接到接口上。通过接口访问其他构件的服务的构件用一个依赖

关系与该接口相连。

        一个给定的接口可以由一个构件提供,由另一个构件使用。这就形成一个事实:两个构件

间的这种接口打破了构件间的直接依赖关系。不管接口是用什么构件实现的,使用给定接

口的构件都能正常运行。当然,一个构件当且仅当在这样的语境中可以被使用:它的所有

需接口都由其他构件作为其供接口实现了。

3、可替换性

        所有基于构件的操作系统工具的基本目的都是允许用二进制可替换的制品来集成系统。这

就意味着可以用构件来设计系统,然后用制品来实现这些构件,并可以用添加新构件和替

换老构件的方式来更新系统,而无须重新构造系统。 

        构件遵循或提供一组接口的实现,并使逻辑设计和基于其上的物理实现的可替换性成为可能。

        构件是系统的一部分 。构件很少单独存在,相反,一个给定的构件通常与其他构件协作,

并且存在于打算使用它的体系结构或技术语境中。构件在逻辑上和物理上是内聚的,代表

一个较大系统的有意义的结构和(或)行为块。构件可以在多个系统中复用。因此,构件

表示了设计和组成系统的基础构造块。这个定义是递归的,某个抽象层次上的系统可能是

其他更高抽象层次上系统的一个构件。

4、组织构件

可以用组织类的方式来组织构件,用包将构件分组。

也可以通过描述构件之间的依赖、泛化、关联(包括聚合)和实现关系来组织构件。

构件可以由其他构件来构造

5、端口

        端口 (port)是一个被封装的构件的对外窗口。在封装的构件中,所有出入构件的交互都要通过端口。构件对外可见的行为恰好是它端口的总和。此外,端口是有标识的。别的构件可以通过一个特定端口与一个构件通信。

        端口允许把构件的接口划分成离散的并且可以独立使用的包。端口提供的封装性和独立性更大程度上保证了构件的封装性和可替换性。

        端口被表示成跨坐在构件边界上的小方块——它表示一个穿过构件的封闭边界的洞。供接口和需接口都附着到端口符号上。供接口表示一个可以通过那个端口来请求的服务,需接口表示一个该端口需要从其他构件获得的服务。每个端口都有一个名字,因此可以通过构件和端口名来唯一标识它。

构件名和端口名合在一起唯一地标识了一个被其他构件使用的特定构件的特定端口。

部件也有多重性,因此一个构件实例中的一个部件可能对应于多个实例。

上图表示

有两个用于售票的端口,一个供普通用户使用,另一个供优先用户使用。它们都有相同的

类型为Ticket Sales 的供接口。信用卡处理端口有一个需接口,任何提供该服务的构件都

能满足它的要求。节目端口既有供接口也有需接口。使用Load Attractions接口,剧院可

以把戏剧表演和其他节目录入售票数据库以便售票。利用Booking接口,Ticket Seller构

件可以查询剧院是否有票并真正地售票。

6、内部结构

内部结构(包括端口、部件和连接件)

6.1、部件

构件可以被作为一段单独的代码来实现,构件的内部结构是一些部件,这些部件以及它们之间的连接一起组合成构件的实现

部件的图形描述形式与具名、匿名实例一致

部件 (part)是构件的实现单元。部件有名字和类型。在构件实例中,每个部件有一个或多个实例对应于部件指明的类型。部件在其所在构件内有多重性

上图表明一个编译器构件是由四个部件组成的:一个词法分析器(lexical analyzer)、

一个代码生成器(code generator)、一个语法分析器(parser)和一到三个优化器

(optimizer)。许多编译器的完整版本是由不同层次的优化构成的,在一个给定的版

本中,运行时可以选择一个恰当的优化器。

部件的多重性,在图形展示上必须通过名称来区分,如下图中的normalSales和prioritySales

6.2、连接件

两个端口之间的连线被称作连接件 (connector)。

在整个构件的实例中,它表示一个链或一个暂时链。链是普通关联的实例,暂时链表示两个构件之间的使用关系。暂时链可能由作为操作目标的过程参数或局部变量来提供,而不是普通关联。

连接件有两种表示方式

第一种方式是:如果两个构件明确地捆绑在一起,无论是直接地还是通过端口,则只在它们之间或它们的端口之间画一条线即可。

第二种方式是:如果两个构件相连是由于它们有能兼容的接口,则可以使用“托球-托座”表示法来表明构件之间没有固定的关系,尽管是在构件内部连接的,可以用满足接口的其他构件来代替。

        也可以将内部端口连接到整体构件的外部端口上,这称为委派连接件,因为外部端口的消息被委派给内部端口。这可以用一个从外部端口指向内部端口的箭头来表示。对此可采取两种看法,第一种看法是把内部端口和外部端口同样对待,它已经被移到边界上并且可以通过它进行观察。第二种看法是,任何传到外部端口的消息被立即传送到内部端口,反之亦然。采用哪一种看法无关紧要,在两种情况下它们行为都是相同的。
 

上图显示了一个带有内部端口和不同种类的连接件的例子。在OrderEntry端口上的外部

请求被委派给 OrderTaking 子构件的内部端口来处理,这个构件进而把它的结果输出到它

的OrderHandoff端口。这个端口用“球-插口”图形符号与OrderHandling子构件相连。

这种连接意味着在两个构件之间无需特别的知识,输出可以被连到任何遵从 OrderHandoff

端口的构件上。OrderHandling构件与Inventory构件通信去查询库中的条目。这被描述为

一个直接的连接件,因为没有任何接口被显示,这试图表明二者之间的结合更紧密。一旦

找到了库中的项目,OrderHandling构件就可以访问外部的Credit(信用卡)服务,这由

连到外部端口charging的委派连接件来显示。如果外部信用卡服务有回应

,OrderHandling构件就与Inventory构件上的ShipItems端口通信,来准备订单以备配送

。Inventory构件访问外部FulFillment服务来真正实现订货。
 

构件图展示了构件的结构和潜在的消息路径。构件图本身并不能通过构件展示消息的序列。序列和其他种类的动态信息可以用交互图来表示。

7、常用建模技术

7.1、对结构类建模

        下图显示了结构类 TicketOrder 的设计,这个类包括四个部件和一个普通属性 price。

customer是Person类的一个对象。customer可以有一个或者没有priority(优先级)状态

,因此priority部件的多重性被表示成0..1,从customer到priority的连接件也具有相同

的多重性。有一个或多个预订坐位,seat具有多重性值。由于customer和seat处在同一个

结构类中,在它们之间就没有必要画一个连接件。注意,Attraction 的边框是用虚线画出

的,这说明,这一部件是对一个不属于这个结构类的对象的引用。该引用随着TicketOrder

类的实例被创建和撤销,但是Attraction的实例是独立于TicketOrder类的。Seat部件与

Attraction的引用相连,因为该订单可能包含针对多个 Attraction(节目)的坐位,而每

个预订坐位都和一个特定的节目相关。从连接件的多重性可以看出每个Seat预订都与正好

一个Attraction对象相连。
 

7.2、对API建模

        对于一个正在将构件组装成系统的开发者,会经常想看到把这些部件粘合到一起的应用程

序编程接口(API)。API代表系统中的程序接缝,可以用接口和构件对它建模。

        识别系统中的接缝,将每个接缝建模为一个接口,并收集形成边界的属性和操作。

只显露那些对于在给定语境中进行可视化来说是比较重要的接口特性,隐藏那些不重要的

特性,必要时可以将这些特性保存在接口的规约中作为参考。    

        下图给出了构件Animator的API,可以看到形成这个API 的 4个接口:IApplication、

IModels、IRendring和IScripts。根据需求,其他构件可以使用一个或多个这样的接口。


相关文章:

【UML用户指南】-16-对高级结构建模-构件

目录 1、概念 2、构件与接口 3、可替换性 4、组织构件 5、端口 6、内部结构 6.1、部件 6.2、连接件 7、常用建模技术 7.1、对结构类建模 7.2、对API建模 构件是系统中逻辑的并且可替换的部分,它遵循并提供对一组接口的实现。好的构件用定义良好的接口来定…...

双Token方案实现Token自动续期(基于springboot+vue前后端分离项目)

文章目录 前言一、双Token方案介绍1. 令牌类型与功能2.双Token方案的优点3.实现流程 二、具体实现1.后端实现1.1 jwt工具类1.2 响应工具类1.3 实体类1.4 过滤器1.5 controller1.6 启动类 2、前端实现2.1 登录页面2.2 index页面2.3 请求拦截器和响应拦截器 效果展示 前言 更多j…...

别太小看“静态免杀“

0x01 简述 免杀总体来说可分为两种,静态免杀/动态免杀。往往来说,我们更注重于在内部代码层面实现一些免杀技巧,但在有些时候,动态免杀静态免杀以"打组合拳"的方式效果往往会更出人所料。 当我们的程序生成后&#xf…...

SQL server 内连接 左连接 右连接 全连接 语句

在SQL Server中,连接(JOIN)操作用于从两个或多个表中检索相关数据。内连接、左连接、右连接和全连接是最常用的几种连接类型。下面详细介绍每种连接的用法和区别: 1. 内连接 (INNER JOIN) 内连接只返回两个表中满足连接条件的匹…...

k8s中的pod域名解析失败定位案例

问题描述 我在k8s中启动了一个Host网络模式的pod,这个pod的域名解析失败了。 定位步骤 敲kubectl exec -it [pod_name] -- bash进入pod后台,查看/etc/resolv.conf,发现nameserver配的有问题。这里我预期的nameserver应该使用宿主机的&…...

jingxiang制作

文章目录 jingxiang制作为什么需要jingxiang制作如何进行jingxiang制作 快照方式制作jingxiang制作命令do cker commit 快照制作jingxiang创建临时工作目录编写一个实例代码启动一个容器替换国内软件源安装编译软件源代码拷贝到容器中编译运行提交为一个jingxiang测试是否可以正…...

【数据结构】线性表之《顺序表》超详细实现

顺序表 一.数据结构1.逻辑结构2.物理结构 二.顺序表的分类1.静态顺序表2.动态顺序表 三.顺序表的实现1.创建顺序表2.初始化顺序表3.判断是否扩容4.打印顺序表5.插入操作1.头插2.尾插3.按照下标插入 6.删除操作1.头删2.尾删3.按照下标删除 7.查找数据8.修改数据9.清空顺序表10.销…...

开源模型应用落地-音乐生成模型-suno/bark深度使用-AIGC应用探索(六)

一、前言 学习音乐生成模型具有极其重要的价值。通过对音乐生成模型的深入学习,我们能够探索到音乐创作的全新边界和可能性。它不仅可以开启一扇通往无限音乐创意的大门,让我们领略到科技与艺术完美融合所带来的震撼与惊喜,还能帮助我们在音乐领域实现前所未有的突破和创新。…...

为何选择Xinstall?告别邀请码,让App推广更便捷!

在互联网日益繁荣的今天,App的推广和运营成为了各大企业关注的重点。然而,传统的推广方式如邀请码限制,往往会给用户带来不便,同时也限制了App的快速增长。在这个背景下,Xinstall凭借其独特的功能和服务,成…...

JavaScript基础入门

目录 任务描述 相关知识 JavaScript语言简介 JavaScript注释 搭建JavaScript的运行环境 JavaScript输出 弹出对话框模式 控制台模式 页面输出模式 编程要求 任务描述 要了解一门编程语言,要从输出开始。 本关任务:采用相关知识中介绍的任意一…...

windows11子系统Ubuntu 22.04.4子安装图形化界面

1、windows11家庭版本设置 打开虚拟机安装许可 2、Microsoft Store下载安装ubuntu 我使用的是22.04.4 LTS版本 3、 打开ubuntu 命令窗口 1、打开win11的命令行,在下拉三角下标,打开,可以看到有Ubuntu 的选项,点击即可进入linux命…...

对 2024 年美赛选题的建议

对2024年美赛选题的建议包括: 1. 深入探讨当下全球面临的重大问题和挑战:鉴于美赛通常聚焦于全球性议题,如气候变化、可持续发展、数据分析等,参赛学生应关注这些议题,并深入研究相关数据与背景信息,以提出…...

PyTorch tutorials:快速学会使用PyTorch

准备深入学习transformer,并参考一些资料和论文实现一个大语言模型,顺便做一个教程,今天是番外篇,介绍下PyTorch,后面章节实现代码主要使用这个框架。 本系列禁止转载,主要是为了有不同见解的同学可以方便联…...

【CT】LeetCode手撕—手撕快排

目录 题目1-思路-快排1-1 快排的核心思想快速排序算法步骤优美的调整区间 1-2 ⭐快排的实现 2- 实现⭐912. 排序数组——题解思路 3- ACM 实现 题目 原题连接:912. 排序数组 1-思路-快排 1-1 快排的核心思想 选择一个基准 基准左侧的元素都小于该元素基准右侧的元…...

使用ARK工具ATool清除典型蠕虫MyDoom

1 概述 在长期的日常安全事件监测过程中,安天CERT经常捕获到大量的MyDoom蠕虫样本和传播该蠕虫的钓鱼邮件。受害主机感染MyDoom后会被放置后门,以便攻击者下发后续恶意软件,进行攻击或窃密等操作。MyDoom蠕虫最早发现于2004年&…...

在hue中使用ooize调度ssh任务无法执行成功,无法查看错误

ssh执行失败,但是hue没有给出明确的错误原因: 经过经验分析,原来是服务器上的sh文件用的是doc/window格式,需要使用notepad将格式改为unix之后就可以正常执行。 特此记录,避免遗忘知识点...

一套轻量、安全的问卷系统基座,提供面向个人和企业的一站式产品级解决方案

大家好,今天给大家分享的是一款轻量、安全的问卷系统基座。 XIAOJUSURVEY是一套轻量、安全的问卷系统基座,提供面向个人和企业的一站式产品级解决方案,快速满足各类线上调研场景。 内部系统已沉淀 40种题型,累积精选模板 100&a…...

3秒生成!这个AI模型画风也太治愈了,新手也能轻松驾驭

还在为不会画画而苦恼吗?别担心,今天给大家介绍一个超好用的AI模型——Soft and Squishy Linework,即使是小白也能轻松生成可爱的动漫图像! Soft and Squishy Linework:专门生成柔和的、低保真(lofi&#…...

数字人全拆解:如何构建一个基于大模型的实时对话3D数字人?

简单地说,数字人就是在数字世界的“人”。当前语境下我们谈到的数字人通常指的是借助AI技术驱动的虚拟世界人物,具备与真实人类相似甚至接近的外形、感知、交互与行为能力。 AI技术在智能数字人的应用中举足轻重,特别是随着大模型能力的涌现…...

实战 | 基于YOLOv10的车辆追踪与测速实战【附源码+步骤详解】

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

管理学院权限管理系统开发总结

文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...