とりこらぼ。

Learn from yesterday,
live for today,
hope for tomorrow.

目次

Blog 利用状況

ニュース

プロフィール

  • 名前:とりこびと
    とるに足らない人間です。

  • Wankuma MVP
    for '平々凡々'

Web Site

  • Memo(Of T)

もうひとつの Blog

広告っぽい

書庫

日記カテゴリ

Shared になにを思ふ?

このあいだShared キーワードでおっかなびっくり!というエントリを書いたのですが、Shared のことでちょっと書いておきます。
わんくま勉強会 で「オブジェクト指向ってなんだ」というパネルディスカッションがありました。そのなかで「OOとStatic(Visual Basic でのShared)」っていうテーマな内容があってパネラーの方がいろいろお話なさっていたのですが、自分の中での答えが見つからないまま今に至ります。

実を言うと、そのテーマを見たときに初めて「あ、言われてみれば!」という状態だったのです。そして、かれこれ2ヶ月くらい経ちそうなのにまだ・・・。orz

インスタンスの存在を意識するようになり、創造主の夢を見てクラスを定義し、操ろうとするようになりました。そうなればなるほど静的なものの概念に首をかしげるようにも・・・。

.NET はオブジェクト指向な概念でありつつ、インスタンスを意識しない存在もいる・・・。




すっきり!したいよ。

投稿日時 : 2007年4月6日 13:26

Feedback

# re: Shared になにを思ふ? 2007/04/06 15:14 null

クラスもオブジェクトであり、メタクラスのシングルトンなインスタンスなのだと考えてみてはどうでしょう?
# 勉強会に参加していないので的外れなこと言ってるかもしれませんが

# re: Shared になにを思ふ? 2007/04/06 15:18 じゃんぬねっと

共有 (静的) メンバ == 型自身で実体を持つメンバ。

# re: Shared になにを思ふ? 2007/04/06 15:22 null

すみません、「シングルトンな」は余計でした^^;

# re: Shared になにを思ふ? 2007/04/06 15:54 とっちゃん

東京でも、大阪でも(こっちはビデオ見ただけw)static を意識していたのは、メソッドです(ここが重要なポイント)。

変数の話(0ではありませんが)ではないのがポイントですw

似て非なるものですので、切り分けて考えないとぐだぐだですよw

# re: Shared になにを思ふ? 2007/04/06 18:42 とりこびと

みなさま、コメントありがとうございます。

まだすこし整理ができていないので、取り急ぎコメントのお礼を申し上げます。m(_ _)m

# そういうものだ・・・でいいのかなぁ。

# re: Shared になにを思ふ? 2007/04/08 15:57 シャノン

#長文失礼。
#後で自 blog にまとめなおします。

クラスはオブジェクトの集合だと考えています。
「集合」という言葉は、数学の「集合論」も多分に意識しているのですが、それはひとまず置いておくとして…

集合ということは、要するにコレクションです。class T は List<T> の親戚だと考えます。
すると、いろいろ対応関係が見えてきます。
すべての T 型のインスタンスの数を返す static メソッドは、List<T>.Count と似ています。
new T は List<T>.Add と、(C# や VB にはありませんが)delete は List<T>.Remove と、本質的には同じだと考えています。

もう一歩突っ込むと、「オブジェクト≠インスタンス」になります。
「オブジェクト」という言葉は「対象」という意味であって、Smalltalk 流に言えば「メッセージを受け取って結果を返せるモノ」です(メッセージを送る対象という意味です)。
メッセージとは、平たく言えばオブジェクトに対するお願いです。

List<T> list = new List<T>();
list.Add( ... );
int x = list.Count;

list.Count は、「list インスタンスに対する、『要素数を教えて』というお願い」です。
先程の、「インスタンス数を取得する static メソッド」を同じように考えれば、

int y = T.InstanceCount;

は「T クラスに対する『インスタンス数を教えて』というお願い」です。

「オブジェクト」の定義は「お願いに応えることができるモノ」でしたから、クラスもオブジェクトと考えることができるのではないか…と思っています。

ちょっと不満があるのは、static メソッドをどのクラスに持たせるかということです。
例えばコイツ、Directory.CreateDirectory

http://msdn2.microsoft.com/ja-jp/library/system.io.directory.createdirectory(VS.80).aspx

「ディレクトリに関連する機能だから Directory クラスのメソッドにしちゃえ」という考えだったら、ちょっと待ってと言わずにはおれません。
「ディレクトリを作って」というお願いは誰にするのが適切でしょうか? ディレクトリよりも、(.NET Framework には当てはまるクラスがありませんが)ファイルシステムに対するお願いの方が妥当に感じます。

ちょっと前に自ブログでも書いたのですが、「お願い(メッセージ)の対象になれるものがオブジェクト」であり、C++ の流れをくむ C# や VB では「お願い(メッセージ)とはメソッド呼び出し(プロパティも含む)」だということを意識した方がいいんじゃないだろうか、と思います。

# Shared になにを思ふ? その2。 2007/04/09 11:46 とりこびと ぶろぐ。

Shared になにを思ふ? その2。

タイトル
名前
Url
コメント