プロが教える店舗&オフィスのセキュリティ対策術

カプセル化をすることによって便利になること、利点を教えてください。
よろしくお願いします。

A 回答 (3件)

プログラムサイズが小さかったり一人で作っていると利点を実感しにくいですが、大勢で作っている場合や、作った本人にも全体が見通せないほど巨大になった場合、作った本人も詳細を忘れた頃に改造・拡張する必要が出来た場合等には実感できると思います。


・オブジェクト間の結合を弱めクラスの流用・継承・変更がしやすくなります。
・変更による影響範囲を限定、もしくは影響が無い事の確認が容易になります。
・製作意図とは違う場所や違う意図で値の設定・変更を行ってしまうミスを防げます。
    • good
    • 0

変数をカプセル化する最も簡単と思われる例を上げてみます。


以下のコードは、身長を保持(設定/取得)するためのクラスです。

public class Tall() {

  private double tall; //カプセルかされた変数
  
  public Tall() {
  }
  
  public getCentimeters() {
    return tall / 10;
  }
  public getMillimeters() {
    return tall;
  }
  public getFeets() {
    return tall / 304.8;
  }
  
  public setCentimeters( double tall ) {
    this.tall = tall * 10;
  }
  public setMillimeters( double tall ) {
    this.tall = tall;
  }
  public setFeets( double tall ) {
    this.tall = tall * 304.8;
  }
}

内部的には、身長はミリメートル単位で保持されていますが
内部状態を全く意識することなく、フィートで設定して、
センチメートルで取り出すといったことが可能になります。
これが、ひとつの利点です。

また、身長が負の値になったりすることはありえませんが、
tallの double型変数がパブリックで宣言されていると、
tall = -170 といった非現実的な値も設定できてしまいます。

しかし、前記のコードのsetCentimeter()メソッドを
  public setCentimeters( double tall ) {
    if( tall < 0 ) throw new Error();
    this.tall = tall * 10;
  }
という風に適当なエラーを送出するように設定することで
不自然な値自体を設定できないようにすることが可能になります。
これが、ふたつめの利点です。
    • good
    • 0

ウルトラセブンのカプセル怪獣は、弱いが時間を稼げ、


やられそうになるとカプセルに戻せます。
    • good
    • 3

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!