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

更新 發佈閱讀 5 分鐘

一、類別

類別是物件導向領域裡最基礎的概念,也是物件導向分析和設計的基石。

所謂類別,就是站在個人的觀察角度,具有相似點的事物,就是同一類。

二、物件導向類別

物件導向的類別由兩部份組成:屬性和方法。

屬性:類別具有的特性。

方法:類別具有的功能。

實際設計程式時,可以用『屬性是名詞,方法是動詞』來判斷。

舉例來說:

這張數位影像的長度為 100 像素,寬度為 50 像素,色彩深度為 24 位元,這裡的長寬及色彩深度就是『數位影像』的屬性;

想獲取點位置在 X 50 像素,Y 在 20 像素的 RGB 彩色值,這裡的『獲取彩色值』就是『數位影像』的方法。

設計屬性的一個基本原則:屬性最小化原則,即『屬性不可再分』。

設計方法看似簡單,看到動詞就是一個方法,但實際操作遠沒這麼簡單。舉例來說:獲取彩色值用在 24 位元影像、32 位元影像跟 8 位元影像,都是同一個方法嗎?

如果都在同一個方法內,這個方法如何區分要獲取多少位元的數位影像呢? 只能增加一堆 if-else 來區分。

如果後續要新增獲取不同彩色空間的彩色值時,不就只能一直增加判斷式,變成大雜燴。

這裡引出設計方法的一個基本原則:方法單一化原則,即『一個方法只做一件事』

範例程式碼:


三、物件

物件就是一個真實存在的類別,物件導向是對現實世界的模擬,那物件就是現實世界存在的『物體』。

真正在軟體運行過程的是『物件』,而不是『類別』。

類別』是程式撰寫時,由程式人員分析歸納而來。

軟體類別:軟體設計過程中歸納總結出來的分類。

軟體物件:軟體實際運行過程中存在的物件。

軟體類別是對現實類別的模擬,但不是簡單的等同。除了實作現實類別相對應的功能,還會創造出許多現實中不存在的類別。

這個創造過程正是各種設計方法、設計模式、設計原則大顯身手的地方。

四、抽象類別

抽象類別是一種特殊的類別,它只能用於繼承,不能用來產生實體為具體的物件。

為什麼需要抽象類別? 為何要設計一種只能繼承,而不能產生實體的類別?

從設計的角度來看,抽象類別是根據類別抽象出來的,例如從鳳梨、芭樂、柳丁幾個普通類別,抽象出水果這個類別。但真的吃的時候,並沒有辦法吃的一個名為水果的東西。

從實作的角度來看,抽象類別與實作類別的不同之處在於:有的抽象類別擁有抽象方法(方法只有宣告,沒有定義),子類別必須自己定義這些抽象方法,而不能像普通的方法一樣,透過繼承就能獲得父類別的方法。

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

封裝、繼承、多型是物件導向的三大核心特徵,判斷一種程式語言是否為物件導向的程式語言,就看其是否支援這三大核心特徵。

封裝資料的主要原因是『保護隱私』。在程序導向的設計中,資料結構是公開的,任何能取得資料的人都可以隨意修改,也允許以不同的方式修改。

如果資料被改錯了,那麼其他依賴此資料的函式會受到影響,甚至造成程式崩潰。

物件導向的類別封裝屬性後,對屬性的修改只能透過類別的方法進行,一來不會曝露內部的具體屬性;二來對屬性都是統一的操作,不會出現亂修改的情況。

封裝方法的主要原因是『隔離複雜度』。每個類別只需要關注自己負責的功能如何完成即可,如果需要其他類別配合,僅需呼叫類別的方法,而不用瞭解其內部的具體實作。

在現實世界中也常看到『隔離複雜度』的例子。例如想看電視只要輕輕一按搖控器按鈕,就可以看到電視節目的影像了,究竟電視機怎麼運作的,大多數人不知道也不關心。

讓我們用封裝範例來解釋『無封裝』的程序導向和『有封裝』的物件導向差在哪裡。

程序導向 = 演算法 + 資料結構

