K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[495] マルチプルインスタンス
投稿者:774RR
2007/02/20 02:13:25

発散していてどこにつけていいかわからないので新規投稿。 マルチプルインスタンスでないオブジェクト指向というか C++ ソースを結構書いている 身としては、マルチプルインスタンスが必須といわれてしまうとちょと悲しいかも。 組み込み系の仕事をしていると「***が1つ、△△△が1つ」なんてのはよくあるのです。 顧客要望的にも、コスト的にも、2つになることは決してありえない、って状況。 そーいう場合に***の制御を行うクラスとして class ***_t { static int Flags; static void CheckABC(); public: static bool IsXYZ(); }; のように、全メンバが static なクラスってのを使います。 拡張性0ですがこれも立派なクラスだと思っております。 「自分にできることを自分自身が知っている」のがOOだと思っていますが、違うのでしょうか? たまたまその結果として複数インスタンスの利用が簡単になっているのだと考えますが。
[この投稿を含むスレッドを表示] [この投稿を削除]
[496] Re:マルチプルインスタンス
投稿者:CES
2007/02/20 02:13:25

>発散していてどこにつけていいかわからないので新規投稿。 ここにまとめレス。 > たとえば、以下のページでは、 > http://www.shiro.dreamhost.com/scheme/trans/reesoo-j.html > オブジェクト指向言語の要件を箇条書きにしたうえで、 極論、この一覧の要件をひとつでも満たせば、あるいは、ここに無いけれど何か妥当っぽい特徴を持っていれば、そして、その言語がオブジェクト指向であると主張すれば、それはオブジェクト指向になってしまうのかもしれない。 この一覧には > 全てはオブジェクトなり - 全ての値はオブジェクト。Smalltalkでは真だが、 Javaでは (int等のため) 真ではない。 とある。「オブジェクト」の定義にもブレがあるだろうが、これに従って解釈すると、 > int i; > int j; > これでマルチプルインスタンス、ってのはヒネクレ過ぎ? これを Java のコードとして見るならば、i や j はインスタンスではあるがオブジェクトではないのだろう(i や j をオブジェクトと呼ぶときの「オブジェクト」と、「オブジェクト指向」の定義を語るときの「オブジェクト」は意味が違うのは明らかだしね)。 > カプセル化のない(今はあるんでしたっけ?)のPythonとか、 > メソッドとオブジェクトを実行時にくっつけるPerlとか、 > メソッドとオブジェクトが直接関連していないCLOSとか… うーん…それらの言語については、というか、C++ / C# / Java あたりの C ファミリーしか私は知らないんですが。 ただ、前に述べたとおり、Win32 API のメッセージアーキテクチャはオブジェクト指向なので、「メソッドとデータの結合」は必須要件ではないんだろう。 > Simulaは、むしろC++に近い言語だという認識です。 コードを見た感じ、そうみたいですね。 どうも私は(偏見というか思いっきり間違いなのですが)Simula と Smalltalk を同一視してしまう。 Smalltalk はオブジェクト指向云々以前に関数型言語なので、C++ や Java とは同列で比較しにくいものがあるけれど。 > 全メンバが static なクラスってのを使います。 > 拡張性0ですがこれも立派なクラスだと思っております。 > 「自分にできることを自分自身が知っている」のがOO 確かに。 でも、(static メンバでもいいから)何らかのデータを持っていないと、それはクラスだけどオブジェクト指向とは言い難いような気がします。 「自分」ってのは「データ」のことだと思うから。
[この投稿を含むスレッドを表示] [この投稿を削除]
[499] Re:マルチプルインスタンス
投稿者:CES
2007/02/20 02:13:25

