软件工程 - 第8章 面向对象建模 - 4 - 物理体系结构建模
构件图
构件图概述
构件图描述了软件的各种构件和它们之间的依赖关系。
构件图的作用
在构件图中,系统中的每个物理构件都使用构件符号来表示,通常,构件图看起来像是构件图标的集合,这些图标代表系统中的物理部件,构件图的基本目的是:使系统人员和开发人员能够从整体上了解系统的所有物理部件,同时,也使我们知道如何对构件进行打包,以便交付给最终客户,最后,构件图显示了被开发系统所包含的构件之间的依赖关系。
构件图从软件架构的角度来描述一个系统的主要功能,如系统分成几个子系统,每个子系统包括哪些类、包和构件,它们之间的关系以及它们分配到哪些节点上等。
使用构件图可以清楚地看出系统的结构和功能。方便项目组的成员制定工作目标和了解工作情况,同时,最重要的一点是有利于软件的复用。
从宏观的角度上,构件图把软件看作多个独立构件组装而成的集合,每个构件可以被实现相同接口的其它构件替换。
构件图的组成
- 构件图三元素
- 构件(Component)
- 接口(Interface)
- 依赖关系(Dependency)
- 构件图由构件、接口、关系、端口和连接器组成,它的表达方式为:
构件图=构件+接口+关系+端口+连接器
构件
- 构件的定义
构件是定义了良好接口的物理实现单元,是系统中可替换的物理部件。一般情况下,构件表示将类、接口等逻辑元素打包而成的物理模块。 - 构件与类
从构件的定义上看,构件和类十分相似,事实也是如此:二者都有名称,都可以实现一组接口,都可以参与依赖、泛化和关联关系,都可以被嵌套,都可以有实例,都可以参与交互。但也存在着一些明显的不同,下面是构件与类的区别:
(1)类表示是对实体的抽象,而构件是对存在于计算机中的物理部件的抽象。也就是说,构件是可以部署的,而类不能部署。
(2)构件属于软件模块,而非逻辑模块,与类相比,它们处于不同的抽象级别。甚至可以说,构件就是由一组类通过协作完成的。
(3)类可以直接拥有操作和属性,而构件仅拥有可以通过其接口访问的操作。 - 构件的名称
每个构件必须有一个不同于其他构件的名称。构件的名称和类的名称的命名法则很是相似,有简单名和路径名之分。构件的名称是一个字符串,位于构件图标的内部。在实际应用中,构件名称通常是从现实词汇中抽取出来的短名词或名词短语。 - 构件的表示
供接口用棒棒糖式的图形表示,由一个封闭的圆形与一条直线组成;需接口用插座式的图形表示,由一个半圆与一条直线组成
- 构件间的关系
为了表达构件与其他构件间的关系,供接口与需接口之间用一个表示依赖的箭头(即虚线加一个开箭头)连接起来,该箭头从需接口引出,指向服务供应者提供的供接口
用一个装配连接器(Assembly Connectors)来表示构件之间的关系
更简单的,你可以忽略构件间的供接口和需接口,而直接在构件间画上依赖关系
外部接口----端口
组合构件的外部接口用一个尾部加一个小方块的正常的接口组成,这个小矩形框被称为端口(Port)
端口是UML2.0引入的一个概念,端口提供种方法,显示建模构件所提供或要求的接口如何与它里面的部分相关联
连接器
为了展现功能的实现,连接器(Connectors将一个组件提供的接口与另一个组件必需的接口绑定到一起
- UML2.0提供了两种类型的连接器:
代理连接器(Delegation Connectors):连接外部接口的端口和内部接口
组装连接器(Assembly Connectors):组装连接器表示构件之间的关系,它连接构件内部的类,将一个构件的供接口和一个构件的需接口捆绑在一起
怎么画构件图?
- 确定划分的子系统的对外接口。
程序子系统和系统外实际要进行联系的边界处理。 - 确定子构件和接口。
在子系统中把功能不同的模块划分成构件,同时确定构件跟构件之间的接口。 - 确定构件之间的关系。
分析构件之间存在的逻辑设计关系,画出依赖图。
案例:绘制出汽车租赁系统的构件图
- 汽车租赁系统的需求分析简述如下:
(1)客户可以通过不同的方式(电话、网上和前台)预订租借车辆。
(2)能够保存客户的预定信息。
(3)能够保存客户的历史记录。
(4)工作人员可以处理客户申请。
(5)技术人员可以保存对车辆检修的结果。 - 汽车租赁系统是建立在一个含有过去租赁记录、汽车信息、服务记录以及客户和员工信息的中央数据库上
- 包括租赁程序、员工记录、客户信息、服务记录、工作记录汽车记录6个构件
部署图
部署图显示了系统的硬件、在这些硬件上安装的软件以及用于连接异构的机器之间的中
间件
从部署图中,可以了解到软件构件、硬件是如何部署到系统的物理架构中的,使用部署图可以显示运行时系统的结构,同时传达构成应用程序的硬件和软件元素的配置和部署方式
部署图的表达方式为:
部署图=制品+节点+通信路径
制品
- 制品是与软件开发过程相关联的实际存在的信息
- 制品是被软件开发过程所利用或通过软件开发过程所生产的一段信息
- 制品可以是一个模型、描述或软件,它通常以文件的形式存在,可以是可执行的,比如.exe文件、二进制文件、DDLs或者JAR文件等,或者是一个数据文件、一个配置文件、一个用户手册或者一个HTML文档
- 在UML2.0中,制品可以用于表示任何可打包的元素,这些元素涵盖了UML中的所有部分
- 在UML中,制品用右上角带一个狗耳朵标记的矩形框表示
- 制品可以有属性和操作,最常见的是用属性和操作表示制品的配置选项
- 属性和操作可以放在制品的第二栏中
- 制品拥有制品实例,用制品名加下划线的方式来表示一个制品实例
- 一个制品可能是另一个UML元素的显示(Manifestation)
- 比如Logging.jar是LoggingSubsystem构j件的显示
- 在UL1.X中,这种显示关系被建模为实施(Implementation)
- 在UML2.0中用标记<< manifest>>的虚线箭头表示这种实施关系
节点
- 节点Nodes)是一个能够执行制品的实体,可以是硬件,但有时也可以是为其他软件的执行提供执行环境的软件
- 有两种类型的节点
- 执行环境(Execution Environments)节点
- 设备(Device)节点
- UML2.0用一个3D风格的盒子表示书点,在节点的内部注明节点名
执行环境节点
在部署图内部用构造型<< ExecutionEnvironment>>和所选用的执行环境名称来表示执行环境节点
执行环境通常是中间件或操作系统
设备节点
设备节点用于表示具体的计算设备,一般是个单独的硬件设备
部署
- 部署图最重要的部分就是将制品部署在将执行它的节点上
- UML2.0提供了三种方法来表示把制品部署到节点中
1、通过将制品绘制在节点中实现对制品的部署
- 可以用带构造型<< deploy>>标签的虚线箭头表示将制品部署在节点中,注意,箭头指向节点
- 更简单的,可以将制品直接记录在节点中表示部署关系
部署规约
- 为了使部署在节点上的制品能够执行,大多数情况下我们需要说明一些配置参数
- 这些参数被称为部署规约(DeploymentSpecification)
- 它是一个属性的集合,是一类特殊的制品,说明了其他制品是如何部署到节点中的
- 它提供了其他制品如何成功的在节点上运行的信息
- 部署规约用构造型<< deployment spec>>表示
- 可以用指向制品的依赖箭头将部署规约与制品绑定
- 可以将部署规约用虚线连接在制品和节点间的部署箭头上
通信路径
通信路径表示节点间的通信,用实心线表示
第八章小结
相关文章:

