【中低階級】-[物件導向]-三大特性-封裝

更新於 發佈於 閱讀時間約 7 分鐘
上一篇有分享物件導向的物件(Object)、類別(Class)、欄位(Field)、屬性值(Property)、方法(Method)還有一個建構式函式(Construstor)的概念,接下來會跟大家分享的就是物件導向的特性,它有封裝、繼承、多型這三大特性,先來分享一下封裝是怎麼一回事。

一、封裝(Encapsulation)

封裝就是把一些功能的處理程序或是資料包起來,也對於程式碼做權限的設定做一層保護的機制,這是為了防止程式碼被竄改,所以有了封裝可以保障我們資料的隱密性,甚至封裝也是一種將一些處理程序隱藏起來,讓使用者使用時可以更加單純。

1.什麼意思?

如同我們電腦開機,以前DOS時代電腦開機可能就需要做很多指令或是動作才能開機,現在只要按電源鍵電腦就會自動幫你開機到桌面的畫面或是到帳戶登入密碼的畫面,中間過程中我們使用者就可以不用管內部處理是怎麼運行的,這部分也就稱為「封裝」。
那麼電腦使用時會有一個或多個使用者帳戶,這就是去控制電腦一些檔案對於使用者的權限,哪些檔案是可以存取、哪些檔案是唯讀的相關權限的設定,這部分也算是「封裝」在做的事。

2.在程式中通常在哪裡會看到它?

當你看到修飾詞Public、Private、Protected這些的時候,就是封裝的作用出來了。直接來看程式,每個動作結果都會使用label來顯示狀況。
主程式程式內容
此程式的意思就是:
(我們假裝先對於封裝按鈕視為電源鍵)

當我們按下電源鍵,它就會觸發啟動這個程式,它就會去找到Computer這個類別,去new一個物件出來命名為pc,接著往下執行相關程式去做pc.Act()這個動作,再往下就是屬於封裝的權限使用狀況。(權限使用狀況待會兒再說明)
我們再來看一下主程式要使用類別的程式內容
Computer類別的程式內容
由於主程式一開始new完去建立好一個類別後,第一個要使用這個類別的就是pc.Act()這個動作,因此程式就會跳到Computer這個類別中,找到Act這個方法(黃框)去執行裡面的內容。
我們這邊就用pcAct這個訊息來代表執行開機狀態吧~執行完就會回主程式繼續執行下一行動作,那麼我們就先來看一下結果(先看第一行橘色框就好)
執行結果
是不是就是我們在Computer類別中做Act這個動作的訊息對吧!
這個就是封裝,主程式只要做Act()那麼內部就會幫我們處理好該做的事,我們只要等待收結果就好了!

3.「權限問題」與「Get/Set使用差別」

封裝還有另外一個特性就是權限問題:第一個就是修飾詞(可以到【入門級】-[資料型別]-修飾詞複習一下有哪些),第二個就是get / set使用
這邊先說一下Get 和Set差別:
Get是取得內容值
(當主程式未給予值的時候,就會使用內部class類別給予的初始值)

Set是設定內容值
(當有賦予值的時候,就會去設定這個值,
倘若前面多了修飾詞,如:private set這樣的話,就代表主程式不可以修改,只能讀取)
我們直接來看程式,首先看一下主程式中,從顯示「電腦的動作」這邊開始說明:
主程式(顯示使用class的修飾詞與get/set差別)
Computer類別(顯示使用class的修飾詞與get/set差別)
由主程式為主來一行行說明:
第一行顯示字串說明用途而已,由程式執行結果的橘色框下一行看起)

第二行:增加顯示pc.Action 這個值
那麼pc.Action就是跑到類別中取得Action的值,看到類別的Action程式,它做的事情就是設定或更改內容值

因為主程式的第二行是直接進行pc.Action取值,所以程式只有執行get{return pcAction;} 直接取得類別給予的初始值,也就是「提供內容值」,故傳到主程式去就是「提供內容值」這樣的內容,可以對照上面程式執行的結果。

第三行:就是主程式要去設定Action的值為「開機」,因此使用pc.Action,程式就會進入到類別的Action中執行set{pcAction=value;}去設定。
執行前pcAction的值為「提供內容值」,value的值為「開機」。
執行後,value的值給予pcAction,因此pcAction的值就會更改為「開機」,value的值依然為「開機」。

第四行:增加顯示pc.Action 這個值
pc.Action一樣也會跑到類別中取得Action的值,也只有執行get{return pcAction;},此時的pcAction的值已經更新為「開機」,因此傳到主程式去的值就是「開機」,故程式執行解果所顯示的就會是「開機」。
主程式再往下看下一段顯示電腦名稱的部分,對照程式執行結果就要看最後一小段的部分
第一行:顯示字串說明用途

