软件架构之构件复用技术

软件架构之复用以及产品线、软件架构视图 软件企业将相关的构件有机地组织在一起,形成构件系统(较构件库层次更高),实施复用的软件企业通常拥有多个构件系统,有的是购置的,有的是自己开发的。现代软件系统非常复杂,通常在某个具体的时间内只需将注意力集中在某几个结构上(就像看病时,医生只是将注意力集中在某方面的人体结构上,骨科医生与心血管科医生关心不同的结构),结构是元素本身的集合,而视图则是捕获和表达结构(文档描述),虽然它们有区别,但在实际使用时则不严格区分,即从系统体系的角度说是结构,从文档角度说是视图,因此,本节将不再区分结构和视图术语。 阅读详情

简介

软件架构复用

在应用软件系统的开发过程中,通常包含以下几个关键阶段:需求分析、设计、编码、测试和维护。在这些阶段中,复用技术均可以得到有效应用。特别是,软件架构复用作为一种大粒度、高抽象级别的复用方式,为后续的编码、测试等工作中的复用技术应用奠定了坚实的基础。

软件架构复用不仅关注系统的整体组织和结构,还涉及系统中各部分的接口选择、特定行为的定义、较大子系统的构成以及架构风格的确定。通过在架构设计阶段引入复用技术,可以显著提升系统的可维护性和可扩展性,同时降低开发成本和缩短开发周期。架构复用的核心在于通过预先定义和验证的架构模式和组件,确保在后续开发阶段中能够高效、可靠地复用这些经过验证的架构元素,从而提高整个软件开发过程的效率和质量。

软件复用的维度

  • 水平复用 强调的是在不同应用程序或系统之间的复用,通常涉及通用的、独立的组件。
  • 垂直复用 强调的是在同一应用程序的不同层次之间的复用,通常涉及特定的、业务相关的组件。

软件复用的方式

1. “原封不动”复用

“原封不动”复用是指寻找可以直接使用的现存类,以提供所需的特性。这种情况是所需要的类已经存在。现在建立它的一个实例,用以提供所需的特性。这个实例可以直接为应用软件利用,或者它可以用来做另一个类的实现部分。通过复用一个现存类,可以获得不加修改就能工作的已测试代码。

2. 进化性复用

进化性复用是指在找不到完全符合要求特性的类时,如果存在具有类似功能的类,可以通过继承来实现系统的功能需求。如果新类将要成为一个现存类的子类,它应当继承这个现存类的所有特性。然后,新类可以对需要追加的数据及必需的功能进行补充定义,还可以将几个现存类的特性混合起来开发出新的类。每个现存类是某些概念的模型,混合起来则产生了一个为特定待开发软件所用的具有多重概念的类。有时一个现存的类可能会提供某些新类中需要的特性和某些新类中不需要的特性。因此,可以先建立一个新的更抽象的类,使之成为要设计的类的父类,然后修改现存类以继承新的父类。

3. “废弃性”开发

“废弃性”开发是指在不使用任何复用的情况下开发一个新类。任何一个类,只要其开发不涉及现存类,就可以被视为一个新类的开始。因此,将建立两种类:一种是抽象类,它概括了将要表达的概念;另一种是具体类,它实现这个概念。虽然在开发新类时不需要使用现存类来演变成新类,但仍存在复用的可能性。在新类的实现过程中,可以通过引用一些现存类的实例来加快开发速度。例如,表格、硬件接口等都可以作为新类的局部组件使用。

模块、对象和构件

从关注点上来讲,模块关注于代码的组织和复用,对象关注于数据和行为的封装,构件关注于系统的构建和部署。相对来说,构件最显著的特征是其具有较高的独立性,可以独立开发、测试和部署。在其操作上具有可配置的特性,通常可以通过配置来适应不同的环境或需求,而不怎么需要修改其内部代码。

构件复用的四个阶段

基于构件的软件设计方法(CBSD)主要是指从已有的构件库中利用可复用的构件,尽快让系统模块化,从而让系统能够快速开发出来的开发方法。具体可以细分为检索和提取构件、理解和评价构件、对构件进行修改、组装构件模型四个阶段。

检索和提取构件

从构件库中提取寻找构件一般有三种方法,分别是关键字分类法,刻面分类法 和 超文本组织法;

1、关键字分类法

假设我们有一个巨大的图书馆,里面有很多书。为了找到一本特定的书,你可以使用书的标题、作者名或者关键词来搜索。在软件构件库中,关键字分类法就是通过给每个构件打上标签(关键字),比如“数据库连接”、“用户认证”等,然后通过这些关键字来搜索构件。这种方法简单直接,适用于构件有明确标签的情况。

