软件体系结构(期末复习)
文章目录
- 软件体系结构
- 软件体系结构概论
- 软件体系结构建模
- 软件体系结构风格
- 统一建模语言
- 基于体系结构的软件开发
软件体系结构
软件体系结构概论
软件危机是指计算机软件的开发和维护过程中遇到的一系列严重问题。
软件危机的表现:

软件危机的原因:

软件工程的基本要素:过程、方法、工具。
软件工程过程(五种活动):
软件工程方法(四种方法):

软件体系结构构成(核心模型):构件+连接件+约束
体系结构风格:用于描述某一特定应用领域中系统组织的惯用模式,反映了领域中众多系统所共有的结构和语义特性。
软件框架:软件框架是由开发人员定制的应用系统的骨架,是整个或部分系统的可重用设计,由一组抽象构件和构件实例间的交互方式组成。
设计模式:描述了软件系统设计过程中常见问题的一些解决方案,通常是从大量的成功实践中总结出来的且被广泛公认的实践和知识。
框架和体系结构的关系:
- 体系结构的呈现形式是一个设计规约,而框架则是“半成品”的软件。
- 体系结构的目的是指导软件系统的开发,而框架的目的是设计复用。
框架和设计模式的关系:
- 框架给出的是整个应用的体系结构;而设计模式则给出了单一设计问
题的解决方案,且可以在不同的应用程序或者框架中进行应用。 - 举例:一个网络游戏可以基于网易的Pomelo框架开发,这是一个基于
Node.js的高性能、分布式游戏服务器框架;在实现某个动画功能时,
可能会使用观察者模式实现自动化的通知更新。 - 设计模式的目标是改善代码结构,提高程序的结构质量;框架强调的
是设计的重用性和系统的可扩展性,以缩短开发周期,提高开发质量。
构件:是具有某种功能的可复用的软件结构单元,表示系统中主要的计算元素和数据存储。

构件获取:

构件三个流派:
-
CORBA:对象管理集团OMG的通用对象请求代理结构CORBA。
OMG: Object Management Group
CORBA: Common Object Request Broker Architecture -
EJB:Sun公司制定的EJB规范。
EJB: Enterprise Java Bean -
DCOM:Microsoft公司制定的分布式构件对象模型DCOM。
DCOM: Distributed Component Object Model
构件管理:
- 构件描述。
- 构件分类与组织。
- 人员及权限管理。
构件描述是模型对构件本质的抽象描述,主要是为构件的制作与构件的重用提供依据。从管理角度出发,也需要对构件进行描述,例如:实现方式、实现体、注释、生产者、生产日期、大小、价格、版本和关联构件等信息,它们与构件模型共同组成了对构件的完整描述。
构件分类与组织:
- 关键字分类法。
- 刻面分类法。
- 超文本组织方法。
构件管理:人员及权限管理:包括五类用户,即注册用户、公共用户、构件提交者、一般系统管理员和超级系统管理员。
构件重用:
- 检索与提取构件。
- 理解与评价构件。
- 修改构件。
- 构件组装。
构件重用:检索与提取构件:
- 基于关键字的检索。
- 刻面检索法。
- 超文本检索法。
- 其他检索方法。
构件重用:理解与评价构件:
- 构件的功能与行为。
- 相关的领域知识。
- 可适应性约束条件与例外情形。
- 可以预见的修改部分及修改方法。
构件重用:构件组装 :
- 基于功能的组装技术。
- 基于数据的组装技术。
- 面向对象的组装技术。
连接:是构件间建立和维护行为关联与信息传递的途径。

连接件 :表示构件之间的交互并实现构件之间的连接。

软件体系结构的目标:有效性、简单性、可重用性、可拓展性。
软件体系结构建模
Kruchten4+1视图模型从5个不同的视角包括逻辑视图、进程视图、物理视图、开发视图和场景视图来描述软件体系结构。每一个视图只关心系统的一个侧面,5个视图结合在一起才能反映系统的软件体系结构的全部内容。
•逻辑视图:当采用面向对象的设计方法时,逻辑视图即是对象模型。
•过程视图:描述系统的并发和同步方面的设计。
•物理视图:描述软件到硬件之间的映射关系,反映系统在分布方面的设计。
•开发视图:描述软件在开发环境下的静态组织。