第二行:增加顯示pc.Name 這個值
一樣也是跑到類別中從get{...}取得初始值為「橙果杏」。

第三行:想要設定pc.Name的值 (會錯誤)
這邊為什麼會錯誤?是因為一樣也是要跑到類別中從set{...}設定值,但是!! set前面有加一個修飾詞private(私有的),這代表僅提供已讀模式不可被修改,也就是做保護資料內容值的意思。因此在主程式中想要給予值是不可行的,也就會出現錯誤。

第四行:因為值未修改,所以它就會跟第二行出現的值一樣呈現「橙果杏」(這邊程式執行結果並沒有執行這行,想要知道可以自行操作看看ㄛ)
主程式看到最後一行,也就是pc.password;
一樣也是使用類別中的password,但是這邊無論是方法還是內容值的設定,由於在類別中對於password它是屬於private(私有的),因此主程式不可使用也不可唯讀,也就是隱藏狀態,主程式根本不會知道有這個存在的意思。
所以經過這樣的分享有沒有懂一點什麼是封裝了呢?
這邊在跟大家統整一下,封裝就是功能性打包,有些內容值可以做隱藏、唯讀、修改的處理,保護資料的安全性(使用get / set再配合修飾詞的方法即可)。那麼主程式在使用的時候就會比較容易簡單,只要叫某某class去做ABC的事,那麼主程式只要等結果就好,內部處理就可以不管它。

這邊再提一個當要做修改內容值還可以使用「建構函式」使用方法如下:
主程式(類別使用建構函式)
類別(使用建構函式)))
執行結果(類別使用建構函式)
首先我們先看ComputerFunction的類別,電腦的動作、電腦的名稱這兩段跟Computer的類別一樣都不動,多了一個建構函式(黃框部分),這邊就是讓主程式使用的時後必須放入的參數,也就是需要設定的內容值,從主程式傳進來此類別中。主程式想要取得值可以運用剛剛的方法再從此類別中取得。
再回來看主程式的部分,當觸發後(也就是button按鈕按下去)
第一行:除了new一個物件為pc2外,後面還會跟著小跟班各種參數
這邊就是讓主程式要去設定參數的部分。接著建立完物件後,就會到pc2這類別中執行此類別的建構函式,然而裡面執行的動作就是將取得的setaction、setname內容值給予此類別內部的pcAction、pcName變數。

第二行、第四行:這邊取得的值也是會跑到pc2這個類別中執行get{...},那麼由於一開始我們已經設定參數的內容值,這邊也是會取得一樣的值。看執行結果就知道啦~

為什麼會看到廣告
avatar-img
21會員
43內容數
Hello~ Welcome to my blog~❤ 這邊會分享我在程式這條道路中的學習與成長, 過程中從而了解自己的不足,再學習。 希望透過分享的方式, 也讓正在學習程式的夥伴們一起學習, 我們一起加油吧~ 「彼此都會成為彼此之間的影響力」(´,,•ω•,,)♡ ❣
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
橙果杏的沙龍 的其他內容
  物件導向(Object Oriented Programming,又稱OOP),在程式領域中很常會看到一些英文代稱,如果不懂的話就比較會不知道在說些什麼,所以除了知道中文名稱外也要稍微知道一下它的代稱是什麼會比較好唷! 一、什麼是物件導向?   把程式寫出來的功能集合成一個類別(class),接
亂數是要做什麼用的?生活中其實有很多有關亂數的事,例如說:樂透摸彩、抽籤、驚喜包、中獎者、擲骰子等等都是跟亂數有關哦!它們都是將所有的數都丟進去一個空間裡再隨機抽取,在不重複的狀況下每一個數抽到的機率都是一樣的。 在程式中也有這個玩法哦!但是說是這麼說到底怎麼用,咱們來看看: 語法: 在隨機抽取的時
資料集中除了陣列這個外,還有另一個好幫手就是List,它跟陣列很像,我們直接來看一下怎麼用: 它的語法: 1.給予值 (1)單一新增: (2)陣列式新增: 例子: 2.取值 (1)foreach迴圈方式 (2)單一取值 3.取得List有多少個內容值 4.排序 想要反轉就再使用↓ 5.插入 6.複製
陣列運用、擷取字串   對於陣列裡的內容值除了把資料存進去外,若想要知道陣列維度、陣列大小、複製陣列的值到另一個陣列中、清除陣列的值等等的相關處理,甚至比較常用到的可能還需要做資料排列、查找資料等等,此時C#有一些屬性方法可以幫助到我們,不用寫複雜的迴圈,來看一看有哪些吧~
  陣列就陣列怎麼還有不規則陣列呢?一維陣列就一排沒什麼大問題,但是!二維以上的多維陣列不知道有沒有發現大家的長度都是一致的?用三維來說組合起來的箱子不是四邊形,就是長(正)方體,那麼不規則陣列組合起來就不一定是完整的長(正)方體了,可能就會出現東缺一腳、西缺一角的情形發生,我們用三維的圖形來表示:
