软件工程---基于构件的软件工程
基于构件的软件工程(CBSE)是一种软件开发方法,通过重用现有的软件构件来构建系统,从而提高开发效率和软件质量。这种方法强调软件系统的模块化设计和构建复用,使得软件开发过程更加高效和灵活。
企业软件开发:
在企业级软件开发中,通过重用构件可以快速构件复杂的业务应用,减少开发周期
嵌入式系统:
在嵌入式系统中,基于构件的方法有助于开发高度模块化和可定制系统
云计算和微服务架构:
在云计算和微服务架构中,基于构件的设计思想有助于实现高效的服务部署和管理
概念
基于构件的软件工程(CBSE)是一种基于分布式对象技术的方法,强调通过可复用构件设计与构造软件系统。CBSE体现了购买而不是重新构造的哲学,将软件开发的重点从程序编写转移到了基于已有构件的组装。
特征:
基于CBSE的构件应该具备以下特征:
可组装性:构件的所有外部交互必须通过公开定义的接口进行,确保其能够与其他构件正确协作。同时,构件应对自身信息的外部访问进行控制,确保数据的安全性和完整性。
可部署性:软件构件必须是自包含的,可以作为一个独立实体在构件平台上运行。构件通常以二进制形式存在,无需在部署前重新编译。
文档化:构件必须完全文档化,用户可以根据文档判断构件是否满足其需求。文档应详细描述构建的功能、接口和使用方法。
独立性:构件应该是独立的,能够在无需其他特殊构建的情况下进行组装和部署。如果确实需要其他构件提供服务,则应明确声明这些依赖关系。
标准化:构件必须符合某种标准化的构件模型。标准化模型定义了构件的实现、文档化和开发标准,确保构件的一致性和互操作性。
构件模型要素
接口:构件通过接口来定义,接口描述了构件提供的操作、参数以及可能的异常。构件模型规定了如何定义接口及其包含的要素。
使用信息:为了实现构件的远程分布和访问,必须给构件分配一个特定的、全局唯一的名字或句柄。构件元数据包含构件的接口和属性信息,这些信息对于构件的使用和集成至关重要。
部署:构件模型包括一个规格说明,指出如何打包构件使其成为一个独立的可执行实体。部署信息中包含有关包内容和二进制构成的信息,确保构件可以顺利部署和运行。
基于构件的软件工程通过使用标准化、文档化、独立且可部署的构件,提高了软件开发的效率和质量。CBSE方法将重点放在构件的选取和组装上,而不是从头编写代码,从而实现了软件系统的快速构建和高效维护。
通用服务
平台服务
支持服务
中间件服务
主要活动
CBSE过程是支持基于构件组装的软件开发过程,主要包括以下六个活动:
系统需求概览:确定系统的整体需求和功能需求,概述系统的目标和预期功能,为后续活动提供基础
识别候选构件:在需求概览的基础上,识别可以满足需求的现有构件。分析市场上可用的构件库,选择符合需求的候选构件。
根据发现的构件修改需求:根据已识别的候选构件,调整和修改系统需求,以确保需求与可用构件的功能相匹配。这一步确保了系统需求的可实现性和合理性。
体系结构设计:设计系统的总体体系结构,定义各个构件的角色和它们之间的交互方式。确保体系结构能够有效地集成所有已选则的构件。
构件定制与适配:对已选择的构件进行必要的定制和适配,以满足系统的具体需求。这可能包括修改构件的配置、接口或行为,使其与系统的其他部分兼容。
组装构建创建系统:将所有定制好和适配好的构件进行组装、创建最终的系统。确保各个构件之间的正确集成和协作,进行系统级别的测试和验证。
组装方式
构件组装是指通过直接集成构件或使用专门编写的“胶水代码”将构建整合在一起,以创建一个系统或另一个构件的过程。常见的构件组装方式有以下三种:
顺序调用组装:通过按顺序调用已有构件,可以用两个已存在的构件来创造一个新的构件。例如,上一个构件的输出作为下一个构件的输入。这种方式通过简单的流水线式调用,串联多个构件以实现复杂的功能
层次组装:这种情况发生在一个构件直接调用另一个构件所提供的服务时。被调用的构件为调用的构件提供所需的服务。层次组装要求两个构件之间的接口匹配兼容,使调用关系能够顺利进行。这种方式强调构件之间的层次关系和依赖性。
叠加组装:这种情况发生在两个或两个以上的构件放在一起创建一个新的构件时。新构件合并了原构件的功能,从而对外提供了新的接口。外部应用可以通过新接口来调用原有构件的接口,而原有构件不互相依赖,也不互相调用。这种组装类型适合于构件是程序单元或者构件是服务的情况,能够实现功能的叠加和扩展。
构建不兼容问题:
参数不兼容:接口两侧的操作名称相同,但参数类型或个数不同。可以编写适配器以转换参数类型或调整参数个数,使两个接口的参数匹配。
操作不兼容:提供接口和请求接口的操作名称不同。通过适配器将一个接口的操作名称映射到另一个接口的操作名称,确保调用能够正确匹配。
操作不完备:一个构件提供的接口是另一个构件请求接口的一个子集,或者相反。编写适配器来补充缺失的操作,或者在调用时忽略多余的操作,确保连个接口的操作集合能够兼容。
相关文章:
软件工程---基于构件的软件工程
基于构件的软件工程(CBSE)是一种软件开发方法,通过重用现有的软件构件来构建系统,从而提高开发效率和软件质量。这种方法强调软件系统的模块化设计和构建复用,使得软件开发过程更加高效和灵活。 企业软件开发…...
AMD RDNA3 GPU架构解析
本文会通过把AMD的RDNA3架构为例比喻为**“施工公司”**工作模式,深入理解GPU如何高效处理顶点着色、像素计算等任务。 一、施工公司的组织架构 1. 施工公司(WGP)与施工队(CU) WGP(Work Group Processor&…...
docker关闭mysql端口映射的使用
需求 项目中的数据库为mysql,如果将端口映射到宿主机上,容易被工具扫描出,且随着国产化的进程推进,mysql将不被允许。为了提高安全性与满足项目需求,这里采用隐藏mysql端口方式,不映射宿主机端口ÿ…...

关于对机器中的人工智能进行基准测试
大家读完觉得有帮助记得及时关注和点赞!!! 抽象 最近的基准研究声称,AI 在各种认知任务上的表现已经接近甚至超过人类的“水平”。然而,本立场文件认为,当前的 AI 评估范式不足以评估类似人类的认知能力。我…...
CSS - 妙用Sass
官方文档:https://www.sass.hk/docs/ 1.例1: each $theme in $themeList {$themeKey: map-get($theme, key);media screen and (weex-theme: $themeKey) {.btnText {max-width: 150px;include font(map-get($theme, medFont),map-get($theme, subFontS…...
MS模块创新
1. 动态分支权重融合 创新思路:引入通道注意力机制,自动学习高频/低频分支的融合权重 class DynamicMS(nn.Module):def __init__(self, in_channels1):super().__init__()# 原高频/低频分支保持不变self.high_freq ... # 与原MS模块相同self.low_freq…...

私有化部署DeepSeek并SpringBoot集成使用(附UI界面使用教程-支持语音、图片)
私有化部署DeepSeek并SpringBoot集成使用(附UI界面使用教程-支持语音、图片) windows部署ollama Ollama 是一个开源框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计 下载ollama 下载地址(…...
MFC中CMutex类和CSingleLock类,配合使用疑惑
在使用CMutex过程中,看到别人使用了CSingleLock类,想着明明CMutex已经可以实现线程同步了,为什么还有使用CSingleLock类呢? 在MFC中,虽然CMutex类本身可以实现线程同步,但通常会与CSingleLock类一起使用&am…...
残差收缩模块
1. 多尺度阈值生成 创新思路:融合不同尺度的统计信息(如平均池化最大池化)生成更鲁棒的阈值。 class MultiScaleShrinkage(nn.Module):def __init__(self, channel, reduction4):super().__init__()# 多尺度池化分支self.avg_pool nn.Adap…...
HOW - 在Windows浏览器中模拟MacOS的滚动条
目录 一、原生 CSS 代码实现模拟 macOS 滚动条额外优化应用到某个特定容器 二、Antd table中的滚动条场景三、使用第三方工具/扩展 如果你想让 Windows 里的滚动条 模拟 macOS 的效果(细窄、圆角、隐藏默认轨道)。 可以使用以下几种方案: 一…...

Unity 打包后EXE运行出现Field to Load il2cpp的一种情况
Unity版本2021.3.13f1c1 #if DEVELOPMENT_BUILDA1 A1 10600;#else#endif 使用 #if DEVELOPMENT_BUILD然后在下面面板使用Development Build。打包后会运行游戏EXE出现Field to Load il2cpp。 解决办法是换成IF ELSE,自己代码设置个开关、 文心一言: …...
Windows 环境下 Nginx、PHP 与 ThinkPHP 开发环境搭建
Windows 环境下 Nginx、PHP 与 ThinkPHP 开发环境搭建 目录 安装 Nginx 和 PHP配置 Nginx配置 PHP启动服务ThinkPHP 配置常见问题排查 1. 安装 Nginx 和 PHP 安装 Nginx 访问 Nginx 官网 下载 Windows 版本解压到指定目录,如 C:\nginx 安装 PHP 访问 PHP 官网…...
Redis100道高频面试题
一、Redis基础 Redis是什么?主要应用场景有哪些? Redis 是一个开源的、基于内存的数据结构存储系统,支持多种数据结构(如字符串、哈希、列表、集合等),可以用作数据库、缓存和消息中间件。 主要应用场景&…...
登录服务器后如何找到对应的drupal所在的文件夹
在服务器上找不到 Drupal 安装目录的原因可能有以下几种: 多站点配置: Drupal 支持多站点设置,即在同一安装中托管多个网站。在这种配置下,每个站点都有自己的设置和文件夹,通常位于 sites 目录下。例如,站…...

win32汇编环境,窗口程序中使控件子类化的示例一
;运行效果 ;win32汇编环境,窗口程序中使编辑框控件子类化的示例一 ;窗口子类化,就是把某种控件,自已再打造一遍,加入自已的功能。比如弄个特殊形状的按钮,或只能输入特殊字符的编辑框 ;当然,一般来说,这都是…...

专业工具,杜绝一切垃圾残留!
在安装大多数软件时均会在系统注册表中创建相应的条目。如果卸载后仍然存在注册表残留,可能会导致再次安装时出现失败,同时也会对系统性能和存储空间产生负面影响。常见的卸载残留包括注册表项、程序文件夹、用户数据文件夹、临时文件以及相关插件等。 …...
java 实现简易基于Dledger 的选举
java 实现简易基于Dledger 的选举 1. 定义 Dledger 节点类,包含节点的状态、日志存储、选举和日志复制逻辑 import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.Executors; import java.util.concurrent.S…...

大数据“调味“ ,智慧“添香“,看永洪科技助力绝味食品数字化新征程
近年来,随着国家数字化政策不断出台、新兴技术不断进步、企业内生需求持续释放,数字化转型逐步成为企业实现高质量发展的必由之路,成为企业实现可持续发展乃至弯道超车的重要途径。 在全国数字化浪潮驱动下,以人工智能、互联网、…...

【嵌入式】MQTT
MQTT 文章目录 MQTT安装简介MQTT客户端代码 安装 安装Paho MQTT C库: sudo apt-get install libpaho-mqtt3-dev头文件包含: #include "MQTTClient.h"编译选项: gcc -o $ $^ -lpaho-mqtt3c简介 MQTT协议全称是(Message Queuing…...
vue原理面试题
以下是一些关于Vue原理的面试题: 一、虚拟DOM与响应式系统 Vue中的虚拟DOM是如何工作的? 答案: 当Vue组件的数据发生变化时,Vue首先会在虚拟DOM中构建一个新的虚拟DOM树来表示更新后的组件结构。然后,Vue会将新的虚拟DOM树与旧的虚拟DOM树进行比较(这个过程称为Diff算法…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

多模态大语言模型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…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...