そそのかした責任としてフォロー

投稿日 : 2008年9月16日 15:16

 この辺で追い詰められてる人がいますが、一気に色々話したせいでごっちゃになっているようなので一応フォローを。

A<わからんときは理屈じゃなく利点から入るんだ!
Д<な、なるほど、たとえば?
A<デストラクタあるとリソース管理が楽になるよ!

 これはprototype.jsとかの話ではなくて、オブジェクト指向っていいよ! って言っても中々納得させるのが難しいので、オブジェクト指向と考えずに便利な言語としてC++を使う理由に挙げるものです。

 でも便利な点から見ていったほうがなじみやすいよねと言うのはC++に限ったことではありませんよね。
 そこでセッションの題意に沿ってprototype.jsの便利な点で語るなら、ブラウザ互換を色々吸収してくれていることや、DOMの記述が省略できる (これ便利!)、クラスの定義が見た目わかりやすい。辺りだと思います。
 Ajaxに関わる部分も上げるならリクエストの発行が楽だとか、ブラウザの状態に合わせて実行される関数を変更できる。イベント制御周りが地味に強力などですか。

 クラスの定義が見た目わかりやすい=クラスが作りやすいのは何がうれしいの? の部分が理論は後回しにしろと言いつつオブジェクト指向の話になるんで説明に困るんですが、要するに機能より小さな単位での分割を促進するので、C言語で機能単位にファイルを区切っているようなやり方よりも小さく分割して整理することが容易であると言うことです。オブジェクトの関係の階層と言う形で設計上の依存の階層を表現できるのも魅力ですね。良くあるオブジェクト指向の説明ですよね。
 石掘る猫さんは500行程度のプログラムで一杯一杯だと言ってますが、500行のプログラムも20個集まれば10000行なわけです。それぞれに絡むので10000行だと大変なわけですが、500行のモジュール同士がそれぞれ独立なら20個作る手間だけで済むわけです。それを目指すのが構造化とかオブジェクト指向なんですね。

 これをjavascriptに当てはめると、参照されなくなったリソースはいつか誰かが回収してくれる!となるのでしょうか。話が終わってしまった!


 ごめんなさい。JavaScriptにデストラクタないです。deleteしてあればメモリはガベコレ時に持っていってくれますがその他のリソースはまんまとリークです。
 結局malloc/freeやfopen/fcloseの関係と変わってなくて面倒ですよね。デストラクタ万歳。

掲<アクセス指定ができるよ!

不便なだけにしか思えない私は、致命的な非オブジェクト脳なのでしょうか。公開すべきでないリソースを隠蔽するのは一理ありますが、結局どこかで欲しくなってpublicにおいてしまいそうです。どうやらそれでは駄目で、ちゃんとリソースを再配置しアクセス経路を管理するのが正しい道のようです。javascriptに当てはめると…あれ?

 予期せぬアクセスを防ぎたいのです。あるリソースに対して0~9の値しか設定できないのなら0~9以外はエラーを返す関数で包んでやるべきです。オブジェクト指向言語でのアクセス権限の設定とアクセッサメソッドはむき出しのリソースとそれを利用するAPIを用意して使わせるより強制力の強いやり方になってます。
 JavaScriptだとアクセス制御の構文が追加されるのは未だ迷走中の2.0からのようです。

というわけで、次は「prototypeで抽象化」を考えてみたいと思います。

 楽しそうなのでいつでも相談に乗ります。長月なりのオブジェクト指向観でしか話せませんが、わんくまには達人がたくさんいるので色々な人に聞いてみるといいと思います。

コメントの入力
タイトル
 
名前
 
Url
コメント