上一篇的一維陣列是指一排箱子,二維陣列就會往上疊變成兩排箱子,那麼三維呢?並不是再往上疊三排箱子就是三維而是又多了後面深度,也就是三個維度。用圖示: 這樣有比較懂嗎?!沒關係!之前用箱子,那現在用數學來說明好了, 一維是x軸(長度) 二維是xy軸(長度+高度) 三維是xyz軸(長度+高度+深度) 四
  物件導向(Object Oriented Programming,又稱OOP),在程式領域中很常會看到一些英文代稱,如果不懂的話就比較會不知道在說些什麼,所以除了知道中文名稱外也要稍微知道一下它的代稱是什麼會比較好唷! 一、什麼是物件導向?   把程式寫出來的功能集合成一個類別(class),接
亂數是要做什麼用的?生活中其實有很多有關亂數的事,例如說:樂透摸彩、抽籤、驚喜包、中獎者、擲骰子等等都是跟亂數有關哦!它們都是將所有的數都丟進去一個空間裡再隨機抽取,在不重複的狀況下每一個數抽到的機率都是一樣的。 在程式中也有這個玩法哦!但是說是這麼說到底怎麼用,咱們來看看: 語法: 在隨機抽取的時
資料集中除了陣列這個外,還有另一個好幫手就是List,它跟陣列很像,我們直接來看一下怎麼用: 它的語法: 1.給予值 (1)單一新增: (2)陣列式新增: 例子: 2.取值 (1)foreach迴圈方式 (2)單一取值 3.取得List有多少個內容值 4.排序 想要反轉就再使用↓ 5.插入 6.複製
陣列運用、擷取字串   對於陣列裡的內容值除了把資料存進去外,若想要知道陣列維度、陣列大小、複製陣列的值到另一個陣列中、清除陣列的值等等的相關處理,甚至比較常用到的可能還需要做資料排列、查找資料等等,此時C#有一些屬性方法可以幫助到我們,不用寫複雜的迴圈,來看一看有哪些吧~
  陣列就陣列怎麼還有不規則陣列呢?一維陣列就一排沒什麼大問題,但是!二維以上的多維陣列不知道有沒有發現大家的長度都是一致的?用三維來說組合起來的箱子不是四邊形,就是長(正)方體,那麼不規則陣列組合起來就不一定是完整的長(正)方體了,可能就會出現東缺一腳、西缺一角的情形發生,我們用三維的圖形來表示:
