オブジェクト指向プログラミングとの出会い

オブジェクト指向との出会い

1980年代は、構造化プログラミングの時代でした。構造化プログラミングが定着して構造化設計手法が注目されていました。
私は、情報処理学会主催のソフトウェア工学シンポジウムを聴講しました。シンポジウムの目玉は、構造化設計手法についてのパネルディスカッションです。ひとつの簡単な例題について、企業のソフトウェア開発者(有識者)が、ジャクソン法/HIPO図/PAD図などの各種設計手法でプログラム設計してディスカッションするものでした。

私も、構造化設計手法に興味をもっていましたから、とても興味深く聞くことができました。質疑応答のときに、大学院生の質問に驚きを覚えました。

「この問題は、AオブジェクトとBオブジェクトの間でメッセージを送ることにより簡単に解決できると思います。開発の現場では、オブジェクト指向を使わないのですか?」

オブジェクト指向については聞いたことはありましたが、開発の現場では使われていませんでした。大学院生の頭の中では、オブジェクト間のメッセージパッシングにより解決するのがとても自然なように主張していました。

有識者は、この質問にどのように答えたかは記憶に残っていません。記憶に残ったのは、大学院生がオブジェクト指向的な考え方をしていたという驚きでした。

C++言語でオブジェクト指向を

1990年代ごろはオブジェクト指向が注目され、技術情報誌などで紹介されていました。

私は、実際の開発で使用する機会がなかったので、オブジェクト指向について十分な理解ができませんでした。この当時の私にとって、オブジェクト指向はとても理解しづらいものでした。最初は「オブジェクト」という言葉が機械語のオブジェクトコードをイメージしてしまい、理解をさまたげました。

1994年にWindows for Penのアプリケーション開発を担当しました。C++言語を使用してプログラムするために、オブジェクト指向を勉強しました。C++言語の解説書やマイクロソフトC++のマニュアルなどを読んで、クラスとインスタンスの違いや、継承などを理解して少しわかりはじめました。

この開発では、C++言語を使用してクラスを作りプログラミングしました。しかし、正直言ってオブジェクト指向設計にはなっておらず、C++風のC言語によるプログラミングになりました。

C++言語での開発経験を積めば、オブジェクト指向設計やオブジエクト指向プログラミングについてもっと深く理解できたと思います。

C++言語からアセンブラ言語に逆戻り

1995年からは携帯電話の組み込みソフト開発に着手しました。その当時の組み込み系は、C言語が主流でC++言語使われておりませんでした。

さらに、1997年からは、独自のDSPプロセッサを使用した画像コーデックの開発に着手しました。C言語も使えず、アセンブラ言語による開発です。開発環境が10年ほど逆行して昔に戻った感じです。設計をオブジェクト指向で行い、アセンブラで実装するという考え方もありますが、解決すべき課題が多くオブジェクト指向をしっかり勉強する余裕はありませんでした。

その後も、TI C64x DSP を使用した開発などを担当していたので、C++言語から遠ざかっていました。

オブジェクト指向設計で開発

2010年に、組み込み系のリアルタイムシステムの開発を担当しました。組み込み系でもARMプロセッサでC++言語が普通に使うようになりました。オブジェクト指向設計でシステムを設計して、C++言語で実装することにしました。

オブジェクト指向は、C++言語での開発を経験してから10年以上もギャップがありました。数ヶ月の開発期間と日程が厳しいので、勉強のための十分な時間は確保できませんでしたが、オブジェクト指向とC++言語について再度勉強しました。
オブジェクト指向から遠ざかっていた間も、技術情報誌の記事などを読んでいましたので、技術スキルが向上し短時間で理解することができました。

下記書籍などを流し読みして、十分理解した上で開発に挑みました。

  • いちばんやさしいオブジェクト指向の本
  • オブジェクト指向プログラミング―OOP、Java、UML、OOD、GoF
  • 組み込み現場のC++プログラミング
  • 組み込みエンジニアのためのC/C++プログラミングのヒント
  • C++入門書の次に読む本

お客さまが作成した要求仕様に従って設計開発しプロジェクトを推進していました。3名体制で開発を進め、当初は順調に進んでいました。

しかし、仕様変更が度重なり開発は難航しました。お客さまとの間に親会社のシステムエンジニアが入っていて、直接に打ち合わせできない状態でした。お客さまが本当は何をやりたいのか?一歩踏み込んで開発できなかったことを反省します。

休日出勤や残業で対応して、なんとか要望するソフトウェアを開発し納品することができました。
とても苦労しましたが、短期間でオブジェクト指向を実践して学びの多いプロジェクトでした。