目錄
詳細設計的基本任務
對總體設計划分出來的功能進行算法設計時注意的事項
人機界面設計/用戶接口設計
Jackson設計方法
編程接口設計的五項基本原則
線程與進程問題
代碼的注釋
隱含規則
詳細設計的基本任務(六點)
1)為每個模塊進行詳細的算法設計.
2)為模塊內的數據結構進行設計.對於需求分析、概要設計確定的概念性的數據類型進行確切的定義.
3)為數據結構進行物理設計,即確定數據庫的物理結構.
4)其他設計:
- 代碼設計.
- 輸入/輸出格式設計.
- 人機對話設計.
5)編寫詳細設計說明書.
6)評審.
對總體設計划分出來的功能進行算法設計時注意的事項(八項)
1. 性能要求:包括對精度、靈活性和時間特性的要求.
2. 輸入項:給出對每一個輸入項的特性(名稱、標識、數據的類型和格式、數據值的有效范圍、輸入的方式.數量和頻度、輸入媒體、輸入數據的來源和安全保密條件等等)
3. 輸出項:給出對每一個輸出項的特性(名稱、標識、數據的類型和格式,數據值的有效范圍,輸出的形式、數量和頻度,輸出媒體、對輸出圖形及符號的說明、安全保密條件等等)
4. 流程邏輯:用圖表(例如流程圖、判定表等)輔以必要的說明來表示本程序的邏輯流程.
5. 接口:用圖的形式說明本程序所隸屬的上一層模塊及隸屬於本程序的下一層模塊、子程序說明參數賦值和調用方式,說明與本程序相直接關聯的數據結構(數據庫,數據文卷)
6. 存儲分配:根據需要,說明本程序的存儲分配.
7. 注釋設計:
- 加在模塊首部的注釋;
- 加在各分枝點處的注釋;
- 對各變量的功能、范圍、缺省條件等所加的注釋;
- 對使用的邏輯所加的注釋等等.
8. 限制條件:說明本程序運行中所受到的限制條件.
人機界面設計/用戶接口設計
四個重要問題:
1)系統響應時間:
定義:
用戶完成某個控制動作到系統響應的時間.它有兩個重要屬性:長度(響應時間長度) 與 易變性(響應時間相對於平均時間的偏差)
2)用戶幫助設施:
定義:
用戶遇到復雜問題時需要查看用戶手冊尋找答案的設施
分類:
-
- 集成軟件幫助設施(一開始就設計在軟件中)
- 附加軟件幫助設施(在建立系統后在添加到軟件中)
- [ 普遍認為集成的幫助設施優於附加的幫助設施 ]
具體設計幫助設施時候需要解決的問題:
-
- 是提供部分幫助信息還是提供全部幫助信息?
- 用戶如何請求幫助?one.幫助菜單,two.特殊功能鍵,three.HELP命令
- 是否在任何都能請求到功能的幫助信息,請求到的幫助信息是提供部分還是全部?
- 怎樣顯示幫助信息?one.獨立的窗口,two.在屏幕固定位置,three.簡短提示
- 用戶怎樣回到正常交互方式中去?one.按屏幕的返回按鈕,two.功能鍵
- 如何組織幫助信息?one.平面結構(所有信息都靠關鍵字訪問),two.信息的層次結構(用戶在該結構可以查到更纖細的信息),three.超文本結構
3)出錯信息/警告處理:
定義:
用戶在和機子交互的過程中給出的"壞消息".
出錯信息/警告消息需具備那些特性:
-
- 用用戶可以理解的術語描述問題
- 提供有助於從錯誤中恢復的建設性意見
- 應該指出錯誤可能導致的那些負面后果,以便用戶檢查是否出現該問題.並在確定出現問題時候及時解決.
- 信息可以伴隨着聽覺上視覺上得提示(如發出警鈴,或者用明顯的顏色標明出錯誤)
- 信息不能帶有指責色彩,不能責怪用戶
4)命令交互:
定義:
用戶通過命令行與系統交互
提供命令行用系統交互時候需要考慮的問題:
-
- 是否為每個菜單項都有對應命令?
- 采用何種命令形式?one.控制序列(Crrl+字母鍵),two.功能鍵,three.輸入命令
- 學習和記憶難度大小?
- 忘記命令怎么辦?
- 用戶可以自定或縮寫命令?
三個設計指南:
1)一般交互指南:
- 保持一致性:在人機界面中交互中使用一致的格式
- 在執行一個較大破壞的動作前要用戶確認(如刪文件,覆蓋信息,終止一個程序等)
- 減少兩次操作之間用戶需要記憶的信息量
- 減少用戶未完成磨一動作按鍵次數,鼠標移動距離.盡量避免用戶出現問"這是什么意思"的情況
- 按功能對動作分類,並據此設計屏幕布局
- 用簡單動詞/動詞短語作為命名
- 允許犯錯:系統能保護自己不受嚴重錯誤的破壞
2)信息顯示指南:
- 只顯示與當前相關的信息
- 顯示的信息含義明確簡短
- 使用窗口分隔不同類型的消息
- 用模擬顯示的方式顯示消息(顯示煉油廠儲油罐的壓力,如果用數字表示就沒有用溫度計形式的表示來的效果好)
- 高效率的使用顯示屏(當使用多窗口時,至少讓每個窗口有一點空間來顯示其一部分)
- 不應用大量的數據流淹沒用戶(可以使用圖像/圖表來取代大量表格)
3)數據輸入指南:
- 減少用戶為完成一個動作,多次輸入相同數據或填大量的次要信息(提供默認值).和跳過不必要的動作
- 交互方式靈活,可以調整,供用戶選擇自己喜歡的交互方式
- 屏蔽當前動作語境中不使用的命令
- 保持信息顯示和數據輸入的一致性
Jackson設計方法
說明:
Jackson 設計方法是一種面向數據結構的軟件設計方法, Jackson 分析方法是面向數據流的分析方法.
一般通過以下五個步驟來完成設計:
- 分析並確定輸入數據和輸出數據的邏輯結構,並用J ackson 結構圖來表示這些數據結構
- 找出輸入數據結構和輸出數據結構中有對應關系的數據單元
- 按以下的規則由輸入、輸出的數據結構導出程序結構
- 為每一對在輸入數據結構和輸出數據結構中有對應關系的單元畫一個處理框
- 為輸入和輸出數據結構中剩余的數據單元畫一個處理框
- 所有處理框在程序結構圖上的位置,應與由它處理的數據單元在數據結構 Jackson 圖上的位置一致
- 必要時,可以對映射導出的程序結構圖進行進一步的細化
- 列出基本操作與條件,並把它們分配到程序結構圖的適當位置
- 用偽碼寫出程序
編程接口設計的五項基本原則
- 簡潔明了: 接口的命名和參數應該簡單清楚,讓人一看就知道要做什么,輸入和輸出大概是什么
- 直來直去: 接口的實際輸入輸出,除了名稱,傳入參數和返回值以外,沒有別的隱含在背后的輸入輸出和假設條件.
- 基本類型: 在接口定義中使用的數據類型盡可能的使用語言本身支持的基本數據類型
- 籠統輸入: 要求輸入的參數的類型盡量籠統,具體的說,就是有父類則用父類類型,如果有實現的接口就用實現的接口類型,這樣一來,該接口也籠統了,適用面也擴大了,威力也馬上不一樣了,一個接口可以當好幾個具體接口來使用.
- 具體返回: 返回的類型是越具體越好.道理其實很簡單,有了具體的對象,接口調用者可以隨時轉換成父類類型或者實現的接口類型
對外公布的公開編程接口不能隨意修改.所以在設計的時候要認真謹慎設計
Unix 開發哲學
- 只要可行,一切都應該做成與開源和目標無關的過濾器
- 數據流應盡可能文本化(這樣可以使用標准工具來查看和過濾)
- 數據庫部署和應用協議應盡可能文本化(讓人可以閱讀和編輯)
- 復雜的前端(用戶界面)和后台應該清楚的分隔開
- 如果可能,用 C 編寫前,先用注釋性語言搭建原型
- 當且僅當只用一門語言編程會提高程序復雜度時,混用語言編程比單一語言編程來的好
- 寬收嚴發(接收的東西要包容,對輸出的東西要嚴格)
- 過濾時,不需要丟棄的信息絕不丟
- 小就是美.在確保完成任務的基礎上,程序功能盡可能少
線程與進程問題
注意:
不同的進程之間的接口,不能傳遞指針類型的數據,這點在設計分布式系統和多進程系統時候要特別注意
同步還是異步?
同步猶如打電話直接交流有事情當場了解清楚才結束,異步猶如發郵件只要把信息發到目的地就好;當遇到資源緊缺,或者遇到長時間的操作時候多用異步.但遇到要及時的信息交流是用的是同步
調用函數的重入:
指的是一個線程調用一個函數的過程中.另一個或多個線程也在調用這個函數.如果該函數中有靜態的數據或者一個指向靜態數據的指針,就等於多個進程對一個數據在進行操作.這樣做容易導進程錯誤
變量可見度:
如線程 A 修改了某個變量 X 后,該變量可能被緩存在中央處理器中的寄存器中,並沒有被返回到主內存中,這個時候如果 B 線程要讀取變量X的數值話,很自然的是到內存當中去讀取所以現在的變量X顯然不是最新的值.
代碼的注釋
常犯的毛病:
- 啰里啰嗦講怎么做{例:count++ //increase count by one}
- 注解寫的和代碼所做的就是兩碼事
正確的有效注解:
- 要注釋就注釋這是在做什么和為什么這么做
- 最好少注釋,或者干么就沒注釋
隱含規則
- 接口使用順序: 不同軟件接口可能會在順序上有一定要求但這種關系在接口定義本身無法直接反映出
- 接口的配合關系: 有些接口之間有一定的配合關系,在實現了其中一個之后,就要同時實現另一個.
