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

閱讀時間約 4 分鐘

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

一、何謂設計模型

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

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

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

二、設計模型總覽

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

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

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

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

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

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

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

三、類別模型設計

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

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

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

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

(1) 領域類別映射

  • 類別篩選

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

  • 名稱映射

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

  • 屬性映射

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

  • 提煉方法

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

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

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

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

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

  • 設計原則

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

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

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

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

  • 設計模式

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

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

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

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

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

(3) 拆分輔助類別

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

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

閱讀可以用最低的成本來獲得別人經驗,培養閱讀能力,一生受益。但要記住,別只讓自己的大腦永遠處於「輸入狀態」,要適當地「輸出」自己的想法。透過閱讀輸入,再利用寫作輸出,就像「費曼學習法」說的一樣,教授到別人能夠了解,自己才算是領悟了這門學問。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
什麼是領域模型?領域模型是完成從需求分析到物件導向設計的一座橋樑。需求分析和物件導向並無直接關係,需求分析階段不區分是物件導向還是程序導向,要從「領域建模」才真正開始物件導向的工作。後續我們會使用一個「影像處理軟體」的使用案例來說明如何建立領域模型。
使用案例 (Use Case)是用來描述需求的流程,就是 5W1H8C 中的 How。有很多方法可以分析客戶需求,例如問卷調查、自由發想、資料分析、資料探勘、競爭對手分析等,可以參考「需求分析理論」的相關書籍;但最有效以及最直接的方法還是和客戶交流。只要掌握正確的方法,就可以完成良好的需求分析。
需求分為「功能屬性」和「品質屬性」, 5W + 1H 屬於功能屬性,8C 屬於品質屬性。能否正確地實現一個需求,既要看功能屬性是否正確,也要看品質屬性是否正確,兩者缺一不可。例如:設計了一個功能強大的機器視覺系統,但動不動就當機,你覺得客戶會使用這樣的系統嗎?
對軟體專案來說,需求就是專案最一開始的輸入。 需求:對客戶來說有價值的事情。 功能:系統為了滿足客戶價值而提供的能力。 區別是需求還是功能的方式很簡單,只要判斷是否對客戶有價值。 舉例來說:影像處理軟體:「顯示影像」是需求,「讀取檔案」、「取得影像長寬」、「取得色彩位元」等是功能。
專案管理的流程主要指導專案經理如何管理專案,但對於指導開發人員如何開發專案,並無多大用處。就像「專案管理」有一套完整的流程一樣,「專案開發」也有一套完整的程序。對於物件導向來說,整個開發流程實際上非常清晰,底下我們將「瀑布模型」、「敏捷開發」等稱為『管理流程』;物件導向流程開發稱為『技術流程』。
封裝、繼承、多型是物件導向的三大核心特徵,判斷一種程式語言是否為物件導向的程式語言,就看其是否支援這三大核心特徵。 軟體類別是對現實類別的模擬,但不是簡單的等同。除了實作現實類別相對應的功能,還會創造出許多現實中不存在的類別。 這個創造過程正是各種設計方法、設計模式、設計原則大顯身手的地方。
什麼是領域模型?領域模型是完成從需求分析到物件導向設計的一座橋樑。需求分析和物件導向並無直接關係,需求分析階段不區分是物件導向還是程序導向,要從「領域建模」才真正開始物件導向的工作。後續我們會使用一個「影像處理軟體」的使用案例來說明如何建立領域模型。
使用案例 (Use Case)是用來描述需求的流程,就是 5W1H8C 中的 How。有很多方法可以分析客戶需求,例如問卷調查、自由發想、資料分析、資料探勘、競爭對手分析等,可以參考「需求分析理論」的相關書籍;但最有效以及最直接的方法還是和客戶交流。只要掌握正確的方法,就可以完成良好的需求分析。
需求分為「功能屬性」和「品質屬性」, 5W + 1H 屬於功能屬性,8C 屬於品質屬性。能否正確地實現一個需求,既要看功能屬性是否正確,也要看品質屬性是否正確,兩者缺一不可。例如:設計了一個功能強大的機器視覺系統,但動不動就當機,你覺得客戶會使用這樣的系統嗎?
對軟體專案來說,需求就是專案最一開始的輸入。 需求:對客戶來說有價值的事情。 功能:系統為了滿足客戶價值而提供的能力。 區別是需求還是功能的方式很簡單,只要判斷是否對客戶有價值。 舉例來說:影像處理軟體:「顯示影像」是需求,「讀取檔案」、「取得影像長寬」、「取得色彩位元」等是功能。
專案管理的流程主要指導專案經理如何管理專案,但對於指導開發人員如何開發專案,並無多大用處。就像「專案管理」有一套完整的流程一樣,「專案開發」也有一套完整的程序。對於物件導向來說,整個開發流程實際上非常清晰,底下我們將「瀑布模型」、「敏捷開發」等稱為『管理流程』;物件導向流程開發稱為『技術流程』。
封裝、繼承、多型是物件導向的三大核心特徵,判斷一種程式語言是否為物件導向的程式語言,就看其是否支援這三大核心特徵。 軟體類別是對現實類別的模擬,但不是簡單的等同。除了實作現實類別相對應的功能,還會創造出許多現實中不存在的類別。 這個創造過程正是各種設計方法、設計模式、設計原則大顯身手的地方。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
我們講城的第一發就來請出日本目前保存的最完整、規模也最大的「姬路城」吧!希望當我們一起走過姬路城之後,大家以後到其他的城參訪時,也能從更多不同的角度來觀察日本城中的每一個角落,發現專屬於自己的、不同的樂趣喔。
Thumbnail
生成式AI工具越來越多,有很多跟生成式AI繪圖工具相關的產品不斷冒出,那麼再往進階一些方向去,大家會想到的應該就是海報跟商業攝影之類的,也確實有一些網站開始打著即刻靠著生成式AI產出專業等級的商業攝影,今天我們這邊就跟大家一起實測一下,這其中最有名氣的 Flair.ai 是否能夠替你產出專業的海報。
Thumbnail
《世紀帝國》系列   我們這次要討論的系列是著名的即時戰略遊戲《世紀帝國》系列。雖然它遠遠不是最早的即時戰略遊戲,卻是台灣以及世界上許許多多電腦遊戲玩家的童年回憶。也是人們想起即時戰略遊戲時,一定不會錯過的代表性遊戲。就讓我們一起聊聊這款在許多電腦玩家心目中無可取代的有趣作品吧!
Thumbnail
透過有計畫的寫作練習,從看到題目一片空白,到能在幾分鐘內理解題意、建立主要寫作架構,並在預估的時間內完成一篇「不離題」、「段落分明」、「閱讀順暢」,讓閱卷者挑不出明顯大錯的文章,是我們的最終目標。
Thumbnail
如果我們說金閣寺象徵著室町時代中,經濟最繁榮、舶來品滿天飛的時期;那麼銀閣寺便象徵著室町時代中,經濟發展最谷底、卻也是現在我們所認知的「日本文化」開始冒出頭的時期。如此與金閣差異甚大的銀閣,究竟是在甚麼樣的時代背景下,又是被誰給創造出來的呢?我們就一起來看看吧。
Thumbnail
終極戰士系列電影從1987年發展至今,前後推出了四部作品,而在先前才剛宣部第五部作品已經殺青,且在北美將於hulu上發行,根據最新的外媒報導,第五部作品將定名為《Prey》,而北美以外的地區,目前也沒有上映院線的計畫,取而代之的則是在Disney+或Star上來做播映。
Thumbnail
延續上一篇我們聊到了源義經在年少時期到源平合戰之間的故事,這次,我們就來聊聊他在回到京都之後,跟他的老大哥源董吵架,且最終吵到跑路的故事。
Thumbnail
前面幾集,我們大致上講完了兩間保全公司的激烈戰爭故事,戰爭結束之後,這一篇我們就當作後記,聊聊與源平合戰結束後所留下的謎團與傳說,以及一些相關的景點。希望之後大家實際造訪並看到相關事物的時候,可以回想起這幾集的精采故事,讓旅程回憶更加豐富喔。  
Thumbnail
源賴朝透過「瓶子倒了」群組號召來各地源氏保全公司的員工,開始與平氏餘黨們展開了你追我跑的一連串戰役。其中,最傳奇的員工不外乎就是源賴朝(源經理)的小老弟「源義經」了。這次我們就來看看他在戰場上到底是多麼不按牌理出牌,又是如何透過奇襲贏得勝利的吧。
Thumbnail
大部分的人,應該都覺得時間在中國那邊,只要中國持續強大,台灣被磁吸進去也是莫可奈何的,不是嗎?當然不是,時間之神從來就不會特別喜歡誰,他只站在有準備的人那一邊。把話說白一點,認為時間在中國那邊的人,大致上都是認同了「台灣怎樣都無力回天」這種想法。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
我們講城的第一發就來請出日本目前保存的最完整、規模也最大的「姬路城」吧!希望當我們一起走過姬路城之後,大家以後到其他的城參訪時,也能從更多不同的角度來觀察日本城中的每一個角落,發現專屬於自己的、不同的樂趣喔。
Thumbnail
生成式AI工具越來越多,有很多跟生成式AI繪圖工具相關的產品不斷冒出,那麼再往進階一些方向去,大家會想到的應該就是海報跟商業攝影之類的,也確實有一些網站開始打著即刻靠著生成式AI產出專業等級的商業攝影,今天我們這邊就跟大家一起實測一下,這其中最有名氣的 Flair.ai 是否能夠替你產出專業的海報。
Thumbnail
《世紀帝國》系列   我們這次要討論的系列是著名的即時戰略遊戲《世紀帝國》系列。雖然它遠遠不是最早的即時戰略遊戲,卻是台灣以及世界上許許多多電腦遊戲玩家的童年回憶。也是人們想起即時戰略遊戲時,一定不會錯過的代表性遊戲。就讓我們一起聊聊這款在許多電腦玩家心目中無可取代的有趣作品吧!
Thumbnail
透過有計畫的寫作練習,從看到題目一片空白,到能在幾分鐘內理解題意、建立主要寫作架構,並在預估的時間內完成一篇「不離題」、「段落分明」、「閱讀順暢」,讓閱卷者挑不出明顯大錯的文章,是我們的最終目標。
Thumbnail
如果我們說金閣寺象徵著室町時代中,經濟最繁榮、舶來品滿天飛的時期;那麼銀閣寺便象徵著室町時代中,經濟發展最谷底、卻也是現在我們所認知的「日本文化」開始冒出頭的時期。如此與金閣差異甚大的銀閣,究竟是在甚麼樣的時代背景下,又是被誰給創造出來的呢?我們就一起來看看吧。
Thumbnail
終極戰士系列電影從1987年發展至今,前後推出了四部作品,而在先前才剛宣部第五部作品已經殺青,且在北美將於hulu上發行,根據最新的外媒報導,第五部作品將定名為《Prey》,而北美以外的地區,目前也沒有上映院線的計畫,取而代之的則是在Disney+或Star上來做播映。
Thumbnail
延續上一篇我們聊到了源義經在年少時期到源平合戰之間的故事,這次,我們就來聊聊他在回到京都之後,跟他的老大哥源董吵架,且最終吵到跑路的故事。
Thumbnail
前面幾集,我們大致上講完了兩間保全公司的激烈戰爭故事,戰爭結束之後,這一篇我們就當作後記,聊聊與源平合戰結束後所留下的謎團與傳說,以及一些相關的景點。希望之後大家實際造訪並看到相關事物的時候,可以回想起這幾集的精采故事,讓旅程回憶更加豐富喔。  
Thumbnail
源賴朝透過「瓶子倒了」群組號召來各地源氏保全公司的員工,開始與平氏餘黨們展開了你追我跑的一連串戰役。其中,最傳奇的員工不外乎就是源賴朝(源經理)的小老弟「源義經」了。這次我們就來看看他在戰場上到底是多麼不按牌理出牌,又是如何透過奇襲贏得勝利的吧。
Thumbnail
大部分的人,應該都覺得時間在中國那邊,只要中國持續強大,台灣被磁吸進去也是莫可奈何的,不是嗎?當然不是,時間之神從來就不會特別喜歡誰,他只站在有準備的人那一邊。把話說白一點,認為時間在中國那邊的人,大致上都是認同了「台灣怎樣都無力回天」這種想法。