オブジェクト指向では「責務の分離」が大切。 平たく言えば、オブジェクトを使う上で、知っていなければならないこと、知らなくてもいいこと、知っていてはならないことがきちんと分かれていること。 > 「自分にできることを自分自身が知っている」のがOO 自分自身は「何ができるか」と「どうやるか」を知っているけれど、他人には前者だけ教えておけばいい。 うーん…これを一言で言ったものが「抽象化」ということなんだろうか。 オブジェクト指向のキモは「抽象データ型」? 「型」という概念がない言語もあるだろうから、「抽象データ」かな。 してみるに、カプセル化も継承も多態性も実装隠蔽もメッセージパッシングも、すべてはこれをサポートするためのものでしかないことがわかる。 マルチプルインスタンスは…申し訳ないが、抽象データとはちょっと関係なさそう? うん、何だか、散々語り尽くされたところに落ち着いてしまった感がある。 現時点でのマイ定義: 「オブジェクト指向とは、データの抽象化によってバグを減らすための技術である」。 私の失敗は、いろんなものを同一視しすぎたこと。 例えば ・類似のコードをサブルーチンに分けるのは、コード修正の際に書き換える箇所を少なくすることによってバグを減らす技術。 ・データの抽象化は、オブジェクトを「使う側」のコードを再利用することによって、修正の必要性を軽減する技術。 ・ほら、この2つは結局同じ(コードを書き換える量を減らすのを目的とした)ことだ。 ここまで一般化してしまったから、わけがわからなくなってしまった。 サブルーチンの切り出しは、責務の分離とまったく関係が無い。だからこれを同一視してはいけなかった。 #我ながら、実に「何を今更」だな。 #ツッコミお待ちしています。
[この投稿を含むスレッドを表示] [この投稿を削除]
[500] Re:マルチプルインスタンス
投稿者:kei
2007/02/20 02:13:25

# すみません、また発散させてしまいます。。 >「自分にできることを自分自身が知っている」のがOOだと思っていますが、違うのでしょうか? そっかー。 ・ (データや手続きの)所属がはっきりしている というのは、オブジェクト指向の根幹な気がしてきました。目から鱗です。 でも、それからさらに少し考えてみたんですが、 ・ オブジェクトは複数生成できる。 ・ 生成されたオブジェクトは、ユニークである という側面が無いと、動的結合や多態は、説明できないのではないのかぁ、と思いました。 そして、それらの側面が無いと、いわゆる「手続き型」と、何も変わりが無いのでは、と思います。つまり、データと手続きをセットにするということ自体は、「手続き型」言語でも容易に可能なわけですから。
[この投稿を含むスレッドを表示] [この投稿を削除]
[501] Re:マルチプルインスタンス
投稿者:CES
2007/02/20 02:13:25

>という側面が無いと、動的結合や多態は、説明できないのではないのかぁ、と思いました。 個人的な考えとしては、動的結合も多態性も、責務の分離をはっきりさせるための手段でしかないと思います。 以前は何でもかんでもバグを減らすための手段と捉えて失敗しましたが、「責務の分離」を目的に置いてみることにしました。 >そして、それらの側面が無いと、いわゆる「手続き型」と、何も変わりが無いのでは、と思います。つまり、データと手続きをセットにするということ自体は、「手続き型」言語でも容易に可能なわけですから。 「手続き型言語」と「手続き型プログラミング」、 「オブジェクト指向言語」と「オブジェクト指向プログラミング」は分けて考えるべきだと思います。 Java 使ってもオブジェクト指向っぽくないプログラムは作れるし、C 言語でもオブジェクト指向プログラミングはできます。 あと、C に端を発する C++ とか Java とかの言語は、「手続き型オブジェクト指向言語」だと思います。 「手続き型言語」の対義語は「関数型言語」らしいので。
[この投稿を含むスレッドを表示] [この投稿を削除]
[502] Re:マルチプルインスタンス
投稿者:CES
2007/02/20 02:13:25

#追記 >>という側面が無いと、動的結合や多態は、説明できないのではないのかぁ、と思いました。 > >個人的な考えとしては、動的結合も多態性も、責務の分離をはっきりさせるための手段でしかないと思います。 つまり、動的結合や多態性がない「オブジェクト指向」があってもいいのではないか、ということです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[503] Re:マルチプルインスタンス
投稿者:kei
2007/02/20 02:13:25

>>そして、それらの側面が無いと、いわゆる「手続き型」と、何も変わりが無いのでは、と思います。つまり、データと手続きをセットにするということ自体は、「手続き型」言語でも容易に可能なわけですから。 > >「手続き型言語」と「手続き型プログラミング」、 >「オブジェクト指向言語」と「オブジェクト指向プログラミング」は分けて考えるべきだと思います。 もちろん、それはそうだと思います。 なので、 >>「手続き型」言語でも容易に可能 と、「容易に」と書いた訳です。 逆に言えば、動的結合や多態は、いわゆる「手続き型」言語では、容易には実装できない、と言いたかったのでした。 極論するならば、全ての言語も対等で、どの言語でも、他の言語で実装可能な機能は、どんな内容でも実装可能なはずです。 でも、それが容易であるか容易でないかの違いは、かなり大きいと思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[504] Re:マルチプルインスタンス
投稿者:kei
2007/02/20 02:13:25

