C言語で説明しているからこそオブジェクト指向が理解しやすい ―― 『C言語によるオブジェクト指向プログラミング入門』

中佐藤 麻記子

tag: 組み込み

書評 2010年4月 9日

 

『C言語によるオブジェクト指向プログラミング入門』
著者 坂井 弘亮
出版社: 翔泳社
ISBN-10: 4798121134
ISBN-13: 978-4798121130
328ページ
発売日: 2009年12月15日
価格: 2,940円(税別)
Amazonで購入

 評者は,普段の業務がトレーニングやコンサルティングで,オブジェクト指向に関連する技術指導を行う機会が多くあります.その経験から,オブジェクト指向を理解するには,上から(つまり概念や開発プロセスを理解する)と,下から(それをどう実装するかを理解する)の両面からアプローチしなければならない,と考えています.上からだけでは実感が湧かないし,下からだけでは「どうやったらクラス化すべきものを見つけられるのか」が分かりません.本書は,実装から(つまり下から)オブジェクト指向を理解するための入門書です.しかも,本来はオブジェクト指向の言語ではないC言語を使用してオブジェクト指向を実現しようとしているおかげで,オブジェクト指向で実装するには何をすればよいのかが,より分かりやすくなっていると感じました.

 「オブジェクト指向を使いたいけれど,自分のプロジェクトではC言語しか使えないから無理」と思っている方には,ぜひ読んでいただきたいと思います.オブジェクト指向を使うことと,オブジェクト指向の言語を使うことは別ものであることを理解していただけると思います.

 逆に,JavaやC#などのオブジェクト指向言語を使っているにもかかわらず,オブジェクト指向を使えていないと思っている方々にも読んでいただきたいと思います.「C言語を使っているから,コードが難しいのでは?」と思われる方もいるかもしれません.しかし本書の中で示されているコードは,いわゆるC言語にありがちなトリッキなコードではなく,非常に分かりやすいコードです.ポインタの概念は理解している必要がありますが,JavaやC#を使っている方にも読みやすいコードだと思います.

 本書のオブジェクト指向の説明は,いわゆる「ベタな(まったくオブジェクト指向ではない)」コードを提示するところから始まり,それをオブジェクト指向の概念を使って徐々に変化させています.抽象化・カプセル化・インスタンス生成・継承・多態性,という順序で,オブジェクト指向を導入しています.

 オブジェクト指向は難しいもの,と思われている方は,最初の変更の内容に拍子抜けされるかもしれません.それは,「コード内の変数を分かりやすい変数名に変更する」ということですが,「これがオブジェクト指向なのか?」と思う方もいるでしょう.しかし,プログラミング言語の歴史は抽象化の歴史です.0/1の世界から始まり,アセンブリ言語,C言語などのいわゆる高級言語と呼ばれた言語,そしてオブジェクト指向言語と続く歴史は,プログラミング言語を,より人間に分かりやすく抽象化するための努力の歴史と言えます.変数名を分かりやすくするのは,この過程の一つとも考えられます.

 オブジェクト指向の概念が段階的に適用されているので,必要な範囲までで適用を止めることも可能です.たとえば,抽象化やカプセル化の部分だけを使うことも可能ですし,それだけでも十分に効果があることでしょう.継承を実現させるために,ヘッダ・ファイルをプライベートとパブリックに分ける手法なども,「なるほど」と思わせてくれます.これは,protectedという可視性を実現するための手段と考えることができます.

 個人的な意見ですが,たとえば,「クラスの再利用が促進されることは,継承の副作用にすぎない」という記述など,本書のオブジェクト指向の概念的な説明の中には,少々賛成しかねる点もあります.しかし,これについては,見方の違いだけとも言えますので,判断は読者の皆さんにお任せします.ただ,オブジェクト指向の初心者の皆さんには,ほかの概念的な説明をしている書籍も読んで,いろいろな意見があることは知っていただきたいと思います.

 内容というより,見せ方の面で残念なのは,コードとそれを説明する文章が分離しているところが多いことです.前述の通り,分かりやすいコードですし,コメントもついているのですが,せっかく書籍という形になっているのですから,コード内に説明のフキダシをつけたり,図で説明したりしていれば,より分かりやすいものになったのでは,と感じました.

 コードを分かりやすく,メンテナンスしやすく,再利用しやすいものにするための手法は,もちろんオブジェクト指向だけではありません.モジュール(クラス)単位ではなく,もう少し大きい粒度でコードを分離する方法を知りたいという方は,コンポーネント指向の考え方も検討してみましょう.これも,基本はオブジェクト指向のカプセル化から発展したものです.

 最近とみに感じることは,ソフトウェア・エンジニアリングにおいて,オブジェクト指向は「知っていて当たり前」の技術になりつつあるということです.各種パターン技術やアジャイル開発手法も,ベースにあるのはオブジェクト指向です.ソフトウェア関連技術において,新しいことを学ぼうとするとオブジェクト指向は,すでに前提となる知識です.新技術を学びたいという向上心をお持ちであれば,オブジェクト指向を理解することは必須です.「C言語だから」,「組み込みだから」,「自分のプロジェクトでは(自分には)オブジェクト指向は関係ない」と思わず,ぜひ挑戦してみてください.

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日