今月の Software Design : 2013/06 ( その 2 )
「今月の Software Design 」の 6 月号の投稿の第 2 回目です。
今回は、今月の特集『ちゃんとオブジェクト指向できていますか?』についての要約と感想になります。
全体の構成としては、前半部分はオブジェクト指向におけるプログラムの設計についてのお話で、後半は各言語でどうやって書くかという形になっています。
それでは、以下でそれぞれのパート毎に見てゆきます。
○ 第一特集①:オブジェクト指向の基礎を学ぶ
オブジェクト指向で書くとどんな風に嬉しいのかについて保守性の観点から示しており、また実際に Hello World を拡張したプログラムをオブジェクト指向のテクニックを駆使して作成し、個々のテクニックのポイントについて紹介しています。後半では、オブジェクト指向プログラミングのスキルを上達させるためにはどうすればいいかという点について書いています。具体的には、if 文や for 文を減らし getter/setter はなるべく使わないようにしましょうといった注意と、コードを書く前にラフでクラス図書けよといった心構えについて、またどういった本が参考になるかといった参考書の紹介、そして最後により一般的なソフトウェアエンジニアとしての学習スタイルについての紹介をしています。
オブジェクト指向プログラミングを熟練者になるためには何に注意し、何に心がけるべきかといった具体的かつ的確な内容で、非常に勉強になる内容です。また、デザインパターンやリファクタリングについての名著の紹介がなされており、オブジェクト指向を本格的に学ぶためのファーストステップの記事として読んでおいて損はない内容だと思います。
○ 第一特集②:オブジェクト指向の学び方、教え方
構造化設計によって作られるプログラムや、手続き型プログラミングと比べて、オブジェクト指向プログラミングがどのように違い、どのような考え方をして設計するかといった話になります。具体的には、構造化手法では手続きといった処理を中心として考えますが、オブジェクト指向ではデータ型(クラス)を中心に考え、それらの抽象化してゆくという考え方をする点で異なるといった内容です。
こちらも読んでいて非常にわかり易く、エッセンスの詰まった内容です。構造化手法と何がどう違って、何が重要なのかという事をズバっと言ってくれています。またオブジェクト指向的な発想をする上で重要な3つの視点という事で、オブジェクト指向的な考え方のフレームワークを提供してくれています。
短い文章ながらも、オブジェクト指向について体系的に学ぶ上での概要を掴むには非常によい内容だと思います。
○ 第一特集③:組み込みからクラウドまで、オブジェクト指向は隅々と!
組み込み系の分野におけるオブジェクト指向での開発形態がここ10年くらいで進んできたよというお話です。タイトルに「クラウド」と書いてありますが、クラウドについてのお話は出て来ません(一瞬だけ業務系でのオブジェクト指向開発も進んでるよという話ができますが、それだけです)。後半では、アスペクト指向や関数型とオブジェクト指向のいいとこ取りをした Scala を引き合いに出して、オブジェクト指向について知らないと、更に発展的な話題にもついて行けないよという話をしています。
これまでのパート1、パート2とは毛色が違うお話です。何だかフツーな事が書いてある印象です。
○ 第一特集④:JavaScript でオブジェクト指向
JavaScript におけるオブジェクトとは何かという話から、プロトタイプベースのオブジェクト指向について、プロトタイプとは何で、インスタンスとプロトタイプの関連、そして JavaScript における継承とは何かということについて解説してくれています。最後に実践的な話題として、JavaScript を使った動的な Web ページの例で、内部状態を保持する部分をインスタンス化するとことでコードの見通しを良くするサンプルを示しています。
僅か4ページで JavaScript におけるオブジェクトとは何で、プロトタイプベースのオブジェクト指向について簡潔にまとめられており、非常に読み易い内容です。
簡単な会計処理を例に PHP のオブジェクト指向機能を使ってプログラムを書くとこんな感じだよという例を示しています。クラス設計は、機能と処理の分離という観点から行なっています。
恐らくこの記事のポイントは、ラスト1ページ後半に書かれている『どういったクラスを設計して、それぞれにどういった機能や処理を持たせるか』といった内容じゃないかと思うのですが、内容が短すぎて何を伝えたいのか十分にわからないのが若干残念な感じです。
Perl でのオブジェクト指向プログラムの書き方の基礎的な話をしています。具体的には Perl でポリモーフィズムをどうやって使うかについて、日付オブジェクトに対する演算処理を例に解説しています。
何だかちょっと物足りない内容です。オブジェクト指向プログラムを実現するために、オブジェクトではない Perl の組み込みデータタイプをどうやってオブジェクト化するかについては、もっと深淵な仕組みがあるように思えるのですが、その辺ほとんど触れられていないのが残念です。
特集記事全体の感想としても、何だかちょっと物足りない感じです。前半の設計論については、これについて調べる取っ掛かりの内容として非常に面白かったのですが、後半の各言語でどうやって書くかについては、内容的にも文量的にも中途半端な感が否めません。各記事の粒度やレベル感もバラバラな上、JavaScript と PHP と Perl という言語のセレクションも謎です。
やるんだったら、第二特集までぶち抜いて『オブジェクト指向言語機能の特徴のうち、コレとコレとコレについて各言語だとこう書くんだ!』といった内容を、上記の言語に加えて Ruby, Python, Scala, Scheme, Clojure くらいまで(あるいはもっと)網羅的に取り揃えてくれたら、まとめ記事として価値あるモノになったんじゃないかと読んでいて思いました。