オブジェクト指向プログラミング

  1. 抽象化
  2. カプセル化
  3. 継承
  4. 多相性
  5. キャスト

    オブジェクト指向プログラミングの特徴は、抽象化、カプセル化、継承、 多相性です。

  1. 抽象化
  2. 抽象化とは、対象の重要でない性質を剥ぎ取り、適切な性質だけを残すことです。 このようなデータとデータの操作によって、抽象データ型が作られます。 関連するデータをまとめて取り扱う機能を構造体とかレコードと呼びます。

  3. カプセル化
  4. 抽象化をさらにすすめて、データ型とデータ、 それに関連する関数はなんらかの方法でまとめる必要があります。 これをカプセル化と呼びます。

    以下の c プログラムと同じ動作をする java のプログラムを比較してみましょう。
    java では、データの定義やコードは1つのクラスにまとまっています。

    [ c ]
    
    #include <stdio.h>
    typedef struct {
       int gram;
       int cals_per_gram;
    }  Fruit;
    
    int total_calories(Fruit *this) {
       return (this->gram) * (this->cals_per_gram);
    }
    
    void peel() {
       printf("peel a Fruit\n");
    }
    
    int main(int argc,char *argv[]) {
       Fruit plum = {5,45};
       Fruit apple ={55,0};
       int cals ;
    
       cals = total_calories( & plum);
       printf("total calories of plum =%d\n",cals);
       cals = total_calories( & apple);
       printf("total calories of apple =%d\n",cals);
    }
    
    
    [ java ]
    
    class Fruit {
       int grams;
       int cals_per_gram;
    
       Fruit() {
          grams    = 55;
          cals_per_gram = 0;
       }
    
       Fruit(int g,int c) {
          grams    = g;
          cals_per_gram = c;
       }
    
       int total_calories() {
          return grams * cals_per_gram;
       }
    
       void peel() {
          System.out.println("peel a Fruit");
       }
    
       public static void main(String[] argv) {
          Fruit  plum,apple,peer;
          int    cals;
    
          plum  = new Fruit(5,45);
          apple = new Fruit();
          cals  = plum.total_calories();
          System.out.println("total calories of plum = "+cals);
          cals  = apple.total_calories();
          System.out.println("total calories of apple = "+cals);
       }
    }
    

  5. 継承
  6. 継承とは、すでに定義されたクラスを基に、 そのクラスをなんらかの意味で拡張するために、別のクラスを作ることです。

    class Citrus extends Fruit {
       void squeeze() {
          :
       }
    }
    

  7. 多相性
  8. 多相性とは、たくさんの型という意味で、 同じ名前で複数のメソッドをもてるということです。

  9. キャスト
  10. キャストは、cから受け継がれた機能で、型変換を意味します。

    整数から浮動小数点数にキャストできるのと同じように、 拡張クラスから被拡張クラスへのキャストは可能です。 その逆は、安全ではないキャストで常に正しいとは限りません。 正しくない場合は実行時に例外が発生します。 キャストするには、型名を括弧でくくって、キャストされる オブジェクトの直前に置きます。

    somefruit = (Fruit) lemon;
    




まとめ

オブジェクト指向プログラミング