疾走するネット・ダイナミズム

第7回 オブジェクト指向は「正しい」のか?──科学技術としての考察

この記事を読むのに必要な時間:およそ 2 分

筆者よりプログラミングやソフトウェアエンジニアリングにずっと詳しい読者に対して,身の程知らずのそしりを免れないタイトルだが,この連載の開始にあたって「多角的な視点から」というのを強調したと思う。ひとつの考え方として捉えていただければ幸いだ。

オブジェクト指向の「波」

現役エンジニアの読者諸氏にしてみたら素人同然の私だが,これでもエンジニアとしてプログラミングや回路設計などでメシを食っていた時代もある。初めてのプログラムというものに接したのは本と雑誌で読んだBASICだった。実際に自分でプログラミングをしたのはアセンブラ(というかマシン語)が最初だ。SDK-85とかTK-80の時代だったので,BASICなんて「ASR-33」といったテレタイプ端末がないと使えなかったからだ。

就職してからは,ロジック回路などをやりながらFORTRAN,BASIC,C言語あたりを使っていた。COBOLの経験もあるが,オブジェクト指向言語との遭遇は,プロフィールにあるアスキーに転職したときだ。編集部に見慣れない端末(ワークステーションだった)が置いてあり,それがテクトロニクス製のSmallTalkマシンだと聞かされた。先輩編集者がSmallTalkの本を作るので,編集部で購入したそうだ。

そのときは,オブジェクト指向という概念は理解できなかったが,OS,もしくはハードウェアでガベージコレクションをしてやらないとまともに動かない処理系という印象が強く残っている。その後,Objective-CC++などオブジェクト指向の「波」がやってくる。Eiffelなんて言語もあった。プログラミングの書籍でも,オブジェクト指向を解説しようとする本がやたらと出版された。私も「Little Small Talk」なんてPC向けの処理系の本の編集をやらせてもらったことがある。

初期のころは,クラス,メソッド,オブジェクト,継承などの概念を説明する本が流行ったと思う。「リンゴ」「みかん」などを集めたものが「くだものクラス」だ,動作(処理)と属性(変数)を単位として考えるプログラミング,などといったやつだ。なぜそれがうれしいかというと,モジュール化が進み,抽象度も高くなり,コードの再利用ができ,バグが減り,効率が上がり,ひいては「ソフトウェアクライシス」に対応できるからだとされた。

時代は「オブジェクト指向ありき」

その後,これらの意見の正しさを証明するかのように,プログラミングの手法が変わっていった。C++やVC++が普及し,Javaのブームがきた。解説書も,説教くさい「オブジェクト指向とは?」といったスタイルの解説書から,プログラムっていうのはこういうものだというオブジェクト指向ありきの解説が主流となる。なまじ,手続き指向の知識を前提にオブジェクト指向を教えるより,プログラムはライブラリをインクルードしてメソッドを呼び出して、と教えるパターンだ。オブジェクト指向の抽象化やコードの再利用によって効率を上げようというのは,裏を返せば適切なスキルがなくてもプログラミングできるようにするという側面もある。最低限のアルゴリズムさえ理解できれば,言語仕様その他の細部を気にしないで済ませることができるからだ。

Microsoft Visual Studio(Visual C#)
MicrosoftのIDEもオブジェクト指向なしには成立しない

Microsoft Visual Studio(Visual C#)

これを加速させたのはIDEだろう。できのよいIDEは,あたかもアプリケーションソフトを操作するようにプログラムを作り上げていく。「ユーザ」はコーディングのスキルや知識がなくても,マウス操作ができれば「プログラマ」になれるわけだ。これはあまりに表層的な捉え方だという反論はあるだろう。どんな優秀なツールを使おうとも,本質的なアルゴリズムやロジックを理解できない人間にはまともなプログラミングはできないはずだ。それは全面的に正しい。しかし,その反面,正論や理屈はともかくスキルのない人間にコードを書かせる実態があるのも事実だ。

著者プロフィール

中尾真二(なかおしんじ)

1961年生まれ。ハードウェア・コンピュータ技術者からアスキーに転職し,およそ10年ほど技術書籍・雑誌の編集に携わる。その後,オライリー・ジャパンで5年ほど企画・編集に従事。編集長時代に当時の日本法人社長とケンカしてクビに(笑)。現在はRBB TODAY,レスポンス他でニュース,コラムなどを編集・執筆。

コメント

  • Smalltalk

    SmallTalkではなく、Smalltalkでは

    Commented : #1  naruse (2008/06/02, 14:11)

コメントの記入