メインメニューを開く

オブジェクト指向(オブジェクトしこう、: object-oriented)は、ソフトウェア工学理論の一つであり、ソフトウェア設計とプログラム記述の際に用いられる考え方である。元々は特定のプログラミング・パラダイムを説明する為に考案された言葉だった。object-oriented programmingのように修飾語として用いられるのが常であり、それ単体で扱われる事はない漠然とした設計構想でもある。

オブジェクト指向の成り立ち編集

オブジェクト指向(object-oriented)という言葉自体は、1972年から80年にかけてプログラミング言語「Smalltalk」を公開した計算機科学者アラン・ケイが、その言語設計を説明する中で初めて生み出されている[1]。他のエピソードによると、1967年に公開された「Simula 67」を当時大学院生だったケイが知った際に、object-orientedという咄嗟の造語で評論したのが発端だという。なお、Simula 67に結び付けられたオブジェクト指向と、後にケイ自身が開発するSmalltalkの理念とされたオブジェクト指向の性格は全く異なるものであったが、いずれにせよクラスオブジェクトの設計を備えたSimula 67もオブジェクト指向の草分けと見なされるようになった[2]。データとコードの複合体であるオブジェクト(object)という用語を確立したのはSimula 67であったが[3]、その設計は手続き型プログラミングの機能拡張に近いものである。ケイ自身は「LISP」の影響の方を強調しており[1]、実際に彼がSmalltalkで示したオブジェクト指向設計は全くの別物であった。その後、計算機科学者ビャーネ・ストロヴストルップが1983年に公開した「C++」が契機となって、オブジェクト指向に関連する様々な考え方が再定義されている。C++の設計はSimula 67の方をモデルにしていた。

上述の様にオブジェクト指向とは元々プログラミング・パラダイムとして編み出された理論であったが、1980年代からデータベースOSの開発にもその設計構想が活かされるようになり、1990年代になるとソフトウェア工学の幅広い面にも応用されて、オブジェクト指向を土台にした様々な分野が開拓される事になった。

オブジェクト指向の分野編集

オブジェクト指向は、プログラミング・パラダイムとして誕生した知識体系である。そのデータ(変数またはプロパティ)とコード(関数またはメソッド)のセットを基本要素にして物事を解析する考え方が、1980年代から大きく注目され始めた事で、ソフトウェア工学のあらゆる局面にobject-orientedを接頭辞にした分野が立ち上げられた。大まかな特徴としては、情報資源と処理手順を別々にして分析ないし設計を行っていた従来の標準的な手法に対し、オブジェクト指向と名が付く分野ではこの双方をひとまとめにして物事の解析と組み立てを行う点が共通している。

他にも、オブジェクト指向オペレーティングシステム、オブジェクト関係データベースオブジェクト関係マッピングオブジェクト指向ソフトウェア工学、オブジェクト指向ユーザーインターフェース、オブジェクト指向プロジェクト管理、ブーチメソッドオブジェクトモデル化技法など数々の分野が存在するが、上記リストの四種と知識範囲が重なり合っているか、または内包される副次分野となっていることから、一つの分野として特筆される事は少ない。

オブジェクト指向とは編集

コンセプト編集

オブジェクト指向(object-oriented)の言葉を生み出した計算機科学者アラン・ケイは、1970年代に発表した文書の中でその設計構想を六つの要約で説明している[1]

1, EverythingIsAnObject.

2, Objects communicate by sending and receiving messages (in terms of objects).

3, Objects have their own memory (in terms of objects).

4, Every object is an instance of a class (which must be an object).

5, The class holds the shared behavior for its instances (in the form of objects in a program list).

6, To eval a program list, control is passed to the first object and the remainder is treated as its message.

— Alan Kay

以下はその和訳である。

  1. すべてはオブジェクトである。
  2. オブジェクトはメッセージの受け答えによってコミュニケーションする。
  3. オブジェクトは自身のメモリーを持つ。
  4. どのオブジェクトもクラスのインスタンスであり、クラスもまたオブジェクトである。
  5. クラスはその全インスタンスの為の共有動作を持つ。インスタンスはプログラムにおけるオブジェクトの形態である。
  6. プログラム実行時は、制御は最初のオブジェクトに渡され、残りはそのメッセージとして扱われる。

また、2003年にオブジェクト指向の意味を再び尋ねられたケイは、恐らく巷のプログラミングで言われる「カプセル化、継承、多態性」を意識した上でこのように答えている。

OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.

(僕にとってのオブジェクト指向とは、メッセージング、ローカルな記憶保持と保護と実行状態の隠蔽、徹底的な遅延バインディング、これに尽きる)

— Alan Kay

オブジェクト指向を提唱する中でケイは「LISP」の影響を受けた事を言及しているが、具体的に参考とされたのは、lambdaのキーワードで表現される高階関数の仕組みと、atomと定義されるデータ表現であったという[1]。それらに加えて、初期に発表された六つの要約と、後にケイが明かした三つのコンセプトを踏まえた上でオブジェクト指向を読み解いていく。

その解釈編集

脚注編集

  1. ^ a b c d Alan C. Kay. “The Early History Of Smalltalk”. 2019年2月1日閲覧。
  2. ^ How Object-Oriented Programming Started
  3. ^ Jonathan Aldrich and Charlie Garrod (2014年). “OO History: Simula and Smalltalk”. 2019年2月1日閲覧。

関連項目編集

外部リンク編集