オブジェクト指向を超えてThe Rational Edge(1/3 ページ)

The Rational Edgeより:元ソフトウェア開発者のGary Pollice教授は、オブジェクト指向の概念を最初から学ぶコンピュータサイエンスの学生は、構造化プログラミングテクニックが染み込んだプログラマーより、これらをソフトウェア開発プロジェクトに応用するときに苦労しないと指摘する。本稿では構造化とオブジェクト指向の考えを考察し、オブジェクト・ファーストの教授法のメリットを解説して、アスペクト指向のプログラミング手法が普及する中でのアスペクト・ファースト・アプローチへの移行の可能性を考えてみたい。

» 2005年11月12日 12時00分 公開
[Gary Pollice(ワーチェスター工芸研究所業務学教授),@IT]

 筆者は、大学生のころ初めて携わったハイテク系の仕事の1つに関連し、ALGOLのサブセットを学習するクラスに1日参加しただけで4Kバイトのメモリを搭載したコンピュータをプログラムできた。筆者は、気象計算処理を実装するのに十分な文法を学んだのだ。いま思い出すと、マシンを制御して自分の命令に従わせるということは強烈な魅力だった。程なく筆者は、手当たり次第の教本を徹底的に調べ、ほかの言語も学習し始めた。しかし筆者は、優れたコードを書くにはコマンドシーケンスをまとめるだけでは足りないことにすぐに気付いた。人類は最近になって構造化プログラミングを発見し、筆者も、その手法だけでなく背景にある理論にも魅了された。一生をかけて熱中できる対象を見つけたのだ。

◆ 構造化プログラミングの紹介

 筆者は、構造化されたプログラムは制御構造を連続して応用することにより作成できる、と考えるBohm-Jacopini理論を早い時期に学んだ。この分かりやすい理論はプログラマーに幅広い影響を与えた[注1]。そこから、われわれはプログラムを構築するための選択肢について考えるようになった。この考え方は、各種プログラミング言語へ次々に影響を与えていった。1970年代半ばになると、優秀な開発者たちは構造化されたプログラミング、分析、デザインを使って業務ソリューションの開発に取り組んでいた。


[注1] この理論は、Corrado BohmとGiuseppe Jacopiniの共著による1966年5月出版の「Flow Diagrams, Turing Machines, and Languages with Only Two Formation Rules」ACM Communications 9(5)にある。当初、これには順番と選択のわずか2種類の制御構造しかなかった。その後作業が進み、利便性実現のために反復(ループ)構造が追加された。


 当時のコンピュータサイエンスやMISのカリキュラムは、構造化手法を力説した。機能分割は絶対であり、ツールが抽象化のレベルを引き上げ、設計上の複雑性を管理するのに役立つように思えた。構造化されたフローチャートの使い方を学び、ジャクソン構造化プログラミング法(JSP)や、実装の必要な機能の特定と分類に焦点を当て、一連のルールに基づいてこれらをモジュールに割り当てる手法を提供する構造化解析設計技法(SADT)のような手法を取り入れた。

 プログラミングの経験が多少あれば、構造化手法を学ぶのは簡単だった。自覚の有無は別にして、われわれは原理をすでに自分たちのものにしていたのだ。構造化プログラミングは、われわれの世界観と相性が良かったのだ。

 しかし、1980年代前半にオブジェクト指向(OO)が登場すると、これが劇的な変化を生み出した。初のオブジェクト指向言語であるSimulaが1960年代には投入されていたが、その影響は長続きせず、大半のプログラマーが1980年代までその存在を知らなかった。本格的なOOブームの引き金になったのは、言語であり、環境でもあったSmalltalkだった。Smalltalkを開発した、あの有名なXerox Palo Alto Research Center(PARC)の研究者らは、驚くべきビジョンをこれに対して思い描いていた。1978年にアリゾナ州トゥーソンで開催されたFifth Symposium on Principles of Programming Languagesでは、Dan IngallsがSmalltalkの論文を発表した。その論文の導入部が同氏の描くビジョンをかなり明解に述べている。

 Smalltalkプロジェクトの目的は、情報の世界であらゆる年齢層の子供を支援することだ。十分簡潔で強力なメタファーを特定して活用し、1人の人間が数字やテキスト、そして音や画像まで、さまざまな情報を利用し、創造的に扱えるようにすることが課題だ。われわれの経験では、Simulaのクラスとインスタンスの概念は、情報構造の傑出したメタファーだ。同じように、処理の記述にはメッセージ送信のコンセプトも簡潔かつ一般的であることが分かった。われわれは、この機構を既存システムの「仕様」として提供するのではなく、これら2つのメタファーをSmalltalkプログラミング言語の出発点とすることにした。その結果、パーソナルコンピュータでテキスト編集、デバッグ機能、ファイル処理、グラフィックス表示を独自に実現する動きの軽快なインタラクティブシステムが完成した[注2]。




 Ingallsは次に、「Smalltalk言語は、関数ではなくオブジェクトが中心になっており、コンピュータサイエンスの経験のある人は、そこで混乱する場合が多い」と続けている。だが、これは控えめな表現だった。COBOL、FORTRAN、Pascalといった手続き型言語を使ってプログラミングをしてきた人々は、オブジェクト指向の方法論を理解するのにかなり苦しんだ。もちろん、Smalltalkにも欠点はあった。変わったシンタックスを採用しており、それが一部の人には嫌われた。しかし、その環境と力を目にしたソフトウェアの本当のプロは、Smalltalkをもっと知りたいと考えるようになっていった。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.