2、刻面分类法

刻面分类法类似于宝石的切面,每个切面代表构件的一个属性或特征。想象一下,我们在挑选宝石,宝石的每个切面都代表它的一个特性,比如颜色、透明度、重量等。在软件构件库中,刻面分类法会根据构件的不同属性(如功能、性能、可靠性等)来组织构件。这样,你可以根据需要的特定属性来选择构件,比如你想要一个“高性能”且“易于维护”的数据库连接构件,就可以通过这两个属性来筛选。

3、超文本组织法

在软件构件库中,超文本组织法就是通过链接(超链接)将相关的构件组织在一起。例如,一个“用户认证”构件可能会链接到“权限控制”和“会话管理”构件,因为这些构件在功能上是相互关联的。这种方法有助于用户在构件之间建立联系,理解它们之间的关系,从而更好地选择和组合构件。

除了以上从构件库中获取构件以外,其他的获取方法还有:通过遗留工程(legacy engineering)进行解构,将具有潜在重用价值的构件提取出来,得到可重用的构件。也可以从市场上购买现成的商业构件,即COTS(Commercial Off-The-Shell)构件。

理解和评价构件

准确地理解构件至关重要。特别是对构件修改使用时,必须要求构件的开发过程遵循公共标准。

逆向工程是理解构件的另一种重要手段。它试图通过对构件的分析,结合领域知识,半自动地,生成相应的设计信息,然后借助设计信息完成
对构件的理解和修改。

对构件进行修改

理想状态是直接复用构件库中现成的构件,但大多数情况下,必须对构件进行或多或少的修改,以应对新需求。

为了减少构件修改的工作量,要求开发人员尽量使构件的功能、行为和接口设计更为抽象化、通用化和参数化。这样,复用者即可通过对实参的选取来调整构件的功能或行为。如果这种调整仍不足以使构件适用于新系统,复用者就必须借助设计信息和文档来修改构件。

修改后的构件存入构件库。

组装构件模型

组装构件通常有三种可供选择的方式。

1、基于功能的组装:

采用子程序调用和参数传递的方式将构件组装起来。开发人员首先应对目标软件系统进行功能分解,将系统分解为强内聚、松耦合的功能模块。然后根据各 模块的功能需求提取构件,对它进行适应性修改后再挂接在上述功能分解框架(framework)中。

2、基于数据的组装

仍然是传统的子程序调用与参数传递。但它所依赖的软件设计方法不再是功能分解,而是面向数据的设计方法,例如,Jackson系统开发方法。这种方法从目标系统的输入、输出数据结构入手,导出程序框架结构,再补充其他细节,最终得到完整的程序结构图。它特别适用于输入、输出数据结构明确的中小型系统,例如商业应用中的文件表格处理。

3、面向对象的组装

如果从类库中检索出来的基类能够完全满足新系统的需求,则可以直接应用。否则,必须以基类为父类,生成相应的子类,以满足新系统的需求。

构件系统体系结构

构件系统体系结构由一组平台决策、一组构件框架和构件框架之间的互操作设计组成。系统体系结构是构建和设计系统的蓝图,而构件是这个蓝图中的构建块,它们共同定义了系统的结构和行为。

简单来说,构件系统的体系结构类似于搭积木,具有可配置、模块化、可替换、动态性的特性。构件系统架构(Component-Based Software Engineering, CBSE)是基于此。

原子构件 通常指的是最小的、不可再分的构件单元,它封装了特定的功能和所需的资源。从这个角度来看,原子构件确实可以被视为一个“小的服务”

构件复用的案例分析

制作可复用的页面在一个软件系统中,如果页面的样式大体一致,整个系统就形成一个统一的风格,便于程序员的开发与维护,也便于用户的使用记忆并给予用户一个整体的美感。

我们代入到一个 “ERP业务系统的设计与实现” 中,一种符合构件复用的设计是,实现一个页面模板,并将模板中的前台和后台代码都分为不变部分和可变部分。在制作一个应用页面时,程序员只要修改其中的可变部分代码即可完成页面的制作。这样,在制作模板页面时,尽可能地将代码写成通用的不变部分,以减少程序员的代码编写量。

页面可以用到3种可复用的构件,分别为数据库访问构件,页面用户控件和自定义控件。

在这个例子中,我们可供分析的信息有:

