形式架构定义语言(ADL)

简介

形式规范

多年来,学术界一直在试图通过使用与测试截然不同且更加主动的方法来确保程序语义的正确执行:形式化方法。研究者们认为这种方法通过更加精确、无二义性的描述来达到让程序绝对地按照设计者的思想执行的目的。这种思想早期体现在Floyd在1967年提出的程序的部分正确性的证明上。在后来的几十年中,这种思想不断发展,人们开始不单单注重静态的模型似的形式化语义,动态可执行的并发语义也随之出现。

ADL

形式架构定义语言(Architecture Description Language, ADL)是一种用于描述软件系统的架构的正式语言。ADL 的主要目的是通过提供一种标准化的方式来描述软件系统的结构、组件及其交互,从而帮助设计者和开发者更好地理解和管理复杂的软件系统。ADL 通常用于系统架构设计、分析和验证,尤其是在大型和复杂系统中。

使用形式架构定义语言(ADL)对架构进行描述可以辅助对高层设计进行规范和分析。例如,架构模型可以用来分析证明死锁的存在,或用来决定安全的信息是否流入到不安全的模块中去。架构模型也在软件生产线的建设中起着重要作用。

ADL 的典型元素

  1. 组件(Component)

    • 定义:系统的基本构建块,可以是软件模块、服务、数据库等。
    • 属性:组件可以有属性,如名称、类型、版本等。
    • 接口:组件对外提供的接口,定义了组件可以接收和发送的消息或数据。
  2. 连接件(Connector)

    • 定义:描述组件之间的交互机制,如消息传递、数据流等。
    • 属性:连接器可以有属性,如类型、协议等。
    • 行为:连接器可以定义其行为,如同步或异步通信、事务管理等。
  3. 架构配置(Arch Configuration)

    • 定义:描述系统中组件和连接器的实例化和组装方式。
    • 属性:配置可以有属性,如名称、版本等。
    • 关系:配置定义了组件之间的关系和连接器的使用。

两类ADL

目前存在的ADL在对架构与具体实现的处理方式上主要可以被分为两大类。

第一类的ADL 只定义抽象,而与具体的实现语言的结合过于松散,致使软件在分析、实现、理解与系统进化出现严重的问题。一些ADL往往附带一些自动生成代码的工具,这些生成的代码可以连接起独立开发的组件。然而,这些ADL却没有提供任何使这些组件遵循系统架构限制的保证,相反的是,它们依赖于组件的开发者来遵循规范。另外一些ADL只能作为纯建模和分析工具;它们不提供任何工具来生成代码,仅仅要求程序员在没有任何自动化工具的辅助下生成代码。因此在实现中反映架构相当困难。最重要的一个问题就是这些系统都无法保证通讯完整性原则(Communication Integrity),从而尽管架构被用来分析和建模,但并无任何方法知道实现中是否已经完全遵循架构的设计。

与第一类的ADL完全相反,第二类以ArchJava为代表的ADL用强大的 类型系统(type system)来保证实现对架构限制的遵守,如ArchJava将架构与实现统一在一种语言中,使用语言级别的类型检查(type checking)来强制执行。目前存在的ADL中,唯一可以保证通讯完整性的只有ArchJava语言。然而ArchJava并不是单纯的描述语言,它牵涉了更多的实现细节,因此无法提供给架构设计师使用进行最初的系统架构分析和设计,因为在设计阶段,细节代码并不存在。

组件及组件接口的形式化描述

以JML为例,Java Modeling Language 是美国 Iowa State University (ISU) 计算机系程序设计语言与形 式化方法实验室为 Java 语言所设计的行为接口规范语言 (BISL)。它采用了类似于 Java 的语法结构,从而使其更容易被 Java 程序员所接受。

