オブジェクト指向

2007年07月22日

デザインパターン本をじっくり読んでいます

 デザインパターン本を何冊か読み比べながら、じっくり読んでいます。
 良いインターフェイスとか、抽象化とか、漠然とイメージしていたものが、
 少しずつ明確になっていくような気がして楽しい。

 常日頃、良いプログラムは複雑さを最大限に取り除いているプログラムだと標榜して、そのためのプラクティスを考察してきましたが、

 デザインパターンは複雑なものを単純にできるが、
 単純なものを複雑にしてしまう危うさも含んでいる。

 あたりまえか・・・

 Hello Worldを出力するだけのスクリプトに、
 デザインパターンを導入する労力を思えば適切なプラクティスの選択の必要性は明白だと思う。

 要は、そのバランスなのだが、
 これはもっと、もっと考え続けて、色々な経験を積んで磨くしかないのだと思う。

2007年02月10日

本の紹介「PHPによるデザインパターン入門」

 オブジェクト指向について

 「なんとなく理解したかなぁ」

 と思う瞬間は多分、
 「社長命令・起立!」
 のような多態性の便利さを知ったときだと思う。

 *社長命令・起立についてはネットを検索するか、オブジェクト脳の作り方という書籍を参照してください。

 その次に、「前よりは理解したかなぁ」と思うのは、
 デザインパターンについて学んだときのはずだ。

 デザインパターンはオブジェクト指向でプログラミングする際に、
 良く使われるパターンをまとめたものだが、
 パターンそのものもさることながら、
 
 隠蔽や、凝集度へのアプローチに触れることはオブジェクト指向初級者を大きくレベルアップしてくれると思う(私はそう思った)。

 個人的には「Javaで学ぶデザインパターン入門」が覚えやすくてオススメだけど、タイトルの通り言語はJavaを用いて書かれているので、PHPしか触れたことの無いという人なら、本書でデザインパターンの門をくぐるのも良いと思う。

 入門の先は、
 「アジャイルソフトウェア開発の奥義」
 経典的著作「オブジェクト指向における再利用のためのデザインパターン」が良い教師となってくれるはず。

 もちろん、本を読むだけではなく実践が必須だけど、
 我流の妙なクセが付く前に先達の知恵に触れることは良いことのはずだ。


PHPによるデザインパターン入門


2006年12月18日

補足、switch文が無くなるとは?

 オブジェクト指向はプログラムから複雑さを取り去ってくれたり、
 モジュールを少ないインターフェイスだけの弱い結合にしてくれます。

 Webアプリケーションで典型的な、
 コントローラーの形として、

