オブジェクト指向

用語

  • カプセル化(中身の隠蔽)
    データ構造の中身を隠蔽し、データ操作に必要な情報のみを外部に提供し、1つにまとめて持たせること。
    1. // 操作、データを一つにまとめたクラス 
    2. // ⇒ カプセル化
    3. class Sample {
    4.     // private を設定することで、Sampleクラス以外からの
    5.     // アクセスを禁止する
    6.     // ⇒ データの隠蔽
    7.     private int ans = 0;
    8.    
    9.     //-- ans 変数にアクセスするためのメソッドのみ外部に公開する。
    10.     // ⇒ データの隠蔽
    11.    
    12.     //属性に対して、アクセスするためのメソッド(操作)
    13.     public void setQ(int i){
    14.         ans = this.calc(i);
    15.     }
    16.    
    17.     //属性に対して、アクセスするためのメソッド(操作)
    18.     public int getA(){
    19.         return ans;
    20.     }
    21.     //-- ここまで
    22.     // 
    23.     private int calc(int i) {
    24.         return i+i;
    25.     }
    26. }
    27.  
    28. // 実行クラス
    29. public class DataPlay {
    30.     public static void main(String[] args) {
    31.         // 具象クラスのインスタンス化
    32.         Sample obj = new Sample();
    33.         // obj.ans=5
    34.         // int x = obj.ans は出来ない為、
    35.         // setQメソッドとgetAメソッドを使って操作する
    36.         obj.setQ(5);
    37.         System.out.println(obj.getA());
    38.     }
    39. }
    • DataPlay?クラスは、Sampleクラスの中に、
      ansという変数があり、Calcというメソッドを使って計算しているということを
      知らなくても、setQで値を設定し、getAで値を取得出来る
      ということを知っていれば、Sampleクラスを利用できる。
  • インヘリタンス(継承)
    あるクラス(オブジェクト)があるクラス(オブジェクト)の特性を引き継ぐこと。
    1. // Parent クラスの特性をChildクラスが引き継ぐ
    2. public class Child extends Parent {
    3.    public Child() {
    4.      oyaMethod();
    5.    }
    6. }
    • Parentクラスにメソッド oyaMethodが定義されている場合
      継承したChildクラスはoyaMethodを定義しなくても、
      メソッドを使用することが出来る。
  • ポリモーフィズム(多様性)
    メッセージの送信側(メソッドの呼出側)とメッセージの受信側(メソッド側)が動的に決まること。
    1. class SuperClass {
    2.     String str = "Super";
    3.     public void thisName() {
    4.         System.out.println("SuperClass");
    5.     }
    6. }
    7.  
    8. class SubClass extends SuperClass {
    9.     String str = "Sub";
    10.     // オーバーライド
    11.     public void thisName() {
    12.         System.out.println("SubClass");
    13.     }
    14.    
    15.     // 引数違いのオーバロード
    16.     public void thisName(String name) {
    17.         System.out.println("SubClass" + name);
    18.     }
    19. }
    20.  
    21. class ExeClass extends SubClass {
    22.     String str = "exe";
    23.     // オーバーライド
    24.     public void thisName() {
    25.         System.out.println("exeClass");
    26.     }
    27. }
    28.  
    29. // 実行クラス
    30. public class JavaPo {
    31.     public static void main(String[] args) {
    32.         // exeクラスのインスタンスを生成
    33.         ExeClass exe = new ExeClass();
    34.         // exeクラスのメソッド実行
    35.         exe.thisName();
    36.         // Subクラスから継承したexeクラスのメソッドw実行
    37.         exe.thisName("main");
    38.         // exeクラスの変数を出力
    39.         System.out.println(exe.str);
    40.         // Subクラスのインスタンスを生成
    41.         SuperClass oya = new SubClass();
    42.         //exeクラスのメソッドを実行
    43.         oya.thisName();
    44.         // SuperClassの変数を出力
    45.         System.out.println(oya.str);
    46.     }
    47. }
    • 生成するオブジュクトによって、どのthisNameメソッドを使うかを判断する。
      ※継承したクラスと同名のメソッドをサブクラスに定義することをオーバーライドの関係にあるメソッドという。
    • thisNameメソッドは引数違いで、用意されておりどのthisNameメソッドを使うかは、呼び出し元の引数で決定する。
      ※同名で、異なる引数を持つメソッドをオーバーロードの関係にあるメソッドという。

主なプログラミング言語

  • smalltalk
  • Java
  • C++
  • C#
  • Objective-C

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-16 (日) 19:17:43 (190d)