JML允许对类的不变式(Invariant),前置谓词(pre-condition)与后置谓词(post-condition)进行规范。每一规范语句由布尔类型的Java表达式所组成,并以注释形式(//@ /*@....@*/)出现在Java程序中。@ 符号是为了使得JML解释器能够识别。

一段简单的JML代码如下所示:

/*@ public normal_behavior
@ requires P;
@ ensures Q;
@*/

这段代码为类中一个声明为公共的方法进行了规范:此方法执行前必须满足条件P,结束后必须保证布尔表达式Q成立。同时,此方法必须正常结束,无异常抛出。

一个使用 JML 进行形式规范说明的实例

连接件的形式化描述

JCMPL 是一种仅定义抽象的新型的架构定义语言,其最大特点就在于在显示指定架构中组件存在及其关系的同时,能够最大程度地支持组件独立开发及最终的第三方集成。在连接组件中未知接口时,JCMPL 使用通配符 * 来表达这个接口。

JCMP工具在编译JCMPL生成目标Java代码的时候,遵循了triple-C模式,即组件间使用软件连接器(software connector)进行通信的传递,而并非通常的直接Client-Server调用关系。

在基于triple-C模式的实现中,软件连接件(Software Connector)被用来实现架构中的组件间的连接。作为组件集成适配器以及方法调用的代理,Connector负责被连接的组件端口中的方法匹配和方法间的数据传输。由于Connector所处在这样一个特殊的位置,所有接口方法及数据对其都是透明的,这也产生了对数据进行智能分析以及自动化进行组件匹配的可能性。作者根据Connector的这一特性,开发了JCMP/Match试图对连接在一起的组件端口中的方法进行自动匹配,找出最有可能的需求-供应方法对。

架构配置

架构配置是构件和连接件的结构性组合,定架构配置描述了系统中所有构件和连接件的组织和布局方式。"义了系统的整体架构。
配置可以包括对构件和连接件的实例化、部署以及它们之间的连接关系。它确保系统按照既定的架构原则和模式组装和运行。

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

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

相关文章

STM32之OLED驱动函数

类似51单片机中的LCD1602驱动差不多, 1.oled驱动代码 oled.c #include "stm32f10x.h" #include "OLED_Font.h"/*引脚配置*/ #define OLED_W_SCL(x) GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)(x)) #define OLED_W_SDA(x) GPIO_WriteBi…

Python入门(二)编程中的“真”与“假”,单双向选择的判断

编程中的“真”与“假” 在编程中,这种“真”、“假”状态我们用布尔数来表示,“真”是True,“假”是False。 另一种方式,是通过比较运算得到。 如图,3赋值给a,1赋值给b,进行大小的比较。 a &g…

U9的插件开发之BE插件(1)

U9插件可分为:BE插件、BP插件、UI插件; BE(Business Entity) 简单就是指实体,U9的元数据。 我的案例是设置BE默认值,即在单据新增时,设置单据某一个字段的默认值,具体如下: 1.插件开发工具&a…

Linux的目录结构 常用基础命令(2)

Linux的目录结构 根目录: 所有分区、目录、文件等的位置起点 整个树形目录结构中,使用独立的一个“/”表示 常见的子目录 /root /bin /boot /dev /etc /home /var /usr /sbin 基础知识 以 . 开头的文件均为隐藏文件 路径用/分开 / 不在第一位就…

plsql 高版本用不了 expaste 插件 问题

plsql 高版本用不了 expaste 插件 问题 其实不是版本问题,而是高版本的咩有在用这个插件,在另外一个功能里面, 查询你要的数据, 选择数据,右键,点 右键 复制为表达式列表,即可 在空白处粘贴…

【C++】C++11基础入门

目录 一、C11发展史: 二、列表初始化: 1、初始化: 2、initializer_list函数: 三、声明: 1、auto自动识别类型: 2、decltype: 3、nullptr: 四、范围for: 五、STL…

vue3+vue-baidu-map-3x 实现地图定位

文档地址:一个是2一个是3 https://dafrok.github.io/vue-baidu-map/#/zh/index vue-baidu-map-3x 1.首先要到百度地图开放平台上建一个账号,如果有百度账号可以直接登录百度地图-百万开发者首选的地图服务商,提供专属的行业解决方案 2.点击控制台&am…

V2X介绍

文章目录 什么是V2XV2X的发展史早期的DSRC后起之秀C-V2XC-V2X 和DSRC 两者的对比 什么是V2X 所谓V2X,与流行的B2B、B2C如出一辙,意为vehicle to everything,即车对外界的信息交换。车联网通过整合全球定位系统(GPS)导…

C#使用log4net结合sqlite数据库记录日志

0 前言 为什么要把日志存到数据库里? 因为结构化的数据库存储的日志信息,可以写专门的软件读取历史日志信息,通过各种条件筛选,可操作性极大增强,有这方面需求的开发人员可以考虑。 为什么选择SQLite? 轻量级数据库,免安装,数据库的常用的基本功能都有,可以随程序…

如何打开/解包星露谷物语XNB文件(附软件资源)

一、什么是 XNB 文件? 游戏将数据、地图和纹理存储在 .xnb 这种压缩数据文件中,它们在游戏的 Content 文件夹中。例如,对话期间显示的阿比盖尔的头像来自这个文件: Content\Portraits\Abigail.xnb。解包这个文件,你会…

SIP 业务举例之 Call Forwarding - No Answer(无应答呼叫转移)

目录 1. Call Forwarding - No Answer 简介 2. RFC5359 的 Call Forwarding - No Answer 信令流程 呼转开始 呼转完成 3. Call Forwording - No Answer 过程总结 博主wx:yuanlai45_csdn 博主qq:2777137742 想要 深入学习 5GC IMS 等通信知识(加入 51学通信),或者想要 …

ISO21434 信息安全开发流程咨询合规内容和步骤

ISO 21434是汽车网络安全风险管理的一项国际标准,旨在帮助汽车制造商和供应商识别、评估和管理车辆整个生命周期中的网络安全风险。以下是ISO 21434咨询可能包含的内容以及实施咨询的方法论步骤: 咨询内容: 标准解读与培训:帮助…

【Unity】Unity中文本中插入超链接且可点击响应,TextMeshPro的进阶用法

一、需求和尝试 今天遇到这样一个需求:在文本中插入超链接,且这个链接可以点击跳转对应的url,具体形式如下图所示。 其实这个有一个简单粗暴的方法,就是把需要加超链接的文本单独拿出来,和其他文本进行拼接&#xf…

【数据结构与算法】之队列详解

队列(Queue)是一种重要的线性数据结构,遵循先进先出、后进后出的原则。本文将更详细地介绍队列的概念、特点、Java 实现以及应用场景。 模运算小复习: a % b 的值总是小于b 5 % 4 1 5 % 2 1 1 % 5 1 4 % 5 4 1. 队列…

windows|常见的文件伪装方法

几种常见的文件伪装方法: 扩展名伪装unicode字符伪装压缩包伪装隐写术 方法仅限于学习目的,不用于任何恶意或非法用途。 ———— 一、扩展名伪装:假装是另一种类型的文件 修改文件的扩展名,使得文件看起来像其他类型的文件&a…

取消element-ui中账号和密码登录功能浏览器默认的填充色,element-ui登录账号密码输入框禁用浏览器默认填充色问题

标题 问题展示 修改后 <div class="loginForm"><el-formref="formB":model="formDataB":rules="rulesB"class="login-form"label-position="left"><el-form-item prop="userNo" clas…

CentOS 7(Linux)详细安装教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 一、CentOS镜像的下载&#xff08;准备工作&#xff09; 我选择的是其他镜像源的下载地址&#xff1a; Index of /centos-vault/7.6.1810/isos/x86_64/ | 南阳理工学院开源镜…

u盘装win10系统提示“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”解决方法

我们在u盘安装原版win10 iso镜像时&#xff0c;发现在选择硬盘时提示了“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”&#xff0c;直接导致了无法继续安装下去。出现这种情况要怎么解决呢&#xff1f;下面小编分享u盘安装win10系统提示“windows无法安装到这个磁盘…

Android Gradle

#1024程序员节&#xff5c;征文# Gradle 是一款强大的自动化构建工具&#xff0c;广泛应用于 Android 应用开发。它通过灵活的配置和丰富的插件系统&#xff0c;为项目构建提供了极大的便利。本文只是简单的介绍 Gradle 在 Android 开发中的使用&#xff0c;包括其核心概念、构…

智联招聘×Milvus:向量召回技术提升招聘匹配效率

01. 业务背景 在智联招聘平台&#xff0c;求职者和招聘者之间的高效匹配至关重要。招聘者可以发布职位寻找合适的人才&#xff0c;求职者则通过上传简历寻找合适的工作。在这种复杂的场景中&#xff0c;我们的核心目标是为双方提供精准的匹配结果。在搜索推荐场景下&#xff0c…