カプセル化は、呼び出しクラスを変更から隔離するのに役立ちます。
車のエンジンをモデル化する単純なクラスがあるとしましょう (すべての OO の例には車のアナロジーが含まれている必要があります :))。次のような単純なフィールドがある場合があります。
private bool engineRunning;
このフィールドを公開するか、IsEngineRunning() ゲッターを提供するだけで、違いはないようです。
クラスをより洗練されたものにする場合、そのフィールドを削除して次のように置き換えます。
private bool ignitionOn;
private bool starterWasActivated;
古いフィールドにアクセスするクラスがたくさんある場合は、engineRunning
それらすべてを変更する必要があります (悪い時期です)。
代わりに次のものから始めた場合:
public bool IsEngineRunning()
{
return this.engineRunning;
}
次のように変更できます。
public bool IsEngineRunning()
{
return ignitionOn && starterWasActivated;
}
クラスのインターフェースは同じままです(良い時代です)。