軟件設計概念
思考
爲什麼需要進行軟件設計?
在進行軟件設計之前,我們應該確定哪些信息?
數據、界面、算法、加工邏輯 ……
在解決問題的時候,確定哪些關鍵元素需要通過設計來解決,如何制定軟件設計的藍圖。
設計的兩個層次
- 高層次抽象
類似於概要設計。
類似於建築設計的框架設計。
- 對框架進行細化
對具體的門、框的設計
設計以需求爲先導
設計類以分析類爲基礎,數據設計與分析設計緊密相關。
軟件設計的目標
- 實現所有的顯式的需求,爲後面的軟件實現打下基礎。
- 提高可讀可理解的指南,提供給後續的工作人員。
- 提供完整的系統藍圖 解決一系列實現過程中需要面對的問題。
排課系統爲例
設計解決數據存儲的問題(排課信息保存)、界面顯示問題(排課及結果顯示)、算法邏輯問題(排課算法)等。這三個問題對應着數據設計、接口設計、算法設計三個問題。
設計過程的任務集
分析過程中涉及了7個任務
設計過程中涉及了以下6個任務
- 數據設計
- 軟件的體系結構設計 (定義框架,缺乏對構件的定義和描述)
- 類設計(針對面向對象應用系統)
分析類和設計類的區別
設計類比分析類更接近於實現。設計類的定義更加具體。
- 接口設計(外部接口&人機交互)
- 組件設計(構件的定義和描述)
- 部署設計(軟件元素分佈到物理元素上)
軟件設計的指導原則
- 設計原則
- 設計優化原則
設計基本理念
設計基本理念——抽象
概要設計的核心:確定應用系統的結構
架構的關鍵內容:
- 模塊、組件
面向對象基本的組件——類
- 聯繫
模塊和模塊的調用,類和類的協作
- 數據
軟件架構即是便是構件並確定構件的通信和聯繫
模塊化設計原則
通過模塊化把龐大的應用系統進行功能的劃分,降低開發實現的難度,控制成本。
簡單說就是:降低複雜度
模塊化是實現軟件體系結構的一張方法
信息隱藏原則
每個模塊對其他模塊隱藏自己的設計決策,已到達內容細節發生變化的時候,外部受到的影響最小。
有助於提供系統內部的獨立性。
全局變量共用,導致錯誤的擴展。
步進式的細化原則
每一步都是對前一步的逐漸細化。
功能獨立原則
應對特徵:
- 功能獨立
- 避免和其他模塊的過量的交互
具體的衡量指標:
- 內聚性
模塊、組件內部的聯繫緊密度
只完成一件事兒的時候,內聚性最高。
- 耦合性
模塊和模塊之前聯繫的緊密程度。
耦合性越低越好。
重構原則
不改變外部結構的情況下 對內部進行優化,成爲重構。
從使用者的角度看,前後沒有變化。
Aspects
面向方面的編程AOP
關鍵:找到橫切關注點
橫切關注點:業務處理的主要流程是核心關注點,而將封裝的類剖開,找出類中公共的行爲,並抽取出來進行封裝。封裝的這部分就稱爲橫切關注點。
AOP的核心思想
將應用程序中的商業邏輯同對其提供支持的通用服務進行分離。
設計元素
- 數據元素
- 架構元素
- 接口元素
- 構件元素
- 部署元素
元素由設計任務產生,可以明顯的看出其對應關係。
數據元素
- 數據結構
- 數據庫架構
設計一種數據結構,便於根據用戶提供的搜索詞快速檢索出含有該詞的文檔。
倒排索引
將每個單詞關聯到包含該單詞的所有文檔列表。
架構元素
面向對象確定的架構VS 結構化方法確定的架構
- 面向對象: 架構基礎爲 類 (協作關係)
- 結構化: 架構基礎爲 模塊 (調用關係)
接口元素
接口存在於構件、模塊、子系統等元素外部可見的操作說明
分類:
- 人機接口 (界面)
外部接口 (與外部應用系統的交互)
作用:
連接兩個系統,對傳遞的數據進行安全控制、信息轉換、檢查。
接口像緩衝器,使得兩個系統足夠兼容內部接口 (協作和調用)
構件元素
什麼是構件?
構件是具備特定功能,可配置、可替換的程序部件,該部件封裝了實現並暴露一系統接口。
構件VS架構元素 :構件和架構元素的關係?
多個架構元素可能組成一個構件。構件的力度可大可小。
構件級設計
破開構件,看構件裏面的 數據結構、算法等內容。
程序流程圖 (構件級設計中會涉及到)
描述構件內容的算法邏輯,表達程序“怎麼做”的問題。
算法的本質: 解決問題的一種方法。
部署元素
目的:表示軟件的功能和系統是如何分佈到物理環境中的。
本博客內容到此結束,歡迎指正!