オブジェクト指向とは?OOPが生まれた背景とその仕組み

基礎知識

オブジェクト指向とは

ソフトウェアの保守性や再利用性の向上を目的とした技術。

1つ1つの部品の独立性を高めて、それらを組み合わせて開発していく考え方に基づいている。

OOP(オブジェクト指向プログラミング)が生まれた背景

OOPは、それ以前のプログラミング技術の欠点を補うために生まれた。

OOPが生まれるまでのプログラミング言語の変遷(古い順)

言語説明問題
機械語コンピュータが直接解釈・実行可能な言語。人間にわかりにくい
アセンブリ言語機械語を、人間に分かりやすくするために文字列や記号で記述された言語。まだ人間にわかりにくい
高級言語
(高水準言語)
より高級な文法でできた、複数の機械語をまとめた言語。時代に求められる生産性や品質に追い付かない(ソフトウェア危機が浮上した時代)
構造化言語
(構造化プログラミング)
・基本三構造(順次進行・条件分岐・繰り返し)を提供し、より関数の独立性の強化した言語。
・GOTO文は非推奨。
・低い保守性と再利用性
・グローバル変数を多用せざるを得ない仕組み
※上に行くほど古い言語、下に行くほど新しい言語。

つまり、OOPは構造化言語(構造化プログラミング)の問題を解消するプログラミング言語として、以下の仕組みを備えて生まれた。

  • 保守性と再利用性を高める
  • グローバル変数を使用する必要がない

OOPの3つの仕組み

課題であったソフトウェアの保守性・再利用性の向上を、カプセル化(クラス)・ポリモーフィズム・継承の3つの仕組みを組み合わせることで実現した。(グローバル変数を使わずに済む仕組みはクラスで解消)。

カプセル化(クラス)

関連性の高い関数と変数を、クラスとして1つにまとめる仕組み(もともとはバラバラに関数や変数が存在していた)。その結果、保守性の悪化要因となるグローバル変数を使う必要がなくなったり、継承やポリモーフィズムも使用可能なので、クラス内のロジックをシンプルにできるようになった。

継承

関連性のあるクラスの同じ点と異なる点を整理して、重複するコードを統一する仕組み。スーパークラスと呼ばれる継承元のクラスの変数やメソッドを、継承先のサブクラスは使用することができる

ポリモーフィズム

クラス内の関数を呼び出す側のロジックを同じにして、重複するコードを統一する仕組み。

以下の例でいくと、呼び出す側(class Feed)のロジックを共通にすることで、DogとCatのeatメソッドをどちらも呼び出せる仕組みになっている。ちなみに、DogとCatクラスはAnimalクラスを継承している。

ポリモーフィズムの例

// スーパークラス
class Animal {
  abstract String eat();
}

// サブクラス1
class Dog extends Animal {
  String eat(){
    return "dog food";
  }
}

// サブクラス2
class Cat extends Animal {
  String eat(){
    return "cat food";
  }
}

// 引数animalにサブクラスをとり、animal.eat()という1つの実行文でどちらのサブクラスのeat()も実行できる。
class Feed {
  void execute(Animal animal) {
    System.out.printIn(animal.eat());
  }
}

タイトルとURLをコピーしました