###### tags: `SA` # chapter 2 物件導向系統分析設計 | 章節 | 大綱 | | ---- | ---- | |2-1| 物件與物件導向概念 | |2-2| UML與物件基本原理 | |2-3| 物件導向分析設計工具 | |2-4| 物件導向分析設計程序 | ## 物件與物件導向分析設計程序 > **程序**  ``` 物件導向發展程序就是使用物件導向方法論、統一程序和物件導向方法及工具的一連串發展軟體步驟。 ``` - **Step1 訪談並確認利害關係人的目標或利益** 需求訪談要整理需求成為利害關係人目標表(Stakeholder-goal list)。通過編碼、需求、來源、備註可成為事後核定內容。 - 定義角色[桃園案-角色定義](https://www.figma.com/file/soZvKdpAgFMRMRvogbGRAo/%E6%A1%83%E5%9C%92%E5%B8%82%E6%99%BA%E6%85%A7%E8%B7%AF%E7%87%88%E7%AE%A1%E7%90%86%E7%B3%BB%E7%B5%B1?node-id=0%3A1) - 客戶需求[桃園案-客戶需求](https://docs.google.com/spreadsheets/d/1wWDNGz6WA7ajKQACpExEsA5zKZz3T39I39jP6t9XGJk/edit?usp=sharing)  - **Step2 建立事件表並定義使用案例** - 使用案例[桃園案-SOP/情境](https://docs.google.com/spreadsheets/d/1wWDNGz6WA7ajKQACpExEsA5zKZz3T39I39jP6t9XGJk/edit?usp=sharing)  - **Step3 描述使用案例並繪製使用案例圖** - 描述時將系統看成一個黑箱,只描述參與者要求系統進行工作,系統如何處理工作並回應訊息給參與者即可,也就是[角色要在系統中做的事。](https://ithelp.ithome.com.tw/articles/10103033) - 此步驟的類別稱之概念類別,找出系統所需要的類別,即是進入定義領域模型的工作。 - 通常使用案例與事件找出系統涉及哪些類別,通常利害關係人與行為者都可能是主要類別,此外餐廳、庫存、運送等工作項目也有可能。  - **Step4 尋找概念類別並描繪初步類別圖** 可通過使用腦力激盪、名詞片語法,畫出概念性類別圖。  - **Step5 循序圖**  - **Step6 擬定合約** 將事件已前置條件和後置條件的方式詳細的描述 ## 軟體SOP(Standard Operation Process) > **工作步驟** - **Step1 需求** 訪談用戶需求,了解用戶對於軟體目標和軟體幫助他解決什麼事情。 範例:[需求修改紀錄-客戶許願清單](https://docs.google.com/spreadsheets/d/1G8sRPQo5g9crPjR1zSnWRwgF9BpBe729z5z08Fv2Ezw/edit?usp=sharing) - **Step2 分析** 通過訪談內容與合約,描述系統內的規格內容與限制。 - **Step3 設計** 產出內容包括 - 角色 - 架構:通過 Function Map --- ###### tags: `SA` # chapter2 何謂物件導向系統分析設計 old | 章節 | 大綱 | | ---- | ---- | |2-1| 物件與物件導向概念 | |2-2| UML與物件基本原理 | |2-3| 物件導向分析設計工具 | |2-4| 物件導向分析設計程序 | # 2-1 物件與物件導向概念 >物件(thing)可以指人事物或文件.ex:房子、桌子、椅子、杯子、客戶、訂單、產品規格、產品 - 實體的東西 - 營業交易 - 產品或服務 - 地點或角色 - 交易項目 - 產品規格 - 組織單位 - 容器或容器元素 >物件與程式之間的關聯:系統由物件組成,物件又由程式組成 - 系統到系統是由一個一個東西所組成 - 軟體系統他模擬現實環境所構建構而成的模型,故他是由一個一個物件類別組成 - 程式物件寫成程式碼構成了軟體系統 例如:真實世界物件包含貓、人、狗、車,物件方式轉換成貓、人、狗、車類別,在講貓、人、狗、車的程式要怎麼寫。  ``` 一般事先宣告類別在形成物件 類別定義: 指具有相同特性和相同行為的一組物件的集合 ``` 物件屬性:學生 範例1 學生>>物件物件內容>>>物件屬性:學生姓名、學生學號、學生班級 三位學生>>>類別:學生 的概念 一個類別可以產生非常多物件 物件或是名稱:學生妹 屬性(attribue):姓名、類別、科系、學號、年級 物件行為或是方法(method):會做的事情. 打招呼、自我介紹、問資料、邀約 物件:小弟弟 屬性:藍衣服、黑頭髮 行為:跑步、游泳 從以上可以整理出,類別是一個集合體的概念故稱之為物件類別(Object Class),個別的物件稱之為物件實體(Object Instance)  範例2:汽車 汽車類別 tayota、susuki 物件屬性 故在物件導向概念中: > 系統由模組行程>模組由物件組成>物件由程式組成 ``` 系統是一群物件的組成 - 設計系統時要把系統看成是一群物件的組成 - 先從需要處理的事情和內容中找出物件,然後由物件交互作用和交換訊息即可。 ``` 目標若為已物件導向概念設計系統 1. 找出系統由什麼模組組成() 2. 模組包含哪些物件(跟客戶訂單相關的物件、跟客戶訂單相關的類別) 3. 物件 例如1:處理客戶訂單的系統可能包括客戶訂單的物件(簡單)或類別(詳盡) 類別:產品、訂單、客戶、產品類別  ``` 先決定系統所需要的物件 - 尋找系統所需的物件比設計系統的功能步驟重要 - 先決定系統所需要的物件,再決定系統所要處理的事情,由哪幾個物件合作完成。物件之間如何互動。 ``` 例如2: 小吃店、飯店、五星飯店系統,物件互動會不一樣 點餐系統類別?屬性有哪些?如何互動 ``` 先單一物件功能完整且獨立 - 現實環境的東西大都有各自獨立的屬性和功能 - 決定物件時,應盡可能讓單一物件功能完整且獨立,與其他物件關聯程度要降到最低 - 軟體物件擁有自己的資料屬性,要完成某件事時,可以獨立完成 ``` 補充: **內聚力cohesion** 純水 **耦合力** 水變成飲料 完成一件複雜的工作若是要多個物件合作,物件間的合作不需要牽涉操作其他物件的內部運作,只需透過訊息的傳達即刻。不干涉另一個物件內部運作,保持每個物件的獨立性。 會說 有很高的內聚力和很低的耦合力,好的系統要有此特徵。  ``` 善用物件封裝、繼承與多行的特性 - 封裝:物件內的資料不允許被其他物件直接存取,保持了物件的獨立性 - 繼承:可以將定義好的屬性和方法為他類別使用,增加在用性與簡化設計 - 多類:不同類別中可以存在相同方法名稱,增加物件導向彈性設計 ``` 範例:    # 2-2 UML 與物件基本原理 ## 2-2-1 UML UML定義: - 為一個描述物件導向方西設計的圖形化工作 - 被定義14種圖示(diagram): 靜態>圖示結構式圖示 動態>行為式圖示 靜態範例(類別圖)  動態範例(循序圖)  UML符號: - 使用一條線連結有訊息傳遞的類別,稱為關聯(association)。 - 多個物件產生關聯,必須用數字在連結兩端將其標示稱之多重性(multiplicity)。 ``` 在連結臉端各標示1,為一對一的關係 在一方需要多個物件,為一對多的關係.可標示為 1..* 或 0..* ```  |名稱|特性|定義| |-----|----|--------| |使用案例圖 Use Case Diagram |靜態圖形| 表現系統所有使用案例與環境間的關係 | | 活動圖 Activity Diagram|動態圖形|用法1:描述使用案例內的運作流程| | | |用法2:描述使用案例內的程式流程|| |循序圖 Sequence Diagram|動態圖形 |描述使用案例中如何透過物件間訊息的傳遞有次序的完成系統事件| |溝通圖Communication Diagram|動態圖形|比循序圖更能表現物件間互動溝通關係| |類別圖Class Diagram|靜態圖形|將類別和類別間的關係以關聯符號來表現 | sample 1.使用案例圖 [最陽春選課案例](https://ithelp.ithome.com.tw/articles/10103033) [延伸選課案例](https://www.mysql.tw/2021/05/uml-usecase-activity-class.html) 2.活動圖 [維基百科說明](https://zh.wikipedia.org/zh-tw/活动图) 3.循序圖 [菜鳥工程師教你怎麼畫](https://dotblogs.com.tw/SoftwareEnergineer_JeffTseng/2020/06/29/113413) 4.溝通圖/合作圖 [學習筆記-合作圖型](https://terryjryeh.blogspot.com/2019/03/uml-collaboration-diagrams-9.html) 5.類別圖 [軟體路上不孤單-陽春案例教學](https://ithelp.ithome.com.tw/articles/10102093) ## 2-2-2 基本原理 1. 封裝 概念指每一個物件就像一塊IC板,單一物件功能完整且獨立,與其他物件關聯程度進量降到最低。物件之間若要通訊則就像由電路角等其他媒介通電。 是一群相關的屬性和操作所組成的型態。  > 封裝概念延伸:資訊隱藏 定義:將困難的設計或是可能改變設計要傳遞的主資訊部分做隱藏。比如手錶由齒輪構成。 2. 繼承 讓已經寫過程式碼,別再重複。 是指類別所定義的屬性和方法可以被其他的類別所使用。 所以通常只需宣告父類別,使用繼承的方式  >概念延伸: - 特殊化:先有父類別、再有子類別 使用繼承的方式來繼承原有的類別,僅加上不同的屬性和方法的設計方式。 - 一般化:先有子類別、將子類別相似地方歸納成父類別 在一群類別中將共通的部分抽離出來形成另一個類別的設計方式。 3. 多型 指不同類別中,可以存在相同的方法名稱,但其操作內容可以不同。每個子類別有其獨特性。 覆載(Overrride)是多型的另一個性質:子類別繼承了父類別的方法與屬性,在使用子類別時以子類別的屬性與方法為主  # 2-3 物件導向分析設計工具 物件導向與設計的做法: - 使用案例:使用文字來描述參與者(actor)與系統互動的過程。描述人做哪些事稱之   *參與者是指與系統互動的人或個體 *互動過程是參與者與系統之間一連串動作的敘述稱之情節(Scenario),情節包含成功與失敗 *可以簡單分成簡略、中等、完整三種層次 - 初步類別圖(Preliminary Class Diagram) 別稱叫做領域模型(domain model),是將系統所需要的類別以徒刑的方式表示出來  - 系統循序圖 將使用案例所敘述的步驟轉為一個個操作步驟稱之 將使用者文字敘述的需求轉變為系統操作的第一步驟 將使用案例表現成外部參與者與系統間操作次序之訊息傳遞的圖形  > 合約: > - 操作(Operation):操作名稱和參數 > - 交互參照(Cross References):使案例名稱,操作所發生的地方作為前後參考 > - 前置條件:操作成立的條件,也就是操作執行前的系統狀態 > - 後置條件:操作執行後的系統狀態 - 互動圖(interaction diagram) 包括溝通圖與循序圖,用不同方式表達同內容: (1)溝通圖:用類似網路方式描述物件互動,物件可被擺設在圖中任何位置 (2)循序圖:以類似柵欄的方式描述物件的互動,每加一個新物件就加入到圖的右邊  - 類別圖:用來描述整體系統的個別內容和類別之間的關係圖,表達出整體系統的靜態結構 - 設計類別圖:清楚說明屬性與操作,稱之設計類別圖 (1)必須在類別中增加類別操作 (2)類別間必須增加導覽箭頭 (3)在墓地物件的導覽箭頭下加上角色名稱relename (4)在目的物件表現出多重性 (5)去除關聯名稱  詞彙補充 概念類別conceptual class
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up