結構化開發方法 基本思想:自頂向下,逐步求精,過程抽象,模塊化技術 概念: 結構化程式設計:按照一定的原則與原理,組織編寫正確且易讀的程式的軟體技術。 結構化分析設計:數據流圖、數據字典、模塊結構圖。 優勢:合理性(管理複雜性的有效手段:分解,抽象,層次)、正確性(依據規約,完成任務) 程式 & 抽 ...
結構化開發方法
- 基本思想:自頂向下,逐步求精,過程抽象,模塊化技術
- 概念:
- 結構化程式設計:按照一定的原則與原理,組織編寫正確且易讀的程式的軟體技術。
- 結構化分析設計:數據流圖、數據字典、模塊結構圖。
- 優勢:合理性(管理複雜性的有效手段:分解,抽象,層次)、正確性(依據規約,完成任務)
程式 & 抽象
程式:
- 程式運行:在某個數據體上施以某些操作。
- 兩個要素:
- 操作(功能)Functions/Operations/Actions;
- 客體(對象)Objects/Data;
- 兩種抽象方法:
- 從操作/功能入手,形成:基於過程的抽象;
- 從客體/對象入手,形成:基於數據的抽象;
過程抽象 & 數據抽象:
- 過程抽象:指任何一個明確定義功能的操作都可以被使用者看作單個的實體,儘管這個操作實際上可能由一系列更低級的操作完成。
- 數據抽象:
- 概念:定義了數據類型和施加於該類型對象上的操作,並限定了對象的值只能通過使用這些操作修改和觀察,包含兩個概念:1. 模塊封裝;2. 信息隱蔽。
- 意義:數據抽象提供了面向對象計算的起點:系統應該被分解為概念上的實體,實體的內部細節應該被隱藏。
- 發展歷程:
- 第一階段:從無類型的二進位到基本數據類型;
- 第二階段:從基本類型到用戶自定義類型;
- 第三階段:從用戶自定義類型到抽象數據類型(Abstract Data Types)-面向對象
面向對象的軟體構造(OOSC)
- 面向對象的分解好在何處:
- 復用性(Reusability):數據(結構)及其上之操作的整體復用,而非僅僅復用操作功能;
- 可拓展性(Extendibility),連續性(Continuity):對象更直接對應問題空間的概念,因而較“功能”更穩定;
- 含義:
- OOSC乃是基於系統所操作之對象類型(而非系統需實現之功能)來架構系統的途徑。
- OOSC乃是將系統構造為抽象數據類型實現(可能是部分實現)的結構化組合。(這個“抽象數據類型的實現”就是類(class))
- 對象刻畫(註重外部視圖,而非內部視圖):
- 主要方法:
- 考慮一類具有相似屬性的對象而不是單個對象。
- 定義對象的類型不是通過定義對象的物理表述,而是通過定義它們的行為:即它們提供給外部的服務。
- 主要標準:1. 完整的(Completely);2. 無歧義的(Unambiguously);3. 不過分描述的(Without overspecifying)-記住信息隱藏;
- 主要方法:
抽象數據類型(ADT,Abstract Data Type)
- 定義:
- 數據類型:由一個對象集合(值集合)以及在該集合上定義的若幹合法運算所組成的運算集合組成。
- 抽象數據類型:
- 在設計階段,採用與具體實現無關的模型描述。
- 用“數學方法”定義對象集合和運算集合,僅通過運算的性質刻畫數據對象,而獨立於電腦中可能的表示方法。
- ADT規約方法:
- 代數方法
- 模型方法(C.A.R.Hoare的前後斷言方法:通過已定義的(抽象)數據類型來給出要定義的新類型的抽象模型)
代數規範
- 構成:
- 語法部分:
- ADT名;
- 運算(函數)的定義域和值域;
- 公理部分:
- 給出一組刻畫各運算之間相互關係的方程來定義各運算的含義;
- 語義正確性:相應代數滿足規約中公理部分的所有公理;
- 語法部分:
- ADT函數分類:一個ADT \(T\) 中可有三種函數(運算元):
- Creators(構造運算元):\(\text{OTHER} \rightarrow T\)。eg.
new
- Queries(觀察運算元):\(T\times \dots \rightarrow \text{OTHER}\)。eg.
item
,empty
- Commands(運算運算元):\(T\times \dots \rightarrow T\)。eg.
put
,remove
- Creators(構造運算元):\(\text{OTHER} \rightarrow T\)。eg.
Reminder: Partial functions
- A partial function, identified here by \(\nrightarrow\), is a function that may not be defined for all possible arguments.
- 實例: