- 1 名前:デフォルトの名無しさん [04/01/10 14:56]
- VisualBasicやCといった手続き型言語をずっとやってきた人が、
C#やJavaといったオブジェクト指向言語をマスターする場合 オブジェクト指向の概念・概論を学ぶのが先がいいのか、 それとも、C#やJavaの言語を学ぶのが先がいいのか、 どっちがいいと思われますか。
- 83 名前:デフォルトの名無しさん mailto:sage [04/11/04 06:28:11]
- 生まれたときからTVがあったような奴にはラジオの有難味は分からんて
- 84 名前:デフォルトの名無しさん mailto:sage [04/11/04 06:50:22]
- まったく。
グローバルな破壊的代入を制御し隠蔽するためにどれだけの苦労が払われてきたか理解できないのだろうな。
- 85 名前:デフォルトの名無しさん [04/11/07 16:12:17]
- >>1
きみ自身が 「手続き型言語をずっとやってきた人が、 C#やJavaといったオブジェクト指向言語をマスターする場合」 なんて事を前提にしているんだから、 オブジェクト指向の概念・概論を学ぶのが先がいいに決まってる。 さもないとこういうマヌケなことになる。 pc5.2ch.net/test/read.cgi/tech/1055075469/83-85
- 86 名前:デフォルトの名無しさん mailto:sage [04/11/07 18:49:36]
- もうあきた
- 87 名前:デフォルトの名無しさん mailto:sage [04/11/07 18:50:11]
- なんで同じようなことを別スレでなんどもなんども…
- 88 名前:デフォルトの名無しさん mailto:sage [04/12/11 00:25:56]
- 学習もスパイラルがいい。作りながら概念も同時に学べ。
どっちかが先とか言う奴は糞ウォーターフォール推奨者。
- 89 名前:デフォルトの名無しさん mailto:age [05/02/05 10:31:17 ]
- age
- 90 名前:デフォルトの名無しさん [2005/04/10(日) 02:40:23 ]
- 自分の意見を言わせていただきます。
『概念学習』を先にしたほうがいいと思います。 自分C言語はできたのですが、学校でJavaを習っていた時全く理解できませんでした。 よく言われるような『どこが分からないのか分からない』状態でした。 でどうしても分からないままでいたくないのでオブジェクト指向の載っている本を2,3冊買いました。(多分悪書の部類の本) 全く理解できませんでした。 長々と説明されているのですが、全く理解できませんでした。 でも日経系の本でオブジェクト指向のことが書かれている記事を見ていたら『あれ?もしかしたらこういうことかな?』と うっすらと分かりかけてきたところを何度も見ていたら理解できるようになりました。 急にわかるようになってくると今までやってきたところがすぐ理解できました。 っていうかね Javaを教える先生が『オブジェクト指向』の概念学習より言語学習を教えることをメインにおいたために、生徒の全員が全く理解できませんでした。 毎回何十個も言語学習をするよりも、半年かかってもいいから概念学習をしっかりさせたほうがいい。 これは多分英語でもいえると思う。 大学に在学していたとき、アメリカ人の先生が 『今学校の方針でこのような学習法(言語学習)をしているけど、正直概念学習のほうがいい。 単語を暗記させるよりも、辞書片手に英語の新聞の翻訳をさせたほうがよっぽどいい勉強になる』 と言った気持ちがオブジェクトをなんとなく分かりかけたときに理解できた。 どこのプログラマーでも困ったら本見るんだからそれでカバーできない概念学習をしっかりしたほうがいいと思う。
- 91 名前:デフォルトの名無しさん mailto:sage [2005/04/12(火) 23:39:23 ]
- オブジェクトって単に関数を要素にとれる構造体でそ?
- 92 名前:デフォルトの名無しさん mailto:sage [2005/04/13(水) 13:22:12 ]
- つるな
- 93 名前:90 [2005/04/19(火) 15:05:07 ]
- 先生。何かこの教科書、教科書名の後ろにって書いてあるんですが。
しかも重要なところに『上書参考』って・・・・。
- 94 名前:デフォルトの名無しさん [2005/04/19(火) 19:48:34 ]
- 両方バランス良くやった方がいいって。
概念がわかっても、それが一体何の役に立つのかわからなくてイライラしたやつが 暴動起こして終わると思うな。
- 95 名前:脳内PG mailto:sage [2005/04/19(火) 20:00:19 ]
- 私は言語が先だと思います
言語をやる内に、オブジェクト指向は理解できると思いますし
- 96 名前:デフォルトの名無しさん mailto:sage [2005/04/19(火) 20:06:42 ]
- OOなんぞが知れ渡る前から、擬似オブジェクト指向Pやってると、
どうしても概念レベルで、実装が頭をよぎっちまわない? 酷いときは妥協のしどころまで考えてたり。
- 97 名前:デフォルトの名無しさん mailto:sage [2005/04/19(火) 20:25:33 ]
- 日本語で話せよ。
- 98 名前:デフォルトの名無しさん mailto:sage [2005/04/20(水) 01:44:48 ]
- >>93
与えられた本しか読まない馬鹿にはどんな本を与えても無駄。
- 99 名前:デフォルトの名無しさん [2005/04/23(土) 20:03:38 ]
- ぉぃぉい結局どっちなんだよ?始めようと思ったのに出来ねーじゃねーか!もぅCとJava勉強すりゃいいのか?どうなんだよボケがぁぁぁぁぁぁぁぁぁ!
取り敢えず手始めにCでもするかな…
- 100 名前:デフォルトの名無しさん [2005/04/23(土) 21:09:17 ]
- どちらが先なんて決めつけないで
糾える縄の如く理解していけばいいし 実際みなそうしている
- 101 名前:デフォルトの名無しさん [2005/04/25(月) 07:53:16 ]
- VBなどで経験があるなら、階層化プログラミングはわかっているんだよね。それなら、
「カプセル化」と「継承」は実戦から入ったほうが手っ取り早い。 「多態性オブジェクト」とか「仮想関数」は、概念の勉強を先にしたほうがいいかな。
- 102 名前:デフォルトの名無しさん mailto:sage [2005/04/25(月) 09:18:55 ]
- >>101
継承・仮想関数も全てポリモーフィズムのためにあるわけだから、 どっちが先もクソもないだろ。
- 103 名前:デフォルトの名無しさん mailto:sage [2005/04/25(月) 11:46:52 ]
- 「階層化プログラミング」と言う奴の言うことですからw
- 104 名前:デフォルトの名無しさん [2005/04/25(月) 20:03:08 ]
- ガイネンガクシュウ
略して ガイガク
- 105 名前:デフォルトの名無しさん [2005/04/26(火) 08:10:22 ]
- オブジェクト指向を教えるとき、どの言語がよいでしょうか?
- 106 名前:デフォルトの名無しさん [2005/04/26(火) 08:56:31 ]
- smalltalk
- 107 名前:デフォルトの名無しさん [2005/04/26(火) 15:03:01 ]
- >>105
メッセージングまんせーなら Smalltalk クラスまんせーなら Java か C++
- 108 名前:デフォルトの名無しさん mailto:sage [2005/04/26(火) 15:04:26 ]
- >>105 >>107
オブジェクトまんせーならSelfか。
- 109 名前:デフォルトの名無しさん mailto:sage [2005/04/26(火) 15:25:29 ]
- ここ数年、オブジェクト指向を覚えるときには、Javaが使われてきました。
Javaを使うのには、いくつかの理由があります。 ・広く知られている ・C を基本とした文法(一般的なスタイルとなりつつあります) ・フリーで高性能な開発環境が利用可能である ・Javaの知識があれば仕事に就ける こういった理由から、私はJavaの使用をやめさせようとはしませんでした (C#にもこういった特徴があり、いずれC#が代わりになるだろうと指摘してはいたんですが)。 ただ、Javaだけに任せようとは思っていません。 Java、C#、C++はいずれも、オブジェクト指向プログラミングのある形を提示してくれていますが、 誰かにオブジェクト指向を紹介するならば、選択肢も紹介してあげるといいでしょう。 選択肢とは、RubyとPythonのことです。 両言語とも、動的型言語です。静的型言語と一緒に使えるようになってれば便利だと思います。 どちらも大変便利な言語です。ちょっとしたスクリプトで自動化して解決するような仕事はたくさんあります。 技術者たるもの、1つくらいはスクリプト言語を隠し持っているべきですね。
- 110 名前:デフォルトの名無しさん [2005/04/26(火) 21:17:07 ]
- SmallTalk以外はオブジェクト指向のフレーバーがある偽物といへり
- 111 名前:デフォルトの名無しさん mailto:sage [2005/04/26(火) 21:49:16 ]
- Smalltalkによるプログラミングは、私にとって今でもお気に入りの経験だから、
その気持ちは分かります。 私のようなSmalltalkファンですら、もう何年もSmalltalkの環境(image)を立ち上げていません。
- 112 名前:デフォルトの名無しさん [2005/04/26(火) 21:50:19 ]
- 個人的には、Rubyが気に入っていますけど。
広く使われている(かつ利用可能な)のはPythonですし、 Rubyはより純粋なオブジェクト指向ですので(学ぶのには最適です) 私にとってみれば、すがすがしい感じがします。 あと、Rubyにはブロック(コード群を簡単にオブジェクトとして扱う機能)がありますね。 ブロックは強力なプログラミングツールで、コードの構造化についての多くの考え方を 学ぶことができます。 他のやり方だと、なかなかこうはいきません。関数型言語の入門用にも良いですね。 スクリプト言語の強みは、プロのプログラマが日常的に使えることなんです。
- 113 名前:デフォルトの名無しさん mailto:sage [2005/04/26(火) 22:03:54 ]
- なあ、オブジェクトとクラスとインスタンスの違いを説明してくんない?
オブジェクト指向の本読むと、みんなごっちゃでわけわかんなくなるの・・・
- 114 名前:デフォルトの名無しさん mailto:sage [2005/04/26(火) 22:10:28 ]
- クラスというのは、型情報。
基本的に、プログラム内では一意に決まり、いつ参照しても同じ結果が得られる静的な情報。 インスタンスというのは、クラスという型情報を元に、メモリ上に生成されるデータの実体。これをオブジェクトともいう。 プログラムの処理とともに内部変数を変化させる動的な存在。必要に応じて複数生成されることも多々ある。
- 115 名前:デフォルトの名無しさん mailto:sage [2005/04/26(火) 22:20:11 ]
- >>114
教えてくれてありがと クラス=型 オブジェクト=インスタンス=メモリ上の実データ という理解でいいの? オブジェクトのメンバ関数のメモリ上の実コードはどういう言い方するといんだろ? クラスのメンバ関数って言った方が正しいのかな?
- 116 名前:デフォルトの名無しさん mailto:sage [2005/04/26(火) 22:22:10 ]
- >>115
おっと、 オブジェクト=クラスのインスタンス と書いているみたいですね。
- 117 名前:デフォルトの名無しさん mailto:sage [2005/04/26(火) 22:26:42 ]
- メンバ関数には、クラス所属のものと、インスタンス(オブジェクト)所属のものがある。
たとえば class Hoge { void foo(); static void bar(); }; というC++クラスの場合、fooはインスタンス所属で、barはクラス所属。 クラス所属の関数は、インスタンスを作らなくてもコールできる。 こんなふうに Hoge::foo(); 一般にこれをクラスメソッドとか、クラス関数と呼ぶ。 インスタンス所属の関数は、当然インスタンスを作らないとコールできない。 Hoge *hoge = new Hode(); hoge->bar(); あんまりいわないけど、あえて言うならインスタンスメソッド。
- 118 名前:デフォルトの名無しさん mailto:sage [2005/04/26(火) 22:29:02 ]
- オブジェクトとインスタンスはほぼ同じ意味だが、ニュアンスの違いがある。
オブジェクトのほうがより抽象的で、インスタンスのほうが具体的なニュアンスを持つ。 でも、かなり混同もされる。
- 119 名前:117 mailto:sage [2005/04/26(火) 22:30:38 ]
- ごめん間違えた。
Hoge::bar(); と、 hoge->foo(); だった
- 120 名前:デフォルトの名無しさん mailto:sage [2005/04/26(火) 22:48:24 ]
- >>118
そう、そのニュアンスの違いが“理屈で”解らない。 ストラゥストラップの「プログラミング言語C++」を読んでると、 ニュアンスの違いがどこにあるのか解らなくなる ストラ先生は、オブジェクト=クラスという意味で使っているみたい そしてインスタンスって用語は出てこない。 で、他の本を読むとオブジェクト≒クラス、オブジェクト≒インスタンス のような意味で使う。 オブジェクト指向を特集している今売りの雑誌でも、 オブジェクト=物だといいつつ、 明確に定義しないまま“クラス”と“インスタンス”という用語を使う 書き手によってさまざま。困ってしまいます。
- 121 名前:デフォルトの名無しさん mailto:sage [2005/04/26(火) 22:53:48 ]
- 俺もそのへんが未だによく分からない。
オブジェクトはクラスもインスタンスも含む概念で、 言語や状況によって、インスタンス=オブジェクトと見なせる場合があるのだと 強引に理解しているが、根拠はない。
- 122 名前:デフォルトの名無しさん mailto:sage [2005/04/26(火) 22:58:34 ]
- >>119
static関数と非static関数の違いは理解してるつもり staticメンバ関数はthisポインタがなく、引数、auto変数/定数を除くと クラスのstatic変数/定数しか直接参照できない。 非staticメンバ関数は(暗黙の)thisポインタがあり、 上に加えてメンバ変数を参照できる。 Hoge myHoge; //と宣言すると myHoge.foo(); // static関数と myHoge.bar(); // 非static関数は同じ呼び出し方になる
- 123 名前:デフォルトの名無しさん mailto:sage [2005/04/26(火) 23:02:03 ]
- >>120
確かに、オブジェクトというのは微妙な言葉だな。 場合によってはクラスを表現するオブジェクトというものもあらわれる。 たとえば、Javaだと、クラス情報をランタイムに参照できるようにメモリ上にクラス情報を置いてくれる。これはつまり「クラス情報のオブジェクト(インスタンス)」といえる。 このランタイムクラス情報は、あくまでもクラスについての情報を保持する別のオブジェクトであって、クラスそのものではない。 というあたりが自分のもっているイメージ。 あと、 オブジェクト指向は、「分析」と「設計」で分けて語られる。 「分析」は対象領域を抽象的に分類、整理する手段としてのオブジェクト指向で、 「設計」は実際にプログラムに落とすためのオブジェクト指向。 どっちの話をしているのか意識しないとすぐ混乱する。 分析レベルだと、あんまりインスタンスという言葉は使われない。 設計レベルではやたらと増える。 そういう意味でもインスタンスは具体的なニュアンスを与える。
- 124 名前:デフォルトの名無しさん [2005/04/26(火) 23:04:49 ]
- object classがすべてのclassの親で、その子のmetaclass classがすべてのmetaclassのclassで、すべてのmetaclassのinstanceがclassで、という親子関係はすべてのObjectOriented言語に継承されているのかどうか
- 125 名前:デフォルトの名無しさん mailto:sage [2005/04/26(火) 23:05:23 ]
- >>122
static関数と非static関数が逆転してたす。
- 126 名前:デフォルトの名無しさん mailto:sage [2005/04/26(火) 23:06:13 ]
- 必ずしも、親子関係とはいえないような気がする。気がするだけだけど。
- 127 名前:デフォルトの名無しさん mailto:sage [2005/04/26(火) 23:11:41 ]
- >>123
>クラスを表現するオブジェクト GoF本に、“クラスオブジェクト”という用語がでてきます。 型情報を持ったオブジェクトと理解しています。 具体的には、WindowsのCOMコンポーネントがtypeライブラリ情報をもっているイメージ。 SmallTalkは私のプログラマ・センスでは理解できません。 >「分析」と「設計」で分けて語られる オブジェクトはアナリスト用語 クラスとインスタンスはプログラマ用語 と使い分けられるといいのに・・・
- 128 名前:デフォルトの名無しさん [2005/04/26(火) 23:12:55 ]
- 集合論で解釈してはどうか
要素の集まりが集合 しかし集合を要素とする集合も考える ある集合の要素を作ろうとするなら 要素としての集合に対して操作をする 操作の対象はあくまで要素というわけ
- 129 名前:デフォルトの名無しさん [2005/04/26(火) 23:14:34 ]
- >>126
確かに 親子関係とは集合の包含関係のこと 集合とその要素との関係も親子関係と言ったのは間違い
- 130 名前:デフォルトの名無しさん mailto:sage [2005/04/26(火) 23:21:28 ]
- >>124
>metaclassのinstanceがclass これは、C++のtemplateを理解しようとする時に出てくる概念の壁(^^) template関連以外ではこういう言い方は成り立たないのでは? というか、templateのパラメータとしてのクラスと オブジェクトの型であるクラスを混同してしまい、 最後にはちゃぶ台をひっくり返すケースだと思いますけど
- 131 名前:デフォルトの名無しさん [2005/04/26(火) 23:26:11 ]
- すべてはobject
instanceとはclassに所属しているobjectであることを強調したもの
- 132 名前:デフォルトの名無しさん mailto:sage [2005/04/26(火) 23:42:19 ]
- >>131
オブジェクト≡クラスのインスタンス というのが、おおかたの書籍にでてくる理解で インスタンス≡クラスのオブジェクト という理解は、そもそも不要で混乱のもとだと思います
- 133 名前:デフォルトの名無しさん [2005/04/26(火) 23:49:02 ]
- >>132
なぜかね? classによって産み出されるobjectのことをそのclassのinstanceと呼ぶのだが つまりinstanceとはclassという概念に従属していることを強調する用語
- 134 名前:デフォルトの名無しさん [2005/04/26(火) 23:50:54 ]
- >>124に関して、
相撲流遠く (綴り、Smalltalkだっつーの)では ・クラス継承関係 ・インスタンス関係 の他に ・メタクラス関係 があるのが興味深いんだ。 C++みたいな静的言語では、おもいっくそネグっちゃってるが、 JavaやC#では、リフレクションとかメタデータって名前で復活してる。 ちなみに相撲流遠くのクラス階層は、およそこんな感じ。 Object △├−−−−−−−−┬−−−(略) ├|−−−−−−−┐| |↓instance |↓ instance MetaClass Class △ superclass △ superclass | | FooMetaClass ←−− FooClass metaclass | |instance ↓ aFooInstance 【Class変数/メソッド担当】【Instance変数/メソッド担当】
- 135 名前:デフォルトの名無しさん [2005/04/26(火) 23:53:19 ]
- リファレンスは、例えば
OO広場 Happy Squeaking!の32ページ目あたり www.ogis-ri.co.jp/otc/hiroba/technical/Squeak4/pdf/Squeak4.pdf
- 136 名前:134 mailto:sage [2005/04/27(水) 00:05:33 ]
- ぁ、>>134の最終行。。。とりあえず無視しといてね(はぁーと
- 137 名前:デフォルトの名無しさん [2005/04/27(水) 00:22:15 ]
- >>134のMetaClass, FooMetaClass, Class, FooClassの状況は若干修正が必要だろう
MetaClassはFooMetaclassのclass(FooMetaclassはMetaClassのinstance) FooClassはFooMetaclassのinstance(FooMetaclassはFooClassのclass) ClassがFooMetaclassのsuperclass(FooClassはClassのinstanceとしての性格を継承)
- 138 名前:デフォルトの名無しさん [2005/04/27(水) 00:36:12 ]
- ああ、すまそ。
うろ覚えで書いちまった。(記憶力の減退か・・・) 正確な所は、 www.ogis-ri.co.jp/otc/hiroba/technical/Squeak4/img/metaHiera9.gif 見てね(はぁーと 相撲流遠くのクラス階層は ・メタ関係にあるオブジェクト(クラス)がインスタンスを生成する というルールに基づいてる、と。
- 139 名前:デフォルトの名無しさん [2005/04/27(水) 00:43:43 ]
- 僕は、オブジェクト指向の概念をまず学習すべきだと思うな。
もちろん、目指すゴールによって一概には言えないけど。 クラス使うと便利な面が多々あるし、 しらなきゃその恩恵を受けられないわけだし。 確か、ドラクエのモンスターを題材として オブジェクト指向を説明しているいい本があったな。あれですぐ飲み込めた。 なんていう本かは忘れた。
- 140 名前:デフォルトの名無しさん mailto:sage [2005/04/27(水) 00:46:12 ]
- オブジェクト指向を教えるのに、言語を使ったほうが良いかどうか?
言語を使わない案というのは、原則について議論するということになるでしょうね。 おそらくはUMLを描くとか、そんな感じでしょうか。 私は、まずは言語を使って、何かできるようになるほうが断然いいと思いますね。 私にとってソフトウェア設計とは、数学みたいなものなんです。 読んだり聞いたりするだけでは、なかなか理解が深まりません。 実際にやってみないと理解なんかできません。 だから、本当にオブジェクト指向を理解したいのなら、実際に何かを作ってみるべきです。
- 141 名前:デフォルトの名無しさん [2005/04/27(水) 08:44:48 ]
- 僕は私。
- 142 名前:デフォルトの名無しさん mailto:sage [2005/04/27(水) 19:25:42 ]
- 00ってなに?
- 143 名前:デフォルトの名無しさん mailto:sage [2005/04/27(水) 19:28:45 ]
- クラスオブジェクトインスタンス
と クラスインスタンスオブジェクト は異なるわけか。
- 144 名前:デフォルトの名無しさん mailto:sage [2005/04/28(木) 00:04:45 ]
- Objectって、目的というか対象というか、そっちの(英語の)意味で考えると個人的にはしっくりきたり。
(下手に訳すのがいけないのかも。)
- 145 名前:デフォルトの名無しさん mailto:sage [2005/04/28(木) 00:08:58 ]
- this じゃなくて self な文化だと、物って訳した方が自然に感じるよ
- 146 名前:デフォルトの名無しさん [2005/04/28(木) 00:32:03 ]
- >>145
意味ワカンネ
- 147 名前:デフォルトの名無しさん mailto:sage [2005/04/28(木) 08:56:43 ]
- 目的物
- 148 名前:デフォルトの名無しさん [2005/04/28(木) 08:58:19 ]
- >>143
その二つはなに?
- 149 名前:デフォルトの名無しさん mailto:sage [2005/04/28(木) 10:21:03 ]
- 俺も見た記憶があるなぁ
何気にRPGとかだとクラスの有効利用をカンタンに理解できそうなきガス
- 150 名前:デフォルトの名無しさん mailto:sage [2005/04/28(木) 11:24:27 ]
- >>143
> クラスオブジェクトインスタンス new Point(1,2) > クラスインスタンスオブジェクト Point かな?
- 151 名前:デフォルトの名無しさん [2005/04/28(木) 13:56:31 ]
- 実際オブジェクト指向を勉強して
それをどうプログラミングしていくかというところで、ぽかーん という状態です。
- 152 名前:OO太郎 [2005/04/28(木) 15:22:59 ]
- プログラミングの初心者の俺が教えてやろう。オマエラよく聞け。
オブジェクト指向というのは、プログラミングのスタイルだ。JavaやC++は オブジェクト指向言語だといわれるけど、非オブジェクト指向的な プログラミングをしようと思ったら出来る。オブジェクトなんて使わなくても 同じように動くプログラムは作れる。 だから、プログラミングスタイルとしてオブジェクト指向をしっかり覚えないと いつまでたってもオブジェクト指向のプログラミングは出来るようにならない。 俺みたいにBASICで育った者は特にそうだ。
- 153 名前:OO太郎 [2005/04/28(木) 15:40:00 ]
- オブジェクト指向がなんでこんなにもてはやされているかというと、
いまの、ウインドウズを中心としたいわゆるGUIのプログラミングに ぴったりな概念だからだ。 オブジェクトはそれほど大騒ぎするほど難しい概念じゃない。巷に溢れる 説明の下手な著者の書いた本がくどくど説明するほど抽象的な概念 でもない。オブジェクト=物だ。ウインドウズだったら、それぞれの 窓はオブジェクトだ。あるいは、窓の中にあるボタンの一つ一つが 全てオブジェクトだ。 トランプのゲームだったら、トランプの一枚一枚がオブジェクトだ。 クラスというのは、オブジェクトを作る型みたいなもの。トランプには 必ずマークと数字がある。そういう決まりをまとめたものがクラスだ。 トランプクラスからトランプの一枚一枚を作り出すと、それがオブジェクト になる。例えば Trampu tramp1 = new Trampu (ハート、A); Trampu tramp2 = new Trampu (ハート、2); ・・・・・・・・・ Trampu tramp52 = new Trampu (クローバー、K); という感じにトランプオブジェクトが52個作れる。それぞれが トランプクラスのインスタンスになるわけだ。
- 154 名前:OO太郎 [2005/04/28(木) 15:52:20 ]
- あと、オブジェクトの面白いのは、トランプの例のようにマークと
数というようなデータだけじゃなくて、いわゆるサブルーチンのような 機能(これがメソッドだ)も一まとめにしてしまうことが出来るってこと。 例えば、トランプゲームだったら、「持ち札」なんてクラスが定義できる カも知れない。プレーヤーが4人いたら、それぞれ持ち札があるわけ だから、持ち札1、持ち札2、持ち札3、持ち札4というような オブジェクトが作れる。例えば「持ち札1」には、ハートの3、 スペードの4、クローバーのA、ダイヤの7がある。それはみんな インスタンス変数になる。で、メソッドとして、「カードを引く」 「カードを捨てる」「カードの枚数を得る」「同じマークを捜す」 「同じ数を捜す」などなどいろいろなメソッドが考えられる。 それらを全てクラスで定義しておいて、実際に「持ち札1」にたいして そういうメソッドを呼ぶことによって、「持ち札1」の内容を変更 したり、内容を見たりすることが出来る。
- 155 名前:OO太郎 [2005/04/28(木) 16:06:15 ]
- トランプゲームだったら、もう一つ、真ん中においておく「カードの山」
なんて、クラス考えてもいいかもしれない。そこから作られる、 インスタンスとしての「カードの山」オブジェクトはインスタンス変数 として、カードの数、カードの種類などをもっていて。メソッドとして は、「カードを出す」、「カードを切る」など考えられるかもしれない。
- 156 名前:OO太郎 [2005/04/28(木) 16:21:57 ]
- あと、もう一つGUIプログラミングのもう一つの特徴は、イベント指向
ということだ。昔のプログラミングみたいに、一行目から始まって、 順々にコンパイラでもインタープリターでも読んでいって、順次実行 していく、いわゆる手続きがたのプログラミングとは違う。 プログラムは、キーボートや、マウスといった入力装置からの割り込み あるいはメッセージを待っていて、マウスがクリックされたというと、 それを処理するルーチンがある、マウスがドラッグされた、というと それを処理するルーチン、というように、そういう各々のイベント 処理を中心にプログラムが構築されていく。 で、そういう処理が、アル程度OSに任されてしまっているので、 プログラマーにはコントロールできない部分がある。例えば、描画 にしても、自分が、「描け」と命令するというよりも、絵を特定の 机の上に置いておくと、システムが定期的に来て、それを持っていって 画面に貼り付けてくれる、というようなイメージだ。絵を変化させ たいばあいは、別の絵を描いといて、それをまた特定の机の 上に置いておいて、システムが持っていくのを待つ。 こういった思考パターンによるプログラム作りにがつまり、 オブジェクト指向のプログラミングということだろうと、 素人の俺は思うんだが。
- 157 名前:131 mailto:sage [2005/04/28(木) 16:22:19 ]
- >>133
すいません、寝ちまいましたm(_ _)m オブジェクト指向プラグミングする際に 1. まず、プログラミング対象を分析した結果としてオブジェクトを抽出する 2. 次に、オブジェクトの設計・実装の結果としてメンバ変数とメンバ関数による オブジェクトの定義であるクラスを導出する 3. 最後に、プログラムの実行の結果としてクラスのインスタンスがメモリ上に 割り振られる この場合、オブジェクトという用語に必要な概念は、 プログラミング対象を分析した結果としてオブジェクトという用語であって、 それ以外の、 インスタンス≡クラスのオブジェクト の“オブジェクト”の用語の使い方は、 “一般概念としてのオブジェクト”という用語の適用を オブジェクト指向プラグミングというコンテキストに持ち込むことになるからです。 つまり、オブジェクト指向プラグミングというコンテキストでの“オブジェクト”の用語の 因果関係、つまり順序性の意味を無視しているということです。 「色即是空・空即是色」という禅問答は、アカデミック(学術)的な思考の中では 成立するのかもしれませんが、エンジニアリング(技術)的な思考の中では、 「色即是空」であるか、さもなければ、「空即是色」のどちらかでなければ、 未知の技術に対する理解は混乱するだけなのです
- 158 名前:OO太郎 mailto:sage [2005/04/28(木) 17:04:55 ]
- インスタンスって、英語で「事例」とか「実例」という意味で、
クラスに具体的なデータを与えて作ったインスタンスつまり 「具体例」がオブジェクトなんでしょ? クラスは基本的に、オブジェクトを作るための枠組みであって、トランプ でいったら、白紙でマークや数字が印刷される前の状態だと思う。
- 159 名前:デフォルトの名無しさん mailto:sage [2005/04/28(木) 17:38:16 ]
- 初心者に教えてもらいたくない
- 160 名前:デフォルトの名無しさん [2005/04/28(木) 19:05:35 ]
- オブジェクト指向自体はわかったんだけど、大規模なシステムのソースを理解するのが大変なんだよね。
こういうのってどうやってるんだろ・・・。 継承されまくりでどこにメソッドがあるのかもよくわからないし・・・。
- 161 名前:デフォルトの名無しさん mailto:sage [2005/04/28(木) 19:40:53 ]
- >>160
とりあえずdoxygen通してみるとか。
- 162 名前:160 [2005/04/28(木) 20:50:27 ]
- >>160
なるほど、よさげですね。 ためしてみます。アドバイスありがとうm(_ _)m
- 163 名前:デフォルトの名無しさん [2005/04/28(木) 21:09:51 ]
- >152-156
素人の説明って結局わからん、ってのはよくわかった、
- 164 名前:デフォルトの名無しさん mailto:sage [2005/04/28(木) 21:29:38 ]
- 俺は、C-magazine創刊号に載ってたトランプゲームによるOO説明(ソース付き)
思い出しちまったよ。 OOトランプの役者としては、 ・トランプの各カード ・カードの山 の他に、 ・ゲーム (トランプがルール知ってる訳じゃなくて、ゲームにルールがある) ・プレイヤー (一人(占い等)または複数) ・ゲームの場 (占いの内容とか、ゲームが何回戦目かとか) も要るな。
- 165 名前:デフォルトの名無しさん [2005/04/28(木) 21:34:09 ]
- >>163
そうかね?よく理解していると思ったが >>158 Integerクラスのインスタンスが1,2,3などの整数 Integerクラスを任意の整数と捉えることも可能だが 任意の整数の全体と捉えることの方をおすすめしておこう
- 166 名前:デフォルトの名無しさん [2005/04/28(木) 21:36:55 ]
- 素人(アル中)が素人に説教するインターネッツ
- 167 名前:デフォルトの名無しさん [2005/04/28(木) 21:39:15 ]
- おまいの議論って、
結局 Smalltalkのクラス階層として結晶した概念を、 後付で説明しようともがいているだけだな。 >>165 >Integerクラスのインスタンスが1,2,3などの整数 >Integerクラスを任意の整数と捉えることも可能だが >任意の整数の全体と捉えることの方をおすすめしておこう 誰もそんな事、話題にしてないしw
- 168 名前:デフォルトの名無しさん [2005/04/28(木) 22:04:12 ]
- 結局概念だけで説明しようとするとかえって分かりにくくなるような気がする。。
概念→実装ほどかけ離れてるもんはない。
- 169 名前:デフォルトの名無しさん [2005/04/28(木) 22:06:37 ]
- Smalltalkのクラス階層として結晶した=Smalltalkで実装された話
つう事。 概念 ↓ 実装 ↓ 実装を概念として騙ってる ←このスレ
- 170 名前:デフォルトの名無しさん [2005/04/28(木) 22:26:45 ]
- Smalltalk以外のオブジェクト指向言語は
オブジェクト指向の風味がある偽物 偽物の腐った概念であれ>>152-の理解は正しい
- 171 名前:デフォルトの名無しさん [2005/04/28(木) 22:30:37 ]
- >>167
なぜかね? >>158の捉え方も可能だが 任意よりも全体と捉える方をおすすめする
- 172 名前:デフォルトの名無しさん mailto:sage [2005/04/28(木) 22:36:47 ]
- >>165 の一行目に基づき、
「整数」を「インスタンス」と置き換えてみよう。 二行目「クラスを任意のインスタンスと捉える」 というような荒唐無稽な話は、(>>165と>>171以外)誰も言っていない。 三行目「クラスはインスタンスの全体と捉える」 これは、クラスを集合と捉える考え方だね。
- 173 名前:デフォルトの名無しさん mailto:sage [2005/04/28(木) 22:51:41 ]
- >>170
オブジェクト指向の定義は千差万別人それぞれ。 俺はリフレクションさえあれば何でも良し。C++ 逝ってヨシ!! www.shiro.dreamhost.com/scheme/trans/reesoo-j.html
- 174 名前:デフォルトの名無しさん mailto:sage [2005/04/28(木) 22:56:20 ]
- >>172
荒唐無稽と言うほどでもない クラスの概念は集合と似ているが同じではない 集合を任意要素として表現することもあり オブジェクトとクラスの関係を理解する一つの方法として >>158の捉え方もあながち捨てたものではない なお>>158をよく理解していると褒めてはいない >>152-の例が例としてよくまとまっていると褒めた
- 175 名前:チラシの裏 mailto:sage [2005/04/28(木) 23:10:28 ]
- 集合論ではsetと同じような意味でclassという単語が使われる
ことがあるけど、オブジェクト指向のクラスも元々はそこからとった 言葉じゃないのかなと俺は思う。
- 176 名前:デフォルトの名無しさん [2005/04/28(木) 23:30:05 ]
- >>175
正しいかもしれないがたとえ集合論と関連させたものだったとしても似た用語を援用しただけであろう なぜならば集合論におけるクラスは他のクラスの要素にならないからだ Smalltalkのクラスはメタクラスのインスタンスでありその点が大いに異なる また集合論では許されない無限降下列も存在している MetaClassのメタクラスはMetaClassのインスタンスである
- 177 名前:デフォルトの名無しさん [2005/04/29(金) 05:11:02 ]
- >>174-176
20分おきに連投ご苦労。で、結論出た? セットとクラスの違い、 数学基礎論でいうクラスと、OO言語のクラスの違い タイプ理論、 まで説明が終わったら、起こしてくれ。それまで一休みw
- 178 名前:デフォルトの名無しさん [2005/04/29(金) 07:45:21 ]
- >>177
結論とは何かね?
- 179 名前:デフォルトの名無しさん [2005/04/29(金) 08:09:08 ]
- >>157
忘れていた あまりよい理解ではないが インスタンス=クラスのオブジェクト で理解しても構わない ここで言うオブジェクトももちろんオブジェクト指向言語におけるオブジェクト すべてはオブジェクトでありクラスに従属していることを強調する場合はインスタンスという用語を使う selfに入っているものはオブジェクトでありそれは何らかのクラスのインスタンス
- 180 名前:デフォルトの名無しさん [2005/04/29(金) 08:21:05 ]
- 蛇足ながら
集合論ではすべては集合(無定義概念) 何らかの集合に所属している場合は要素と呼ぶ さらに蛇足ながら クラス概念のある集合論の場合 すべてはクラス(無定義概念) 何らかのクラスの要素である場合は集合
- 181 名前:131 mailto:sage [2005/04/29(金) 11:13:10 ]
- >>179
慣用的に、"すべてはオブジェクト”という理解があることは承知しています。 ですが、157で述べたとおり、クラスを導出する“オブジェクト”という言葉と、 クラスから導出される“オブジェクト”という言葉は、その導出の順序性と 目的において異なる意味を持っています。 "すべてはオブジェクトである”とい論理は、じつは、ふたつの“オブジェクト” という言葉が、それぞれ異なる意味を持った言葉でありながら、言葉の 形式的音韻的な同一性に拠ってのみ成立している論理だと思うのです。 そして、このような“オブジェクト”という技術用語の本来の意味をあいまいな 方向に誘導する学術系の論理は、オブジェクト志向プログラミングへの理解 を初手から阻害している重要な原因の一つだと考えているのです。
- 182 名前:デフォルトの名無しさん [2005/04/29(金) 11:15:25 ]
- クラスとセットのちがい
クラスの定義を説明する例として、「国連」が例示されることが多い。 すなわち、 o 国連のメンバーは国々であり、 o 国のメンバーは、例えば、日本国なら日本人だが、 x 日本人は国連のメンバーではない、 という説明がされる。 しかし、セットの観点からすれば x 日本人の集合は、いくら日本人を加わえても、 日本人の集合であって、日本国にはならない。 つまり、「男」と「女」を使った例で言えば、「男」と「女」の集合を起点にして、 「個人 」あるいは「法人」というクラスを形成するためには、 タイプ(N−1)とタイプN の間には、「概念の飛躍(抽象化)」が起こっているのである。 概念の一般化は論理和ではない。
- 183 名前:デフォルトの名無しさん [2005/04/29(金) 11:24:35 ]
- >>181
そこに書かれた「二つのオブジェクト」とは 君の言うプログラム設計手法としての「クラスを導出するオブジェクト」と 書かれたプログラム・実際に動く際の「クラスに導出されるオブジェクト」という意味か? そのような違いを念頭に書いたことはないし実際気にする必要があるとも思えない
|

|