オブジェクト指向ってなんだ?
オブジェクト指向がよくわからない。。。
ので、いままで見聞きした情報を整理してみたい。
歴史
大規模化したプログラムを効率よく記述しプログラム設計上のミスが起こりづらいようにするための方法論
として、「順次・反復・分岐」の3つの基本的な論理構造で構成される「構造化プログラミング」が1967年にエドガー・ダイクストラにより提唱される。構造化プログラミング - Wikipedia- コンピュータの高速化およびソフトウェアの複雑化に伴い、ソフトウェアの需要に供給が追いつかない危機的状況=「ソフトウェア危機」が1968年にNATOの会議にて議題に上る。
- 1967年にシミュレーション用の言語として「Simula」が開発される。
開発の動機は、ある制限下におかれたモデル群の全体の挙動をどう記述するか、というものである。気体の分子運動を例にとると、システム全体を考えてその中の項として分子を扱うよりも、一つの一つの気体分子をモデル化し、それぞれの相互作用の結果をシステムとして捉える方が自然で取り扱いやすい。その為には小さなモデル、関連する法則、それらを一度に複数取り扱う能力が必要となる。こうして属性を備えたオブジェクト概念と、それに従属するメソッド概念が生まれたのである。
http://ja.wikipedia.org/wiki/Simula
オブジェクト指向プログラミングの三大特徴
カプセル化(隠蔽)
- 関連したデータと処理をオブジェクトにまとめる
- 外部からアクセスできるデータと処理を制限することで、外部からの不必要な干渉を除外することでプログラムの崩壊を防ぎよりシンプルな構造にすることができる
- オブジェクトの利用者は使用方法のみ知っていれば良く、再利用性に優れている
継承
- オブジェクトの内部をいじることなく、オブジェクトの拡張をすることができる
オブジェクト指向言語の分類
オブジェクト指向言語は大きく「クラスベース」と「プロトタイプベース」に分かれる
クラスベース
- クラスと呼ばれるオブジェクトの設計図をもとに実際に利用されるオブジェクト(インスタンス)を生成するタイプ
- クラスを継承する事により機能を拡張することができる
- クラスにメソッドが集約される為、メモリの節約になる
プロトタイプベース
- クラスを持たないオブジェクト指向言語
- すべてのオブジェクトは既存のオブジェクトをコピーすることにより生成される
- クラスを持たないため、クラスによる複雑性が排除されている