面向對象實戰擴展(課外閱讀)

 

第1章 引子

學完了面向對象的基礎知識後,很明顯你仍是不知該如何下手,凡是都得有個章法python

此刻有經驗的人可能會想到瀑布模型、螺旋模型、迭代開發、敏捷、RUP等一堆軟件工程相關的軟件開發流程,但對於大部分人來講這些流程僅僅只是項目管理上的流程linux

本節咱們就帶你們來了解下,做爲一名程序員基於面向對象開發程序的開發流程:程序員

需求模型->領域模型->設計模型->實現模型web

 

第2章 需求模型之5w1h8c

2.1 需求VS功能

需求:客戶想要的效果,對客戶有價值的事情windows

功能:系統爲了實現客戶的價值而提供的能力/功能設計模式

舉例:安全

汽車:駕駛是需求,剎車、加速、轉彎是功能服務器

打印機:打印是需求,進紙、設定、與電腦鏈接等是功能網絡

  pos機:買單是需求,商品掃描、金額彙總、收銀等是功能架構

2.2 需求的重要性

1/3的項目失敗或陷入困境是由於需求緣由致使的

garbage in,garbage out

屎上了生產餅乾的流水線,最後產出的是像餅乾同樣的屎

修復需求錯誤的問題成本極高

1)        編碼階段修復發現一個錯誤耗費人類是1個單位

2)        測試階段修復需求錯誤的成本是5-10倍

3)        維護階段(產品上線後),修復需求錯誤成本是20倍

ps:在需求階段修復錯誤,成本只須要0.1-0.2便可

結論:需求錯了,幾乎要把軟件項目重作一遍

 

2.3 需求分析的目的

1)        記錄員,記錄客戶的需求

2)        分析員,和客戶一塊兒分析,完善需求

3)        引導員,可以引導客戶的需求

2.4 需求分析的方法

需求分析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屬於質量屬性
View Code

第3章 需求模型之用例的寫法

3.1 寫用例的技巧

三段法:NEA

1 正常處理(normal):分析正常流程

2 異常處理(exception):分析每一步異常狀況和對應的處理

3 替代處理(alternative):分析每一步是否有其餘替代方法,以及如何作

3.2 用例的書寫格式

#1. 用例名稱

通常狀況下,用例名稱即需求名稱

 

#2. 場景

場景即用例發生的環境,正好對應5w中的:when,where,who

 

#3. 用例描述

描述詳細的用例內容,對應5w中的what和how

即用戶應該怎樣作,以及每一個步驟中的輸出,但不要求每一個步驟都有必定的輸出,能夠有也能夠沒有,也能夠有多個

 

#4. 用例價值

描述用例對應的客戶價值,對應5w中的why

 

#5. 約束和限制

即真個需求流程中相關的約束和限制條件,對應518方法中的8C

3.3 用例編寫案例

#用例名

    答題系統

 

#場景:

    when:8.10開始

    where:老男孩

    who:linux學院,網絡客戶

 

#用例描述:

linux學院提供50道題

每一個客戶無需輸入任何我的信息就能夠參與答題,隨機選擇20道題,給客戶回答,每道題5分,

    3.答題結束後,輸入手機號,提交,算總分

60分參與抽獎,<60分贈送基礎視頻

 

 

#用戶價值:

    答題有獎,答題提交時輸入本身的手機號獲取成績,得到潛在客戶的聯繫方式,爲後期將客戶轉成學員作準備

 

#約束:

    暫無

 
View Code

第4章 領域模型

4.1 定義

需求分析階段不區分面向對象仍是面向過程

領域模型是完成從需求分析到面向對象設計的一座橋樑

#定義:領域模型是對領域內的概念或現實世界中對象的可視化表示,又稱爲觀念模型,領域對象模型,分析對象模型

#它專一於分析問題領域自己,發掘重要的業務領域概念,並創建業務領域概念之間的關係

4.2 領域模型主要兩個做用

領域模型主要兩個做用:

#1 發掘重要的業務領域概念

#2 創建業務領域概念之間的關係

4.3 概括領域建模的方法

概括領域建模的方法就是:

#1 從用例中找名詞(找完後須要刪除不是領域對象的名詞,具體刪除什麼,與不一樣領域有關,沒有統一標準,靠經驗)

#2 加屬性(有些屬性並無在用例中明確給出,靠行業經驗本身添加)

#3 連關係(畫UML圖)

第5章 設計模型

