實戰系列『影像處理軟體設計』- [2] 物件導向理論簡介

更新於 2023/07/06閱讀時間約 4 分鐘

一、類別

類別是物件導向領域裡最基礎的概念,也是物件導向分析和設計的基石。
所謂類別,就是站在個人的觀察角度,具有相似點的事物,就是同一類。

二、物件導向類別

物件導向的類別由兩部份組成:屬性和方法。
屬性:類別具有的特性。
方法:類別具有的功能。
實際設計程式時,可以用『屬性是名詞,方法是動詞』來判斷。
舉例來說:
這張數位影像的長度為 100 像素,寬度為 50 像素,色彩深度為 24 位元,這裡的長寬及色彩深度就是『數位影像』的屬性;
想獲取點位置在 X 50 像素,Y 在 20 像素的 RGB 彩色值,這裡的『獲取彩色值』就是『數位影像』的方法。
設計屬性的一個基本原則:屬性最小化原則,即『屬性不可再分』。
設計方法看似簡單,看到動詞就是一個方法,但實際操作遠沒這麼簡單。舉例來說:獲取彩色值用在 24 位元影像、32 位元影像跟 8 位元影像,都是同一個方法嗎?
如果都在同一個方法內,這個方法如何區分要獲取多少位元的數位影像呢? 只能增加一堆 if-else 來區分。
如果後續要新增獲取不同彩色空間的彩色值時,不就只能一直增加判斷式,變成大雜燴。
這裡引出設計方法的一個基本原則:方法單一化原則,即『一個方法只做一件事』
範例程式碼:

三、物件

物件就是一個真實存在的類別,物件導向是對現實世界的模擬,那物件就是現實世界存在的『物體』。
真正在軟體運行過程的是『物件』,而不是『類別』。
類別』是程式撰寫時,由程式人員分析歸納而來。
軟體類別:軟體設計過程中歸納總結出來的分類。
軟體物件:軟體實際運行過程中存在的物件。
軟體類別是對現實類別的模擬,但不是簡單的等同。除了實作現實類別相對應的功能,還會創造出許多現實中不存在的類別。
這個創造過程正是各種設計方法、設計模式、設計原則大顯身手的地方。

四、抽象類別

抽象類別是一種特殊的類別,它只能用於繼承,不能用來產生實體為具體的物件。
為什麼需要抽象類別? 為何要設計一種只能繼承,而不能產生實體的類別?
從設計的角度來看,抽象類別是根據類別抽象出來的,例如從鳳梨、芭樂、柳丁幾個普通類別,抽象出水果這個類別。但真的吃的時候,並沒有辦法吃的一個名為水果的東西。
從實作的角度來看,抽象類別與實作類別的不同之處在於:有的抽象類別擁有抽象方法(方法只有宣告,沒有定義),子類別必須自己定義這些抽象方法,而不能像普通的方法一樣,透過繼承就能獲得父類別的方法。

五、物件導向的三大核心特徵

封裝、繼承、多型是物件導向的三大核心特徵,判斷一種程式語言是否為物件導向的程式語言,就看其是否支援這三大核心特徵。
封裝資料的主要原因是『保護隱私』。在程序導向的設計中,資料結構是公開的,任何能取得資料的人都可以隨意修改,也允許以不同的方式修改。
如果資料被改錯了,那麼其他依賴此資料的函式會受到影響,甚至造成程式崩潰。
物件導向的類別封裝屬性後,對屬性的修改只能透過類別的方法進行,一來不會曝露內部的具體屬性;二來對屬性都是統一的操作,不會出現亂修改的情況。
封裝方法的主要原因是『隔離複雜度』。每個類別只需要關注自己負責的功能如何完成即可,如果需要其他類別配合,僅需呼叫類別的方法,而不用瞭解其內部的具體實作。
在現實世界中也常看到『隔離複雜度』的例子。例如想看電視只要輕輕一按搖控器按鈕,就可以看到電視節目的影像了,究竟電視機怎麼運作的,大多數人不知道也不關心。
讓我們用封裝範例來解釋『無封裝』的程序導向和『有封裝』的物件導向差在哪裡。
程序導向 = 演算法 + 資料結構
這裡的資料結構是公開的,每個地方都能看到和引用,否則程序導向中的各個處理流程就沒辦法處理。
實作程式碼如下:
物件導向 = 物件 + 互動
實作程式碼如下:

六、物件導向的封裝有三種方式

public

這種方式就是不封裝,直接對外公開。

protected

這種封裝方式對外不公開,但對朋友(friend)或子類別公開。

private

這種封裝方式對誰都不公開。

七、繼承

繼承是物件導向語言最基本的特徵,如果一種語言沒有繼承機制,就說不上是真正的物件導向語言。
在物件導向中,繼承的實際意義可以用遺傳來形容,程式設計師決定父類別遺傳什麼給子類別。

八、多型

