面向对象实战
一 引子
學完了面向對象的基礎知識后,很明顯你還是不知該如何下手,凡是都得有個章法
此刻有經驗的人可能會想到瀑布模型、螺旋模型、迭代開發、敏捷、RUP等一堆軟件工程相關的軟件開發流程,但對于大部分人來說這些流程僅僅只是項目管理上的流程
本節我們就帶大家來了解下,作為一名程序員基于面向對象開發程序的開發流程:
需求模型->領域模型->設計模型->實現模型
二 需求模型之5w1h8c
1. 需求VS功能
需求:客戶想要的效果,對客戶有價值的事情
功能:系統為了實現客戶的價值而提供的能力/功能
舉例:
汽車:駕駛是需求,剎車、加速、轉彎是功能
打印機:打印是需求,進紙、設定、與電腦連接等是功能
pos機:買單是需求,商品掃描、金額匯總、收銀等是功能
2. 需求的重要性
1/3的項目失敗或陷入困境是因為需求原因導致的
garbage in,garbage out
屎上了生產餅干的流水線,最后產出的是像餅干一樣的屎
修復需求錯誤的問題成本極高
1 編碼階段修復發現一個錯誤耗費人類是1個單位
2 測試階段修復需求錯誤的成本是5-10倍
3 維護階段(產品上線后),修復需求錯誤成本是20倍
ps:在需求階段修復錯誤,成本只需要0.1-0.2即可
結論:需求錯了,幾乎要把軟件項目重做一遍
3. 需求分析的目的
1 記錄員,記錄客戶的需求
2 分析員,和客戶一起分析,完善需求
3 引導員,能夠引導客戶的需求
4. 需求分析的方法
需求分析518方法,簡稱我要發,具體就是5w1h8c5w:
when:用戶想在什么時間用,例如半夜備份的任務,很明顯我們得知該需求需要自動化執行
where:用戶想在什么地方用,例如垃圾桶室內和室外的區別,同樣的事物放到不同地方用肯定不一樣
who:用戶想讓誰來用,不僅是人,也可以是一個系統
what:用戶想要我們程序的輸出結果是什么,如圖片,文檔,系統
why:問一問用戶為什么要這么做,(你不問,他基本不說),包括客戶所有覺得不爽的事情
ps:why是核心
1h:how
用例方法
8c:8個constraint約束
性能performance
性能是系統提供相應服務的效率。主要包括響應時間、吞吐量性能是很多系統架構設計的關鍵約束條件之一例如,同樣一個web網站,雖然都是提供信息給用戶流量,設計一個日訪問量1w的網站與日訪問量10億的網站,二者的設計截然不同
成本cost
成本指為了實現系統而需要付出的代價成本也是很多系統架構設計的關鍵約束之一例如客戶只愿意花100w,而我們卻設計了一個耗費1000w的系統
時間time
指客戶要求什么時候交付
可靠性reliability
指系統長時間正確運行的能力,銀行、證券、電信這些公司,對宕機時間要求很嚴格
安全security
指對信息安全的保護能力,涉及到錢、身份證、社會保險號等需求對這個要求很高
合規性compliance
指滿足各種行業標準、法律法規、規范等,例如3C、SOX、3GPP,ITUT
技術性technology
有的客戶可能要求我們采用某種技術例如客戶現在都是windows服務器,要求我們基于windows平臺開發
兼容性compatibility
指我們的產品與客戶其他已有的產品或系統的兼容能力,要知道現在很少有產品是孤立運行的,特別是在大企業、大公司中,多個系統都是相互交互、互相配合的。新的系統必須能夠和已有的系統配合,否則將無法運行
ps:
5w+1h屬于功能屬性
8c屬于質量屬性
三 需求模型之用例的寫法
寫用例的技巧
三段法:NEA 1 正常處理(normal):分析正常流程 2 異常處理(exception):分析每一步異常情況和對應的處理 3 替代處理(alternative):分析每一步是否有其他替代方法,以及如何做用例的書寫格式
#1. 用例名稱 一般情況下,用例名稱即需求名稱#2. 場景 場景即用例發生的環境,正好對應5w中的:when,where,who#3. 用例描述 描述詳細的用例內容,對應5w中的what和how 即用戶應該怎樣做,以及每個步驟中的輸出,但不要求每個步驟都有一定的輸出,可以有也可以沒有,也可以有多個#4. 用例價值 描述用例對應的客戶價值,對應5w中的why#5. 約束和限制 即真個需求流程中相關的約束和限制條件,對應518方法中的8C用例編寫案例
#用例名答題系統#場景:when:8.10開始where:老男孩who:linux學院,網絡客戶#用例描述:1 linux學院提供50道題2 每個客戶無需輸入任何個人信息就可以參與答題,隨機選擇20道題,給客戶回答,每道題5分,3.答題結束后,輸入手機號,提交,算總分4 60分參與抽獎,<60分贈送基礎視頻#用戶價值:答題有獎,答題提交時輸入自己的手機號獲取成績,獲得潛在客戶的聯系方式,為后期將客戶轉成學員做準備#約束:暫無四 領域模型
需求分析階段不區分面向對象還是面向過程
領域模型是完成從需求分析到面向對象設計的一座橋梁
#定義:領域模型是對領域內的概念或現實世界中對象的可視化表示,又稱為觀念模型,領域對象模型,分析對象模型 #它專注于分析問題領域本身,發掘重要的業務領域概念,并建立業務領域概念之間的關系領域模型主要兩個作用:
#1 發掘重要的業務領域概念 #2 建立業務領域概念之間的關系
歸納領域建模的方法就是:
五 設計模型
面向對象類設計的具體步驟第一步:領域類映射(不是全盤拷貝)類篩選:并不是每個領域類都會出現在軟件中名稱映射:對應屬性映射:對應,照搬提煉方法:領域類中并沒有方法,在用例中找動詞第二步:應用設計原則和設計模式第三步:拆分輔助類(領域類可以在實現階段拆分為幾個類)六 實現模型
選取一種支持面向對象的語言實現我們的設計
七 答題系統案例
第一步:需求分析(寫用例)
View Code第二步:領域模型(找名詞,加屬性,連關系=>出圖)
#找名詞: linux學院,題,客戶,得分,獎,視頻 #篩選:去掉與領域無關的名詞。視頻應該算作一種獎品 linux學院,題,客戶,得分,獎 #加屬性 加屬性 名詞 屬性 備注 linux學院 NA 對于答題系統來說,并不需要linux學院的屬性,因此在領域模型中,linux學院是沒有屬性的 題 題目編號,題目類型,題目描述,答題選項,正確答案,分數 客戶 客戶編號,姓名,性別,年齡,手機號 答題記錄 記錄編號,客戶編號,題目編號列表,總分數,時間 通過答題記錄就可以知道用戶是誰,以及用戶答過的題目 獎品 獎品編號,獎品名字 #連關系:畫圖 1:答題記錄是客戶與題的關系類,而客戶與獎品之間可以建一個關系類,這樣以后單查關系類就可以知道誰得了什么獎品 2:找動詞:創建題目隨機選擇題目答題提交算總分抽獎第三步:設計模型(略)
第四部:實現模型
鏈接: https://pan.baidu.com/s/1jHYFKWI 密碼: wimc第八 UML圖
待整理
類圖中通過加號(+)來表示 public
通過減號(-)表示 private
通過井號(#)表示 protected
第九 作業
作業要求思路:
一:選課系統用例
#用例名稱 選課 #場景 who:學生,老師,管理員 where:老男孩 when:任意時間#用例描述(用戶怎么做,或者說用戶想怎么用): 1. 管理員創建學校:北京和上海兩個校區 2. 管理員創建課程:python,go,linux 3. 管理員創建班級:python周末18期,python脫產7期,linux架構35期 4. 管理員創建學員:小晴,花野真衣,川島芳子 5. 管理員創建講師:alex,egon,wupeiqi,yuanhao 6. 講師創建上課記錄:python周末班18期day7 7. 講師為day7這節課所有學生批改作業,為每個學生打分 8. 學員楊磊查看自己的詳細信息:所在學校,報名課程,所在班級 9. 學員楊磊在python18期day7提交了作業 10.學員楊磊查看了自己在day7作業的成績列表,然后自殺了 11.學員小晴跟egon表白了,當天下午就去領了結婚證#用例價值幫老男孩解決課程管理問題 #約束暫無二:找名詞:
管理員,學校,課程,班級,學員講師,上課記錄,作業,分數,學員詳細信息,成績列表,結婚證 篩選:去掉與行業或者說領域無關的名詞 管理員,學校,課程,班級,學員,講師,上課記錄,作業,分數,學員詳細信息,成績列表三: 加屬性:
名字 屬性 備注 管理員 NA 具備所有權限,對于選課系統來說,并不需要管理員的屬性,因此在領域模型中,管理員是沒有屬性的 學校 學校名,地址,課程列表,班級列表 課程 課程名,周期,價錢,大綱 班級 班級名,所屬學校,課程 學員 學員名, 講師 講師名 上課記錄 班級,課程節次,日期四:連關系
五:實現吧親
總結
- 上一篇: Nginx 性能优化
- 下一篇: Realtek RTL8367S-CG