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

更新於 發佈於 閱讀時間約 8 分鐘

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


一、封裝(Encapsulation)

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

1.什麼意思?

如同我們電腦開機,以前DOS時代電腦開機可能就需要做很多指令或是動作才能開機,現在只要按電源鍵電腦就會自動幫你開機到桌面的畫面或是到帳戶登入密碼的畫面,中間過程中我們使用者就可以不用管內部處理是怎麼運行的,這部分也就稱為「封裝」。

那麼電腦使用時會有一個或多個使用者帳戶,這就是去控制電腦一些檔案對於使用者的權限,哪些檔案是可以存取、哪些檔案是唯讀的相關權限的設定,這部分也算是「封裝」在做的事。


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

當你看到修飾詞Public、Private、Protected這些的時候,就是封裝的作用出來了。直接來看程式,每個動作結果都會使用label來顯示狀況。

raw-image
此程式的意思就是:
(我們假裝先對於封裝按鈕視為電源鍵)

當我們按下電源鍵,它就會觸發啟動這個程式,它就會去找到Computer這個類別,去new一個物件出來命名為pc,接著往下執行相關程式去做pc.Act()這個動作,再往下就是屬於封裝的權限使用狀況。(權限使用狀況待會兒再說明)

我們再來看一下主程式要使用類別的程式內容

raw-image

由於主程式一開始new完去建立好一個類別後,第一個要使用這個類別的就是pc.Act()這個動作,因此程式就會跳到Computer這個類別中,找到Act這個方法(黃框)去執行裡面的內容。

我們這邊就用pcAct這個訊息來代表執行開機狀態吧~執行完就會回主程式繼續執行下一行動作,那麼我們就先來看一下結果(先看第一行橘色框就好)

raw-image

是不是就是我們在Computer類別中做Act這個動作的訊息對吧!

這個就是封裝,主程式只要做Act()那麼內部就會幫我們處理好該做的事,我們只要等待收結果就好了!


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

封裝還有另外一個特性就是權限問題:第一個就是修飾詞(可以到【入門級】-[資料型別]-修飾詞複習一下有哪些),第二個就是get / set使用

這邊先說一下Get 和Set差別:
Get是取得內容值
(當主程式未給予值的時候,就會使用內部class類別給予的初始值)

Set是設定內容值
(當有賦予值的時候,就會去設定這個值,
倘若前面多了修飾詞,如:private set這樣的話,就代表主程式不可以修改,只能讀取)

我們直接來看程式,首先看一下主程式中,從顯示「電腦的動作」這邊開始說明:

raw-image
raw-image

由主程式為主來一行行說明:

第一行顯示字串說明用途而已,由程式執行結果的橘色框下一行看起)

第二行:增加顯示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的事,那麼主程式只要等結果就好,內部處理就可以不管它。


這邊再提一個當要做修改內容值還可以使用「建構函式」使用方法如下:

raw-image
raw-image
raw-image

首先我們先看ComputerFunction的類別,電腦的動作、電腦的名稱這兩段跟Computer的類別一樣都不動,多了一個建構函式(黃框部分),這邊就是讓主程式使用的時後必須放入的參數,也就是需要設定的內容值,從主程式傳進來此類別中。主程式想要取得值可以運用剛剛的方法再從此類別中取得。

再回來看主程式的部分,當觸發後(也就是button按鈕按下去)

第一行:除了new一個物件為pc2外,後面還會跟著小跟班各種參數
這邊就是讓主程式要去設定參數的部分。接著建立完物件後,就會到pc2這類別中執行此類別的建構函式,然而裡面執行的動作就是將取得的setaction、setname內容值給予此類別內部的pcAction、pcName變數。

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

參考內容:
1.C# set 與 get 用法與範例
2.(10) C# 物件導向設計-封裝、屬性封裝

留言
avatar-img
留言分享你的想法!
avatar-img
橙果杏的沙龍
25會員
43內容數
Hello~ Welcome to my blog~❤ 這邊會分享我在程式這條道路中的學習與成長, 過程中從而了解自己的不足,再學習。 希望透過分享的方式, 也讓正在學習程式的夥伴們一起學習, 我們一起加油吧~ 「彼此都會成為彼此之間的影響力」(´,,•ω•,,)♡ ❣
橙果杏的沙龍的其他內容
2024/07/30
一、什麼是WinSocket? 也就是大家常說的WinSock全名為Windows Sockets API (WSA),它會透過TCP/IP通訊協定來做網路的通訊,會用在Windows操作系統上來開發網路應用的API(應用程式介面)   二、WinSocket用在哪裡?   Socket可以
Thumbnail
2024/07/30
一、什麼是WinSocket? 也就是大家常說的WinSock全名為Windows Sockets API (WSA),它會透過TCP/IP通訊協定來做網路的通訊,會用在Windows操作系統上來開發網路應用的API(應用程式介面)   二、WinSocket用在哪裡?   Socket可以
Thumbnail
2024/06/29
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
2024/06/29
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
2024/06/20
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
Thumbnail
2024/06/20
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
Thumbnail
看更多
你可能也想看
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
※ OPP第一大核心-封裝 封裝的精神在於將「方法」、「屬性」和「邏輯」包裝在類別裡面,透過類別的實例來實現。這樣外部物件不需要了解內部的實現細節,只需要知道如何使用該類別提供的接口即可。換句話說,封裝是將內部細節隱藏起來,只暴露必要的部分給使用者。 封裝的核心概念是,使用者如果想要接觸資料,只
Thumbnail
※ OPP第一大核心-封裝 封裝的精神在於將「方法」、「屬性」和「邏輯」包裝在類別裡面,透過類別的實例來實現。這樣外部物件不需要了解內部的實現細節,只需要知道如何使用該類別提供的接口即可。換句話說,封裝是將內部細節隱藏起來,只暴露必要的部分給使用者。 封裝的核心概念是,使用者如果想要接觸資料,只
Thumbnail
  當我們要使用執行緒的時候,就要引用System.Threading的類別庫,程式才可以使用唷!這篇內容先說明:建立與啟用執行緒、跨執行緒控制UI介面、等待或暫停時間執行緒、共享資源的部分。
