封裝以保持不變數
一個類有兩個部分:介面和實現。
介面是類的公開功能。它的公共方法和變數是介面的一部分。
實現是類的內部工作。其他類不應該知道類的實現。
封裝是指從該類的任何使用者隱藏類的實現的做法。這允許類對其內部狀態做出假設。
例如,將此類表示為 Angle:
public class Angle {
private double angleInDegrees;
private double angleInRadians;
public static Angle angleFromDegrees(double degrees){
Angle a = new Angle();
a.angleInDegrees = degrees;
a.angleInRadians = Math.PI*degrees/180;
return a;
}
public static Angle angleFromRadians(double radians){
Angle a = new Angle();
a.angleInRadians = radians;
a.angleInDegrees = radians*180/Math.PI;
return a;
}
public double getDegrees(){
return angleInDegrees;
}
public double getRadians(){
return angleInRadians;
}
public void setDegrees(double degrees){
this.angleInDegrees = degrees;
this.angleInRadians = Math.PI*degrees/180;
}
public void setRadians(double radians){
this.angleInRadians = radians;
this.angleInDegrees = radians*180/Math.PI;
}
private Angle(){}
}
該類依賴於基本假設(或不變數 ): angleInDegrees 和 angleInRadians 始終同步。如果類成員是公開的,則不能保證兩個角度表示是相關的。