//**********************************************************

 if (文章の投稿なら) {

// 文章を投稿するための処理

 else if (文章の削除なら) {

   // 文章を削除するための処理
 } else {

// 更新するための処理

 }
 共通の処理・・・。
 if ・・・// また条件によって分岐したり

****************************************************//

 というコードを書いたことがあると思います。
 ifの変わりにswicth文にしても同じです。

 私は一度に多くのことを処理するととたんに処理能力が低下するありふれた人間でしたので、このif文やswitch文の構造が嫌いでした。
 この状態による分岐はオブジェクト指向を学ぶことにより、よりスッキリした形になります。
 隠蔽という概念も用いて書くと、実に状態による条件分岐を亡くすことができます。

 簡単にコードを書くと、

//*******************************************************

 $Factory = new Factory();

$State = $Factory->createState(状態);

 $State->setData(処理に必要なデータ); // 必要なデータをセット

 $State->execute(); // 実行

 $State->show(); // 表示

********************************************************//

 こんな感じになります。
 2行目の状態に、投稿や削除、更新を表すフラッグを渡し、次にその処理に必要なデータをセットして、処理を実行、そして表示というシンプルな構造だけを表面に残すことができました。

 $Factory->createStateで$Stateには投稿や、更新の処理を行う各処理が書かれています。それらが同じメソッドで統一して呼び出せること、そしてそれらが一つのソース上に存在しないことはプログラムを読みやすくします。例えば削除ならstateDeleteクラスだけを読めば良いので、これは更新、これは削除、これは投稿とifやswitchの海を掻き分けて泳ぐ必要が無くなります。

 これはオブジェクト指向の中でも私が好きな用法の一つです。

 そんな抽象的なコードでわかるかい!!
 というかたは、デザインパターンやFactoryパターン、Stateパターンなどで検索してください。
 わかりにくいのを覚悟でクラス名をパターンだとわかりやすいようにしました。

 上のようなStateのパターンに近い実装を手続指向の記述でもできる、と感じた人もいると思います。私もできないことはないかなぁと思ったりしますが、大事なのはオブジェクト指向は、上のような書き方の利点や、自然とそういう書き方になるような価値観を伝えてくれるのです。大事なのはパターンを覚えることではなく、パターンの土台となる考え方であり、オブジェクト指向は自然と教えてくれます。

 いや、私も、そんなに理解しているわけでも、使いこなしているわけでも無いのですけど・・・。

2006年12月11日

オブジェクト指向と初心者の関係

 前に書くよぉ、と宣言した思うから、
 「オブジェクト指向が初心者にとって難しいのはなぜか?」
 について書いてみようと思う。

 クラスについての書き方や、言語仕様などの覚えることがそうで無い言語より単純に多い(CとC++のように)というのも無いわけではないけど、
 大きな理由は、

 「どこが便利なのかわからない」

 ということに尽きると思う。例えば、

 変数をカプセル化するから、グローバル変数のような意図しない変更などでのバグを防げる。

 といっても、グローバル変数による把握のし辛さは、
 初心者レベルの100行から300行ぐらいのコードでは十分に把握でるから、実感が湧かないと思う。

 オブジェクト指向は、アプリケーションの規模が大きくなるほどに意味をもってくるのだけど、100行ぐらいのプログラムだと、

 「オブジェクト指向でないほうが楽」

 だと私は思う。
 そう、入門書のレベルのソースコードはオブジェクト指向にすると手間がかかるだけだったりする。極端な話、クラスを用いたプログラミングがなんとなくわかる人は、HelloWorld(定番)をクラスを用いて書くことの面倒くささを思ってくれれば良いと思う。

 最初は、非オブジェクト指向言語(これなんていうんだろ、関数型言語、手続指向言語?)の方が楽であり、そもそもプログラミング自体に不慣れな初心者にとって、余計に覚えることがあって、しかも利点の実感しづらいオブジェクト指向は敷居が高くて当然。

 ただし、上記のことが成立するのは、
 プログラムが単純で、短い場合に限る。

 オブジェクト指向は複雑さを軽減してくれる。
 そもそも十分に単純なプログラムにおいては、軽減しようもなく、手間だけが増えるというわけ。

 今後複雑さが増えると絶対オブジェクト指向の方が楽になるから、最初は不毛でもオブジェクト指向を使いなさいよ。というより、

 最初は非オブジェクト指向である程度プログラミングをして、300行ぐらいのコードをリファレンス片手に書けるようになったら、オブジェクト指向を勉強した方が身につけやすいよ、というのがオススメの方針。

 オブジェクト指向は、直感的にとらえにくく、上から下に流れる非オブジェクト指向言語の方が簡単だが、プログラムの規模が直感的にとらえにくくなったら、オブジェクト指向の良さがわかってくるはず。

 書きながら、オブジェクト指向が大規模プログラミングで簡単になるということを前提にしているのは、説明不足だけど、これは後で追々話すとして今は信じてもらいたい(おい・・・)。
 オブジェクト指向を使うと、複雑なswich文などをシンプルにすることができる。といえば、なんとなく良いかなぁと思っていただけるかな、ここら辺の説明も後にゆずるけど、これを聞いて???の方は多分、まだオブジェクト指向をよく理解していない。いや、私も新米なんで、理解している人から見たらまだまだなんですけどね。

 オブジェクト指向の利点をすぐに説明したいところだけど、
 次はもうちょっと上の中級者や、職業プログラマーの視点からオブジェクト指向の難しさを話してみようと思う。

 なんだか、難しいとばかり書いているけど、
 オブジェクト指向を使った方がプログラミングは楽になるんですよ!!

2006年12月04日

オブジェクト指向で行こうよ!!

 オブジェクト指向は難しいとか、
 オブジェクト指向言語(そんな呼称ある?)を勉強しようとして挫折した、
 という話を良く聞きます。

 現場にいても、オブジェクトを用いているけど、
 オブジェクト指向の意味を理解していないようなコードがたっぷりです。
 いや、プログラミング歴9ヶ月、実務経験4ヶ月の中年新人なんで偉そうなこというのはオコガマシイというやつなんですけどね。

 それでも、構造化プログラミングからオブジェクト指向プログラミングに移るメリットは大です。
 基本、本ブログは入門者、初級者向けにプログラムの楽しさを伝え、あわよくば将来のプログラマー人材確保のために過酷な現場の惨状を隠しつつ、プログラミングの楽しい部分のみを伝えよう、という趣旨なので、なるべくソースコードを少なめにオブジェクト指向の利点を書いていきたいと思います。

 そもそも、オブジェクト指向がただ難しいだけなら、
 実用され、最近の言語が大概オブジェクト指向を用いてプログラミングできるような仕様になっているはずは無いですよね。

 次回はまず、なぜオブジェクト指向が難しいといわれるのか(日曜プログラマーの視点で)について書いてみたいと思います。

Profile

シーラカンス

Recent Comments
QRコード
QRコード
livedoor Readerに登録
RSS
livedoor Blog(ブログ)