软件工程 - 第8章 面向对象建模 - 4 - 物理体系结构建模
构件图 构件图概述 构件图描述了软件的各种构件和它们之间的依赖关系。 构件图的作用 在构件图中,系统中的每个物理构件都使用构件符号来表示,通常,构件图看起来像是构件图标的集合,这些图标代表系统中的物理部件,…...

【智能家居】二、添加火灾检测模块(烟雾报警功能点)
可燃气体传感器 MQ-2 和 蜂鸣器 代码段 controlDevice.h(设备控制)smokeAlarm.c(烟雾报警器)buzzer.c(蜂鸣器)mainPro.c(主函数)运行结果 可燃气体传感器 MQ-2 和 蜂鸣器 代码段 …...

history和hash两种路由模式原理,和优缺点
Hash Hash 模式是在 URL 中使用井号(#)来作为路由的模式。在 Hash 模式下,即使页面刷新,浏览器仍然只会请求页面的初始 HTML 文件,所有的路由变化都会在 URL 前面添加 “#/” 符号。 原理 在 Hash 模式下,路…...

Nginx 具体应用
1 Nginx 1.1 介绍 一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。它占有的内存少,并发能力强,中国大陆使用 nginx 的网站有:百度、京东、新浪、网易、腾讯、淘宝等。第一个公开版本发布于…...

计算机网络之网络传输,三次握手和四次挥手
网络传输通过高低电压 流 基本类型数组 低电压转高电压,通过网卡 传输模式: 全双工:互相传输且能同时传输 半双工:互相传输但是不能同时传输 单工:单向传输,(键盘,显示器&#…...

Azure Machine Learning - 在 Azure AI 搜索中创建全文查询
Azure AI搜索中如果要为全文搜索生成查询,本文提供了设置请求的步骤。 本文还介绍了查询结构,并说明了字段属性和语言分析器如何影响查询结果。 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&a…...

基于YOLOv8深度学习的钢材表面缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…...

深度学习常见回归分支算法逐步分析,各种回归之间的优缺点,适用场景,举例演示
文章目录 1、线性回归(Linear Regression)1.1 优点1.2 缺点1.3 适用场景1.4 图例说明 2、多项式回归(Polynomial Regression)2.1 优点2.2 缺点2.3 适用场景2.4 图例说明 3、决策树回归(Decision Tree Regression&#…...

Programming Contest 2023(AtCoder Beginner Contest 331)D题 Tile Pattern --- 题解
目录 D - Tile Pattern 题目大意: 思路: 代码: D - Tile Pattern D - Tile Pattern (atcoder.jp) 题目大意: 给你一个n和q,n为局部棋盘大小(n*n) 并且给出局部棋盘中黑白子位置的放置情况,q为查询次数…...

Google测试框架googletest简介与使用方法
环境准备(Ubuntu) 下载 git clone https://github.com/google/googletest.git 安装 cd googletest // 创建build目录 mkdir build cd build //编译安装 cmake .. make sudo make install 检查是否安装成功 ls /usr/local/lib// 存在以下文件则说明…...

进程的创建:fork()
引入 创建进程的方式我们已经学习了一个!在我们运行指令(或者运行我们自己写的可执行程序)的时候不就是创建了一个进程嘛?那个创建进程的方式称为指令级别的创建子进程! 那如果我们想要在代码中创建进程该怎么办呢? fork() for…...

Fabric:创建应用通道
搭建自定义网络可以参考文章: https://blog.csdn.net/yeshang_lady/article/details/134113296 1 创建通道 网络搭建完成之后,就可以开始创建通道了。Fabric V2.5.4中可以在不创建系统通道的情况下直接创建应用通道。 1.1 修改配置文件 先创建配置文…...

力扣每日一题(2023-11-30)
力扣每日一题 题目:1657. 确定两个字符串是否接近 日期:2023-11-30 用时:21 m 07 s 时间:11ms 内存:43.70MB 代码: class Solution {public boolean closeStrings(String word1, String word2) {if(word1.…...

内部类Lambda
静态内部类 /*** 静态成员是在类加载成字节码时就已经存在的,静态只能访问静态*/ public class Demo {public static void main(String[] args) {Outer.Inner.show();} }class Outer {int num1 10;static int num2 20;static class Inner {static void show() {Outer outer …...

设一棵二叉树中各结点的值互不相同,其先序遍历序列和中序遍历序列分别存于两个一维数组A[1...n]和 Bfl...n]中,试编写算法建立该二叉树的二叉链表。
题目描述:设一棵二叉树中各结点的值互不相同,其先序遍历序列和中序遍历序列分别存于两个一维数组A[1…n]和 B[1…n]中,试编写算法建立该二叉树的二叉链表。 分析: 对于一颗二叉树,知道其中序和先序序列就可以完全确定…...

什么是Daily Scrum?
Daily Scrum(每日站会),Scrum Master要确保这个会在每天都会开。这个会的目的就是检查正在做的东西和方式是否有利于完成Sprint目的,并及时做出必要的调整。 每日站会一般只开15分钟,为了让事情更简单些,这…...

逆波兰表达式求值[中等]
优质博文:IT-BLOG-CN 一、题目 给你一个字符串数组tokens,表示一个根据 逆波兰表示法 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。 有效的算符为 ‘’、‘-’、‘*’ 和 ‘/’ 。 每个操作数(运算对象)都…...

Oracle连接和使用
5. Oracle连接和使用 5.1. sqlplus sqlplus作为甲骨文公司提供的一款本族工具产品,有着悠久的历史和积淀,它几乎伴随着Oracle数据库产生至今的整个生命周期,而且,还会继续和Oracle数据库产品相伴一直发展下去。该工具看似简单灵活的背后,却为广大用户使用Oracle数据库提…...

redis单线程为什么这么快
redis单线程为什么这么快 redis是使用的单线程来进行操作的,因为所有的数据都是在内存中的,内存操作特别快。而且单线程避免了多线程切换性能损耗问题 单线程如何处理并发客户端连接? redis利用epoll来实现IO多路复用,将连接信息和…...

工业机器视觉megauging(向光有光)使用说明书(五,轻量级的visionpro)
这个说明主要介绍抓线功能。 第一步,添加线工具,鼠标双击工具箱“抓线”,出现如下界面: 第二步,我们拉一条,“九点标定”到“抓线1”的线,和visionpro操作一样: 第三步,…...

【LittleXi】2023年广东工业大学腾讯杯新生程序设计竞赛
文章目录 【LittleXi】2023年广东工业大学腾讯杯新生程序设计竞赛A.星期几考试?C.信件D、乘除法E、不知道叫什么名字F.我要学会盾反!G.闪闪发光心动不已!H.不想想背景的gcdI.uu爱玩飞行棋J.火柴人小游戏K .有趣的BOSS 【LittleXi】2023年广东…...

【C语言:数据在内存中的存储】
文章目录 1.整数在内存中的存储1.1整数在内存中的存储1.2整型提升 2.大小端字节序2.1什么是大小端2.2为什么有大小端之分 3.整数在内存中的存储相关题目题目一题目二题目三题目四题目五题目六题目七 4.浮点数在内存中的存储4.1浮点数存的过程4.2浮点数取得过程 在这之前呢&…...

每日一练:阿姆斯特朗数
如果一个 n 位正整数等于其各位数字的 n 次方之和,则称该数为阿姆斯特朗数。 例如 1^3 5^3 3^3 153。 1000 以内的阿姆斯特朗数: 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407。...

fatal: remote error: upload-pack: not our ref (未解决问题)
PX4使用 git submodule update --init --recursive报错 fatal: remote error: upload-pack: not our ref解决办法参考:https://stackoverflow.com/questions/61163082/why-does-git-submodule-update-fail-with-fatal-remote-error-upload-pack-not-o 感觉就是清…...

Python 3 使用 read()、readline()、readlines() 函数 读取文件
1 样例文件 example.txt 春晓 孟浩然〔唐代〕 春眠不觉晓,处处闻啼鸟。 夜来风雨声,花落知多少。 2 分别使用 read()、readline()、readlines() 函数 2.1 # read() -------- 一次性读取所有文本,以字符串的形式返回结果。 # read() ----…...

勒索解密后oracle无法启动故障处理----惜分飞
客户linux平台被勒索病毒加密,其中有oracle数据库.客户联系黑客进行解密【勒索解密oracle失败】,但是数据库无法正常启动,dbv检查数据库文件报错 [oraclehisdb ~]$ dbv filesystem01.dbf DBVERIFY: Release 11.2.0.1.0 - Production on 星期一 11月 27 21:49:17 2023 Copyrig…...

Leetcode144. 二叉树的前序遍历-C语言
文章目录 题目介绍题目分析解题思路1.创建一个数组来储存二叉树节点的值2.根据二叉树的大小来开辟数组的大小3.边前序遍历边向创建的数组中存入二叉树节点的值 完整代码 题目介绍 题目分析 题目要求我们输出二叉树按前序遍历排列的每个节点的值。 解题思路 1.创建一个数组来…...

dmesg命令在软件测试中的实际应用
简介:当你想要了解 Linux 系统在启动时究竟发生了什么?或者当硬件设备不工作时,如何进行调试?这就是 dmesg 命令的用武之地。本文将介绍 dmesg 的基本功能,并深入探讨其在软件测试中的实际应用。 历史攻略:…...

【渗透】记录阿里云CentOS一次ddos攻击
文章目录 发现防御 发现 防御 流量清洗 使用高防...

前端面试提问(3)
1、js两个数相加会不会丢精度? 可能会遇到精度丢失的问题。JavaScript 使用的是 IEEE 754 浮点数标准,即一种二进制表示法,有时不能准确地表示十进制小数。如果你需要进行精确的十进制数值计算,可以使用一些处理精确数值的库&…...