概要
オブジェクト指向(object-oriented)とは、ソフトウェア設計の考え方である。元々はプログラミングの手法のひとづだが、のちに拡張されデータベース、モデリング、ユーザーインターフェースなど各方面に適用されるパラダイムとなった。
解説
「カプセル化」、「継承」、「ポリモーフィズム」(多様性、辞書的な「多様性」の意味と異なるため「多相性」「多態性」とも訳される)がオブジェクト指向三大要素と言われるが、それらに共通しているのは、データと処理手順を別々に扱っていた従来の標準的な手法に対し、双方をひとまとめにして物事の解析と組み立てを行う点である。
オブジェクト指向三大要素
カプセル化
同じグループに属するパラメータや命令などをひとまとめにすること。
例えば車には「色」「大きさ」「速さ」などのパラメータがあり、「走る」「曲がる」「窓を開ける」などの動作がある。「車」というクラスを作ってこれらをひとめとめにすることを指す。
継承
クラスが他のクラスの要素を継承すること。
例えば「犬」「猫」「動物」という3つのクラスがあるとする。犬や猫は動物の一種であるため、動物クラスの要素を犬クラス・猫クラスに継承することで記述を簡略化したりできる。
ポリモーフィズム
同じ概念であってもクラスによって処理は異なるが、利用する側がそれを意識しなくてもいいようにするための概念。
歴史
1970年代に開発されたプログラミング言語、Smalltalkがオブジェクト指向プログラミングのはしりだが、当時この考え方は十分に理解されず、流行し定着したのは1990年代になってからである。
この考え方が広まったきっかけは、1980年代にビャーネ・ストロヴストルップが開発した言語、C++と、スティーブ・ジョブズ率いるNeXT社が開発したOS、NEXTSTEPにある。
C++は大規模なソフトウェアの開発に役立つよう、オブジェクト指向に加え手続き型プログラミングの考え方を取り入れ、1990年代においてオブジェクト指向プログラミングを一気にメジャーにした。現在はよりオブジェクト指向プログラミングに適合した設計になっているJavaやC#の方が主流となっているが、C++はこれらへの橋渡しの役を果たしたと言える。
NEXTSTEPはObjective-C(C言語とSmalltalk流のオブジェクト指向を融合させた言語)による開発環境を揃えていたのみならず、ユーザーインターフェース、データ管理など全てにおいてオブジェクト指向の考え方を取り入れ、各方面に影響を与えた。同OSは最初のWWWの設計に利用されたほか、世界初のWebアプリケーションサーバWebObjectsを生み出し、現在のインターネットの在り方を決定づけた。現在のmacOSとiOSは同OSの直系の子孫である。
オブジェクト指向プログラミング言語
オブジェクト指向三大要素を兼ね備えた言語。
上述のSmalltalk、C++、objcective-C、Java、C#のほか、Swift、Python、JavaScript、Ruby、Kotlin...など、現在広く使われる多くの言語がオブジェクト指向の考え方を取り入れている。...が、純粋なオブジェクト指向と言えるのはSmalltalkとRubyぐらいであり、多くは手続き型、関数型などとのハイブリッド言語(マルチパラダイム言語)である。
また、C言語のようにオブジェクト指向ではない言語も、オブジェクト指向の考え方に基づいた設計に利用されることがある(もちろん、オブジェクト指向言語を使った方がやりやすいが)。
手続き型言語との比較
- 簡潔に書けることが多い。
- 数値がカプセル化されているため外部からの変更を制限できる。
- 大型のプログラムを書きやすく、保守が容易である。
関数型言語との比較
- 動的な数値、型、配列が使えるため、動的な処理ができ易い。
- 多重継承でスパゲティプログラムになる可能性がある。