软考笔记--构件与软件复用

构件也称为组件(component),是一个功能相对独立的具有可复用价值的软件单元。在面向对象的方法中,一个构件有一组对象组成,包含可一些协作的类的集成,它们协同工作来提供一种系统功能。可复用性是指系统和其组成部分能在其它系统重复使用的功能。软件开发的声生命周期都有可复用的价值,包括项目的组织,软件需求、设计、文档、实现,测试方法和测试用例,都是可以被重复利用和借鉴的有效资源,可复用性体现在软件的各个层次。

软甲复用的形式可分为垂直式复用和水平式复用。水平式复用是复用不同应用领域中的软件元素。标准函数库是一种典型的原始水平式复用机制;垂直式复用是在一类具有较多公共性的应用领域之间复用软件构件。由于由于在两个截然不同的应用领域之间进行软件复用潜力不大,所以垂直式复用受到广泛关注。

一.主流构件标准

为了达到复用的目的,构件应当是内聚的,并具有稳定的、公开的接口。为了是构件更切合实际、更有效地被复用,构件应当具备可变现,以提高其通用性。为了将不同软件开发商在不同软硬件平台上开发的构件组装成一个应用系统,必须解决异构平台的各构件之间的互操作问题。目前,主流的构件标准有对象管理集团(OMG)的CORBA,Microsoft的构件对象模型COM和分布式构件对象模型DCOM和sun的java企业Bean,EJB。

1.CORMA

CORMA是由OMG指定的一个工业标准,其主要目标是提供一种机制,使得对象可以透明的发出请求和获得应答,从而建立一个分布式应用环境。

在OMG的对象管理结构中,ORB是一个关键的通信机制,它以实现互操作性为主要目标,处理对象之间的消息分布。CORBA定义了一种面向对象的构件开发方法,使不同的应用系统可以共享构件。每个对象都将其内部操作细节封装起来,同时又向外界提供精确定义的接口,从而降低了应用系统的复杂性,也减低了软件开发费用。

2.EJB

EJB是用于开发和部署多层结构的、分布式的,面向对象的java应用系统的跨平台的构件架构。使用EJS编写的应用程序具有可扩展性和交互性,以及多用户的安全的特性。这些应用只需要写一次,就可以发布到任何支持EJB规范的服务器平台上。

3.COM/DCOM

Microsoft的COM定义了构件和它们的客户之间相互作用的方式,使得构件和客户端无需任何中介构件就能相互联系。DCOM扩展了COM,使其能够支持在局域网、广域网甚至Internet上不同计算机的对象之间的通信。DCOM是COM的无缝扩展,所以可以将基于COM的应用,构件、工具和知识转移到标准化的分布式计算领域中。

二.构件的获取与管理

存在大量的、可复用的构架是有效地使用复用技术的前提。对大量的构件进行有效地管理,以方便构件的存储,检索和提取,是成功复用构件的必要保证。

1.构件的获取

基于构件的软件开发中,可以通过多种不同的途径来获取构件:(1)从现有构件中获取符和要求的构件;(2)通过遗留工程,将具有潜在复用价值的构件提取出来,得到可复用的构件。(3)从市场上购买现成的商业构件;(4)开发新的符和要求的构件。

2.构件的组织

当企业获得了数量众多的构件之后,就需要建立构件库。为了给复用者在查询构件时提供方便,同时也为了更好的复用构件,必须对获取的构件进行分类,并置于构件库的适当位置。可复用技术对构件库组织的方法的要求如下所述。

(1)支持构件库的各种维护动作;

(2)不仅要支持精确匹配,还要支持相似构件的查找

(3)不仅能进行简单的语法匹配,而且能够查找在功能或行为方面等价或相似的构件。

(4)对应用领域具有较强的描述能力和较好的描述精度。

(5)管理员和用户容易使用。

构件的分类方法可以分为三大类:关键字分类法,刻面分类法和超文本组织方法。

(1)关键字分类法:关键字分类法将应用领域的概念按照从抽象到具体的顺序逐次分解为树形图结构,每一个概念用一个描述性的关键字表示。

