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

閱讀時間約 4 分鐘

一、類別

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

二、物件導向類別

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

三、物件

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

四、抽象類別

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

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

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

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

public

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

protected

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

private

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

七、繼承

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

八、多型

在物件導向領域中,多型的真正涵意是:使用指向父類別的指標或參照,便能呼叫子類別的物件。
以下用實作程式碼來說明:
多型的特性,在物件導向程式設計領域具有十分重要的作用。多型遮罩了子類別物件的差異,允許呼叫者寫出通用的程式碼,而無須針對每個子類別撰寫不同的程式碼。
閱讀可以用最低的成本來獲得別人經驗,培養閱讀能力,一生受益。但要記住,別只讓自己的大腦永遠處於「輸入狀態」,要適當地「輸出」自己的想法。透過閱讀輸入,再利用寫作輸出,就像「費曼學習法」說的一樣,教授到別人能夠了解,自己才算是領悟了這門學問。
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
【被我們記得的系列】永遠的即時戰略經典--《世紀帝國》系列《世紀帝國》系列   我們這次要討論的系列是著名的即時戰略遊戲《世紀帝國》系列。雖然它遠遠不是最早的即時戰略遊戲,卻是台灣以及世界上許許多多電腦遊戲玩家的童年回憶。也是人們想起即時戰略遊戲時,一定不會錯過的代表性遊戲。就讓我們一起聊聊這款在許多電腦玩家心目中無可取代的有趣作品吧!
Thumbnail
avatar
末梢閱讀筆記
2023-02-23
不再站著借人錢,跪著求人還錢。債權保障系列 / 本票篇:本票債權法律時效拿到本票不等於拿到鐵票,若不小心超過本票債權的請求時效,債務人是可以拒絕清償的。法律不保障在權利上睡著的人,了解本票債權的法律時效,以免將來麥哭無眼屎。 本票債權的消滅時效有多長? 答案是【三年】。 到期日欄位:請參附圖紅色標示1。 發票日欄位:請參附圖紅色標示2。
Thumbnail
avatar
柯俊吉律師 / 法律爭點速記 / 法院人生側寫
2022-09-08
國考短文寫作系列分享(五) 實戰演練與反饋的重要透過有計畫的寫作練習,從看到題目一片空白,到能在幾分鐘內理解題意、建立主要寫作架構,並在預估的時間內完成一篇「不離題」、「段落分明」、「閱讀順暢」,讓閱卷者挑不出明顯大錯的文章,是我們的最終目標。
Thumbnail
avatar
遺我雙鯉魚
2022-08-28
#80日本的時空膠囊系列||銀閣寺的故事(1)-被迫當上CEO的小男孩到打爛京都之戰如果我們說金閣寺象徵著室町時代中,經濟最繁榮、舶來品滿天飛的時期;那麼銀閣寺便象徵著室町時代中,經濟發展最谷底、卻也是現在我們所認知的「日本文化」開始冒出頭的時期。如此與金閣差異甚大的銀閣,究竟是在甚麼樣的時代背景下,又是被誰給創造出來的呢?我們就一起來看看吧。
Thumbnail
avatar
NANA濕婦
2022-03-06
#News 終極戰士系列第五部片名公布 同時宣告將不採院線放映終極戰士系列電影從1987年發展至今,前後推出了四部作品,而在先前才剛宣部第五部作品已經殺青,且在北美將於hulu上發行,根據最新的外媒報導,第五部作品將定名為《Prey》,而北美以外的地區,目前也沒有上映院線的計畫,取而代之的則是在Disney+或Star上來做播映。
Thumbnail
avatar
Jericho
2021-12-23
#47日本的時空膠囊系列||源義經(中)-從戰神淪落為亡命之徒延續上一篇我們聊到了源義經在年少時期到源平合戰之間的故事,這次,我們就來聊聊他在回到京都之後,跟他的老大哥源董吵架,且最終吵到跑路的故事。
Thumbnail
avatar
NANA濕婦
2021-09-21
#36日本的時空膠囊系列||武士的出現(6)-源平合戰後所留下的傳說與景點前面幾集,我們大致上講完了兩間保全公司的激烈戰爭故事,戰爭結束之後,這一篇我們就當作後記,聊聊與源平合戰結束後所留下的謎團與傳說,以及一些相關的景點。希望之後大家實際造訪並看到相關事物的時候,可以回想起這幾集的精采故事,讓旅程回憶更加豐富喔。  
Thumbnail
avatar
NANA濕婦
2021-07-26
#34日本的時空膠囊系列||武士的出現(4)-戰神「源義經」的奇襲源賴朝透過「瓶子倒了」群組號召來各地源氏保全公司的員工,開始與平氏餘黨們展開了你追我跑的一連串戰役。其中,最傳奇的員工不外乎就是源賴朝(源經理)的小老弟「源義經」了。這次我們就來看看他在戰場上到底是多麼不按牌理出牌,又是如何透過奇襲贏得勝利的吧。
Thumbnail
avatar
NANA濕婦
2021-07-16
【專題】時裝解構系列:運動(一):英國足球流氓史中,Fred Perry為何佔一席位?日後,Fred Perry以代表勝利的月桂葉作為標誌創辦了同名服裝品牌,隨即受英國青年青睞,除了和設計本身有關,更重要原因是Fred Perry本人雖然出身基層,卻能反抗上流社會並取得成功,象徵了戰後英國青年對社會的憤慨和叛逆,引起年輕人共鳴
Thumbnail
avatar
REFRACT
2018-09-18
三十分鐘內就懂的系列:兩岸統獨問題之三「時間到底站在哪一邊?」大部分的人,應該都覺得時間在中國那邊,只要中國持續強大,台灣被磁吸進去也是莫可奈何的,不是嗎?當然不是,時間之神從來就不會特別喜歡誰,他只站在有準備的人那一邊。把話說白一點,認為時間在中國那邊的人,大致上都是認同了「台灣怎樣都無力回天」這種想法。
Thumbnail
avatar
王立第二戰研所
2007-12-31