上一篇的一維陣列是指一排箱子,二維陣列就會往上疊變成兩排箱子,那麼三維呢?並不是再往上疊三排箱子就是三維而是又多了後面深度,也就是三個維度。用圖示: 這樣有比較懂嗎?!沒關係!之前用箱子,那現在用數學來說明好了, 一維是x軸(長度) 二維是xy軸(長度+高度) 三維是xyz軸(長度+高度+深度) 四
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這篇內容,將會講解什麼是腳本函式,以及與腳本函式相關的知識。包括腳本的簡介、使用函式(或全域變數)的注意事項、定義全域變數、定義函式、什麼是宣告、局部變數的應用。
儲存庫 (Repository) 是檔案(File)的儲存區域。 在版本控制中,儲存庫是包含所有檔案的資料夾[1]。 每次改動檔案,你都可以選擇要不要儲存。 而那些有被處存的改動,就被稱為「提交 Commit」[2]。 而當一個儲存庫有多個開發者(Developer)在貢獻,
Thumbnail
※ OPP第一大核心-封裝 封裝的精神在於將「方法」、「屬性」和「邏輯」包裝在類別裡面,透過類別的實例來實現。這樣外部物件不需要了解內部的實現細節,只需要知道如何使用該類別提供的接口即可。換句話說,封裝是將內部細節隱藏起來,只暴露必要的部分給使用者。 封裝的核心概念是,使用者如果想要接觸資料,只
※ Object(物件) & Constructor Function(建構式函式) Object(物件)是什麼? 物件是一種「可以將資料、程式碼包含在其中」的資料結構。 Object(物件)的兩種創造方式: 匿名物件:直接使用"{}"。沒有特別的名字,直接從Object中繼承過來的一個物件
Thumbnail
電腦的運作需要仰賴許多的硬體與軟體,統稱電腦系統 (computer system)。這篇文章會概略地介紹電腦系統中的重要角色,以及它們如何相互合作,來完成複雜的工作,比如說讓無所事事的宅宅如我,假日可以躲在房間玩一整天的遊戲。 電腦、程式、與使用者 說到電腦,你的腦中會浮現什麼呢? 是螢幕
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
Thumbnail
本階段深掘PHP中類別與物件的應用,從基本定義到屬性與方法的運用,並特別著重於訪問控制和靜態成員的概念。學生將學會如何有效地利用公開、保護、私有屬性,以及如何在不實例化的情況下透過類別名稱直接訪問靜態屬性和方法,進一步鞏固物件導向程式設計的核心知識。
Thumbnail
先前我們談論到靜態方法就像是定義工具箱一樣,那麼抽象方法就像是共用表格的概念,例如註冊帳號時會填寫的一些基本資料,就有包含制式的表格,裡面有需填寫的欄位,例如姓名,性別等。
物件導向設計的一個重點就是封裝,這有很多層面上的意義,但基本上就是控制物件的成員變數和方法的存取權。物件導向的封裝還跟繼承機制有關,這使得有一些時候我們逼不得已必須把函式定義在類別上,這種做法使得物件的功能變得難以拆解。封裝應該是模組的職責,並不需要再給物件相同的能力。 一般的模組系統就是把相
Thumbnail
本文將介紹 Python 中的閉包(Closure),我們將從閉包的定義開始介紹,然後是閉包的用途,以及最後的實作範例。
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這篇內容,將會講解什麼是腳本函式,以及與腳本函式相關的知識。包括腳本的簡介、使用函式(或全域變數)的注意事項、定義全域變數、定義函式、什麼是宣告、局部變數的應用。
儲存庫 (Repository) 是檔案(File)的儲存區域。 在版本控制中,儲存庫是包含所有檔案的資料夾[1]。 每次改動檔案,你都可以選擇要不要儲存。 而那些有被處存的改動,就被稱為「提交 Commit」[2]。 而當一個儲存庫有多個開發者(Developer)在貢獻,
Thumbnail
※ OPP第一大核心-封裝 封裝的精神在於將「方法」、「屬性」和「邏輯」包裝在類別裡面,透過類別的實例來實現。這樣外部物件不需要了解內部的實現細節,只需要知道如何使用該類別提供的接口即可。換句話說,封裝是將內部細節隱藏起來,只暴露必要的部分給使用者。 封裝的核心概念是,使用者如果想要接觸資料,只
※ Object(物件) & Constructor Function(建構式函式) Object(物件)是什麼? 物件是一種「可以將資料、程式碼包含在其中」的資料結構。 Object(物件)的兩種創造方式: 匿名物件:直接使用"{}"。沒有特別的名字,直接從Object中繼承過來的一個物件
Thumbnail
電腦的運作需要仰賴許多的硬體與軟體,統稱電腦系統 (computer system)。這篇文章會概略地介紹電腦系統中的重要角色,以及它們如何相互合作,來完成複雜的工作,比如說讓無所事事的宅宅如我,假日可以躲在房間玩一整天的遊戲。 電腦、程式、與使用者 說到電腦,你的腦中會浮現什麼呢? 是螢幕
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
Thumbnail
本階段深掘PHP中類別與物件的應用,從基本定義到屬性與方法的運用,並特別著重於訪問控制和靜態成員的概念。學生將學會如何有效地利用公開、保護、私有屬性,以及如何在不實例化的情況下透過類別名稱直接訪問靜態屬性和方法,進一步鞏固物件導向程式設計的核心知識。
Thumbnail
先前我們談論到靜態方法就像是定義工具箱一樣,那麼抽象方法就像是共用表格的概念,例如註冊帳號時會填寫的一些基本資料,就有包含制式的表格,裡面有需填寫的欄位,例如姓名,性別等。
物件導向設計的一個重點就是封裝,這有很多層面上的意義,但基本上就是控制物件的成員變數和方法的存取權。物件導向的封裝還跟繼承機制有關,這使得有一些時候我們逼不得已必須把函式定義在類別上,這種做法使得物件的功能變得難以拆解。封裝應該是模組的職責,並不需要再給物件相同的能力。 一般的模組系統就是把相
Thumbnail
本文將介紹 Python 中的閉包(Closure),我們將從閉包的定義開始介紹,然後是閉包的用途,以及最後的實作範例。