1)上述案例中的菜单可以作为一种构件(而不只是代码模块或对象),具有标准的表现形式和结构,同时具有独立部署、便于组装的特性。

2)上述案例的复用是对ERP系统领域不同层次的复用,属于垂直复用;

3)我们可以将菜单的抽象实现当成是一个原子构件,由一个菜单项类和一些触发形式、名称、子菜单项组成。其组装的方式倾向于面向对象的组装方式。

4)ERP系统中的菜单具有可配置、模块化、可替换、动态性的特性。在软件开发早起通常由程序员手动实现,目前该类需求已经被替换由主流操作系统的框架(如.NET)实现,通过组合现成的、可互操作的构件来构建实现。

5)以上基于构件的软件工程称之为CBSE

软件架构设计 总述:软件架构设计以系统整体为基本点,然后考虑系统的需求,最后根据系统的特点进行系统技术选型和确定基本系统的基本结构。软件架构设计的立足点是从软件整体为基准,所以必须跳出模块、子系统等视角,这也决定了必须有系统整体性的观点才能降低这部分的认知难度,否则跟天书一样,觉得跟系统设计没什么区别,好像还重复了。 1.构件和软件复用 答:软件架构是解决系统结构和需求向实现平坦过度的问题而提出的概念。构件也称为组件,是一个功能相对独立的具有可复用价值的软件单元。软件复用的形式分为垂直式复用和水平式复用。水平式. 阅读详情

相关推荐

软件构造-软件复用技术

大纲:软件复用的定义内容优势范畴方式关键技术软件构件技术 软件复用的定义 软件复用是指利用现有的软件成分构造出高质量、高效率的新的软件系统。 软件复用不只包括程序的复用,还包括每个活动所产生的制成品的复用。 软件复用技术目前面临的难点是:如何能够将软件复用技术准确地、合理地运用到软件开发中。并将软件复用技术的优势充分发挥出来。 内容 应用软件系统的开发过程包含以下几个阶段:领域和需求分析、设计、编码、测试以及维护等,各个阶段的工作中均存在重复,而这些重复都可以作为软件复用的内容。一般可以分四个层次:第一,领

冼穆的博客 1370

软件构造:软件的复用相关知识复习心得总结

哈工大软件构造课程复习,对软件复用部分知识点的总结。

m0_69148630的博客 1458

软件复用:介绍与主要技术

定义 软件复用是指在构造新的软件系统的过程中,对已存在的软件产品(设计结构、源代码、文档等)重复使用的技术。  软件复用就是利用现有的软件成分构造出高质量、高效率的新的软件系统。软件复用不仅仅只是包括程序的复用,而且还包括每个活动所产生的制成品的复用。随着软件复用技术的快速发展,人们发现了软件资产的一些问题。为了能够有效地解决此类问题,必须将软件复用技术能够准确地、合理地运用到软件开发中,将软件复用技术的优势充分发挥出来,其实这也正是软件复用技术的难点所在。 软件复用的必要性 为了能够更好的解决软

qq_43336822的博客 6125

软件体系结构复习一

构件定义: 一般认为,构件是指语义完整、语法正确和有可重用价值的单位软件,是软件重用过程中可以明确辨识的系统。结构上,它是语义描述、通信接ロ和实现代码的复合体。 构件3种分类方法: (1)关键字分类法:是一种最简单的构件库组织方法,其基本思想是:根据领域分析的结果将应用领域的概念按照从抽象到具体的顺序逐次分解为树形或有向无回路图结构; 如何检索:系统在图形用户界面上将构件库的关键字树形结构直观的展示给用户,用户通过对树形结构的逐级浏览寻找需要的关键字并提取相应的构件; 优点是简单,易于实现

qq_46133770的博客 840

架构师备考论文-论软件架构复用

2022年3月,我参与了公司组织的新智慧公交平台项目的研发工作,在其中担任架构师的角色,负责新系统的架构设计和评审工作。新智慧公交项目整体依托于公司中台环境,S17设备平台以及运维平台,我们在设计过程中会直接复用公司这些成熟的构件,以快速实现新智慧公交平台的非功能需求。同时在新智慧公交项目的架构设计过程中,我们会复用老平台的功能需求、架构设计等内容,以快速实现新智慧公交项目的研发工作。2022年8月,项目经过完备测试正式上线,并至今运行良好。本文详细介绍了软件架构复用的基本过程,以及新智慧公交平台采用软件架

wend的博客 1366

NC数据预处理避坑指南:从MATLAB读取到GeoTIFF导出,解决坐标翻转与值域异常

