學完了面向對象的基礎知識後,很明顯你仍是不知該如何下手,凡是都得有個章法python
此刻有經驗的人可能會想到瀑布模型、螺旋模型、迭代開發、敏捷、RUP等一堆軟件工程相關的軟件開發流程,但對於大部分人來講這些流程僅僅只是項目管理上的流程linux
本節咱們就帶你們來了解下,做爲一名程序員基於面向對象開發程序的開發流程:程序員
需求模型->領域模型->設計模型->實現模型web
需求:客戶想要的效果,對客戶有價值的事情windows
功能:系統爲了實現客戶的價值而提供的能力/功能設計模式
舉例:安全
汽車:駕駛是需求,剎車、加速、轉彎是功能服務器
打印機:打印是需求,進紙、設定、與電腦鏈接等是功能網絡
pos機:買單是需求,商品掃描、金額彙總、收銀等是功能架構
1/3的項目失敗或陷入困境是由於需求緣由致使的
garbage in,garbage out
屎上了生產餅乾的流水線,最後產出的是像餅乾同樣的屎
修復需求錯誤的問題成本極高
1) 編碼階段修復發現一個錯誤耗費人類是1個單位
2) 測試階段修復需求錯誤的成本是5-10倍
3) 維護階段(產品上線後),修復需求錯誤成本是20倍
ps:在需求階段修復錯誤,成本只須要0.1-0.2便可
結論:需求錯了,幾乎要把軟件項目重作一遍
1) 記錄員,記錄客戶的需求
2) 分析員,和客戶一塊兒分析,完善需求
3) 引導員,可以引導客戶的需求
需求分析518方法,簡稱我要發,具體就是5w1h8c
5w:
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學院,網絡客戶 #用例描述: linux學院提供50道題 每一個客戶無需輸入任何我的信息就能夠參與答題,隨機選擇20道題,給客戶回答,每道題5分, 3.答題結束後,輸入手機號,提交,算總分 60分參與抽獎,<60分贈送基礎視頻 #用戶價值: 答題有獎,答題提交時輸入本身的手機號獲取成績,得到潛在客戶的聯繫方式,爲後期將客戶轉成學員作準備 #約束: 暫無
需求分析階段不區分面向對象仍是面向過程
領域模型是完成從需求分析到面向對象設計的一座橋樑
#定義:領域模型是對領域內的概念或現實世界中對象的可視化表示,又稱爲觀念模型,領域對象模型,分析對象模型 #它專一於分析問題領域自己,發掘重要的業務領域概念,並創建業務領域概念之間的關係
領域模型主要兩個做用:
#1 發掘重要的業務領域概念 #2 創建業務領域概念之間的關係
概括領域建模的方法就是:
#1 從用例中找名詞(找完後須要刪除不是領域對象的名詞,具體刪除什麼,與不一樣領域有關,沒有統一標準,靠經驗) #2 加屬性(有些屬性並無在用例中明確給出,靠行業經驗本身添加) #3 連關係(畫UML圖)
面向對象類設計的具體步驟
第一步:領域類映射(不是全盤拷貝)
類篩選:並非每一個領域類都會出如今軟件中
名稱映射:對應
屬性映射:對應,照搬
提煉方法:領域類中並無方法,在用例中找動詞
第二步:應用設計原則和設計模式
第三步:拆分輔助類(領域類能夠在實現階段拆分爲幾個類)
選取一種支持面向對象的語言實現咱們的設計
第一步:需求分析(寫用例)
#用例名 答題系統 #場景: when:8.10開始 where:老男孩 who:linux學院,網絡客戶 #用例描述: linux學院提供50道題 每一個客戶無需輸入任何我的信息就能夠參與答題,隨機選擇20道題,給客戶回答,每道題5分, 3.答題結束後,輸入手機號,提交,算總分 60分參與抽獎,<60分贈送基礎視頻 #用戶價值: 答題有獎,答題提交時輸入本身的手機號獲取成績,得到潛在客戶的聯繫方式,爲後期將客戶轉成學員作準備 #約束: 暫無
第二步:領域模型(找名詞,加屬性,連關係=>出圖)
#找名詞: linux學院,題,客戶,得分,獎,視頻 #篩選:去掉與領域無關的名詞。視頻應該算做一種獎品 linux學院,題,客戶,得分,獎
#加屬性 加屬性 名詞 屬性 備註 linux學院 NA 對於答題系統來講,並不須要linux學院的屬性,所以在領域模型中,linux學院是沒有屬性的 題 題目編號,題目類型,題目描述,答題選項,正確答案,分數 客戶 客戶編號,姓名,性別,年齡,手機號 答題記錄 記錄編號,客戶編號,題目編號列表,總分數,時間 經過答題記錄就能夠知道用戶是誰,以及用戶答過的題目 獎品 獎品編號,獎品名字
#連關係:畫圖 1:答題記錄是客戶與題的關係類,而客戶與獎品之間能夠建一個關係類,這樣之後單查關係類就能夠知道誰得了什麼獎品 2:找動詞: 建立題目 隨機選擇題目 答題 提交 算總分 抽獎
第三步:設計模型(略)
第四部:實現模型
連接: https://pan.baidu.com/s/1jHYFKWI 密碼: wimc
待整理
類圖中經過加號(+)來表示 public
經過減號(-)表示 private
經過井號(#)表示 protected
角色:學校、學員、課程、講師
要求:
1. 建立北京、上海 2 所學校
2. 建立linux , python , go 3個課程 , linux\py 在北京開, go 在上海開
3. 課程包含,週期,價格,經過學校建立課程
4. 經過學校建立班級, 班級關聯課程、講師
5. 建立學員時,選擇學校,關聯班級
5. 建立講師角色時要關聯學校,
6. 提供兩個角色接口
6.1 學員視圖, 能夠註冊, 交學費, 選擇班級,
6.2 講師視圖, 講師可管理本身的班級, 上課時選擇班級, 查看班級學員列表 , 修改所管理的學員的成績
6.3 管理視圖,建立講師, 建立班級,建立課程
7. 上面的操做產生的數據都經過pickle序列化保存到文件裏
一:選課系統用例
#用例名稱 選課 #場景 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 具有全部權限,對於選課系統來講,並不須要管理員的屬性,所以在領域模型中,管理員是沒有屬性的
學校 學校名,地址,課程列表,班級列表
課程 課程名,週期,價錢,大綱
班級 班級名,所屬學校,課程
學員 學員名,
講師 講師名
上課記錄 班級,課程節次,日期
四:連關係
五:實現吧親