實戰系列『影像處理軟體設計』- [8] 物件導向方法:設計模型(上)

更新於 發佈於 閱讀時間約 4 分鐘

經過領域模型的分析後,已經可以看出「物件導向」的雛型了,但領域類別無法直接拿來做程式設計,因為它只是從「使用案例模型」中萃取出來、映射業務領域的概念,而非真正意義上的軟體類別。

一、何謂設計模型

「設計模型」就是用來連結「領域類別」到「軟體類別」的轉換,這就是「物件導向設計階段」的主要任務。

設計階段是整個物件導向分析和設計的關鍵,它將輸出「設計模型」,並綜合各種方法與技巧。

設計並沒有一個量化的標準,這代表沒有標準答案,物件導向的設計更像是一門藝術,不過它也是有一定的規律和方法可尋。

二、設計模型總覽

設計模型主要包含:靜態模型和動態模型。

靜態模型又稱為「類別模型」,主要關注系統的「靜態」結構,描述系統包含的類別、類別的名稱、職責、屬性、方法,以及類別與類別之間的關係。

動態模型關注系統的「動態」行為,描述類別本身的一些動作,或者狀態變化,以及類別之間如何配合,才能完成最終的系統功能。

只有結合靜態與動態模型,才能真正描述清楚一個系統。

  • 靜態模型:類別的宣告,包括類別、屬性、方法名稱。
  • 動態模型:類別的實作,每個方法內部的實作過程。

因為動態模型是描述具體功能的實作過程,看起來會跟「程序導向」的分析方法類似,但它本質上還是「物件導向」,描述的是各個物件之間如何配合與協作。

動態模型必須在靜態模型的基礎上設計,靜態模型的變化也會影響到動態模型。

三、類別模型設計

「類別模型」是整個物件導向設計模型的核心。

進行物件導向類別設計,第一個要解決的問題是:類別從哪裡來?

領域模型中的「領域類別」,便是設計類別中「軟體類別」最好的來源;透過「領域類別」啟發設計最初的「軟體類別」,具有下列幾個明顯的優點:

  • 軟體類別來自領域類別,領域類別來自使用案例,使用案例來自客戶;一環扣一環,軟體類別的正確性得到保證,不用擔心主觀臆測所帶來的問題。
  • 領域類別到軟體類別的轉換非常簡單,只要掌握基本的物件導向知識就能完成。
  • 不需要參考其它系統,不用擔心沒有參考物時無法設計的問題。

(1) 領域類別映射

  • 類別篩選

「軟體類別」是軟體系統內部的一個概念,而「領域類別」則是業務領域的概念,並不是每個領域類別最終都會體現在軟體系統中。

  • 名稱映射

篩選完成後,將每個領域類別都用一個軟體類別相對應,名稱保持一致即可,別擔心這樣的設計品質不高,目前只是一個開始工作。

  • 屬性映射

透過名稱映射得到軟體類別後,接下來就是設計類別的屬性;由於領域類別已經有屬性,因此照搬過來即可。

  • 提煉方法

軟體類別的屬性設計完成後,接下就是設計軟體類別的方法;類別方法的設計也是從已有的模型推導出來。

鎖定「使用案例模型」來找到類別方法,其重點就是「找動詞」。

我們之後會以「影像處理軟體」為例,說明如何透過「找動詞」這種技巧找到軟體類別的方法。

(2) 應用設計原則和設計模式

物件導向領域經過幾十年的演進,已經發展出很多成熟的指導方針和方法,以利於評價和規範物件導向設計;其中最具代表性的就是「設計原則」和「設計模式」。

  • 設計原則

當提及物件導向領域的設計原則時,其實都是在談論 Robert C Martin 的 「SOLID 原則」。

設計原則也是一個判斷標準,應用設計原則的根本目的是要「保證可擴充性」。

設計模式的本質也是為了提高可擴充性;這也是為什麼透過領域類別映射後,還要繼續應用「設計原則」和「設計模式」的主要原因,根本上都是為了提高設計的可擴充性。

後續將以「影像處理軟體」為例,看看如何應用設計原則。

  • 設計模式

相較於設計原則,設計模式更加普及與流行;一般談到設計方法時,都會先想到設計模式。

通常談論設計模式時,其實都是指 GoF (Gang of Four) 所講的設計模式。