本文详细解析了NC数据预处理中的常见问题,包括MATLAB读取时的坐标翻转与GeoTIFF导出时的值域异常。通过实战案例,介绍了如何解决矩阵方向错乱、处理FillValue与scale_factor、精准移植空间参考等关键问题,帮助研究者高效完成气象数据的批量处理与GIS兼容性验证。

weixin_30788619的博客 653

如何提高软件复用度,降低项目开发成本?

如何提高软件复用度,降低项目开发成本?——CoCode需求分析工具,调整复用度,提高自动估算精准度。

CoCode888的博客 2194

基于STM32和MPU6050的手势控制小车设计与实现

MPU6050传感器:用于检测手势变化,采集加速度和陀螺仪数据。STM32微控制器:处理MPU6050传感器的数据,根据手势变化控制小车的运动。电机驱动模块:接收来自STM32的控制信号,驱动小车的电机,实现小车的前进、后退、左转和右转。小车底盘:作为整个系统的机械部分,提供移动平台。MPU6050是一款集成了3轴加速度计和3轴陀螺仪的传感器,具有高精度、低功耗和小体积等特点。它通过I2C接口与微控制器通信,可以实时采集加速度和角速度数据,广泛应用于运动检测、姿态控制和手势识别等领域。

m0_57781768的博客 2308

软件构造课程总结(九)——面向复用的软件构造技术

软件复用是指使用现有的软件组件来实现或更新软件系统的过程。软件重用的两个角度面向复用编程:开发出可复用的软件基于复用编程:利用已有的可复用软件搭建应用系统为什么复用:降低成本和开发时间通过缩短软件生产周期(软件开发速度更快、人员更少)来提高软件的生产力不浪费资源而不必要地“重新发明车轮”降低维护成本(可以生产出更好的质量、更可靠和高效的软件)经过充分测试,可靠、稳定重用已经存在了一段时间并被调试的功能构建稳定子系统的基础标准化,在不同应用中保持一致。

StarryForest的博客 731

c++通过自然语言处理技术分析语音信号音高

其中,缓冲区大小为2048,最小基频为80Hz,最大基频为1000Hz。通常情况下,音高在85Hz到255Hz之间,因此可以根据实际情况修改最小和最大基频值。C++中可以使用数字信号处理库或语音处理库,比如MATLAB、Praat、YIN算法等等来进行音高分析。对于语音信号的音高分析,可以使用基频提取技术。基频是指一个声音周期的重复率,也就是一个声音波形中最长的周期。通常情况下,人的声音基频范围是85Hz到255Hz。这段代码使用了YIN算法来计算语音信号的基频,得出的结果即为音高。

SYC20110120的博客 1727

手把手教你用yt-dlp批量下载YouTube视频数据集(附TikTok/Kaggle资源)

本文提供了一份构建视频数据集的实战指南,重点介绍了使用yt-dlp工具批量下载YouTube视频的高级技巧,包括环境配置、批量参数设置与自动化脚本。同时,文章还整合了TikTok、Kaggle及学术开源数据集等多源高质量视频资源,并分享了数据清洗、格式统一与管理的完整流程,帮助研究者和开发者高效获取与处理训练数据。

weixin_29057237的博客 289

软件架构设计---产品线及系统演化

产品线及系统演化     软件企业追求长远的发展,通常采用产品线模型及系统演化策略,它实质上是用架构技术构建产品线,并在此基础上借助复用技术持续演化,不断地推出新产品,满足市场追求产品升级换代的需求。 1 复用与产品线     软件产品线是指一组软件密集型系统,它们共享一个公共的、可管理的特性集,满足某个特定市场或任务的具体需要,是以规定的方式用公共的核心资产集成开发出来的。即围绕核心资产库...

hu19930613的博客 3955

Qt 5.15.2静态编译避坑实录:MinGW 32位版从源码到Creator配置的全流程踩坑总结

本文详细介绍了Qt 5.15.2 MinGW 32位版本的静态编译全流程,包括环境准备、配置参数优化、编译过程监控及安装后配置。重点解决了静态编译中的常见问题,如参数顺序敏感、路径引号问题等,并提供了性能对比实测数据,帮助开发者高效完成静态编译。

weixin_26749245的博客 271