這裡的資料結構是公開的,每個地方都能看到和引用,否則程序導向中的各個處理流程就沒辦法處理。

實作程式碼如下:


物件導向 = 物件 + 互動

實作程式碼如下:


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

public

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

protected

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

private

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

七、繼承

繼承是物件導向語言最基本的特徵,如果一種語言沒有繼承機制,就說不上是真正的物件導向語言。

在物件導向中,繼承的實際意義可以用遺傳來形容,程式設計師決定父類別遺傳什麼給子類別。

八、多型

在物件導向領域中,多型的真正涵意是:使用指向父類別的指標或參照,便能呼叫子類別的物件。

以下用實作程式碼來說明:


多型的特性,在物件導向程式設計領域具有十分重要的作用。多型遮罩了子類別物件的差異,允許呼叫者寫出通用的程式碼,而無須針對每個子類別撰寫不同的程式碼。

留言
avatar-img
一個工程師的創業之旅的沙龍
74會員
442內容數
閱讀可以用最低的成本來獲得別人經驗,培養閱讀能力,一生受益。但要記住,別只讓自己的大腦永遠處於「輸入狀態」,要適當地「輸出」自己的想法。透過閱讀輸入,再利用寫作輸出,就像「費曼學習法」說的一樣,教授到別人能夠了解,自己才算是領悟了這門學問。
2023/08/21
設計模型主要包含兩個部分:靜態模型、動態模型。動態模型設計一般都是在類別模型設計完成後開始,此階段需要使用類別模型的類別。動態模型設計不需要應用「設計原則」和「設計模式」,只需對照「使用案例模型」,並根據使用案例的特點,選一個適合的動態模型表述即可;動態建模不需要面面俱到。
Thumbnail
2023/08/21
設計模型主要包含兩個部分:靜態模型、動態模型。動態模型設計一般都是在類別模型設計完成後開始,此階段需要使用類別模型的類別。動態模型設計不需要應用「設計原則」和「設計模式」,只需對照「使用案例模型」,並根據使用案例的特點,選一個適合的動態模型表述即可;動態建模不需要面面俱到。
Thumbnail
2023/07/31
物件導向領域經過幾十年的演進,已經發展出很多成熟的指導方針和方法;其中最具代表性的就是「設計原則」和「設計模式」。進行物件導向類別設計,第一個要解決的問題是:類別從哪裡來?領域模型中的「領域類別」,便是設計類別中「軟體類別」最好的來源;透過「領域類別」啟發設計最初的「軟體類別」。
Thumbnail
2023/07/31
物件導向領域經過幾十年的演進,已經發展出很多成熟的指導方針和方法;其中最具代表性的就是「設計原則」和「設計模式」。進行物件導向類別設計,第一個要解決的問題是:類別從哪裡來?領域模型中的「領域類別」,便是設計類別中「軟體類別」最好的來源;透過「領域類別」啟發設計最初的「軟體類別」。
Thumbnail
2023/07/23
什麼是領域模型?領域模型是完成從需求分析到物件導向設計的一座橋樑。需求分析和物件導向並無直接關係,需求分析階段不區分是物件導向還是程序導向,要從「領域建模」才真正開始物件導向的工作。後續我們會使用一個「影像處理軟體」的使用案例來說明如何建立領域模型。
Thumbnail
2023/07/23
什麼是領域模型?領域模型是完成從需求分析到物件導向設計的一座橋樑。需求分析和物件導向並無直接關係,需求分析階段不區分是物件導向還是程序導向,要從「領域建模」才真正開始物件導向的工作。後續我們會使用一個「影像處理軟體」的使用案例來說明如何建立領域模型。
Thumbnail
看更多
你可能也想看
Thumbnail
介紹 在過去的歷史裡開發程式都是以呼叫Function的方式來做程式開發,後來才有了物件導向設計的概念,而物件導向程式設計的概念就是,使用【物件】的方式來設計程式。 Q: 什麼是【物件】? A:【物件】會包含以下這四個特性: 抽象(Abstraction) 封裝(Encapsulation)
Thumbnail
介紹 在過去的歷史裡開發程式都是以呼叫Function的方式來做程式開發,後來才有了物件導向設計的概念,而物件導向程式設計的概念就是,使用【物件】的方式來設計程式。 Q: 什麼是【物件】? A:【物件】會包含以下這四個特性: 抽象(Abstraction) 封裝(Encapsulation)
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
本文介紹了Python中的物件導向程式設計的重要概念,包括類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射。每個概念都有對應的程式碼範例來說明其用法和功能。這些概念對於理解和使用Python進行物件導向程式設計至關重要。
Thumbnail
本文介紹了Python中的物件導向程式設計的重要概念,包括類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射。每個概念都有對應的程式碼範例來說明其用法和功能。這些概念對於理解和使用Python進行物件導向程式設計至關重要。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本階段深掘PHP中類別與物件的應用,從基本定義到屬性與方法的運用,並特別著重於訪問控制和靜態成員的概念。學生將學會如何有效地利用公開、保護、私有屬性,以及如何在不實例化的情況下透過類別名稱直接訪問靜態屬性和方法,進一步鞏固物件導向程式設計的核心知識。
Thumbnail
本階段深掘PHP中類別與物件的應用,從基本定義到屬性與方法的運用,並特別著重於訪問控制和靜態成員的概念。學生將學會如何有效地利用公開、保護、私有屬性,以及如何在不實例化的情況下透過類別名稱直接訪問靜態屬性和方法,進一步鞏固物件導向程式設計的核心知識。
Thumbnail
本章節的目的是讓讀者瞭解C#的物件導向特性,包括類別、繼承、多型、封裝等基本概念,以及介面、抽象類別、靜態類別等進階主題。此外,本章節也將介紹如何使用列舉、委派、Lambda表達式、泛型及反射,這些都是C#中常見的強大功能。
Thumbnail
本章節的目的是讓讀者瞭解C#的物件導向特性,包括類別、繼承、多型、封裝等基本概念,以及介面、抽象類別、靜態類別等進階主題。此外,本章節也將介紹如何使用列舉、委派、Lambda表達式、泛型及反射,這些都是C#中常見的強大功能。
Thumbnail
這個章節主要介紹了Swift程式語言中物件導向程式設計的基本概念,包括類別、建構子、公開、私有、受保護等等的概念。同時,也介紹了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射等進階特性。
Thumbnail
這個章節主要介紹了Swift程式語言中物件導向程式設計的基本概念,包括類別、建構子、公開、私有、受保護等等的概念。同時,也介紹了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射等進階特性。
Thumbnail
,先來分享一下封裝是怎麼一回事。 一、封裝(Encapsulation) 封裝就是把一些功能的處理程序或是資料包起來,也對於程式碼做權限的設定做一層保護的機制,這是為了防止程式碼被竄改,所以有了封裝可以保障我們資料的隱密性,甚至封裝也是一種將一些處理程序隱藏起來,讓使用者使用時可以更加單純。 1.什
Thumbnail
,先來分享一下封裝是怎麼一回事。 一、封裝(Encapsulation) 封裝就是把一些功能的處理程序或是資料包起來,也對於程式碼做權限的設定做一層保護的機制,這是為了防止程式碼被竄改,所以有了封裝可以保障我們資料的隱密性,甚至封裝也是一種將一些處理程序隱藏起來,讓使用者使用時可以更加單純。 1.什
Thumbnail
一、前言   這篇文章將會簡單介紹物件導向的設計模式,以及學習這項技術需要有哪些先備知識,學習才會比較順利。 二、設計模式   在物件導向中,除了最基本的五大原則以外,其實還有一知名的概念,那就是設計模式(Design Pattern),它能運用到很多層面。 1. 解決一再出現的問題   許多程式設
Thumbnail
一、前言   這篇文章將會簡單介紹物件導向的設計模式,以及學習這項技術需要有哪些先備知識,學習才會比較順利。 二、設計模式   在物件導向中,除了最基本的五大原則以外,其實還有一知名的概念,那就是設計模式(Design Pattern),它能運用到很多層面。 1. 解決一再出現的問題   許多程式設
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News