








アラン・ケイによる「オブジェクト」について、と「完全なカプセル化」の解説
[Hacker News への 2017-09-27 投稿のコメント より]
ここで補足説明をしておきましょう。私(アラン・ケイ)が1966年頃に「オブジェクト」と名付けたものについて考える時は、我々がコンピュータと思うものと外見上同一のエンティティについて話しています。( これは単にメッセージを送り結果を得るということだけではなく、そのコンピュータの内部で起こっているものが許可しない限り、我々はメッセージで内部を覗くことも、命令を下すこともできないことを意味します。)
外からは「オブジェクト」に強制的に何かをさせることはできません。できるのは「お願い」や「問合せ」だけなのです。別の見方では、この「オブジェクト」(すなわちコンピュータ)はある種の「サーバー」です。(この用語は他の意味合いでも使われるため慎重にすべきですが、「オブジェクト」の性質を表すのに良い言葉だと思います。)
あるいは「完全なカプセル化」と呼ぶのもよいでしょう。
この観点からすると、中身が何であるかはわかりません。ハードウェアだけかもしれません。変数やメソッドかもしれません。ある種のオントロジー(より高度に組織化された情報体系)かもしれません。またはそれらの混合かもしれません。
これが「オブジェクト」をネットワーク上のコンピューター、特に大規模な世界規模のネットワークに喩えることの意味です。
この「オブジェクト」という考え方を導入することで、大規模なシステムに必要な要素を、データ構造や手続きで事足りていた昔の小規模なシステムのときと同様に、よりシンプルな形で提供できるようになります。また、あらゆる規模において、従来のデータ構造や手続きに関する問題の一部は「システムを複数の万能なサーバーにより構成する」という考え方に頭を切り替えることで解消できるでしょう。
同様に、既存の「データ構造」——大規模なスケーリング、「アトミックなトランザクション」、バージョン管理、冗長性、分散、バックアップ、そして「手続きフィールド」(「年齢」のような属性を持つもの) など、特別な対処が必要な事項——それ自体についても、「オブジェクト」を用いることで、それぞれをもっと簡単で洗練された形でシミュレートすることが可能です。
プログラミングの進化を見ると、コンピュータがまだ小規模だった時代の素朴な方法の多くは、大規模化に適応できなかったことがわかります。しかし、ほとんどのプログラマーは古い素朴な手法に固執し、さらに彼らは次世代のプログラマにも元の方法を教え続けた結果、古い方法に精通した専門家が維持、修正、拡張しなければならない、壊れやすい大規模なレガシーコードが生み出される結果を招いてしまったのです。
このページを編集 (2315 bytes)
 |
このページは Swiki ブック内で孤立しています。 |
This page has been visited 178 times.