2012年6月8日金曜日

オブジェクト指向 その2

なんだかんだ言って、現在の僕はオブジェクト指向は
全然やったことありません
主にやってるのもオブジェクト指向が貧困なHSPですし
Perl5もオブジェクト指向弱いですし
でもちょっとずつわかってきました
たぶんJavaを勉強中だからだと思います
そんなオブジェクト指向使ったことのない僕における
オブジェクト指向の良さってのは
インスタンス変数のコピーです
後、アクセス許可とか
今やってるのはループのカウンタとかをインスタンスにして格納してます
違う変数にしちゃうと、共通の操作とかめんどいんで
インスタンスにすると楽ですね
違う変数なんだけど処理は同じっていう
そしてインスタンス変数に使用許可とかつけれることも
という訳でカウンタをゲッター取得にしちゃってます

そんな話はその概念が深まってからとして
最近はオブジェクトとメッセージの関係について考えていました
というのも僕がオブジェクト指向とはなんぞやっていう疑問に対する回答には
メッセージという概念が深く関わっています

HSPにモジュール変数が追加された時に(簡単なオブジェクト指向なんですけど)
その頃はたいしてプログラミングしてない頃で
カプセル化だの継承だのの利点はよくわからなく
でもメッセージという概念はしっくりきたんです
あの頃、図書館でオブジェクト指向に関する書籍を借りたりして
2、3冊読んだかな?
オブジェクトにメッセージを送り
オブジェクトがメッセージを受け取って
オブジェクトなりの振舞いをする
そんなかんじの説明がいいかんじでした

例えば(例は悪いかもしれませんが)
HSPだとボタンを押すと指定したラベルにjumpします
visualC++だとボタンを押すとイベントを起こすんです
僕は(楽だから 笑)jumpする方が好きですが
ボタンを押すとイベントを起こすイベント駆動の方が
メッセージの送り方、受け方的にオブジェクト指向なんだなって思います

最近、メッセージに注目したHSPのモジュールを書いてて
例えば自分のHPをインスタンスとしたモジュールで
敵が攻撃して自分のHPが0以下になったら"YouLose"というメッセージが返ってきます
"YouLose"というのは設定した文字列で設定しなければ"tooSmall"というメッセージが返ってきます
自分のHPが0以下にならなければメッセージは返って来なくて戦闘継続です
"YouLose"というメッセージが返って来たら戦闘終了という分岐です
これは条件分岐をメッセージの受け答えにした条件分岐です
確か2、3年くらい前になんとなく考えたのを思い出してやってみたら上手くいきました
条件分岐って意味が直観的にわからなくて
命令呼び出しにして、命令名で動作を匂わせるこの方式はアリだと思っています
中規模以上のプログラムのメインの処理って
即値や即計算ってのを極力排除して、全て名前付きの動作にするべきだと思ってたりします

僕はこれでもプログラム言語を作成してみたいって思っているんですけど
僕はプログラムを書くのが遅すぎるので無理(笑)って思ってた時期もありますが
僕はプログラムを書くスピードは普通だと思いますが
プログラムの方針を決めるのが遅いです
そう言えばルートの計算のプログラムを書くの一年くらいかかりましたし(笑)
どうやって書けばわからないのでゆっくり考えているうちに一年くらいかかりました
普通に書けばいいのに、自分の感覚に近い形で書きたい。とか考えてたら遅くなるんです
まつもとひろゆきさんみたいにパッと決めてパッと実装できなきゃ
何万行もある動作の濃いプログラムは書けないと思ってました
僕は書きたい動作に集中できないタイプですし
でも、実験用の言語内言語なら書けるかもしれない。と思うようになってきて
スローペースでそんなかんじの写経をしています
でもオブジェクト指向の方針が決まってなくて
オブジェクト指向は上にある言語まんま利用すればいいかな?
と思ってたんですが
プログラム言語を作成するとしたら
メッセージを送る。受け取る。という機能に着目したオブジェクト指向を編み出したいですね
と言ってもすぐプログラム言語に全力を尽くす気もなく
このブログを書きながら3、4年たって
言語内言語作成のノウハウがたまってきたらってかんじですけど

0 件のコメント:

コメントを投稿