(2)刻面分类法。刻面分类法定义若干刻画构件特征的刻面,每个面保护若干概念,这些概念描述构件在刻面上的特征。

(3)超文本方法。与基于数据库系统的构件库组织方法不同,基于全文检索技术, 其主要思想是:所有构件必须辅以详尽的功能或行为说明文档;说明中出现的重要概念或构件以网状链接方式相互连接;检索者在阅读文档的过程中可按照人类的联想思维方 式任意跳转到包含相关概念或构件的文档;全文检索系统将用户给出的关键字与说明文 档中的文字进行匹配,实现构件的浏览式检索。超文本组织方法为开发和复用构件提供了直观的多媒体方式。由于网状结构比较自由、松散,因此,超文本方法比前两种方法更易于修改构件库的结构。

三.构建复用的方法

软件开发的目的是复用,要让构件在新的软件系统中发挥作用,复用者首先必须检索与提取构件,然后理解与评价构件。

1.检索与提取构件

(1)基于关键字的检索

系统在图形用户界面上将构件库的关键字树形结构直观地展示给用户,复用者通过树形结构的逐级浏览,寻找关键字并提取响应的构件。

(2)刻面检索法。

该方法基于刻面分类法,有三部构成,分别是构造查询、检索构件和对构件进行排序。

(3)超文本检索法。复用者首先给出一个或数个关键字,系统在构件的说明文档中进行精确或模糊的语法匹配,匹配成功后,向复用者列出相应的构件说明。

2.理解与评价构件

要使库中的构件在当前的开发项目中发挥作用,准确地理解构件是至关重要的,要求构件的开发过程遵循公共标准,在构件库的文档中全面而准的说明构件的功能与行为、相关领域的知识、可适应性约束条件与例外情形、可预见的修改部分及修改方法。对构件可复用性的评价,是通过收集并分析构件的复用者在实际复用该构件的历史过程中的各种反馈信息来完成的。这些信息包括复用成功的次数、对构件的修改量、构件的健壮性度量和其他性能度量等。

3.修改构件

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

4.构件的组装

构件的组装时指将库中的构件经适当修改后相互连接,或将他们与当前的开发系统中的软件元素相连接,最终构成新的目标软件。构件组装技术大致可以分为三种:基于功能的组装技术、基于数据的组装技术和面向对象的组装技术。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/717603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

138.乐理基础-等音、等音程的意义

上一个内容:137.乐理基础-协和音程、不协和音程 上一个内容里练习的答案: 等音、等音程的意义,首先在 19.音阶 里写了,一个调使用的音阶应当是从主音快开始,以阶梯状的形式进行到主音结束,这样才能明显从乐…

在docker中运行 pip 报错 Can‘t start new thread

原因源头 stackoverflowhis is because the default seccomp profile of Docker 20.10.9 is not adjusted to support the clone() syscall wrapper of glibc 2.34 adopted in Ubuntu 21.10 and Fedora 35.由于docker 版本与最新版 python 容器冲突导致 解决方案 以下三种方…

b站小土堆pytorch学习记录—— P16 神经网络的基本骨架 nn.Module的使用

文章目录 一、前置知识1.nn是什么2.nn如何使用 二、代码 一、前置知识 1.nn是什么 在深度学习中,“nn” 通常是指神经网络(Neural Network)的缩写。神经网络是一种由大量神经元(neurons)相互连接而成的模型&#xff…

【Python】成功解决TypeError: list indices must be integers or slices, not float

【Python】成功解决TypeError: list indices must be integers or slices, not float 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&…

vue 打包配置

vue打包配置记录一下 publicPath: 打包的路径 默认值:/(根目录); 任意路径:""或者"./" (相对路径) 参照:Vue CLI4.0 webpack配置属性——publicPath_publicpath怎么写相对路径-CSDN…

springboot读取自定义配置

springboot读取自定义配置 application.yml自定义配置 my-app:ip1:#dmz1 ftp服务器ipAddress: 172.12.23.456port: 21username: adminpassword: adminip2:ipAddress: 172.12.23.457port: 21username: adminpassword: admin方式1,Value注解 Component public clas…

两天学会微服务网关Gateway-Gateway工作原理

