更新時間:2020-11-11 18:03:29 來源:動力節點 瀏覽1190次
封裝( Encapsulation) 是面向對象的三大特征之一(另外兩個是繼承和多態) ,從字面意思上看,顧名思義就是將具體的實現細節裝到一個容器中,并封閉起來,防止容器外部直接訪問容器內部的實現細節,僅公開暴露指定的訪問路徑;面向對象封裝實際上指的是將對象的狀態信息隱藏在對象內部,不允許外部程序直接訪問對象內部信息,而是通過該類所提供的方法來實現對內部信息的操作和訪問。
一、面向對象封裝主要是為了實現以下目的:
1.隱藏類的實現細節
2.讓使用者只能通過事先預定 的方法來訪問數據,從而可以在該方法里加入控制邏輯,限制對成員變量的不合理訪問
3.可進行數據檢查,從而有利于保證對象信息的完整性。
4.便于修改,提高代碼的可維護性
二、面向對象的封裝一般封裝為以下幾個幾個類型:
1.封裝成常量/變量:
如:計算圓周長度,未封裝前的代碼如下:
//封裝前:
decimal result = 2 * 3.141592653M * 10.8M;
Console.WriteLine("圓周長度是:{0}", result);
封裝后的代碼如下:
//封裝后:
const decimal PI = 3.141592653M;
decimal radius = 10.8M;
decimal circumference = 2 * PI * radius;
Console.WriteLine("圓周長度是:{0}", circumference);
你覺得哪種可讀性更高一些呢?從我看來,很顯然封裝后的代碼更易被他人所理解,因為圓周長的計算公式就是:C=2πr;從circumference就知道是圓周長的結果,而等號右邊剛好符合圓周長計算公式,所以非常的直觀,可讀性由此體現出來;
2.封裝成方法/函數/屬性:
//計算圓周長
static decimal ComputeCircumference(decimal radius)
{
const decimal PI = 3.141592653M;
return 2 * PI * radius;
}
//用法:
Console.WriteLine("圓周長度是:{0}", ComputeCircumference(10.8M));
通過封裝成方法后,我們看到ComputeCircumference方法,就知道是計算圓周長,同時我可以用此方法來計算所有的不同半徑的圓的周長,可讀性、復用性由此體現出來;
3.封裝成類:
///
/// 圓類 ///
class Circle
{
//原點X坐標
public int OriginX
{ get; set; }
//原點Y坐標
public int OriginY
{ get; set; }
//半徑
public decimal Radius
{ get; set; }
public Circle(int originX, int originY, decimal radius)
{
this.OriginX = originX;
this.OriginY = OriginY;
this.Radius = radius;
}
///
/// 獲取圓周長度 ///
///
public decimal GetCircumference()
{
const decimal PI = 3.141592653M;
return 2 * PI * this.Radius;
}
}
//用法:
Circle circle = new Circle(10,10,10.8M);
Console.WriteLine("圓周長度是:{0}", circle.GetCircumference());
從上述示例代碼可以看出,我定義(封裝)了一個圓類,圓類有原點及半徑,同時有一個獲取圓周長度的方法,該圓類可以用來表示多個不周大小不同位置的圓,而且都能獲得圓的圓周長,至于圓周長是如何計算的,PI的精度是多少,我們無需知道也無法直接更改,故隔離性、可讀性、復用性都體現出來了;
4.封裝成層/包/程序集:
有的時候因系統架構的需要,我們可能需要將描述各種圖形類信息的代碼單獨封裝成一個程序集、包、命名空間,以便于代碼的管理,于是我們可以將上述Circle類放到一個單獨的程序集中,同時程序集及命名空間名稱定為:Math.Shape,意為數學.圖形,從名字就知道這個程序集或命名空間下都是用來處理數學與圖形相關的。
示例代碼如下:
namespace Math.Shape
{
public class Circle
{
//省略,同上
}
}
//用法:
Math.Shape.Circle circle = new Math.Shape.Circle(10, 10, 10.8M);
Console.WriteLine("圓周長度是:{0}", circle.GetCircumference());
以上就是對面向對象封裝的一些淺薄之見,也是看了本站的Java SE教程中關于Java面向對象部分的講解自己總結出的一些內容,希望能夠對大家學習面向對象略盡綿薄之力。當然,你也可以直接去觀看本站的Java SE教程,說不定能總結出更好的面向對象知識點。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習