在物件導向領域中,多型的真正涵意是:使用指向父類別的指標或參照,便能呼叫子類別的物件。
以下用實作程式碼來說明:
多型的特性,在物件導向程式設計領域具有十分重要的作用。多型遮罩了子類別物件的差異,允許呼叫者寫出通用的程式碼,而無須針對每個子類別撰寫不同的程式碼。
閱讀可以用最低的成本來獲得別人經驗,培養閱讀能力,一生受益。但要記住,別只讓自己的大腦永遠處於「輸入狀態」,要適當地「輸出」自己的想法。透過閱讀輸入,再利用寫作輸出,就像「費曼學習法」說的一樣,教授到別人能夠了解,自己才算是領悟了這門學問。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
常見的 C 語言是屬於程序導向中結構化程式設計的概念,採取『自上而下、逐步細化、模組化』的方法,從而降低軟體發展的複雜度,因此 C 語言成為 20 世紀 70 年代軟體發展的潮流。因為結構化程式設計的方式無法滿足軟體『可擴充性』和『可維護性』的需求,因此物件導向的概念才開始普及。
在實務上,為了求快,工程師們常知其然不知所以然,反正呼叫 API 能動或能給出想要的結果就好。但這樣的想法到底是讓軟體設計變的更輕鬆,還是入門容易熟練難呢? 當你邊上理論課程,然後自己又有能力設計出基於理論的實用軟體工具,並分享給其他人使用時,豈不是更滿足也更有成就感!
希望透過實戰系列來撰寫技術學習文章,然後一邊打造免費版的機器視覺軟體,再把這個過程記錄下來。開發軟體的人最希望的就是,自己創造的東西越多人用越好,因為那是最自由也最有成就感的時刻。 
常見的 C 語言是屬於程序導向中結構化程式設計的概念,採取『自上而下、逐步細化、模組化』的方法,從而降低軟體發展的複雜度,因此 C 語言成為 20 世紀 70 年代軟體發展的潮流。因為結構化程式設計的方式無法滿足軟體『可擴充性』和『可維護性』的需求,因此物件導向的概念才開始普及。
在實務上,為了求快,工程師們常知其然不知所以然,反正呼叫 API 能動或能給出想要的結果就好。但這樣的想法到底是讓軟體設計變的更輕鬆,還是入門容易熟練難呢? 當你邊上理論課程,然後自己又有能力設計出基於理論的實用軟體工具,並分享給其他人使用時,豈不是更滿足也更有成就感!
希望透過實戰系列來撰寫技術學習文章,然後一邊打造免費版的機器視覺軟體,再把這個過程記錄下來。開發軟體的人最希望的就是,自己創造的東西越多人用越好,因為那是最自由也最有成就感的時刻。 
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
《世紀帝國》系列   我們這次要討論的系列是著名的即時戰略遊戲《世紀帝國》系列。雖然它遠遠不是最早的即時戰略遊戲,卻是台灣以及世界上許許多多電腦遊戲玩家的童年回憶。也是人們想起即時戰略遊戲時,一定不會錯過的代表性遊戲。就讓我們一起聊聊這款在許多電腦玩家心目中無可取代的有趣作品吧!
Thumbnail
拿到本票不等於拿到鐵票,若不小心超過本票債權的請求時效,債務人是可以拒絕清償的。法律不保障在權利上睡著的人,了解本票債權的法律時效,以免將來麥哭無眼屎。 本票債權的消滅時效有多長? 答案是【三年】。 到期日欄位:請參附圖紅色標示1。 發票日欄位:請參附圖紅色標示2。
Thumbnail
透過有計畫的寫作練習,從看到題目一片空白,到能在幾分鐘內理解題意、建立主要寫作架構,並在預估的時間內完成一篇「不離題」、「段落分明」、「閱讀順暢」,讓閱卷者挑不出明顯大錯的文章,是我們的最終目標。
Thumbnail
如果我們說金閣寺象徵著室町時代中,經濟最繁榮、舶來品滿天飛的時期;那麼銀閣寺便象徵著室町時代中,經濟發展最谷底、卻也是現在我們所認知的「日本文化」開始冒出頭的時期。如此與金閣差異甚大的銀閣,究竟是在甚麼樣的時代背景下,又是被誰給創造出來的呢?我們就一起來看看吧。
Thumbnail
終極戰士系列電影從1987年發展至今,前後推出了四部作品,而在先前才剛宣部第五部作品已經殺青,且在北美將於hulu上發行,根據最新的外媒報導,第五部作品將定名為《Prey》,而北美以外的地區,目前也沒有上映院線的計畫,取而代之的則是在Disney+或Star上來做播映。
Thumbnail
延續上一篇我們聊到了源義經在年少時期到源平合戰之間的故事,這次,我們就來聊聊他在回到京都之後,跟他的老大哥源董吵架,且最終吵到跑路的故事。
Thumbnail
前面幾集,我們大致上講完了兩間保全公司的激烈戰爭故事,戰爭結束之後,這一篇我們就當作後記,聊聊與源平合戰結束後所留下的謎團與傳說,以及一些相關的景點。希望之後大家實際造訪並看到相關事物的時候,可以回想起這幾集的精采故事,讓旅程回憶更加豐富喔。  
Thumbnail
源賴朝透過「瓶子倒了」群組號召來各地源氏保全公司的員工,開始與平氏餘黨們展開了你追我跑的一連串戰役。其中,最傳奇的員工不外乎就是源賴朝(源經理)的小老弟「源義經」了。這次我們就來看看他在戰場上到底是多麼不按牌理出牌,又是如何透過奇襲贏得勝利的吧。
Thumbnail
日後,Fred Perry以代表勝利的月桂葉作為標誌創辦了同名服裝品牌,隨即受英國青年青睞,除了和設計本身有關,更重要原因是Fred Perry本人雖然出身基層,卻能反抗上流社會並取得成功,象徵了戰後英國青年對社會的憤慨和叛逆,引起年輕人共鳴
Thumbnail
大部分的人,應該都覺得時間在中國那邊,只要中國持續強大,台灣被磁吸進去也是莫可奈何的,不是嗎?當然不是,時間之神從來就不會特別喜歡誰,他只站在有準備的人那一邊。把話說白一點,認為時間在中國那邊的人,大致上都是認同了「台灣怎樣都無力回天」這種想法。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
《世紀帝國》系列   我們這次要討論的系列是著名的即時戰略遊戲《世紀帝國》系列。雖然它遠遠不是最早的即時戰略遊戲,卻是台灣以及世界上許許多多電腦遊戲玩家的童年回憶。也是人們想起即時戰略遊戲時,一定不會錯過的代表性遊戲。就讓我們一起聊聊這款在許多電腦玩家心目中無可取代的有趣作品吧!
Thumbnail
拿到本票不等於拿到鐵票,若不小心超過本票債權的請求時效,債務人是可以拒絕清償的。法律不保障在權利上睡著的人,了解本票債權的法律時效,以免將來麥哭無眼屎。 本票債權的消滅時效有多長? 答案是【三年】。 到期日欄位:請參附圖紅色標示1。 發票日欄位:請參附圖紅色標示2。
Thumbnail
透過有計畫的寫作練習,從看到題目一片空白,到能在幾分鐘內理解題意、建立主要寫作架構,並在預估的時間內完成一篇「不離題」、「段落分明」、「閱讀順暢」,讓閱卷者挑不出明顯大錯的文章,是我們的最終目標。
Thumbnail
如果我們說金閣寺象徵著室町時代中,經濟最繁榮、舶來品滿天飛的時期;那麼銀閣寺便象徵著室町時代中,經濟發展最谷底、卻也是現在我們所認知的「日本文化」開始冒出頭的時期。如此與金閣差異甚大的銀閣,究竟是在甚麼樣的時代背景下,又是被誰給創造出來的呢?我們就一起來看看吧。
Thumbnail
終極戰士系列電影從1987年發展至今,前後推出了四部作品,而在先前才剛宣部第五部作品已經殺青,且在北美將於hulu上發行,根據最新的外媒報導,第五部作品將定名為《Prey》,而北美以外的地區,目前也沒有上映院線的計畫,取而代之的則是在Disney+或Star上來做播映。
Thumbnail
延續上一篇我們聊到了源義經在年少時期到源平合戰之間的故事,這次,我們就來聊聊他在回到京都之後,跟他的老大哥源董吵架,且最終吵到跑路的故事。
Thumbnail
前面幾集,我們大致上講完了兩間保全公司的激烈戰爭故事,戰爭結束之後,這一篇我們就當作後記,聊聊與源平合戰結束後所留下的謎團與傳說,以及一些相關的景點。希望之後大家實際造訪並看到相關事物的時候,可以回想起這幾集的精采故事,讓旅程回憶更加豐富喔。  
Thumbnail
源賴朝透過「瓶子倒了」群組號召來各地源氏保全公司的員工,開始與平氏餘黨們展開了你追我跑的一連串戰役。其中,最傳奇的員工不外乎就是源賴朝(源經理)的小老弟「源義經」了。這次我們就來看看他在戰場上到底是多麼不按牌理出牌,又是如何透過奇襲贏得勝利的吧。
Thumbnail
日後,Fred Perry以代表勝利的月桂葉作為標誌創辦了同名服裝品牌,隨即受英國青年青睞,除了和設計本身有關,更重要原因是Fred Perry本人雖然出身基層,卻能反抗上流社會並取得成功,象徵了戰後英國青年對社會的憤慨和叛逆,引起年輕人共鳴
Thumbnail
大部分的人,應該都覺得時間在中國那邊,只要中國持續強大,台灣被磁吸進去也是莫可奈何的,不是嗎?當然不是,時間之神從來就不會特別喜歡誰,他只站在有準備的人那一邊。把話說白一點,認為時間在中國那邊的人,大致上都是認同了「台灣怎樣都無力回天」這種想法。