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

软件工程与计算总结(九)软件体系结构基础

目录

​编辑

一.体系结构的发展

二.理解体系结构

1.定义

2.区分体系结构的抽象与实现

3.部件

4.连接件

5.配置

三.体系结构风格初步

1.主程序/子程序

2.面向对象式

3.分层

4.MVC


一.体系结构的发展

小规模编程的重点在于模块内部的程序结构非常依赖于程序设计语言提供的编程机制,而大规模编程的重点在于将众多的模块组织起来实现需求,需要特别关注模块之间的关系——这些关系应该是不依赖于编程机制的另一项完全不同的技术

20世纪90年代,正式将软件体系结构作为重要的研究主题。

二.理解体系结构

1.定义

软件体系结构=部件+连接件+配置

  • 部件:是软件体系结构的基本组成单位之一,承载系统的主要功能,包括处理与数据
  • 连接件:定义了部件之间的交互,是链接的抽象表示
  • 配置:对形式的发展,定义了部件以及连接件之间的关联方式,他们组织成系统的总体结构

2.区分体系结构的抽象与实现

以部件、连接件和配置为基本单位组织的模型就是软件体系结构的抽象,基本目的是描述软件系统的整体功能组织,不涉及程序设计语言提供的各种编程机制;而模块,构建,进程等传统单位都是依赖于编程机制的,它们组成的模型就被称为软件体系结构的实现~

软件体系结构设计是先使用抽象机制完成软件系统的总体功能部署,然后再将抽象模型等价转换为设计模型,这既保证了软件系统的效用和质量,又顺利实现那了从总体结构设计到详细设计的过渡

3.部件

  • 原始:部件可以直接被现实为相应的软件实现机制,具体的实现粒度要视部件的复杂度而定
  • 复合:部件则由更细粒度的部件和连接件组成,通过局部配置将其内部的部件和连接件链接起来,构成一个整体

4.连接件

实现类型:

  • 隐式类型:编程语言、操作系统、中间件、数据库管理系统、软件框架等提供方提供,开发者可以直接使用~
  • 显示类型:通常需要进行一些复杂的逻辑处理,需要开发者进行专门的实现~

5.配置

通过部件端口与连接角色想匹配的方式,将系统中部件和连接件的关系定义为一个关联集合,这个关联集合可以形成系统整体结构的一个拓扑描述~

ADL:体系结构描述语言,用于描述系统结构的形式化模块语言,描述的对象是软件系统的高层结构,而不涉及软件系统的实现~

三.体系结构风格初步

如下是几个经典的常用模式~

1.主程序/子程序

包含一个主程序和一些列子程序,主程序是系统的控制器,负责调动各子程序的执行,而各子程序又是一个局部的控制器,负责调度其子程序的执行~

部件的实现模块内部无论采用结构化还是面向对象分析,这并不妨碍整个系统高层结构符合主程序、子程序风格的约定~

优点:

  • 流程清晰,易于理解
  • 强控制性

缺点:

  • 系统难以修改和复用
  • 会产生不必要的公共耦合(限制了各部件之间的数据交互)

2.面向对象式

将系统组织为多个独立的对象,每个对象封装其内部的数据,并基于数据对外提供服务,不同对象之间通过写作机制共同完成系统任务~

需要注意的是:面向对象式风格是因为它借鉴了面向对象分析方法的思想,而不是因为它使用面向对象分析方法实现体系结构,这也是在该风格名称中有一个“式”字的原因~

优点:

  • 内部实现的可修改性
  • 易开发、易理解、易复用的结构组织

缺点:

  • 接口的耦合性
  • 标识的耦合性
  • 面向对象的副作用

3.分层

根据不同的抽象层次,将系统组织为层次式结构,每个层次被建立为一个部件~

优点:

  • 设计机制清晰
  • 支持并行开发
  • 更好的复用性与内部可修改性

缺点:

  • 交互协议难以修改
  • 性能损失
  • 难以确定层次数量和粒度

