フリーのスクリプトを少しいじれる程度のスキルです。
この際、プログラミングを本格的に勉強したいと思ったのですが、
classやオブジェクト指向という概念がいまいち理解できません。
参考となるようなページを教えて下さい。
よろしくお願いします。
サイトではなく書籍の紹介になってしまいますが、
http://www.amazon.co.jp/gp/product/4894716844/249-4607740-280756...
はお勧め出来ます。
サイトの紹介ではないのでポイントは結構です。
私の場合は http://www1.u-netsurf.ne.jp/~kitada/3H/ ココでしたね。
あと少し探してみましたが http://kmaebashi.com/programmer/object/
この人は、「一般的な入門書は分かり難いからやめよう」という
既存プログラマー向けの解説寄りなので良いかもしれません。
あまり難しく考える必要なく
とりあえずクラスの概念を理解して使用できるようになって
後は「1つ1つの事象」に1つのクラスを渡して、それぞれを纏めて連携させられるモンが出来れば
知らないうちに「とりあえず」オブジェクト指向になります。
――なんていうと怒られますが。私はそう思ってます。
というよりも私自身、あまり膨大で複雑な案件になると
「資産管理」が非常に面倒になってウガーになるので
オブジェクト指向は触り程度しか自覚できてません。
……ああ。あと。
Javaもプログラムも知らない妻が「オブジェクト脳になった」と言ってはしゃいだと評判の
『オブジェクト脳の作り方』は読んで面白いかもしれません。
立ち読みして理解できそうなら、どうぞ。
オブジェクト脳のつくり方―Java・UML・EJBをマスターするための究極の基礎講座
上記2サイト拝見しました。読む前よりは少し概念的な理解は前進したと思うのですが、まだまだスキっとしない気分です。理解力に乏しい自分が情けないです。。。
とりあえず紹介いただいた本も折を見てチェックしてみます。
以下のサイトは、有用な技術文書が豊富にありオススメです。
http://www.ogis-ri.co.jp/otc/hiroba/index.html
オージス総研のオブジェクトの広場です。
UMLモデリング技能認定試験も行っています。
豆蔵の豆魂です。
オブジェクト倶楽部です。
JUDE/Communityという無償のモデリングツールもダウンロードできます。
ありがとうございます。
豆魂なるサイトは面白いですね
多分、PHP、Perl(GCI)辺りから始めたのかと思いますが。
多分オブジェクト指向についてはピンと来ない点が多いかも知れません。
ちょっと簡単に説明してみます。
クラスの利点としては、再利用性が大きな利点だと私は考えています。
>>フリーのスクリプトを少しいじれる程度のスキル
との事ですが、正直最初はクラスに関してはあまり考えなくて良いかも知れません。
自分で、全てのソースを書くようになってきて「なんか、同じようなソース何回も書いてるな~」と思ったら、そこがオブジェクト指向を取り入れるべき時点です。
その何度も書いているソースを一度だけ書けば再利用できるように作り上げるのがクラスであったりオブジェクト指向であるととりあえずは考えてよいでしょう。
PHP標準クラスライブラリのPEARというものを知っていますでしょうか?
よく使われるものでpear DBなど。
こういったものを利用していくとオブジェクト指向に対する理解が深まるかと思います。
http://www.soi.wide.ad.jp/class/20020036/slides/15/
こちらのページの
18.再利用可能なコードとは
辺りを見てみてください。ビデオで見た方が分かりやすいかと思うのでお勧めです。
小山 哲志氏の公演ですが、全部見ても損は無いと思いますよ^^
http://hotwired.goo.ne.jp/webmonkey/2005/03/index4a.html
ここのページではかなり簡単にクラスを説明していますので、実際に作ってみるのも良いかと思います。
ありがとうございます。ビデオで見れるのですね。休日にでもじっくり見てみたいと思います。
オブジェクト指向はプログラミング言語のためだけの考え方というわけではないので、プログラミングから離れたところでオブジェクト指向について学ぶと近道になるかもしれません。
http://www.atmarkit.co.jp/fjava/devs/object01/object01.html
プログラミングをする上でのオブジェクト指向については深く説明すると結構長くなりますけど、要はデータ(変数)とそれを処理する関数をクラスという型に納めた・・・という感じです。
もっと細かい機能もあったりしますが、それは書籍など読む方がいいでしょう。
概念を理解するときのコツは「その概念は何のために存在するのか」ということを考えてみることだと思います。
オブジェクト指向の場合、たとえば10万行規模の巨大なプログラムがあったとして、何も考えずにグローバル変数を使いまくると(どうしても必要な時は結構あります。)そのグローバル変数が何処でどんな影響を及ぼしてるのかが非常に分かりにくくなり、保守管理が難しくなりますよね?
それを一個1000行ぐらいのクラスにまとめて整理しながら作ると、処理を追うときだいぶ楽になります。(しかしこれも考え物で、クラス内の変数は表向きは「メンバ変数」と呼ばれますが、巨大クラスになってくるとグローバル変数と何も変わらなかったりします。。。結局心がけ次第ですね。)
もう一個大きな機能で、ブラックボックス化(カプセル化)があります。これは、外部から見える関数やデータ(インタフェイス)と、そうでない関数やデータを分ける機能で、たとえば先ほどの10万行プログラムの1つのクラス内部の変数aaaをbbbに変えたいなどというときも、インタフェイスの形が変わらないなら、少なくとも9万9000行には手を出す必要はないのです。
具体的にどこら辺が納得いかないのかわからないので、アドバイスはこれぐらいですが、ある程度大きなプログラムを作ろうと思ったとき、オブジェクト指向を意識して作るのとそうでないのとではそのプログラムの管理のしやすさに、大きな差が出てくると思います。
結局、失敗を重ねれば「ここでつまずいたんだよな」などという経験で次からはもっと工夫してわかりやすく作れます。
言ってしまえば「概念は知識より経験」になりますね。
ありがとうございます。
PHPなどは型など考えずに使い始められるので、この点が
理解の邪魔をしているかも知れませんね。
・コードを再利用し生産性を上げる
・ブラックボックス化する、
・メンテを容易にする
など行為は私も必要だと感じていまして、今までは関数にて
(私の中では)同じような事をしてきたつもりですが、
これと本物のオブジェクト指向とでは何が違うのか?
なぜクラスとしていうものを用いるのか?
というのが、どうも理解できていないようです。
おっしゃるように大規模プログラミングを経験しないと
この辺りは理解できないものなのでしょうか・・・
C/C++の話ですが、C++はCにオブジェクト指向を追加サポートした言語として開発されました。しかし実際のところ、オブジェクト思考な開発はCでも実現できます。
http://www.sage-p.com/process/cool.htm
しかし、Cによるオブジェクト指向は名前の付け方とか結構面倒です。
ある程度関連づけはするものの、グローバルな領域に全ての関数が撒かれているのですから、大規模になればなるほど名前が長くなります。
さらに、ブラックボックス化についてはほぼ皆無で、プログラマの意識次第になります。
ほかにも、構造体をいちいち引数として渡さなければならなかったり、ポインタ使わなくて良いところで使わされたり、面倒なことだらけです。
ブラックボックス化は、一見不必要にも見えますが、大勢の人が一つのプログラムを作るという状況だと、勝手にデータを変更されたりなんかしたらせっかくのオブジェクト指向も無駄になり、保守もかなり難しいものになります。
結局「クラスを使った方が簡単」という思いが強いですが、プログラミング言語は簡単に実装出来ればそれに超したことは無いのです。だからオブジェクト指向言語なんてものができたんじゃないかな?と思います。
PEARというPHPのライブラリ群があります。
ものによっては
http://pear.php.net/manual/en/package.http.http-request.intro.ph...
のようにサンプルがついているので、ここにあるものを「使ってみる」ことが、「どういうクラス/オブジェクトを使ってオブジェクト指向プログラミングをすべきか」がなんとなくわかるんじゃないかと思います。
最近よくPEARに関しては耳にしますが、チェックしてませんでした。
少し拝見しましたが、なるほど勉強になりそうです。ありがとうございます。
ありがとうございます。
また少し高い本ですので、機会が有れば紀伊国屋などで立ち読みしてみて購入を検討したいと思います。