基本介紹
- 中文名:傑克森結構化程式設計
- 外文名:Jackson structured programming
簡介,結構等效的二個程式,方法,
簡介
麥可·安東尼·傑克遜在1975年在《Principles of Program Design》一書中提出傑克森結構化程式設計。傑克森的目的是要使COBOL批處理檔案進程更容易更改及維護,但此程式設計方式可用在任何有結構化流程控制的程式語言,例如C語言、Java及Perl。雖然JSP已有很長的歷史,不過像微軟的Visio及像是Jackson Workbench的計算機輔助軟體工程工具仍支持JSP。
JSP中的許多內容和Warnier/Orr圖有關,不過後者專注在輸出流的結構。JSP和Warnier/Orr圖都將程式及數據由序列、疊代及選擇三個結構來表示,基本上創立了正則表達式的語法分析器程式,可同時匹配程式輸入及輸出的數據流。
JSP著重數據流,因此所產生的程式的結構和用其他利用像維爾特或戴克斯特拉的逐步細化方法所產生程式的結構不同。JSP所設計程式的主要特點是在代碼中會有多個輸入指令,而使用其他逐步細化方法的程式一般只有一個輸入指令。傑克森在《Principles of Program Design》的第三章,列出了二個程式以說明不同結構化程式設計的差異。
結構等效的二個程式
此程式的JSP版本如下
String line;line = in.readLine();while (line != null) { int count = 0; String firstLineOfGroup = line; while (line != null && line.equals(firstLineOfGroup)) { count++; line = in.readLine(); } System.out.println(firstLineOfGroup + " " + count);}
使用其他結構化設計方式的程式如下
String line;int count = 0;String firstLineOfGroup = null;while ((line = in.readLine()) != null) { if (firstLineOfGroup == null || !line.equals(firstLineOfGroup)) { if (firstLineOfGroup != null) { System.out.println(firstLineOfGroup + " " + count); } count = 0; firstLineOfGroup = line; } count++;}if (firstLineOfGroup != null) { System.out.println(firstLineOfGroup + " " + count);}
傑克遜認為使用其他結構化設計方式的程式無法表達輸入數據行之間的關係,例如將第一行的處理視為一個特例,最後一行的輸出也要用特例來處理,影響程式的可理解性及可維護性。
方法
JSP使用半型式化步驟來找出程式輸入輸出數據的結構,以及程式本身的結構。
其目的是創建在整個生命周期都方便修改的程式。傑克遜主要的見解是需求變更多半是針對現有結構的微小調整,針對用JSP撰寫的程式,其輸入數據結構、輸出數據結構及程式內在結構皆可對應,因此輸入及輸出的微小變化只會對應為程式的微小變化。
JSP將程式分為四種不同的組件:
- 基本程式
- 序列(sequences)
- 疊代(iterations)
- 選擇(selections)
JSP一開始會以上述四個組件來描述程式的輸入,隨後以類似的方式處理程式的輸出,每一個輸入及輸出都以獨立的數據結構圖(DSD)來表示。針對一些密集運算的套用(例如數位訊號處理),也需要繪製算法結構圖,著重在內部數據的結構,而不是輸入或輸出數據的結構。
輸入及輸出的結構之後會集成成最終的程式結構,稱為程式結構圖(PSD)。其中可能包括加入少許的高階控制結構,集成輸入及輸出的特性。一部分程式是處理產生輸出前的所有輸入數據,其他程式則是以循環的方式,先讀取數據再輸出數據,在產生程式結構圖時需找到類似的結構。
隨後程式結構圖會以程式語言來實現。JSP著重在程式的控制結構,因此實現時只會用到基本程式、序列、疊代及選擇。JSP沒有使用類別及對象及層次來架構程式,不過使用類別的方法也有助控制流程的結構化。
JSP使用圖像的表示法來描述輸入、輸出及程式的結構。
基本程式會以方塊來表示。