2010年9月17日金曜日

番外編--オブジェクト指向

えー、番外なんで、別に読まなくてもいいです。
てか、おっPyとあんまし関係ないエントリだし、考え方的な話で、説明とか、もっと先のエントリでしようかな、と思ってた話なので、ついてこれない可能性もあるんで。
ただ、リンク先は見といた方がいいんじゃないかと思います。
構造化プログラミングとか、その辺の歴史に触れていて、成り立ちとか書いてあるので、知らないひとには面白い記事でしょう。
まあ、知ったからといって、どうにかなるか、というとどうにもならないんですが。(笑)

こんな記事を見つけまして。
割とというか、かなり解り易い記事だなー、とは思うんですが。
ちとイメージと違うのが、オブジェクト指向がグローバル変数を駆逐した、って部分で。
この、おっPyでもグローバル変数は使ってるんですよ。
まあ、タプルとして定数扱いなので、弊害は発生しないし、変数の解説のところでも、グローバル変数の危険性については、ちょっとだけ触れてますけど。

元記事でも触れられてますが、ワタクシにとってのオブジェクト指向とは、データの隠蔽と抽象化なんですよね。
グローバル変数とか、わりとどうでもよくて。
確かに構造化プログラミングでは、手を入れられてないデータ構造に手を出したのがオブジェクト指向プログラミングだとは思うんですが、駆逐したのはグローバル変数ではなくて、整理されてないデータ構造だと思うんです。
グローバル変数を駆逐するだけなら、ある程度構造化プログラミングでも可能ですし、事実、C言語なんかでは、そのように書かれている入門書も多いんじゃないでしょうかね。

構造化プログラミングのGOTOと同様に、グローバル変数も使い方によっては強力な武器になるわけで、別に使っちゃいけないものではないんですよ。
むやみやたらと使うと、元記事のようにデバッグ不能に陥るので、なるべくなら使わない、という方針がよいのは間違いないんですが。

ただ、そここだわると、オブジェクト指向プログラミングも、実はかなり不自由になるんじゃないの、とも思うわけです。
データ構造の隠蔽と抽象化、まあ、元記事で出納係の話が出てましたが、これがまさにそれで、金庫というか、お金の入れ物を隠蔽して、その入れ物を出納係で抽象化しているのが、オブジェクト指向だと思うんですね。

で、結果として、出納係に「お金を渡す」、「お金をもらう」という二つのメソッドだけ知っていれば、お金の出し入れが可能になる、なので、例として出ていたたこ焼き屋以外にも、この出納係というのは、流用が可能で、中のお金の管理の仕組みを知らずとも、出納係さえ使えば、「お金を渡す」ことと「お金をもらう」ことが出来るわけで。

その中の仕組み、データの管理と構造を、外側から隠蔽してしまう、ってのが一番のオブジェクト指向のメリットだとワタクシは思っているので、グローバル変数がどうのってのは、あんまし関係ないような気がしているんですよね。
てか、普通に使えるし。
抽象化したオブジェクトをグローバルに置いて、アプリケーションの設定は、全部そこからもらう、なんてこともアリだと思うし。
きちんと手順が決まっていて、中身が隠蔽されていることが重要であって、そのような設計になっていれば、ローカルでもグローバルでも構わないのがオブジェクト指向じゃないのかな、とワタクシは考えてます。
なので、抽象化さえ出来てしまえば、継承とかは、まあオマケみたいなもんかな、とも思うんですよね。
抽象化するために、継承出来ないと、その機能が生きないので、継承は必要かも知れませんが、データ構造とそのアクセスを制限する、つまり隠蔽して抽象化出来てしまえば、それで十分オブジェクト指向プログラミングの意義は果たせると思うわけです。

その点では、元記事の言うところの「データ構造にメスを入れた」のは、オブジェクト指向であるのは間違いないと思いますが。

最初読んだ時に、ピンと来なかったのは、たぶん、そのデータのスコープを問題にしてたからなんだろうな、とは思うんですが。

ま、いずれこの辺の話は、もう少し噛み砕いで、突っ込んだエントリを書きます。
プログラム設計の辺りで。(笑)

まずは番外ってことで。

0 件のコメント:

コメントを投稿