面向對象類設計的具體步驟

    第一步:領域類映射(不是全盤拷貝)

        類篩選:並非每一個領域類都會出如今軟件中

        名稱映射:對應

        屬性映射:對應,照搬

        提煉方法:領域類中並無方法,在用例中找動詞

 

    第二步:應用設計原則和設計模式

    第三步:拆分輔助類(領域類能夠在實現階段拆分爲幾個類)

 

第6章 實現模型

選取一種支持面向對象的語言實現咱們的設計

 

第7章 答題系統案例

7.1 第一步:需求分析

第一步:需求分析(寫用例)

#用例名

    答題系統

 

#場景:

    when:8.10開始

    where:老男孩

    who:linux學院,網絡客戶

 

#用例描述:

linux學院提供50道題

每一個客戶無需輸入任何我的信息就能夠參與答題,隨機選擇20道題,給客戶回答,每道題5分,

    3.答題結束後,輸入手機號,提交,算總分

60分參與抽獎,<60分贈送基礎視頻

 

 

#用戶價值:

    答題有獎,答題提交時輸入本身的手機號獲取成績,得到潛在客戶的聯繫方式,爲後期將客戶轉成學員作準備

 

#約束:

    暫無

 
View Code

7.2 第二步:領域模型

第二步:領域模型(找名詞,加屬性,連關係=>出圖)

7.2.1 找名詞

#找名詞:

linux學院,題,客戶,得分,獎,視頻

#篩選:去掉與領域無關的名詞。視頻應該算做一種獎品

linux學院,題,客戶,得分,獎

7.2.2 加屬性

#加屬性

加屬性

名詞         屬性                        備註

linux學院    NA                       對於答題系統來講,並不須要linux學院的屬性,所以在領域模型中,linux學院是沒有屬性的

題          題目編號,題目類型,題目描述,答題選項,正確答案,分數

客戶        客戶編號,姓名,性別,年齡,手機號

答題記錄     記錄編號,客戶編號,題目編號列表,總分數,時間     經過答題記錄就能夠知道用戶是誰,以及用戶答過的題目

獎品        獎品編號,獎品名字               

 
View Code

7.2.3 連關係:畫圖

#連關係:畫圖

1:答題記錄是客戶與題的關係類,而客戶與獎品之間能夠建一個關係類,這樣之後單查關係類就能夠知道誰得了什麼獎品

2:找動詞:

    建立題目

    隨機選擇題目

    答題

    提交

    算總分

    抽獎

 

7.3 第三步:設計模型

第三步:設計模型(略)

7.4 第四部:實現模型

第四部:實現模型

連接: https://pan.baidu.com/s/1jHYFKWI 密碼: wimc

 

第8章 UML圖

待整理

 

類圖中經過加號(+)來表示 public

經過減號(-)表示 private

經過井號(#)表示 protected

 

第9章 做業

9.1 做業要求

角色:學校、學員、課程、講師

要求:

1. 建立北京、上海 2 所學校

2. 建立linux , python , go 3個課程 , linux\py 在北京開, go 在上海開

3. 課程包含,週期,價格,經過學校建立課程

4. 經過學校建立班級, 班級關聯課程、講師

5. 建立學員時,選擇學校,關聯班級

5. 建立講師角色時要關聯學校,

6. 提供兩個角色接口

6.1 學員視圖, 能夠註冊, 交學費, 選擇班級,

6.2 講師視圖, 講師可管理本身的班級, 上課時選擇班級, 查看班級學員列表 , 修改所管理的學員的成績

6.3 管理視圖,建立講師, 建立班級,建立課程

7. 上面的操做產生的數據都經過pickle序列化保存到文件裏

 

9.2 思路:

9.2.1 選課系統用例

一:選課系統用例

#用例名稱

選課

#場景

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表白了,當天下午就去領告終婚證

 

#用例價值

 

幫老男孩解決課程管理問題

#約束

 

暫無

 
View Code

9.2.2 找名詞

二:找名詞:

管理員,學校,課程,班級,學員講師,上課記錄,做業,分數,學員詳細信息,成績列表,結婚證

篩選:去掉與行業或者說領域無關的名詞

管理員,學校,課程,班級,學員,講師,上課記錄,做業,分數,學員詳細信息,成績列表

 

9.2.3 加屬性

三: 加屬性:

名字                屬性      備註

管理員             NA        具有全部權限,對於選課系統來講,並不須要管理員的屬性,所以在領域模型中,管理員是沒有屬性的

學校               學校名,地址,課程列表,班級列表

課程               課程名,週期,價錢,大綱

班級               班級名,所屬學校,課程

學員               學員名,

講師               講師名

上課記錄          班級,課程節次,日期

9.2.4 連關係

四:連關係

 

 

9.2.5 實現吧親

五:實現吧親

相關文章
相關標籤/搜索