設計原則和設計模式是互補關係:設計原則主要規範「類別的定義」,而設計模式主要規範「類別的行為」。

  • 設計原則:類別的靜態設計原則。
  • 設計模式:類別的動態設計原則。

後續將同樣以「影像處理軟體」為例,說明如何應用設計模式來進行最佳化設計。

(3) 拆分輔助類別

拆分類別的主要目的,是為了使撰寫類別時能夠滿足一些框架或規範的要求;例如常見的 MVC 模式,拆分成 ModelViewControl 三個元素等。

只要將設計出來的類別,按照規範要求,對應拆分即可;這僅是為了滿足框架或者規範的要求,本身並不是設計,而是實作的一個步驟,所以一般都不需要將拆分的輔助類別體現於類別模型中,只在設計程式時拆分即可。

留言
avatar-img
留言分享你的想法!
avatar-img
一個工程師的創業之旅的沙龍
73會員
442內容數
閱讀可以用最低的成本來獲得別人經驗,培養閱讀能力,一生受益。但要記住,別只讓自己的大腦永遠處於「輸入狀態」,要適當地「輸出」自己的想法。透過閱讀輸入,再利用寫作輸出,就像「費曼學習法」說的一樣,教授到別人能夠了解,自己才算是領悟了這門學問。
2023/08/21
設計模型主要包含兩個部分:靜態模型、動態模型。動態模型設計一般都是在類別模型設計完成後開始,此階段需要使用類別模型的類別。動態模型設計不需要應用「設計原則」和「設計模式」,只需對照「使用案例模型」,並根據使用案例的特點,選一個適合的動態模型表述即可;動態建模不需要面面俱到。
Thumbnail
2023/08/21
設計模型主要包含兩個部分:靜態模型、動態模型。動態模型設計一般都是在類別模型設計完成後開始,此階段需要使用類別模型的類別。動態模型設計不需要應用「設計原則」和「設計模式」,只需對照「使用案例模型」,並根據使用案例的特點,選一個適合的動態模型表述即可;動態建模不需要面面俱到。
Thumbnail
2023/07/23
什麼是領域模型?領域模型是完成從需求分析到物件導向設計的一座橋樑。需求分析和物件導向並無直接關係,需求分析階段不區分是物件導向還是程序導向,要從「領域建模」才真正開始物件導向的工作。後續我們會使用一個「影像處理軟體」的使用案例來說明如何建立領域模型。
Thumbnail
2023/07/23
什麼是領域模型?領域模型是完成從需求分析到物件導向設計的一座橋樑。需求分析和物件導向並無直接關係,需求分析階段不區分是物件導向還是程序導向,要從「領域建模」才真正開始物件導向的工作。後續我們會使用一個「影像處理軟體」的使用案例來說明如何建立領域模型。
Thumbnail
2023/07/09
使用案例 (Use Case)是用來描述需求的流程,就是 5W1H8C 中的 How。有很多方法可以分析客戶需求,例如問卷調查、自由發想、資料分析、資料探勘、競爭對手分析等,可以參考「需求分析理論」的相關書籍;但最有效以及最直接的方法還是和客戶交流。只要掌握正確的方法,就可以完成良好的需求分析。
Thumbnail
2023/07/09
使用案例 (Use Case)是用來描述需求的流程,就是 5W1H8C 中的 How。有很多方法可以分析客戶需求,例如問卷調查、自由發想、資料分析、資料探勘、競爭對手分析等,可以參考「需求分析理論」的相關書籍;但最有效以及最直接的方法還是和客戶交流。只要掌握正確的方法,就可以完成良好的需求分析。
Thumbnail
看更多
你可能也想看
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
物件導向的SOLID原則包含:單一職責、開閉、里氏替換、介面隔離、依賴反轉 而常見設計模式有:原型、單例、工廠、抽象工廠、建造者、依賴注入 軟體設計模式的三層式架構,衍生出 MVC、MVP、MVVM 等 文章以淺顯易懂的方式說明上述概念,並搭配生活化的例子,幫助讀者理解這些設計原則和模式
Thumbnail
物件導向的SOLID原則包含:單一職責、開閉、里氏替換、介面隔離、依賴反轉 而常見設計模式有:原型、單例、工廠、抽象工廠、建造者、依賴注入 軟體設計模式的三層式架構,衍生出 MVC、MVP、MVVM 等 文章以淺顯易懂的方式說明上述概念,並搭配生活化的例子,幫助讀者理解這些設計原則和模式
Thumbnail
本文探討物件導向編程及其在面試中常見的必備知識,特別是物件導向與程序導向的基本概念與特性分析。此外,介紹了物件導向的五大原則——SOLID,分別為單一功能原則、開放封閉原則、里氏替換原則、介面隔離原則及依賴反轉原則,重點在於提高程式的維護性與擴展性。這些原則對於現代軟體設計具有重要的指導意義。
Thumbnail
本文探討物件導向編程及其在面試中常見的必備知識,特別是物件導向與程序導向的基本概念與特性分析。此外,介紹了物件導向的五大原則——SOLID,分別為單一功能原則、開放封閉原則、里氏替換原則、介面隔離原則及依賴反轉原則,重點在於提高程式的維護性與擴展性。這些原則對於現代軟體設計具有重要的指導意義。
Thumbnail
一、前言   這篇文章將會簡單介紹物件導向的設計模式,以及學習這項技術需要有哪些先備知識,學習才會比較順利。 二、設計模式   在物件導向中,除了最基本的五大原則以外,其實還有一知名的概念,那就是設計模式(Design Pattern),它能運用到很多層面。 1. 解決一再出現的問題   許多程式設
Thumbnail
一、前言   這篇文章將會簡單介紹物件導向的設計模式,以及學習這項技術需要有哪些先備知識,學習才會比較順利。 二、設計模式   在物件導向中,除了最基本的五大原則以外,其實還有一知名的概念,那就是設計模式(Design Pattern),它能運用到很多層面。 1. 解決一再出現的問題   許多程式設
Thumbnail
這篇文章將會講述類圖的基本介紹,並且詳細敘述從零開始製作完整的類圖流程。
Thumbnail
這篇文章將會講述類圖的基本介紹,並且詳細敘述從零開始製作完整的類圖流程。
Thumbnail
小心設計模式別亂用 📷 介紹 設計模式就是過去的人,根據常見的軟體設計的問題,提出的解決方案。 設計模式總共有23種,根據情境分成三大類型,建立型、結構型、行為型。 建立型模式(Creational Patterns) 簡單工廠(Simple Factory) 工廠方法(Factory) 抽象工廠
Thumbnail
小心設計模式別亂用 📷 介紹 設計模式就是過去的人,根據常見的軟體設計的問題,提出的解決方案。 設計模式總共有23種,根據情境分成三大類型,建立型、結構型、行為型。 建立型模式(Creational Patterns) 簡單工廠(Simple Factory) 工廠方法(Factory) 抽象工廠
Thumbnail
介紹 在過去的歷史裡開發程式都是以呼叫Function的方式來做程式開發,後來才有了物件導向設計的概念,而物件導向程式設計的概念就是,使用【物件】的方式來設計程式。 Q: 什麼是【物件】? A:【物件】會包含以下這四個特性: 抽象(Abstraction) 封裝(Encapsulation)
Thumbnail
介紹 在過去的歷史裡開發程式都是以呼叫Function的方式來做程式開發,後來才有了物件導向設計的概念,而物件導向程式設計的概念就是,使用【物件】的方式來設計程式。 Q: 什麼是【物件】? A:【物件】會包含以下這四個特性: 抽象(Abstraction) 封裝(Encapsulation)
Thumbnail
軟體開發一個很迷人的地方是可以在架空的世界(電腦世界)中重新思考、解構並處理真實世界的問題。但要怎樣真正有效的解決問題就很看各家功力了。 這篇文章我們暫且放下溝通及流程規劃的議題,聚焦來看看純粹領域差異造成的困難以及該怎麼面對。 回顧過往曾經觸碰過的領域真的滿多,茲列舉幾個
Thumbnail
軟體開發一個很迷人的地方是可以在架空的世界(電腦世界)中重新思考、解構並處理真實世界的問題。但要怎樣真正有效的解決問題就很看各家功力了。 這篇文章我們暫且放下溝通及流程規劃的議題,聚焦來看看純粹領域差異造成的困難以及該怎麼面對。 回顧過往曾經觸碰過的領域真的滿多,茲列舉幾個
Thumbnail
物件導向的概念,以python程式為範例。
Thumbnail
物件導向的概念,以python程式為範例。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News