1 / 102

物件導向程式設計

物件導向程式設計. 鄭士康 國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所. 1. 綱要. 物件導向思維 CRC 卡會議 UML 類別圖 SRP: 單一責任原理 物件導向二十一點模擬程式 0.0.0 版 物件導向二十一點模擬程式 0.0.1 版 物件導向二十一點模擬程式 0.0.2 版. 綱要. 物件導向二十一點模擬程式 0.0.3 版 物件導向二十一點模擬程式 0.0.4 版. 綱要. 物件導向思維 CRC 卡會議 UML 類別圖 SRP: 單一責任原理 物件導向二十一點模擬程式 0.0.0 版

ellis
Download Presentation

物件導向程式設計

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 物件導向程式設計 鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所 1

  2. 綱要 物件導向思維 CRC卡會議 UML類別圖 SRP:單一責任原理 物件導向二十一點模擬程式0.0.0版 物件導向二十一點模擬程式0.0.1版 物件導向二十一點模擬程式0.0.2版

  3. 綱要 物件導向二十一點模擬程式0.0.3版 物件導向二十一點模擬程式0.0.4版

  4. 綱要 物件導向思維 CRC卡會議 UML類別圖 SRP:單一責任原理 物件導向二十一點模擬程式0.0.0版 物件導向二十一點模擬程式0.0.1版 物件導向二十一點模擬程式0.0.2版

  5. 物件導向程式設計 利用逐步細分法的函式導向程式設計曾經風行一時 物件和類別的觀念及程式語言普及之後,有必要採用不同的方式思考,以便更直截了當的寫出物件和類別的程式,並且充份發揮物件導向封裝、繼承、多型的特點

  6. 程式規劃 版本規劃 (80-20定律、要事第一、工程方法) 測試規劃 良好程式設計習慣 使用研發日誌,與夥伴合作,漸增式與回合式發展程式,維持可持續的發展步調,維護原始碼、註解、重要程式文件 測試驅動方法開發

  7. 物件導向程式設計之引入 版本規劃及測試規劃完成,要開始以漸增及回合方式,進行各個版本的進一步設計之時

  8. 物件導向思維 什麼是程式要完成的功能? 需要那些物件/類別才能完成程式功能? 物件/類別需要那些行為才能合作完成程式功能? 例: Mission Impossible, RPG 8

  9. 綱要 • 物件導向思維 • CRC卡會議 • UML類別圖 • SRP:單一責任原理 • 物件導向二十一點模擬程式0.0.0版 • 物件導向二十一點模擬程式0.0.1版 • 物件導向二十一點模擬程式0.0.2版

  10. CRC卡 • Class (類別)、Responsibilities (負責功能)、Collaborators (合作類別) • 由Kent Beck與Ward Cunningham發明,用以教導其同儕程式設計師物件導向的觀念 • 利用CRC卡會議可使初學者更容易了解物件與類別的意義

  11. 參考書籍 N. M. Wilkinson, Using CRC Cards: An Informal Approach to Object-Oriented Development, New York: SIGS Books, 1995. 11

  12. 練習 實際演練二十一點遊戲模擬原型的CRC卡會議 12

  13. 定義問題 產生類別 演練場景 整理卡片 CRC卡會議 13

  14. 產生類別 • 腦力激盪 • 過濾類別 • 初步建立繼承關係 • 描述類別 • 寫出類別名稱及定義 • 初步寫出負責功能(Responsibilities) • 初步寫出資料成員(Attributes) 14

  15. 腦力激盪 描述類別 產生類別 過濾物件/類別 建立繼承關係

  16. 物件/類別之識別 • 流程敘述中的名詞、代名詞、名詞片語可能需要轉換為物件/類別(CRC卡) • 流程敘述中的動詞、動詞片語可能需要轉換為物件/類別的方法(CRC卡) • 需要相同方法的物件可以歸納出一個類別(CRC卡) • 類別之間的關係可以畫UML類別圖表示 • 主程式及類別的方法可以用虛擬碼進一步描述 16

  17. 資料成員與 類別之區分 • 資料成員通常表示類別的狀態變數,而非單獨之類別或型別 • 撲克牌之花色 • 借書資料之到期日期 • 但資料成員如可操作,且可用藍圖描述,可能可以構成一個類別,而資料成員變成一個物件 • 日期 17

  18. 必也正名乎 • 物件、類別、狀態、功能之名稱力求精準 • 使用一致命名規範 • 物件、類別、狀態:名詞片語 • 功能:動詞片語 • 條件判斷:形容詞片語、判斷句 • 多字連用,除第一字另外考慮外,各字開頭字母大寫 • 物件、狀態:第一個字小寫起頭 humanPlayer • 類別、功能:第一個字大寫起頭 HumanPlayer 18

  19. 演練場景 • 列出場景清單 • 逐一演練場景 • 寫下類別負責功能、合作類別、資料成員 • 先演練簡單場景 • 複雜場景可能包括其他簡單場景 • 例外場景押後演練 19

  20. 整理卡片 • 刪除沒用到的類別、方法成員、資料成員 • 發現繼承結構 • 繪出類別圖(Class Diagram) 20

  21. CRC卡正面 類別名稱 父類別 負責功能 合作類別 21

  22. CRC卡背面 描述 成員變數 22

  23. 類別Card之CRC卡正面 類別名稱:Card 合作類別 負責功能 知道花色 知道點數 Deck Hand 23

  24. 類別Card之CRC卡背面 描述:代表用到的52張撲克牌 成員變數 花色(suit) 點數(rank) 24

  25. 類別Deck之CRC卡正面 類別名稱:Deck 合作類別 負責功能 知道剩下的牌 發一張牌 Game Card 25

  26. 類別Deck之CRC卡背面 描述:代表牌疊 成員變數 牌(cards) 26

  27. 類別 HumanPlayer之CRC卡正面 類別名稱:HumanPlayer 合作類別 負責功能 存入一張牌 知道玩家狀態 決定是否再要一張牌 傳回手牌總點數 Game Hand 27

  28. 類別HumanPlayer之CRC卡背面 描述:代表人類玩家 成員變數 手牌(hand) 玩家狀態(status) 28

  29. 類別Hand之 CRC卡正面 類別名稱:Hand 合作類別 負責功能 知道手中的牌 知道手牌總點數 Card HumanPlayer ComputerPlayer 29

  30. 類別Hand之 CRC卡背面 描述:代表人類玩家或電腦玩家手中的牌 . 成員變數 牌(cards) 30

  31. 類別ComputerPlayer之 CRC卡正面 類別名稱:ComputerPlayer 合作類別 負責功能 存入一張牌 知道玩家狀態 決定是否再要一張牌 傳回手牌總點數 Game Hand 31

  32. 類別 CRC卡背面 描述:代表電腦玩家. 成員變數 手牌(hand) 玩家狀態(status) 32

  33. 類別Game之CRC卡正面 類別名稱:Game 合作類別 負責功能 控制遊戲流程 比較電腦與人類玩家點數 大小 Deck HumanPlayer ComputerPlayer 33

  34. 類別Game之CRC卡背面 描述:代表整個二十一點遊戲. 成員變數 牌疊(deck) 人類玩家(humanPlayer) 電腦玩家(computerPlayer) 34

  35. HumanPlayer Game Deck Hand ComputerPlayer Card 類別關係圖

  36. 綱要 • 物件導向思維 • CRC卡會議 • UML類別圖 • SRP:單一責任原理 • 物件導向二十一點模擬程式0.0.0版 • 物件導向二十一點模擬程式0.0.1版 • 物件導向二十一點模擬程式0.0.2版

  37. UML • Unified Modeling Language • 由Booch、Rumbaugh、Jacobson三人所創的物件導向軟體圖形表示標準 • 做為軟體系統的設計文件,使系統維護者容易了解修改程式,另一方面則是軟體工程的工具 • 背後有一套軟體工程架構,但只適合大規模軟體開發 • 小範圍程式設計,以較簡易具彈性的Agile Software Development比較實際好用 • 初學者只須了解幾種簡單的圖形,用來了解或記錄程式架構

  38. UML繪製工具 • Rational Rose • 可由UML圖形直接產生程式框架,並能保持程式與UML圖形的一致性,但價格相當昂貴 • JUDE-Community • 免費UML圖形繪製軟體 • 自2009年年底,JUDE-Community軟體已不再提供下載,改提供較進階的astah-Community http://jude.change-vision.com/jude-web/index.html 38

  39. 類別UML符號 39

  40. UML 類別圖( Class Diagram ) 40

  41. 不同類別間傳送資料 • 類別的成員變數通常設為private,不能任意擷取 • 有人因此乾脆將所有成員變數宣告為public,方便取得,卻失去了使用類別封裝的原意 • 這種狀況,通常可以畫出類別圖,觀察可能的資料傳送路徑,再於相關類別使用適當的暫存變數或成員變數和成員函式,進行接力傳送資料

  42. 練習 • 以大富翁遊戲模擬為目標,規畫版本,進行CRC卡會議,產生CRC卡,繪出UML類別圖 42

  43. astah

  44. 用astah Community畫類別圖 • File>New • Diagram>Class Diagram • 工具列>點選Class符號>在工作區按左鍵 • 左下角>Base標籤>輸入類別名稱 • 左下角>Attribute標籤>Add按鈕>輸入資料狀態名稱、型別、可見度 • 左下角>Operation標籤>Add按鈕>輸入功能函式名稱、傳回值型別、可見度

  45. 用astah Community畫類別圖 • 工具列>Association符號旁箭頭>選擇所需Association符號 • 起點類別圖形按左鍵,轉折點按左鍵 • 終點類別圖形連按左鍵兩次 • 按起點、終點類別圖形調整位置 • 或按Shift鍵點選要對齊的圖形>Alignment>選擇調整方式 • Edit>Copy to Clipboard>BMP, PNG • File>Save As …

  46. 綱要 • 物件導向思維 • CRC卡會議 • UML類別圖 • SRP:單一責任原理 • 物件導向二十一點模擬程式0.0.0版 • 物件導向二十一點模擬程式0.0.1版 • 物件導向二十一點模擬程式0.0.2版

  47. 單一責任原理(SRP: Single-Responsibility Principle) • A class should have only one reason to change • 若某類別擔負多個責任,某一責任相關的改變會妨礙該類別其他責任的達成 • 何以不讓Game類別進行某一玩家是否為21點的計算? *Robert C. Martin, Agile Software Development: Principles, Patterns, and Practices, Pearson Education, 2003 47

  48. 一個違反SRP的例子 *Robert C. Martin, Agile Software Development: Principles, Patterns, and Practices, Pearson Education, 2003 48

  49. 符合SRP的設計 *Robert C. Martin, Agile Software Development: Principles, Patterns, and Practices, Pearson Education, 2003 49

  50. 綱要 • 物件導向思維 • CRC卡會議 • UML類別圖 • SRP:單一責任原理 • 物件導向二十一點模擬程式0.0.0版 • 物件導向二十一點模擬程式0.0.1版 • 物件導向二十一點模擬程式0.0.2版

More Related