>>個人的な考えとしては、動的結合も多態性も、責務の分離をはっきりさせるための手段でしかないと思います。 全くそうだと思うんですが、でもそれも、ひとつの側面に過ぎないのかな、とも思います。 僕個人は、動的結合や多態は、「プログラマが魔法を実現する」ための手段だと思っています。つまり、プログラマに飛躍を感じさせる力を与えるための道具、という見方です。 >つまり、動的結合や多態性がない「オブジェクト指向」があってもいいのではないか、ということです。 で、そういった動的な要素がなければ(つまり、責務の分離だけであれば)、それは「モジュール指向」とでも呼ぶべきものであって、オブジェクト指向とは言えないんじゃないかなぁ、と。 # 僕の見方はかなり偏り過ぎな気もしますが。。
[この投稿を含むスレッドを表示] [この投稿を削除]
[505] Re:マルチプルインスタンス
投稿者:CES
2007/02/20 02:13:25

>逆に言えば、動的結合や多態は、いわゆる「手続き型」言語では、容易には実装できない、と言いたかったのでした。 >極論するならば、全ての言語も対等で、どの言語でも、他の言語で実装可能な機能は、どんな内容でも実装可能なはずです。 > >でも、それが容易であるか容易でないかの違いは、かなり大きいと思います。 まず私は、オブジェクト指向言語を否定しているわけではありません。 ただ、「オブジェクト指向って何だ?」っていうことを考えると、継承も多態性もサポートのひとつでしかなくて、本質ではないと思ったわけです。 本質でなければ要らないということは全く無くて、それらのサポートや、言語にそれらの機能があることによって、より強固なオブジェクトが楽に作れるのは素晴らしいことだと思います。 > プログラマに飛躍を感じさせる力を与えるための道具、という見方です。 すいません。ちょっとよくわかりませんでした。 > それは「モジュール指向」とでも呼ぶべきものであって、オブジェクト指向とは言えないんじゃないかなぁ、と。 「オブジェクト」もそうですけど、「モジュール」ってのも広義な言葉ですよね。 ただ、「モジュール指向」も案外外した言葉ではないような。むしろ「オブジェクト指向」よりわかりやすくないか、それ? 「モジュール」って、たぶん「それ自体が独立していて、他のものとの依存性が低く、組み換えが可能である部品」みたいな意味ですよね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[507] Re:マルチプルインスタンス
投稿者:(ぱ)
2007/02/20 02:13:25

>組み込み系の仕事をしていると「***が1つ、△△△が1つ」なんてのは >よくあるのです。 >顧客要望的にも、コスト的にも、2つになることは決してありえない、って状況。 そういう場合は、全メンバがstaticであるクラスを作るなり、 C流にstaticな変数や関数で.cファイルに閉じ込めたりするコードを書くのが 正解だと思います。 でも、それが「オブジェクト指向」かと言うと、それは違うのでは、と私は 思います。 keiさんが別途書いておられるように、それは「モジュール化」では。 モジュール化を意識した言語であるModula2が、オブジェクト指向言語と 呼ばれることはないと思います。 >のように、全メンバが static なクラスってのを使います。 ところで、C++のstaticなメンバってのは、私は機能的に重複したものだと 思っています。staticフィールドはグローバル変数で書けるし、 名前空間の汚染はnamespaceで防げるし、ファイル内でstaticにすれば カプセル化もできるし。staticメソッドは関数で書けるし、 friendがあるから選択的エキスポーともある程度可能だし。 まあ、重複した機能が山ほどあるのはC++ではいつものことですけど。
[この投稿を含むスレッドを表示] [この投稿を削除]
[508] Re:マルチプルインスタンス
投稿者:(ぱ)
2007/02/20 02:13:25

>・ オブジェクトは複数生成できる。 >・ 生成されたオブジェクトは、ユニークである まつもとゆきひろさんがこのように書いていますが、 http://www.rubyist.net/~matz/?date=20030807 | そして、その最低限の条件は「アイデンティティがある」ことである。 | アイデンティティとはある「オブジェクト」と別の「オブジェクト」が、 | 同じかそうでないか判定できる、という意味だ。 これは、keiさんの挙げられたふたつめの条件に合致するでしょうね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[509] Re:マルチプルインスタンス
投稿者:(ぱ)
2007/02/20 02:13:25