4.MVC

模型-视图-控制风格~(Model-View-Control)

以程序调用为连接件,将系统功能组织为模型、视图和控制3个部件。

  • 模型:系统的数据和状态信息,实现业务逻辑
  • 视图:用户交互,提供业务展现,接收用户行为
  • 控制:系统的控制逻辑

优点:

  • 易开发性
  • 视图和控制的可修改性
  • 适宜于网络系统开发的特征

缺点:

  • 复杂性
  • 模型修改困难

 

相关文章:

软件工程与计算总结(九)软件体系结构基础

目录 ​编辑 一.体系结构的发展 二.理解体系结构 1.定义 2.区分体系结构的抽象与实现 3.部件 4.连接件 5.配置 三.体系结构风格初步 1.主程序/子程序 2.面向对象式 3.分层 4.MVC 一.体系结构的发展 小规模编程的重点在于模块内部的程序结构非常依赖于程序设计语言…...

bootz启动 Linux内核涉及do_bootm_linux 函数

一. bootz启动Linux uboot 启动Linux内核使用bootz命令。当然还有其它的启动命令,例如,bootm命令等等。 本文只分析 bootz命令启动 Linux内核的过程中涉及的几个重要函数。具体分析 do_bootm_linux函数执行过程。 本文继上一篇文章,地址…...

ipad有必要用手写笔吗?性价比电容笔排行榜

随着技术的进步,各种新型的数字电子产品不断涌现。比如说,智能手机、ipad、电容笔之类的东西。但事实上,要将iPad的功能发挥到极致,我认为,这款电容笔,就必不可少的了。这就好像我们在ipad平板上书写东西&a…...

jmeter怎样的脚本设计才能降低资源使用

官网地址:Apache JMeter - Users Manual: Best Practices 1、用好断言 频繁的使用断言会加大资源的消耗,尽可能减少断言的使用,或者在使用的过程中断言数据文本尽量精简,断言内容尽量以status/code、msg/message来判断&#xff0…...

如何避免 IDEA 每次重启都index

如何避免 IDEA 每次重启都index 在 IntelliJ IDEA 中,可以通过以下几个步骤来避免每次重启时索引: 打开 File -> Settings 菜单。在左侧的菜单栏中选择 “Appearance & Behavior” -> “System Settings” -> “Synchronization”。 在右…...

ImagePreview查看gif图,关闭之后原图不动了