Rational 4+1视图模型:
、
用例视图
•用例视图包含描述用户、分析师和测试工程师看到的系统行为的用例。
•根据视图可确定系统架构。
•UML:
静态方面:用例图描述。
动态方面:交互图、状态图和活动图描述。
设计视图
•设计视图包含构建系统的类、接口和类之间的协作。
•主要支持系统的功能性需求,也即系统提供给用户的服务。
•UML:
静态方面:类图、对象图描述。
动态方面:交互图、状态图和活动图描述。
交互视图
•交互视图描述了系统不同部分之间的控制流,包括可能的并发和同步机制。
•主要解决系统的性能、可拓展性、吞吐量等问题。
•UML:
静态方面:类图、对象图描述。
动态方面:交互图、状态图和活动图描述。
实现视图
•实现视图包含用于组装和发布物理系统的组件。
•主要解决系统发布的配置管理问题。
•UML:
静态方面:物件图描述。
动态方面:交互图、状态图和活动图描述。
部署视图
•部署视图包含形成系统硬件拓扑结构的节点。
•主要解决构成物理系统的部件的分布、发布和安装问题。
•UML:
静态方面:部署图描述。
动态方面:交互图、状态图和活动图描述。
软件体系结构风格
软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式,强调了软件系统中通用的组织结构。
体系结构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。
体系结构风格定义了一个系统家族,即一个体系结构定义一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。
通用体系结构风格分类:
•数据流风格:批处理序列;管道/过滤器。
•调用/返回风格:主程序/子程序;面向对象风格;层次结构。
•独立构件风格:进程通讯;事件系统。
•虚拟机风格:解释器;基于规则的系统。
•仓库风格:数据库系统;超文本系统;黑板系统。
主程序-子程序风格是结构化程序设计的一种典型风格,从功能的观点设计系统,通过逐步分解和细化,形成整个系统的体系结构。(应用于C语言)
数据抽象和面向对象系统风格(应用于java):
- 系统被看作是对象的集合,每个对象都有一个它自己的功能集合。
- 数据及作用在数据上的操作被封装成抽象数据类型。
- 只通过接口与外界交互,内部的设计决策则被封装起来。
管道-过滤器风格把系统任务分成若干连续的处理步骤,这些步骤由通过系统的数据流连接,一个步骤的输出是下一个步骤的输入(应用于视频播放器)。
事件系统是将应用看成是一个构件集合,每个构件直至发生对它有影响的事件时才有所动作(应用于程序调试器)。
层次结构:
- 层次系统组织成一个层次结构,每一层为上层服务,并作为下层客户。连接件通过决定层间如何交互的协议来定义,拓扑约束包括对相邻层间交互的约束。
- 这种风格支持基于可增加抽象层的设计。允许将一个复杂问题分解成一个增量步骤序列的实现。由于每一层最多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,同样为软件重用提供了强大的支持。
仓库体系结构是一种以数据为中心的体系结构,适合于数据由一个模块产生而由其他模块使用的情形。
客户机/服务器体系结构是一种分布式系统模型,作为服务器的子系统为其他客户机的子系统提供服务,作为客户机的子系统负责与用户的交互。
三层C/S结构:

B/S结构

- 第一层表现层:主要完成用户和后台的交互及最终查询结果的输出功能。
- 第二层逻辑层:主要是利用服务器完成客户端的应用逻辑功能。
- 第三层数据层:主要是接受客户端请求后独立进行各种运算。
CORBA技术规范
- 接口定义语言(IDL)
- 接口池(IR)
- 动态调用接口(DII)
- 对象适配器(OA)
CORBA体系结构模型

什么是前后端分离:就是把数据操作和显示分离出来。 前端专注做数据显示,通过文字,图片或者图标等方式让数据形象直观的显示出来。 后端专注做数据的操作。 前端把数据发给后端,有后端对数据进行修改。
统一建模语言
什么是模型:模型是对现实的简化,建模是为了更好地理解系统。
UML简介:
- 英文 Unified Modeling Language 首字母缩写。
- 中文:统一建模语言。
- 统一( Unified ):
- 软件工程领域全部认可并遵守的规范,类似于自然语言中的“英语”。
- 具有简单、直观和规范的特点,学习和掌握比较简单。所描述的软件模型,可以直观地理解和阅读,由于具有规范性,所以能够保证模型的准确、一致。
- 建模( Modeling ):
- 用于表达现实的简化视图,以便于面向对象软件系统的设计与实现。
- 语言( Language ):
- UML主要是遵循精确语法的图形语言(还包括规则、约束、扩展机制)。
UML语法和语义:

UML的构成

UML事物