>オブジェクト指向のキモは「抽象データ型」? C++などの流儀のOOは、そう言われることが多いようですね。 >「型」という概念がない言語もあるだろうから、「抽象データ」かな。 型の概念のない言語はそうそうないでしょう。RubyやらSmalltalkやらは 静的な型付けがないだけで、型は立派にあります。 >マルチプルインスタンスは…申し訳ないが、抽象データとはちょっと関係なさそう? そして、「型」がある以上、それを複数生成するのは前提でしょうから、 マルチプルインスタンスは、少なくともクラスベースのOOでは、外せない本質だと 私は考えているわけです。 [489]で自分で突っ込んでるように、じゃあプロトタイプベースではどうなるんだ、 という話はありますけどね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[510] Re:マルチプルインスタンス
投稿者:kei
2007/02/20 02:13:25

>> プログラマに飛躍を感じさせる力を与えるための道具、という見方です。 > >すいません。ちょっとよくわかりませんでした。 すみません。。 ちょっとアルコールが入っているので、意味不明な事を書いてしまいました。 「自分が思っていることを、容易に表現することができる表現力」、それを実現するための道具 みたいな感じのことを言いたかったんです。 # 上記でも意味不明ですね。。
[この投稿を含むスレッドを表示] [この投稿を削除]
[511] Re:マルチプルインスタンス
投稿者:CES
2007/02/20 02:13:25

> 最低限の条件は「アイデンティティがある」ことである。アイデンティティとはある「オブジェクト」と別の「オブジェクト」が、同じかそうでないか判定できる、という意味だ。 っていうと、じゃあ int main() {  int i = 0, j = 0;  return 0; } これはオブジェクト指向か? ってことになるです(それ以前に全く意味のないプログラムであることに突っ込んじゃダメ)。 int 型のマルチプルインスタンスを実現しているし、i と j は識別可能です。 マルチプルインスタンス「だけ」では、オブジェクト指向とは思えないのですが… 静的だろうが動的だろうが「データ」があって、そのデータの「責務」が明確になっているとき、それはオブジェクト指向、ではないのかな。 >C++などの流儀のOOは、そう言われることが多いようですね。 C++ ファミリーじゃない言語をよく知らないので、よろしければ、他の流儀では何がオブジェクト指向だと呼ばれているのか、ご教示願えませんか。 #ただ、私が「オブジェクト指向」という時、それは暗黙のうちに「C++ ファミリーのオブジェクト指向」を指していますが(だって他の知らないもん)。 >>「型」という概念がない言語もあるだろうから、「抽象データ」かな。 > >型の概念のない言語はそうそうないでしょう。RubyやらSmalltalkやらは >静的な型付けがないだけで、型は立派にあります。 そうでしたか。浅学を晒してしまいました。 >>マルチプルインスタンスは…申し訳ないが、抽象データとはちょっと関係なさそう? > >そして、「型」がある以上、それを複数生成するのは前提でしょうから、 >マルチプルインスタンスは、少なくともクラスベースのOOでは、外せない本質だと >私は考えているわけです。 「型」がある→「マルチプルインスタンスが前提」という繋がりがよくわかりません。 「鋳型」「ケーキ型」などは、同じ形のものを量産するためにありますが… そもそも「型」の語源は「type」ですし、「クラス」という用語もそうですが、「分類」というような意味があるんじゃないでしょうか。 まず型ありき、ではなくて。 最初は混沌として分類されていなかった「オブジェクト」があり、それを分類するために後から「型」が生まれた…のか? オブジェクトを分類することによって、似た性質を持つものをひとまとめに扱うことも「抽象化」です。 使う側はその似ている「性質」だけを知ってればいいんであって、似ているけれど「微妙に違う」部分は知らなくてもいいわけですからね。 そうすると「型は責務の分離のためにある」と言えなくもないような。 うーん違う。「型」じゃ意味が広すぎる(int 型にどんな責務があるって言うんだ…)。 「型」は純粋にオブジェクトの分類のためだけにあり、分類に責務を関連付けたのが「オブジェクト指向」か? これも違う。 オブジェクト指向以前から「型」はあったけれど、オブジェクト指向の「型」は「インターフェイスセット」のことかと。 そのオブジェクトに何ができるのか、でそのオブジェクトを表現したもの。 また、オブジェクトをそのように表現することが「オブジェクト指向」。
[この投稿を含むスレッドを表示] [この投稿を削除]
[512] Re:マルチプルインスタンス
投稿者:CES
2007/02/20 02:13:25