vant的ImagePreview查看大图,当查看的是gif图的时候,关闭查看大图弹窗,原图不动了,ios上几乎必现。 解决的方案是,监听onclose事件,在关闭的时候把原图的gif图地址重新设置一下就好了 sceneImg(url: stri…...

实现基于 GitLab 的数据库 CI/CD 最佳实践

数据库变更一直是整个应用发布过程中效率最低、流程最复杂、风险最高的环节,也是 DevOps 流程中最难以攻克的阵地。那我们是否能在具体的 CI/CD 流程中,像处理代码那样处理数据库变更呢? DORA 调研报告 DORA(DevOps Research &am…...

android关闭键盘方法

Android开发中经常会遇到隐藏键盘的需求,例如登录界面,输入账号密码后需要点击界面其它部位,隐藏键盘。为此,分享前几年自己使用的方法,最近亲自测试,仍然有效。 方法一、Window window getWindow(); Win…...

ACK 云原生 AI 套件:云原生 AI 工程化落地最优路径

作者:胡玉瑜(稚柳) 前言 在过去几年中,人工智能技术取得了突飞猛进的发展,涵盖了机器学习、深度学习和神经网络等关键技术的重大突破,这使得人工智能在各个领域都得到广泛应用,对各行各业产生了深远的影响。 特别值…...

工程企业管理软件源码-综合型项目管理软件

工程项目管理软件(工程项目管理系统)对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营,全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&am…...

stm32mp157中断简单应用

设置按键中断,按键1按下,LED亮,再按一次,灭 按键2按下,蜂鸣器响。再按一次,不响 按键3按下,风扇转,再按一次,风扇停 main.c #include "gpio.h" #include &…...

智慧机场数字孪生大屏升级智慧出行全方位服务

在宁波栎社国际机场的信息中心大楼内,一块大屏幕上展示了一座“数字孪生”机场。通过点击屏幕上的各个板块,可以实时查看现场情况,一旦出现突发状况,还可以立即启动闭环处置流程…… (图源自宁波机场) 在数…...

微信小程序 js中写一个px单位转rpx单位的函数

大家写东西自然还是会比较喜欢用rpx 但是 事实证明 在js中 还是px好用 因为很多单位交互的函数还是只返回px单位的 理论上将 750 rpx 是整个屏幕的宽度 那么 我们可以这样写一个函数 pxToRpx(px) {//获取整个屏幕的宽度单位 pxlet screenWidth wx.getSystemInfoSync().scree…...

第14章总结:lambda表达式与处理

14.1: lambada表达式 14.1.1:lambada表达式简介 无参数 package fourteen; interface SayhHi{ String say();//抽象方法接口 } public class NoParamDemo { public static void main(String[] args) { //无参数 …...

多尺度retinex图像去雾算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 clc; clear; close all; warning off; addpath(genpath(pwd)); rng(default)img_in im2doub…...

蓝桥等考Python组别十八级005

第一部分:选择题 1、Python L18 (15分) 运行下面程序,输入30,输出的结果是( )。 t = int(input()) if t < 30: print(0) else: print(t // 15 * 2) 4102030正确答案:A 2、Python L18 (15分)...

redis在linux系统的安装与使用

一、单机安装Redis。 1.安装redis依赖 在控制台输入 yum install -y gcc tcl2.上传安装包 下载好的安装包上传到/usr/local/src/ 上传方法&#xff1a; 1.确保你拥有Linux服务器的IP地址、用户名和密码。 2.在Windows上&#xff0c;打开命令提示符&#xff08;Command Promp…...

PanoFlow:学习360°用于周围时间理解的光流

1.摘要&#xff1a; 光流估计是自动驾驶和机器人系统中的一项基本任务&#xff0c;它能够在时间上解释交通场景。自动驾驶汽车显然受益于360提供的超宽视野&#xff08;FoV&#xff09;◦ 全景传感器。 然而&#xff0c;由于全景相机独特的成像过程&#xff0c;为针孔图像设计…...

C# - 常用API

Assembly.GetCallingAssembly 方法 获取当前方法的调用程序集: Console.WriteLine("FirstMethod called from: " Assembly.GetCallingAssembly().FullName); Assembly.GetExecutingAssembly 方法 获取包含当前执行的代码的程序集: //获取当前执行的代码的程序集…...

新式茶饮品牌如何写出生活感软文

居民消费水平的提升使新式茶饮品牌的市场不断扩张&#xff0c;在竞争激烈的茶饮市场中&#xff0c;品牌提高知名度的主要方式之一就是软文营销&#xff0c;而生活感软文是茶饮软文中较为常见的类型&#xff0c;它能有效拉进品牌与消费者之间的距离&#xff0c;那么新式茶饮品牌…...

别再死记硬背!用Python可视化理解第一类曲面积分中的dσ与dxdy关系

用Python可视化破解曲面积分&#xff1a;从dσ到dxdy的几何直觉 第一次看到曲面积分公式里的dσ √(1 fx fy) dxdy时&#xff0c;我盯着那堆平方根和偏导数符号发呆了十分钟。直到某天用Matplotlib让这个公式"动起来"&#xff0c;才突然明白那些教科书上的推导到底…...

8351健康管理中心用黑科技设备为企业家筑起生命防线

事业的成功固然值得骄傲&#xff0c;但如果没有健康作为根基&#xff0c;一切的辉煌都显得摇摇欲坠。对于每天在高压下决策、在商海中搏击的企业家而言&#xff0c;健康早已不是一句简单的口号&#xff0c;而是一场需要长期投入的战略投资。然而现实往往是&#xff0c;很多企业…...

Ubuntu 20.04桌面管理器搞乱了?别慌,手把手教你找回原版GNOME桌面(附LightDM/GDM3切换命令)

Ubuntu 20.04桌面环境异常修复指南&#xff1a;从混乱到秩序 系统启动后突然发现熟悉的GNOME桌面消失了&#xff0c;取而代之的是一个陌生的登录界面和错乱的窗口布局——这可能是许多Ubuntu新手在尝试自定义系统时遇到的噩梦。本文将带你深入理解Linux显示管理器的运作机制&am…...

告别手写解析!用Python Cantools 39.4.5一键生成CAN/CANFD DBC的C代码(附批处理脚本)

从DBC到C代码&#xff1a;Python Cantools全自动转换实战指南 在汽车电子和嵌入式开发领域&#xff0c;CAN总线通信是核心基础设施&#xff0c;而DBC文件则是定义CAN/CANFD通信协议的行业标准。传统开发流程中&#xff0c;工程师需要手动解析DBC文件并编写大量信号打包/解包代码…...

rag 进行 全局聚合的结构性失败 解析

rag 进行 全局聚合的结构性失败 解析 目录 rag 进行 全局聚合的结构性失败 解析 一句话核心结论 逐句拆解原文含义 1. 前提:什么是"全局聚合"? 2. 致命问题:采样引入不可纠正的选择偏差 农情任务实例:直观感受结构性偏差 真实数据分布(12M农情CSV,共12000条上…...

告别Chrome依赖:在Edge上完美复刻XPath Helper,打造你的爬虫元素定位工作流

告别Chrome依赖&#xff1a;在Edge上完美复刻XPath Helper&#xff0c;打造你的爬虫元素定位工作流 浏览器工具链的迁移从来不是简单的插件替换&#xff0c;而是一场关于开发习惯与效率的深度重构。当微软Edge凭借Chromium内核的稳定性和内存优化逐渐成为技术工作者的新宠&…...

华为升腾C92变身校园打铃器:从Linux到Win7的完整改造指南

1. 华为升腾C92硬件潜力解析 很多人第一次接触华为升腾C92时&#xff0c;都会被它小巧的机身误导&#xff0c;以为这只是一台性能有限的瘦客户机。我当初在学校见到这批预装Linux系统的设备时&#xff0c;也是这么想的。直到某天停电后需要手动打铃&#xff0c;才萌生了改造它的…...

【鸿蒙软件开发】ArkTS基础组件实战:Select与Slider在智能家居控制面板中的应用

1. 智能家居控制面板中的交互设计需求 现代智能家居系统越来越注重用户体验&#xff0c;而控制面板作为用户与设备交互的核心界面&#xff0c;其设计直接影响使用效率。在实际项目中&#xff0c;我发现很多开发者容易陷入"功能堆砌"的误区&#xff0c;忽略了交互设计…...

实战指南:用Python ESL(greenswitch库)监听FreeSWITCH事件并自动录音

实战指南&#xff1a;用Python ESL&#xff08;greenswitch库&#xff09;监听FreeSWITCH事件并自动录音 在通信系统开发中&#xff0c;FreeSWITCH作为强大的开源软交换平台&#xff0c;其Event Socket接口为开发者提供了深度集成的可能。本文将聚焦如何利用Python生态中的gre…...

凡亿AD22--PCB全连接与十字花焊盘连接铺铜规则

核心重点&#xff1a;铺铜与焊盘/过孔的连接方式&#xff0c;核心分为「全连接」「十字连接」「不连接」三种&#xff0c;实际设计中仅常用前两种&#xff1b;连接方式的选择&#xff0c;核心取决于「焊接方式」「载流需求」&#xff0c;过孔连接需默认采用全连接&#xff0c;避…...