锋哥原创的微服务网关Gateway视频教程: Gateway微服务网关视频教程(无废话版)_哔哩哔哩_bilibiliGateway微服务网关视频教程(无废话版)共计17条视频,包括:1_Gateway简介、2_Gateway工作原理、3…

【网站项目】144校园二手物品交易平台

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

FRM模型十四:FRA估值

什么是FRA FRA(Forward rate agrreement)远期利率协议,是一种场外衍生品。FRA在0时刻确定,在未来时刻进行交易的协议。例如FRA3,6表示双方约定在3个月后以Rk的利率水平借款3个月。 应用场景:某公司未来3个月有融资需…

XWPFTemplate:基于Apache POI的Word文档模板引擎

1. 前言 在Java领域中,处理Office文档是一项常见的需求,尤其是对于生成报告、合同或其他结构化文档。Apache POI是一个广泛使用的库,用于读写Microsoft Office格式文件(包括Word、Excel等)。然而,直接操作…

Kotlin 中编写静态方法的方式详解

在 Kotlin 中,与 Java 不同,没有 static 关键字来定义静态方法。但是 Kotlin 提供了一种类似的机制来实现静态方法。本文将介绍 Kotlin 中编写静态方法的两种方式,并给出 Kotlin 和 Java 中的调用示例代码。 方式一:使用顶层函数…

Vue 3 中的 $emit 函数是如何工作的

在 Vue.js 框架中,组件间的通信是一个核心概念。Vue 提供了多种方式来实现父子组件间的通信,其中 $emit 是子组件向父组件发送消息的一种常用手段。在 Vue 3 中,随着 Composition API 的引入,$emit 的使用方式也发生了一些变化&am…

[HackMyVM] 靶场 Wave

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 (Un…

OpenCV:开源计算机视觉的魔力之门

在当今这个信息爆炸的时代,图像和视频已经成为我们获取和传递信息的主要方式之一。从社交媒体上的照片分享,到安防监控、自动驾驶等领域的图像识别与处理,计算机视觉技术正日益改变着我们的生活。而在这场技术革命中,OpenCV(Open Source Computer Vision Library)这一开源…

Java JDBC JDBC事务管理 JDBC连接池(阿里巴巴Druid连接池、C3P0连接池) JDBC工具类

Java数据库连接 Java DataBase Connectivity。JDBC 规范定义接口,具体的实现由各大数据库厂商来实现。 JDBC可让Java通过程序操作关系型数据库,JDBC基于驱动程序实现与数据库的连接与操作。 JDBC 是 Java 访问数据库的标准规范,真正怎么操作…

C++ 滑动窗口

例1 209. 长度最小的子数组 ①窗口大小不固定 ②求最小长度 -> ret INT_MAX ③数组内的值都大于0, 符合单调性(sum nums[right] -> sum增大) while里面符合条件,在里面更改ret 参考代码 class Solution { public:i…

redis常见面试问题合集

什么是Redis? Redis是一个开源的、基于内存的数据结构存储系统,它可以用作数据库、缓存和消息队列。Redis支持多种数据类型,包括字符串、列表、集合、有序集合和哈希表。 Redis支持的数据类型有哪些? Redis支持五种主要的数据类…

【LeetCode打卡】Day25|216.组合总和III、17.电话号码的字母组合

学习目标: 216.组合总和III 17.电话号码的字母组合 学习内容: 216.组合总和III 题目链接 &&文章讲解 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回所有可能的有效…

集成测试之我的初步学习与总结

基本概念 将软件集成起来后进行测试。 集成测试又叫子系统测试、组装测试、部件测试等。集成测试主要是针对软件高层设计进行测试,一般来说是以模块和子系统为单位进行测试。 集成测试包含的层次 模块内的集成,主要是测试模块内各个接口间的交互集成…

我是如何系统自学python的,值得一看!

当然,我很乐意帮助你规划一个系统的Python自学计划。以下是我为你准备的一个简洁、高效、实战的Python自学指南: 第一步:基础语法和数据结构 学习Python的基本语法,包括变量、数据类型、运算符、条件语句、循环语句等。理解Pyth…