なんか、えーと。 「それってオブジェクト指向じゃなくてモジュール指向じゃん」ということへの反論にまったくなっていない。 だって私自身「じゃあモジュール指向って呼んでもいいよこの際」って納得してしまっているから。 モジュール指向とオブジェクト指向の違いって何だろう? マルチプルインスタンスがそれ? あー、そうか。そういうことか。 > 私は、オブジェクト指向の「本質」と呼ぶべきものは、カプセル化でも継承でもポリモルフィズムでもなく、「マルチプルインスタンス」にあると思っています > 「それは抽象データ型だ」という意見もあるかもしれませんが、抽象データ型はオブジェクト指向に至るためには必須の概念です。 (オブジェクト指向再入門/はじめに より) マルチプルインスタンスばかり強調されるので、マルチプルインスタンスさえあればモジュール化が無くてもオブジェクト指向かと誤解してしまった。 抽象データ型+マルチプルインスタンス=オブジェクト指向? 「オブジェクト指向の最低要件はマルチプルインスタンス」というのは、「モジュール化はすでにある前提として、オブジェクト指向に至るための差分として何が必要かという最低要件」ということなのだろうか。 しかし、マルチプルインスタンス「だけ」ならば、モジュール指向の前からあったものだし、オブジェクト指向がモジュール指向から派生しているならば、やはりモジュール指向も知っておかねばならんのだろうなぁ。 「オブジェクト指向再入門」が「既にモジュール指向は知っている人のためのオブジェクト指向入門」ならば「マルチプルインスタンス」を説明すればいいわけだが、しかしそうとも思えないしなぁ…
[この投稿を含むスレッドを表示] [この投稿を削除]
[513] Re:マルチプルインスタンス
投稿者:kei
2007/02/20 02:13:25

前橋さんが紹介してくださった、まつもとひろゆきさんの日記の「アイデンティティ」という言葉を眺めていて、自分の中で少し整理ができてきました。 >int main() >{ > int i = 0, j = 0; > return 0; >} > >これはオブジェクト指向か? ってことになるです(それ以前に全く意味のないプログラムであることに突っ込んじゃダメ)。 >int 型のマルチプルインスタンスを実現しているし、i と j は識別可能です。 >マルチプルインスタンス「だけ」では、オブジェクト指向とは思えないのですが… >静的だろうが動的だろうが「データ」があって、そのデータの「責務」が明確になっているとき、それはオブジェクト指向、ではないのかな。 おそらく、重要なのは (1) データ構造や振る舞いを、特定の名前に紐付けて定義できる (2) 定義したオブジェクトを、複数生成できる (3) 生成されたインスタンスは、それぞれが個別の状態を持つ (4) それぞれのインスタンスの違いが、識別可能である ということだと思うんです。 いわゆる手続き型言語でも、(1)はそれほど難しい話ではないでしょう。 そしてそれが、CESさんのおっしゃる「責務の明確化」なんだと思います。最初に774RRさんがおっしゃっていた、「自分にできることを自分自身が知っている」というのも(1)でしょう。 でもその責務を持った単位が、 ・ 複数生成できて、それぞれが状態を持ち、かつそれぞれが識別可能(つまり、(2)と(3)と(4)) ということでなければ、それは、「オブジェクト」とは言えないのではないでしょうか。 で、いわゆる手続き型言語では、それらを実装するのが容易ではない、ということなんだと思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[514] Re:マルチプルインスタンス
投稿者:kei
2007/02/20 02:13:25

あ、すみません。 [512]を読まずに投稿してしまいました。。(汗) 失礼しました。 > CESさん
[この投稿を含むスレッドを表示] [この投稿を削除]
[515] Re:マルチプルインスタンス
投稿者:CES
2007/02/20 02:13:25