软考必过 - 系统架构师 - 软件架构设计 - 构件复用及产品线

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。 文章目录软件架构设计构件及其复用产品线及系统演化 软件架构设计 构件及其复用 定义 构件是指软件系统中可以明确辨识的构成成分。而可复用构件是指具有相对独立的功能和可复用价值的构件 构件是一个组装单元,它具有约定式规范的接口及明确的依赖环境 构件是软件系统中具有相对独立功能、可明确辨识、接口由契约指定、和语境有明显依赖关系、可独立部署的可组装软件实体 商用构件标准规范 CORBA J2EE DNA COR.

我的博客 1462

NX二次开发 计算多个体的最小包围盒

多个体的最小包围盒

weixin_72680115的博客 430

天龙八部TLBB系列 - 网单服务端各目录文件说明【超详细】

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等) --- 天龙八部服务端各目录详细说明

空名先生 7623

软件架构设计---构件及其复用

    软件企业为了提高开发效率,越来越注重软件元素的复用(也称重用),因此,架构设计师在进行架构设计时,必须关注复用,例如,考虑丰富企业构件和充分使用已有的构件。本节从构件角度研究如何使用软件复用技术,下一节重点讨论基于产品线的软件复用。     与复用技术密切相关的概念是构件(component,组件),业界对构件还没有公认的定义,如下为几种常见的定义。     定义 1:构件是指软件系统...

hu19930613的博客 6008

Python爬虫selenium验证-中文识别点选+图片验证码案例

环境对模型进行训练,参考:https://github.com/sml2h3/dddd_trainer。能识别,但是发现默认识别率有点低,想要提升识别率,可以搭建。截图每个字符,并基于ddddocr识别。根据坐标,在验证码上进行点击。

dme.的博客 2165

【2024软考架构师自学笔记】6. 系统架构设计基础知识

软件架构(软件体系结构)是指系统的一个或者多个结构。结构中包括软件的构件,构件的外部可见属性以及它们之间的相互关系。软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构件的描述、构件的相互作用(连接件)、指导构件集成的模式以及这些模式的约束组成。软件架构是从需求分析到软件设计之间的过渡过程,软件架构不仅指定了系统组织结构和拓扑结构,并显示了系统需求和构件之间的对应关系。架构设计就是需求分配,将满足需求的职责分配到组件上。研究软件架构的根本目的是为了解决好软件的复用、质量和维护问题。

baidu_39879830的博客 1851

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

软件框架和软件架构的区别?

  初学java,遇到jdk,sdk概念:软件开发工具包(外语首字母缩写:SDK、外语全称:SoftwareDevelopmentKit)一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。 软件包:(SoftWare Package)是指具有特定的功能,用来完成特定任务的一个程序或一组程序。 开发工具:包含编辑、编译、解释执行(C...

dnjylhv2296的博客 605

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

902-008_系统架构设计师-综合知识-系统架构设计基础知识

victory_zhang525的博客 307

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

关于软件体系结构的名词解释

名词解释:构件、架构、 4GL   1.构件:面向软件体系架构的可复用软件模块。 构件(component )是可复用的软件组成成份,可被用来构造其他软件。它可以是被封装的对象类、类树、一些功能模块、软件框架(framework )、软件构架(或体系结构Architectural )、文档、分析件、设计模式(Pattern )等。 1995 年,Ian.oraha...

heshenmi999的博客 2032

企业级应用软件的开发到底有多难

<br />       对于软件行业来说,一方面,应用从提出需求到开发部署的周期越来越短;另一方面,又不得不面对客户随时提出的各种需求变化。但是,在帮助传统行业提高效率的同时,软件业自身却大部分仍处于最原始意义上的“手工行业”——普遍采用的传统编码式开发方式,使快速开发企业级应用软件的愿望难以实现,开发和需求始终处于脱节状态。 <br /><br />       应用软件开发如何才能满足用户随时变化的需求?软件业一直喧嚣了多年的“敏捷开发”,到底离我们还有多远? <br /><br />构件/组件化——

方正SOA中间件 3536

架构建模 - 云时代的架构实践

2015级计应 15331151 李佳 一、描述软件架构与框架之间的区别与联系 1.软件框架 软件框架是面向领域(如ERP、计算领域等)的、可复用的“半成品”软件,它实现了该领域的共性部分,并提供了一些定义良好的可变点以保证灵活性和可扩展性。也就是说软件框架是领域分析结果的软件化,是领域内最终应用的模板。随着软件规模的扩大、应用广泛和软件复用技术的发展,以子程序和类为单位的软件复用出...

自信打不死的心态活到老 575
上一篇: 形式架构定义语言(ADL)
下一篇: 软考架构师论文范文(游戏后端)
睡不醒的小泽
博客等级 码龄11年 1426粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值