Thumbnail
  當我們要使用執行緒的時候,就要引用System.Threading的類別庫,程式才可以使用唷!這篇內容先說明:建立與啟用執行緒、跨執行緒控制UI介面、等待或暫停時間執行緒、共享資源的部分。
Thumbnail
,先來分享一下封裝是怎麼一回事。 一、封裝(Encapsulation) 封裝就是把一些功能的處理程序或是資料包起來,也對於程式碼做權限的設定做一層保護的機制,這是為了防止程式碼被竄改,所以有了封裝可以保障我們資料的隱密性,甚至封裝也是一種將一些處理程序隱藏起來,讓使用者使用時可以更加單純。 1.什
Thumbnail
,先來分享一下封裝是怎麼一回事。 一、封裝(Encapsulation) 封裝就是把一些功能的處理程序或是資料包起來,也對於程式碼做權限的設定做一層保護的機制,這是為了防止程式碼被竄改,所以有了封裝可以保障我們資料的隱密性,甚至封裝也是一種將一些處理程序隱藏起來,讓使用者使用時可以更加單純。 1.什
Thumbnail
一、存取修飾詞public / private / protected / internal 二、參數修飾詞ref / in / out >>>>>由於我們在寫程式時,會去宣告一些變數、常數相關識別詞,並且在class(類別)中會寫一些事情或動作讓程式去運行,然而這個概念就是去定義對於我們所寫的內容
Thumbnail
一、存取修飾詞public / private / protected / internal 二、參數修飾詞ref / in / out >>>>>由於我們在寫程式時,會去宣告一些變數、常數相關識別詞,並且在class(類別)中會寫一些事情或動作讓程式去運行,然而這個概念就是去定義對於我們所寫的內容
Thumbnail
承接上一段,接下來到了一段Rust比較新奇的部分也是控制記憶體的部分AKA所有權。 Rust 程式設計語言 所有權是在Rust處理記憶體的機制,記憶體由所有權系統管理,且編譯器會在編譯時加上一些規則檢查。 在這之前需要知道的部分 每個變數有一個所有者(owner) 同時間只能有一個所有者 只要擁有者
Thumbnail
承接上一段,接下來到了一段Rust比較新奇的部分也是控制記憶體的部分AKA所有權。 Rust 程式設計語言 所有權是在Rust處理記憶體的機制,記憶體由所有權系統管理,且編譯器會在編譯時加上一些規則檢查。 在這之前需要知道的部分 每個變數有一個所有者(owner) 同時間只能有一個所有者 只要擁有者
Thumbnail
Windows電腦中,我們可以利用內建工具"工作排程器"去預設電腦重新啟動或登入時,自動執行重要程式,避免遺漏程式忘記,導致連動程式的系統不能使用。 以下是教學步驟: 步驟一: 開啟Windows電腦中內建工具"工作排程器" 步驟二: 將游標移至"工作排程器程式庫"按右鍵"建立工作" 步驟三:
Thumbnail
Windows電腦中,我們可以利用內建工具"工作排程器"去預設電腦重新啟動或登入時,自動執行重要程式,避免遺漏程式忘記,導致連動程式的系統不能使用。 以下是教學步驟: 步驟一: 開啟Windows電腦中內建工具"工作排程器" 步驟二: 將游標移至"工作排程器程式庫"按右鍵"建立工作" 步驟三:
Thumbnail
這一篇文章將會從Microsoft的.NET Class Library開始介紹,在介紹具狀態和不具狀態,以及物件和new關鍵字。
Thumbnail
這一篇文章將會從Microsoft的.NET Class Library開始介紹,在介紹具狀態和不具狀態,以及物件和new關鍵字。
Thumbnail
本篇文章將會介紹C#的基礎構成和字串的使用,若想要更詳細的教學,可以參考前一篇文章,前往Microsoft官方教學學習。
Thumbnail
本篇文章將會介紹C#的基礎構成和字串的使用,若想要更詳細的教學,可以參考前一篇文章,前往Microsoft官方教學學習。
Thumbnail
這篇文章主要介紹存取子讀(get)和寫(set)的概述,並且簡單介紹基本的使用方法以及其他程式呼叫範例。
Thumbnail
這篇文章主要介紹存取子讀(get)和寫(set)的概述,並且簡單介紹基本的使用方法以及其他程式呼叫範例。
Thumbnail
使用者自訂的資料型別
Thumbnail
使用者自訂的資料型別
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News