設計性語言

設計性語言

設計性語言是軟體語言重要組成成分之一。設計性語言用以書寫軟體設計規約。軟體設計規約是軟體設計的嚴格而完整的陳述。一方面,它是軟體功能規約的算法性的細化,刻畫了軟體“如何做”的內部算法;另一方面,它又是軟體實現的依據。前者刻畫設計的總體架構;後者刻畫詳盡實現細節。這兩種設計規約一般都是用形式體系刻畫的,亦即,都是形式化的。設計性語言的發展已相對成熟,並已用於軟體工程實踐。

簡介

設計性語言(design language)用於書寫軟體設計規約的語言。設計性語言用於軟體的概要設計及詳細設計,其描述對象為軟體系統的組織或其組成部分的內部結構,不同於重在定義軟體系統及其組成部分的界面特性的功能性語言。它也並不描述一個可以高效執行的軟體的全部細節,因此有別於用於編程的程式設計語言。

設計性語言是軟體設計人員、項目管理人員和程式實現人員之間交流的工具。一個良好的設計性語言應該包含已知最有效的控制及數據結構概念,以便簡明、自然地描述軟體實現策略,並能在不同的程度上省略細節,可以在不列出低層細節的條件下明確地描述算法、數據結構和子任務的基本特性。早期使用圖形化或半圖形化設計性語言,並插入用自然語言書寫的正文描述。後來出現了非形式化的設計性語言,廣泛地用於書寫設計規約。結構設計中使用的仍然以非形式化的語言為主,但形式化的設計性語言受到越來越多的注意,特別是在詳細設計中套用較多。

主要類型

以下簡要介紹使用的幾種主要的設計性語言。

圖形化的設計性語言

圖形化的設計描述工具有多種, 廣泛使用的有流程圖、 盒圖( N-S 圖)和問題分析圖( PAD)等。流程圖的基本成分很簡單, 描述方式自然, 既可用於概要設計, 也可用於詳細設計。流程圖可以支持結構程式設計, 但它本身並不提供避免良好結構被破壞的機制。盒圖則有此優點。盒圖功能作用域明確;控制轉移受嚴格控制;局部或全程數據的作用域容易確定;容易描述子程式遞歸調用。開發針對盒圖的計算機輔助工具較困難, 其使用受到很大限制。日本日立公司於 1979 年提出的問題分析圖則特別適合於計算機支持下的詳細設計。對應於不同的常用程式設計語言, 可以有不同風格的PAD圖。利用各自的對應表, 能用比較機械的方法將圖轉換為程式。

表格形式的設計性語言

在許多套用系統中,每個模組的功能表現為對一個複合條件求值,根據結果選擇適當的動作。對於這樣的系統,可以用決策表作為設計描述工具。決策表早在軟體工程出現之前就有人使用,隨著軟體工程技術的發展, 已有對決策表進行完備性、一致性驗證和化簡的工具;並且出現了直接以決策表為輸入的表驅動算法。因此,決策表已經成為一種有效的過程設計語言。設計性程式語言 這類語言書寫的文檔具有和實現性語言類似的結構, 但控制結構內部的細節描述採用自然語言, 因此這類語言可以認為是結構化的英語, 屬於非形式化語言。

為了便於進行從設計到實現的轉換,經常用各種高級語言作為相應設計性語言的基礎,有 Ada-PDL,PASCAL-PDL 等各種適合於不同開發環境的設計性語言。設計性程式語言應該具有如下特徵:

文法有固定的關鍵字,以提供描述所有結構化構造、數據說明以及模組特性的機制;一般用自然語言;可以定義簡單和複合數據結構,包括抽象程度較高的數據結構如鍊表、樹等;可以描述子程式定義和能支持各種界面描述方式的調用。為滿足以上要求, 基本設計程式語言的語法應包括:子程式定義、界面描述、 數據說明和類型定義、塊結構、條件構件、循環構件、I/ O構件。設計性程式語言( PDL)這個名詞除指一類設計性語言外,還經常指由S . Caine 等人提出的一種特定的設計性語言,這種 PDL 是使用最多的設計性語言之一。其格式和示例參見 PDL 語言。按照傳統的觀點,設計性程式語言應當是可以擴充的;一方面通過擴充包容控制與數據結構方面的新概念,如多任務、並行處理、進程間通信、聲象界面等;另一方面,通過擴充支持不同套用領域特定的結構。然而,近來的傾向是讓語言有固定的結構。一則是因為CASE 技術的發展提高了對設計過程自動支持的程度,同時也要求語言有嚴格的文法。因此,語言中必須包括有足夠表達力的成分,能適應不斷發展的套用要求,諸如用戶定義抽象數據類型、類屬模組、多繼承機制、並行循環、非確定等待、進程的條件激活機制等。而領域特定結構則可以通過領域專用庫來提供。

形式化的設計性語言

圖形與表格語言中的正文部分幾乎都使用自然語言而程式設計語言本質上也仍是自然語言。因此,它們都有歧義性。要解決這個問題,應使用形式化的設計性語言。在詳細設計中使用代數語言等描述數據結構定義,或者在實現性語言中加入設計級的成分,而功能性語言中有的也含有設計級成分。

軟體語言

用於書寫計算機軟體的語言。它主要包括需求定義語言、功能性語言、設計性語言、程式設計語言以及文檔語言等。需求定義語言用以書寫軟體需求定義,軟體需求定義是軟體功能需求和非功能需求的定義性描述。軟體功能需求刻畫軟體“做什麼”,軟體非功能需求刻畫諸如功能性限制、設計限制、環境描述、數據與通信規程以及項目管理等。需求定義語言經歷了從非形式化的自然語言到半形式化語言及形式化語言的發展,迄今半形式化的需求定義語言已有較大進展,已逐步用於軟體工程實踐。

功能性語言用以書寫軟體功能規約,軟體功能規約是軟體功能的嚴格而完整的陳述。軟體功能規約通常只刻畫軟體系統“做什麼”的外部功能,而不涉及系統 “如何做” 的內部算法 ,因此,功能性語言通常又稱為功能規約語言。從形式化的程度看,有非形式化功能性語言和形式化功能性語言之分。前者是指未加限定的自然語言,後者則指其語法和語義均顯式和精確定義的語言。從理論基礎看,有代數類功能性語言和邏輯類功能性語言之分。前者指以異調代數、範疇論等代數理論為主要理論基礎的規約語言,後者則指以一階謂詞演算等邏輯理論為主要理論基礎的規約語言。功能性語言涉及對象、規約方法以及規約性質等。規約對象主要包括過程抽象和數據抽象兩類:過程抽象是指從輸入值集到輸出值集的映射,其定義域和值域均由數據抽象刻畫。數據抽象則提供了數據值集及其上的運算符集。規約方法涉及如何對過程抽象與數據抽象進行規約。功能性語言的研究進展較大,理論基礎日趨成熟,已逐步用於軟體工程實踐。

實現性語言,即一般的程式設計語言,用以書寫電腦程式,而電腦程式是計算任務的處理對象和處理規則的描述。任何以計算機為處理工具的任務都是計算任務。處理對象是數據或信息,處理規則反映處理動作和步驟。程式設計語言的基本成分是:①數據成分,②運算成分,③控制成分,以及傳輸成分。程式設計語言有多種分類法,例如,按語言級別分,有低級語言與高級語言,按套用範圍分,有通用語言與專用語言。按成分性質分,有順序語言、並發語言、並行語言、分布語言。按使用方式分,有互動式語言與非互動式語言等。程式設計語言的發展已有近 50 年的歷史,已相當成熟。

相關詞條

熱門詞條

聯絡我們