设计性语言
编程语言名词
设计性语言是软件语言重要组成成分之一。设计性语言用以书写软件设计规约。软件设计规约是软件设计的严格而完整的陈述。一方面,它是软件功能规约的算法性的细化,刻画了软件“如何做”的内部算法;另一方面,它又是软件实现的依据。前者刻画设计的总体架构;后者刻画详尽实现细节。这两种设计规约一般都是用形式体系刻画的,亦即,都是形式化的。设计性语言的发展已相对成熟,并已用于软件工程实践。
简介
设计性语言(design language)用于书写软件设计规约的语言。设计性语言用于软件的概要设计及详细设计,其描述对象为软件系统的组织或其组成部分的内部结构,不同于重在定义软件系统及其组成部分的界面特性的功能性语言。它也并不描述一个可以高效执行的软件的全部细节,因此有别于用于编程的程序设计语言。
设计性语言是软件设计人员、项目管理人员和程序实现人员之间交流的工具。一个良好的设计性语言应该包含已知最有效的控制及数据结构概念,以便简明、自然地描述软件实现策略,并能在不同的程度上省略细节,可以在不列出低层细节的条件下明确地描述算法、数据结构和子任务的基本特性。早期使用图形化或半图形化设计性语言,并插入用自然语言书写的正文描述。后来出现了非形式化的设计性语言,广泛地用于书写设计规约。结构设计中使用的仍然以非形式化的语言为主,但形式化的设计性语言受到越来越多的注意,特别是在详细设计中应用较多。
主要类型
以下简要介绍使用的几种主要的设计性语言。
图形化的设计性语言
图形化的设计描述工具有多种, 广泛使用的有流程图、 盒图( N-S 图)和问题分析图( PAD)等。流程图的基本成分很简单, 描述方式自然, 既可用于概要设计, 也可用于详细设计。流程图可以支持结构程序设计, 但它本身并不提供避免良好结构被破坏的机制。盒图则有此优点。盒图功能作用域明确;控制转移受严格控制;局部或全程数据的作用域容易确定;容易描述子程序递归调用。开发针对盒图的计算机辅助工具较困难, 其使用受到很大限制。日本日立公司于 1979 年提出的问题分析图则特别适合于计算机支持下的详细设计。对应于不同的常用程序设计语言, 可以有不同风格的PAD图。利用各自的对应表, 能用比较机械的方法将图转换为程序。
表格形式的设计性语言
在许多应用系统中,每个模块的功能表现为对一个复合条件求值,根据结果选择适当的动作。对于这样的系统,可以用决策表作为设计描述工具。决策表早在软件工程出现之前就有人使用,随着软件工程技术的发展, 已有对决策表进行完备性、一致性验证和化简的工具;并且出现了直接以决策表为输入的表驱动算法。因此,决策表已经成为一种有效的过程设计语言。设计性程序语言 这类语言书写的文档具有和实现性语言类似的结构, 但控制结构内部的细节描述采用自然语言, 因此这类语言可以认为是结构化的英语, 属于非形式化语言。
为了便于进行从设计到实现的转换,经常用各种高级语言作为相应设计性语言的基础,有 Ada-PDL,PASCAL-PDL 等各种适合于不同开发环境的设计性语言。设计性程序语言应该具有如下特征:
文法有固定的关键字,以提供描述所有结构化构造、数据说明以及模块特性的机制;一般用自然语言;可以定义简单和复合数据结构,包括抽象程度较高的数据结构如链表、树等;可以描述子程序定义和能支持各种界面描述方式的调用。为满足以上要求, 基本设计程序语言的语法应包括:子程序定义、界面描述、 数据说明和类型定义、块结构、条件构件、循环构件、I/ O构件。设计性程序语言( PDL)这个名词除指一类设计性语言外,还经常指由S . Caine 等人提出的一种特定的设计性语言,这种 PDL 是使用最多的设计性语言之一。其格式和示例参见 PDL 语言。按照传统的观点,设计性程序语言应当是可以扩充的;一方面通过扩充包容控制与数据结构方面的新概念,如多任务、并行处理、进程间通信、声象界面等;另一方面,通过扩充支持不同应用领域特定的结构。然而,近来的倾向是让语言有固定的结构。一则是因为CASE 技术的发展提高了对设计过程自动支持的程度,同时也要求语言有严格的文法。因此,语言中必须包括有足够表达力的成分,能适应不断发展的应用要求,诸如用户定义抽象数据类型、类属模块、多继承机制、并行循环、非确定等待、进程的条件激活机制等。而领域特定结构则可以通过领域专用库来提供。
形式化的设计性语言
图形与表格语言中的正文部分几乎都使用自然语言而程序设计语言本质上也仍是自然语言。因此,它们都有歧义性。要解决这个问题,应使用形式化的设计性语言。在详细设计中使用代数语言等描述数据结构定义,或者在实现性语言中加入设计级的成分,而功能性语言中有的也含有设计级成分。
软件语言
用于书写计算机软件的语言。它主要包括需求定义语言、功能性语言、设计性语言、程序设计语言以及文档语言等。需求定义语言用以书写软件需求定义,软件需求定义是软件功能需求和非功能需求的定义性描述。软件功能需求刻画软件“做什么”,软件非功能需求刻画诸如功能性限制、设计限制、环境描述、数据与通信规程以及项目管理等。需求定义语言经历了从非形式化的自然语言到半形式化语言及形式化语言的发展,迄今半形式化的需求定义语言已有较大进展,已逐步用于软件工程实践。
功能性语言用以书写软件功能规约,软件功能规约是软件功能的严格而完整的陈述。软件功能规约通常只刻画软件系统“做什么”的外部功能,而不涉及系统 “如何做” 的内部算法 ,因此,功能性语言通常又称为功能规约语言。从形式化的程度看,有非形式化功能性语言和形式化功能性语言之分。前者是指未加限定的自然语言,后者则指其语法和语义均显式和精确定义的语言。从理论基础看,有代数类功能性语言和逻辑类功能性语言之分。前者指以异调代数、范畴论等代数理论为主要理论基础的规约语言,后者则指以一阶谓词演算等逻辑理论为主要理论基础的规约语言。功能性语言涉及对象、规约方法以及规约性质等。规约对象主要包括过程抽象和数据抽象两类:过程抽象是指从输入值集到输出值集的映射,其定义域和值域均由数据抽象刻画。数据抽象则提供了数据值集及其上的运算符集。规约方法涉及如何对过程抽象与数据抽象进行规约。功能性语言的研究进展较大,理论基础日趋成熟,已逐步用于软件工程实践。
实现性语言,即一般的程序设计语言,用以书写计算机程序,而计算机程序是计算任务的处理对象和处理规则的描述。任何以计算机为处理工具的任务都是计算任务。处理对象是数据或信息,处理规则反映处理动作和步骤。程序设计语言的基本成分是:①数据成分,②运算成分,③控制成分,以及传输成分。程序设计语言有多种分类法,例如,按语言级别分,有低级语言与高级语言,按应用范围分,有通用语言与专用语言。按成分性质分,有顺序语言、并发语言、并行语言、分布语言。按使用方式分,有交互式语言与非交互式语言等。程序设计语言的发展已有近 50 年的历史,已相当成熟。
最新修订时间:2023-08-06 23:57
目录
概述
简介
参考资料