物件導向的三大特徵 封裝

2021-10-13 09:41:11 字數 1609 閱讀 3738

封裝(encapsulation)通俗的講就是呼叫方僅知道被呼叫方能做什麼,怎麼做的不知道,封裝是物件導向模組化的基礎。通過封裝將物件執行所需的方法和資料封裝在程式物件中,隱藏物件的屬性和實現細節。當這個物件發生有bug時,僅需修改物件內部的方法,不會擴散到程式其它部分。示例:在**程式中在會員生日時,給會員傳送gsm祝福簡訊。

public

class

gsmpublic

gsm(

)catch

(ioexception e)

}private

void

createsocket()

throws ioexception

private string msgformat

(string msg)

private

boolean

checkconn()

}

在這裡,我們建立乙個gsm類,它包含了乙個對外只暴露gsmsend()方法,將簡訊moden建立scoket連線建立、簡訊編碼、連線測試、at指令等內容隱藏起來,完成gsm類的封裝。

封裝是利用許可權修飾符實現的,許可權修飾符包括public、protected、default和private 四種。

public:最大的訪問許可權(整個專案可見)

protected:子類方訪問許可權

default:包內訪問許可權

private:本類訪問許可權

訪問許可權修飾符可以修飾屬性(類的成員變數)和方法。但封裝時要特別限制對類屬性資料的直接操作,因為屬性變數是用於記錄物件執行時的狀態的,直接讀取會產生錯誤結果。因此屬性需要定義為private,外部需要讀取操作屬性時,需要通過暴露出來的介面來實現,我們模擬一下去包子店賣包子過程,定義乙個boss的類,模仿包子店老闆,獲取包子過程,是通過boss類中封裝的get()得到的,而不是直接讀取屬性變數,**如下:

public

class

boss

}

不允許將屬性變數baozis、totalmoney定義為public,外部物件可以訪問操作。如果baozis、totalmoney定義為public,那麼外部的類,即可訪問操作baozis,如:

public

class

customer

}

錯誤包括,包子的集合如果為空產生異常,賣出的包子費用沒有累加等。直接讀取另外乙個類內部的資料屬於內容耦合,是不允許的。

封裝體現了物件導向模組化,把描述乙個物件的特性和行為封裝成乙個類 把具體的業務邏輯功能封裝成乙個方法, 隱藏物件內部的複雜性,只對外提供簡單的介面,便於外界使用,從而提高系統可擴充套件性以及可維護性。

封裝首先要實現的是類的劃分,高內聚、低耦合是類劃分本質要求。高內聚就是類的內部方法我們自己完成,低耦合低耦合就是僅對外暴露少量方法作為使用。要做到這一點就需要考慮物件導向設計的單一職責原則和迪公尺特法則。

很多學生開發程式時,可見性只有public方法,沒有private、沒有protected,沒有體現物件導向封裝性,想想為什麼呢?學生把現實的業務想的過於簡單,沒有關注實現細節。

物件導向三大特徵 封裝

一 封裝 1 程式的問題 無法保證資料的安全性,同時也無法保證資料的有效性。二 封裝的要求 1 private 私有的,被private修飾的內容只能在類的內部使用public 公開的 2 為私有的屬性提供公開的get set方法。a為屬性賦值 set方法 public void set屬性名 資料...

物件導向三大特徵之封裝

上半句 下半句。三流的書籍和部落格只會告訴你上半句,因為它們的作者自己也不知道下半句,而讓我們接近真理,走的更遠的是下半句。並且下半句往往非常簡單。上半句就是一些半吊子挖出的天坑,就算下半句非常簡單。因為上半句的誤導產生的阻礙,讓無數人很多年也接觸不到講述真理的下半句。時刻警醒 我們要學習的是講述真...

物件導向三大特徵之封裝

將屬性封裝起來,不讓外部直接訪問 提供getset方法訪問 package com.lv.am 資料的封裝 資料的實體類物件 除了這個商品的物件 我們還有什麼現實生活中也是這樣來定義乙個實體類 public class goods public void setname string name pu...