>あ、すみません。 > [512]を読まずに投稿してしまいました。。(汗) > >失礼しました。 > CESさん いえいえ、お気になさらずに。 しかし、ということはやはり、 オブジェクト指向=モジュール化+マルチプルインスタンス ということでよろしいのでしょうか。 ただ、そうしますと、再入門講座はどうしても不適切だと言わざるを得ません。 というのは ・マルチプルインスタンスはモジュール指向以前からあった  →オブジェクト指向もモジュール指向も知らない人でも、これは知っている ・非オブジェクト指向、オブジェクト指向の知名度に比べて、モジュール指向の知名度が低い  (私のように、オブジェクト指向とモジュール指向を混同している可能性が高く、  非オブジェクト指向→モジュール指向→オブジェクト指向 という経路ではなく、  非オブジェクト指向→オブジェクト指向 という経路を辿ると思っている) ためであり、「オブジェクト指向の最低要件はマルチプルインスタンス」という文面からは、「モジュール指向からオブジェクト指向へ至るまでの差分として最低限必要なものはマルチプルインスタンス」という意味が読み取りにくいためです。 注釈として > 「それは抽象データ型だ」という意見もあるかもしれませんが、抽象データ型はオブジェクト指向に至るためには必須の概念です。 という記述はありますが、そもそも犬がどうのというたとえ話がわかっていない人が、抽象データ型云々と言われてわかるとも思えません。
[この投稿を含むスレッドを表示] [この投稿を削除]
[516] Re:マルチプルインスタンス
投稿者:kei
2007/02/20 02:13:25

>しかし、ということはやはり、 > >オブジェクト指向=モジュール化+マルチプルインスタンス > >ということでよろしいのでしょうか。 僕は概ね、そう思っています。 でも、前橋さんのご意見がどうであるかは、わからないです。 >ただ、そうしますと、再入門講座はどうしても不適切だと言わざるを得ません。 たぶん、例の http://kmaebashi.com/programmer/object/naze.html の、「この点についてはこちらで後述します。」の箇所で、その説明をされるおつもりだったのではないでしょうか。(予想ですけど)
[この投稿を含むスレッドを表示] [この投稿を削除]
[517] Re:マルチプルインスタンス
投稿者:CES
2007/02/20 02:13:25

考えを整理してみると、今、世の中にあふれている「オブジェクト指向」の説明は、その多くが誤解を孕んでいるような気がしてきます。 それはさておき。 >たぶん、例の > >http://kmaebashi.com/programmer/object/naze.html > >の、「この点についてはこちらで後述します。」の箇所で、その説明をされるおつもりだったのではないでしょうか。(予想ですけど) の「こちら」については、前橋さんが 2005/07/19 02:12:13 の投稿で >おそらくこのリンク先は、 >http://kmaebashi.com/programmer/object/shigoto.html >ここのStringTokenizerあたりの説明のことを指しているのだと思います。 ># 既に忘却の彼方です。すみません。 とおっしゃられております。
[この投稿を含むスレッドを表示] [この投稿を削除]
[518] Re:マルチプルインスタンス
投稿者:kei
2007/02/20 02:13:25

>の「こちら」については、前橋さんが 2005/07/19 02:12:13 の投稿で > >>おそらくこのリンク先は、 >>http://kmaebashi.com/programmer/object/shigoto.html >>ここのStringTokenizerあたりの説明のことを指しているのだと思います。 >># 既に忘却の彼方です。すみません。 > >とおっしゃられております。 あ、ほんとだ。失礼しました。。 で、リンク先の内容を読み返してみました。 僕はこの説明で、初心者向けとしても十分足りているように思えるのですが、いかがでしょうか。
[この投稿を含むスレッドを表示] [この投稿を削除]
[519] Re:マルチプルインスタンス
投稿者:CES
2007/02/20 02:13:25

>で、リンク先の内容を読み返してみました。 >僕はこの説明で、初心者向けとしても十分足りているように思えるのですが、いかがでしょうか。 うーん…何に足りているのでしょうか? マルチプルインスタンスの利点はわかりやすく解説されていますが、モジュール指向の説明は相変わらず見当たりませんし、例の「こちら」のリンク元である > ただ、私は、オブジェクト指向によりプログラムの再利用性は高まると思っています。オブジェクト指向の「マルチプルインスタンス」という特性が、「状態」を持つ部品を、プログラムのあちこちで使いまわすことを可能にしているからです。この点についてはこちらで後述します。 という文との関連がわかりません。 マルチプルインスタンスで、何故再利用性が高まっているのでしょうか。 また、その再利用性は、ライブラリの再利用性とどう違うものなのでしょうか。
[この投稿を含むスレッドを表示] [この投稿を削除]
[520] Re:マルチプルインスタンス
投稿者:(ぱ)
2007/02/20 02:13:25