结构事物
-
结构事物(structural thing):UML模型的静态部分,描述概念或物理元素。
-
结构事物也称为:构件事物。
-
常见的结构事物包括:
类(class)
接口(interface)
协作(collaboration)
用例(use case)
主动类(active class)
构件(component)
节点(node)
行为事物
-
行为事物(Behavioral Thing):UML模型图的动态部分,描述跨越空间和时间的行为。
-
常见的行为事物包括:
交互(interaction):实现某功能的一组构件事物之间的消息的集合,涉及消息、动作序列、链接。
状态机(state machine):描述事物或交互在生命周期内响应事件所经历的状态序列。
分组事物
-
分组事物(Group Thing):UML模型图的组织部分,描述事物的组织结构。
-
常见的分组事物包括:
包(package)。
注释事物
-
注释事物(Annotational thing): UML模型的解释部分,用来对模型中的元素进行说明和解释。
-
常见注释事物包括:
注解(note)。
UML关系

UML图形

类图(重点)
交互图(重点)
顺序图(重点)
基于体系结构的软件开发
MVC设计模式(重点)
MVC结构:

MVC的框架:

MVC的通信机制
MVP:MVP是把MVC中的Controller换成了Presenter(呈现),目的就是为了完全切断View跟Model之间的联系,由Presenter充当桥梁,做到View-Model之间通信的完全隔离。

MVVM:MVVM是将“数据模型数据双向绑定”的思想作为核心,因此在View和Model之间没有联系,通过ViewModel进行交互,而且Model和ViewModel之间的交互是双向的,因此视图的数据的变化会同时修改数据源,而数据源数据的变化也会立即反应到View上。

设计模式分类:

设计模式的组成:
- 模式名称
- 问题
- 解决方案
- 后果
中间件的分类
- 底层中间件:JVM(Java Virtual Machine,Java虚拟机)、CLR(Common Language Runtime,公共语言运行库)、ACE(Adaptive Communication Environment,自适配通信环境)等
- 通用型中间件:也称为平台,其主流技术主要有RPC、ORB、MOM(Message-Oriented Middleware,面向消息的中间件)等
- 集成型中间件:WorkFlow、EAI等
主要的中间件技术:
- 远程过程调用
- 远程方法调用
- 对象请求代理
- 面向消息的中间件
- 事务处理监控器
软件过程模型主要分类:
- 瀑布模型
- 原型化模型
- 迭代式开发
- 可转换模型
6806166733)]
设计模式的组成:
- 模式名称
- 问题
- 解决方案
- 后果
中间件的分类
- 底层中间件:JVM(Java Virtual Machine,Java虚拟机)、CLR(Common Language Runtime,公共语言运行库)、ACE(Adaptive Communication Environment,自适配通信环境)等
- 通用型中间件:也称为平台,其主流技术主要有RPC、ORB、MOM(Message-Oriented Middleware,面向消息的中间件)等
- 集成型中间件:WorkFlow、EAI等
主要的中间件技术:
- 远程过程调用
- 远程方法调用
- 对象请求代理
- 面向消息的中间件
- 事务处理监控器
软件过程模型主要分类:
- 瀑布模型
- 原型化模型
- 迭代式开发
- 可转换模型
设计题涉及软件过程模型分析
相关文章:
软件体系结构(期末复习)
文章目录软件体系结构软件体系结构概论软件体系结构建模软件体系结构风格统一建模语言基于体系结构的软件开发软件体系结构 软件体系结构概论 软件危机是指计算机软件的开发和维护过程中遇到的一系列严重问题。 软件危机的表现: 软件危机的原因: 软件工程的基本要素…...
[vue3] pinia的基本使用
使用Pinia npm install piniastore文件里index.js import { createPinia } from piniaconst pinia createPinia()export default piniamain.js导入并引用 import { createApp } from vue import App from ./App.vue import pinia from ./storescreateApp(App).use(pinia).m…...
进程和线程详解
在计算机领域中,进程和线程是非常重要的概念。了解进程和线程是软件开发的基础,也是计算机科学教育中的一部分。本文将介绍进程和线程的概念、区别和应用。 一、什么是进程 在计算机科学中,进程是正在执行的程序实例。一个进程可以由一个或…...
《刀锋》读书笔记
刀锋(毛姆长篇作品精选)毛姆50个笔记点评认为好看的确是完美的结局。《刀锋》里面的人每个人都以自己的方式生活着。艾略特的势利,拉里的自由,伊莎贝尔的现实,苏珊的清醒,索菲的堕落,至于“我”…...
nginx中的ngx_modules
ngx_modules和ngx_module_names是configure脚本生成的,是在objs/ngx_modules.c文件中与其生成的相关的脚本文件相关的变量在options脚本中定义了objs目录的变量NGX_OBJSobjs在init脚本中定义的最终存放ngx_modules的文件 NGX_MODULES_C$NGX_OBJS/ngx_modules.c2. 处…...
设计模式之访问者模式
什么是访问者模式 访问者模式提供了一个作用于某对象结构中的各元素的操作表示,他使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 访问者模式主要包含以下几个角色: Vistor(抽象访问者):为对象结…...
Go项目(三)
文章目录用户微服务表结构查表web 服务跨域问题图形验证码短信用户注册服务中心注册 grpc 服务动态获取端口负载均衡配置中心启动项目小结用户微服务 作为系统的第一个微服务,开发的技术点前面已经了解了一遍,虽有待补充,但急需实战这里主要…...
CTK学习:(一)编译CTK
CTK插件框架简介 CTK Plugin Framework是用于C++的动态组件系统,以OSGi规范为模型。在此框架下,应用程序由不同的组件组成,遵循面向服务的方法。 ctk是一个开源项目,Github 地址:https://github.com/commontk。 源码地址commontk/CTK: A set of common support code for…...
15种NLP数据增强方法总结与对比
数据增强的方法 数据增强(Data Augmentation,简称DA),是指根据现有数据,合成新数据的一类方法。毕竟数据才是真正的效果天花板,有了更多数据后可以提升效果、增强模型泛化能力、提高鲁棒性等。然而由于NLP…...
Python每日一练(20230219)
目录 1. 循环随机取数组直到得出指定数字? 2. 旋转链表 3. 区间和的个数 1. 循环随机取数组直到得出指定数字? 举个例子: 随机数字范围:0~100 每组数字量:6(s1,s2,s3,s4,s5,s6) 第二轮开始随…...
vTESTstudio - VT System CAPL Functions - VT7001
vtsSerialClose - 关闭VT系统通道的串行端口功能:关闭由系统变量命名空间指定的VT系统通道的串行端口。Target:目标通道变量空间名称,例如:VTS::ECUPowerSupply返回值:0:成功重置目标通道最大和最小值-1&am…...
「可信计算」论文初步解读
可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alli…...
CSDN 算法技能树 蓝桥杯-基础 刷题+思考总结
切面条-蓝桥杯-基础-CSDN算法技能树https://edu.csdn.net/skill/algorithm/algorithm-530255df51be437b967cbc4524fe66ea?category188 目录 切面条 大衍数列 门牌制作 方阵转置 微生物增殖 成绩统计 星系炸弹 判断闰年的依据: 特别数的和 *日志统计*(双指…...
信小程序点击按钮绘制定制转发分享图
1. 说明 先上代码片断分享链接: https://developers.weixin.qq.com/s/vl3ws9mA72GG 使用 painter 画图 按钮传递定制化信息 效果如下: 2. 关键代码说明 文件列表如下: {"usingComponents": {"painter": "/com…...
Python自动化测试-使用Pandas来高效处理测试数据
Python自动化测试-使用Pandas来高效处理测试数据 目录:导读 一、思考 二、使用pandas来操作Excel文件 三、使用pandas来操作csv文件 四、总结 一、思考 1.Pandas是什么? 功能极其强大的数据分析库可以高效地操作各种数据集 csv格式的文件Excel文件H…...
语音增强学习路线图Roadmap
语音增强算是比较难的研究领域,从入门到精通有很多台阶,本文介绍一些有价值的书籍,值得反复阅读。主要分为基础类和进阶类书籍,大多都是理论和实践相结合的书籍,编程实践是抓手,让知识和基础理论变扎实。基础书籍《信号…...
nginx配置ssl实现https访问
文章目录一、介绍二、创建证书1、OpenSSL创建自签名密钥和证书三、nginx配置四、开放端口一、介绍 nginx配置ssl证书,实现https访问,可以使用自签名SSL证书或者购买机构颁发的证书两种方式参考链接 https://blog.csdn.net/weixin_39198406/article/deta…...
JavaScript 语句
JavaScript 语句向浏览器发出的命令。语句的作用是告诉浏览器该做什么。JavaScript 语句JavaScript 语句是发给浏览器的命令。这些命令的作用是告诉浏览器要做的事情。下面的 JavaScript 语句向 id"demo" 的 HTML 元素输出文本 "Hello Dolly" :…...
将古老的ASP项目转换为PHP初探
ASP 是一种服务器端脚本语言,主要用于开发动态 Web 应用程序。ASP 可以在服务器上执行代码,并将结果返回给客户端浏览器,实现动态生成 Web 页面的功能。ASP 代码通常包含在 <% %> 标记中,以下是一个简单的 ASP 程序示例&…...
数据结构复习(七)模板类封装实现不带头结点的单链表
一、代码 二、总结 一、代码 #include<iostream> using namespace std;template<class T> struct ListNode {T _data;ListNode* next;ListNode(const T& data T()){_data data;next nullptr;}~ListNode(){next nullptr;} };template<class T> class…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
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. 查看链接器参数(如果没有勾选上面…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