>>C++などの流儀のOOは、そう言われることが多いようですね。 > >C++ ファミリーじゃない言語をよく知らないので、よろしければ、 >他の流儀では何がオブジェクト指向だと呼ばれているのか、ご教示願えませんか。 CESさん自身が挙げられたこのページに、 http://sumim.no-ip.com:8080/wiki/414 | Smalltalk(アラン・ケイ)は“オブジェクトへのメッセージ送信”という | メタファをしてその「オブジェクト指向」と、C++(ストラウストラップ)は | 抽象データ型からの発展型(あるいはそれとは別のクラスのあり方)をして | その「オブジェクト指向」と位置づけ、その進化の初期の過程で整備されました。 と書いてあるわけですが。読んでいませんか? また、既に書きましたが、(私が作っているcrowbarのような)タイプベースの言語では、 そもそもクラスがないので、抽象データ型からは離れているように思います。 >「型」がある→「マルチプルインスタンスが前提」という繋がりがよくわかりません。 >「鋳型」「ケーキ型」などは、同じ形のものを量産するためにありますが… >そもそも「型」の語源は「type」ですし、「クラス」という用語もそうですが、 >「分類」というような意味があるんじゃないでしょうか。 実は拙著「Java謎+落とし穴~」ではタイヤキの型を使ってクラスとインスタンスの 説明をしていますが、タイヤキ型がtypeでないことはわかってて注でツッコミ入れたり してます。それはさておき。 typeだから分類だ、という解釈をしたところで、分類というのは、通常ひとつの カテゴリに複数のナニモノカが入るでしょう。 ただ、イメージとしては、プログラミング言語における「型」は、 結構タイヤキの型の方に近いような気もします。インスタンス生成なんて 型にタネとアンコ(メモリ)を詰めてタイヤキ作るイメージそっくり。
[この投稿を含むスレッドを表示] [この投稿を削除]
[521] Re:マルチプルインスタンス
投稿者:(ぱ)
2007/02/20 02:13:25

>オブジェクト指向=モジュール化+マルチプルインスタンス >ということでよろしいのでしょうか。 >ただ、そうしますと、再入門講座はどうしても不適切だと言わざるを得ません。 http://kmaebashi.com/programmer/object/othello.html ここは読みましたか? ここでは、まず「モジュール」としてboard.cを作り、その後それを複数生成 できるようにしています。 | 以前のboard.cというモジュールは、カプセル化は実現できていましたが、 | 静的にひとつしか存在しませんでした。それが、必要に応じていくつも生成できる | ようになったものがオブジェクトです。そして、このようにオブジェクトを | 必要な数だけ生成し、それに付属した関数を呼び出しながら動作していくという | プログラミングスタイルが、「オブジェクト指向」であるわけです。 つまり、私の説明では、 >オブジェクト指向=モジュール化+マルチプルインスタンス まさにこれが前提になっているのであり、なのになぜ不適切といわれるのかが わかりません。 >・マルチプルインスタンスはモジュール指向以前からあった > →オブジェクト指向もモジュール指向も知らない人でも、これは知っている >・非オブジェクト指向、オブジェクト指向の知名度に比べて、モジュール指向の > 知名度が低い > (私のように、オブジェクト指向とモジュール指向を混同している可能性が高く、 > 非オブジェクト指向→モジュール指向→オブジェクト指向 という経路ではなく、 > 非オブジェクト指向→オブジェクト指向 という経路を辿ると思っている) …ということは、 「モジュール」→「マルチプルインスタンス」 という説明の順序は逆で、 「マルチプルインスタンス」→「モジュール」 という順序のほうがよい、という主張でしょうか? そうなのかもしれませんが、ではその順序で説明したら、どんな感じの説明に なるのでしょうか。私にはちとイメージがつかめません。 また、上のページでこう書いたように、 | 既に書いたように、board.cはオブジェクト指向とは言えません。 | そして、多くのCプログラマには、「この設計でいったい何がいけないのか?」と | 思えるのではないかと思います。 そこそこ経験を積んだCプログラマなら、「モジュール化」はある程度意識して いるものです。また、オブジェクト指向の入門書を読めば、「カプセル化」の 話はたいてい書いてあります。 結果として、 http://kmaebashi.com/programmer/object/response3.html こちらで示したように、 284 :デフォルトの名無しさん :03/09/16 11:45 | データの局所性を高めたり隠蔽するってさ、 | 一データ群を取り扱う関数群を一つのソースにまとめて、データへのアクセスは | 専用のI/O関数を介してやり取りするのと違いはある? | Cでもこういうのを徹底しとけばいいんでしょ? こういう誤解をしてしまう可能性が非常に高いわけです。 # 284さんはその後うちの掲示板にも登場されました。 # やはりboard.cのようなものをイメージされていたようです。 私の「再入門」は、そういう読者をターゲットとしているつもりです。 CESさんのおっしゃるような「オブジェクト指向もモジュール指向も知らないが、 マルチプルインスタンスは知っている」人というのは、具体的にどんな経歴(言語 経験)で、どんなプログラムを書く人なのでしょうか。 少なくとも私には、具体的にイメージできません。
[この投稿を含むスレッドを表示] [この投稿を削除]
[522] Re:マルチプルインスタンス
投稿者:(ぱ)
2007/02/20 02:13:25

>マルチプルインスタンスで、何故再利用性が高まっているのでしょうか。 >また、その再利用性は、ライブラリの再利用性とどう違うものなのでしょうか。 strtok()みたいに、よそで使われてないか意識しないと使えないようでは、 再利用性が高いとは言えないと思うんですが?
[この投稿を含むスレッドを表示] [この投稿を削除]
[523] Re:マルチプルインスタンス
投稿者:CES
2007/02/20 02:13:25

>CESさん自身が挙げられたこのページに、 >http://sumim.no-ip.com:8080/wiki/414 >| Smalltalk(アラン・ケイ)は“オブジェクトへのメッセージ送信”という >| メタファをしてその「オブジェクト指向」と、C++(ストラウストラップ)は >| 抽象データ型からの発展型(あるいはそれとは別のクラスのあり方)をして >| その「オブジェクト指向」と位置づけ、その進化の初期の過程で整備されました。 > >と書いてあるわけですが。読んでいませんか? ふむぅ…読み飛ばしていたような気がします。 やっぱり、C++ 流儀にどっぷりつかった視点では理解しにくいですから。 >また、既に書きましたが、(私が作っているcrowbarのような)タイプベースの言語では、 >そもそもクラスがないので、抽象データ型からは離れているように思います。 crowbar がどのような言語かはまだじっくりと見ていないのですが、クラスが無かろうとも、オブジェクト指向(モジュール指向)であれば、抽象データ型が無いということは無いと思います。 > http://kmaebashi.com/programmer/object/othello.html > ここは読みましたか? 書いてから全編に渡って何度か読み直しました。 結果、読めば読むほど >オブジェクト指向=モジュール化+マルチプルインスタンス なんだな、と感じるようになりました。 > 私の「再入門」は、そういう読者をターゲットとしているつもりです。 つまり、 > 「既にモジュール指向は知っている人のためのオブジェクト指向入門」 ということですね。 そういうスタンスだということであれば、私の反論はまったく的外れです。 ご気分を害されましたら、申し訳ございません。 > 「オブジェクト指向もモジュール指向も知らないが、 > マルチプルインスタンスは知っている」人というのは、具体的にどんな経歴(言語 > 経験)で、どんなプログラムを書く人なのでしょうか。 前にも申しましたように、 int i; int j; これで、モジュール指向ではありませんがマルチプルインスタンスです。 モジュール化を知る前の人だって、こういうことは素でやるでしょう。 >> マルチプルインスタンスで、何故再利用性が高まっているのでしょうか。 > strtok()みたいに、よそで使われてないか意識しないと使えないようでは、 > 再利用性が高いとは言えないと思うんですが? うん、確かにそうです。 …何なんでしょう。↑の1行を書くのに1時間悩みました。 たぶんあれです。 私はオブジェクト指向とモジュール指向を混同していたから。 マルチプルインスタンスではなく責務の分離こそオブジェクト指向だと思っていながら、データが1つしかない本当のモジュール指向を全然やってないから、マルチプルインスタンスのありがたみがわかってなかったんじゃないかな、と。 長きに渡お付き合いいただき、ありがとうございました。 ここで頂いたコメントをヒントにして、自分なりにもう少し煮詰めてみたいと思います。
[この投稿を含むスレッドを表示] [この投稿を削除]