1 名前:デフォルトの名無しさん [04/01/10 14:56] VisualBasicやCといった手続き型言語をずっとやってきた人が、 C#やJavaといったオブジェクト指向言語をマスターする場合 オブジェクト指向の概念・概論を学ぶのが先がいいのか、 それとも、C#やJavaの言語を学ぶのが先がいいのか、 どっちがいいと思われますか。
309 名前:デフォルトの名無しさん [2005/05/19(木) 21:44:36 ] けれどクラスという概念をなくしてしまってもいい オブジェクトの構造・仕組みという抽象的なもので コード上は現れないようにしても問題ないだろうよ
310 名前:デフォルトの名無しさん mailto:sage [2005/05/19(木) 21:47:54 ] なんか変なのが居ついてるな
311 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 06:01:04 ] >>309 そういう道を進んでいる言語もある。 プロトタイプベースと呼ばれているようだが。
312 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 09:11:17 ] 今頃プロトタイプ・ベースを語るとは・・・クオリティテラ高杉
313 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 09:43:14 ] プログラムもろくに書けない負け犬は、 古臭い脳内知識で妄想勝利するしかやる事がないんだな プロトタイプベース言語が提供する インスタンスに対する属性/メソッドの付加は、 Composit, Decoration, Delegation, Factoryあたりで実現できる。 プロトタイプベース言語は、それらの機能を言語仕様に取り込んでいるだけw
314 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 09:45:58 ] Composite, Decorator, Prototype パターン + Delegation (委譲による処理) な
315 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 10:59:30 ] クラスベース =オブジェクト間にメタ関係を設け、 メタ関係上位にあるオブジェクト(クラス)に、オブジェクト生成や継承の仕組みを任せて、 メタ関係下位にあるオブジェクト(インスタンス)の内部実装の簡略化を図ったもの プロトタイプベース=全てのオブジェクトに、オブジェクト生成や継承の仕組みを提供するもの。 概念は単純になるが、言語実装技術やプログラミング技術のハードルは高くなる。 (静的型付けやLiskov置換則による安全性を、言語レベルで提供しにくくなる) 概念学習への初期投資を惜しむような人間が、プロトタイプベースを選択するのはナンセンス。 プログラム書かない人が見栄知識でアレコレ言うだけなら、チラシの裏に書いてろ。
316 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 18:25:30 ] >>315 いい比較だと思うが、それだとクラスがファーストクラスな存在に読めるかも。
317 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 18:35:42 ] またファーストクラス厨房か。 Smalltalkでクラス・ベースのオブジェクト指向が確立した後で、 あらためて Self等でプロトタイプ・ベースのオブジェクト指向言語が研究されたのだから、 クラス-オブジェクト関係 (メタ関係 あるいは インスタンス関係) の方が広く受け入れられてる概念だと思うよ。 Abadi & Cardellaの本もまずクラスベース言語、次にオブジェクトベース言語という展開だし。
318 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 18:40:05 ] あ、もっとレベル低い人か。 Smalltalk等、クラスをファーストクラスなオブジェクトとして扱うのが第一世代、 CLOS等、手続き型の延長線上にクラスレスなOOを定義したのが第二世代、 C++等、クラスをオブジェクトが共有する構造体として扱うのは邪道な第三世代、 Java等、クラスをリフレクション等駆使して、実行時に参照可能なオブジェクトとして扱えるようにしたのが第四世代 だよん。(てきとー
319 名前:いやん mailto:sage [2005/05/20(金) 18:40:57 ] × Cardella → ○ Cardelli
320 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 18:43:46 ] Selfとか、プロトタイプ・ベースの言語が研究されるようになったのは、C++とJavaの中間くらいからかな。第3.5世代・・・新しい開拓地
321 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 19:08:23 ] >>318 プログラム書かない人が見栄知識でアレコレ言うだけなら、チラシの裏に書いてろ。
322 名前:デフォルトの名無しさん [2005/05/20(金) 19:29:24 ] おまえの事だよ
323 名前:デフォルトの名無しさん [2005/05/20(金) 21:19:08 ] プログラム書かない・・・情報処理言語の研究者なのかも
324 名前:デフォルトの名無しさん mailto:sage [2005/05/20(金) 21:22:43 ] 豆な人?
325 名前:306 mailto:sage [2005/05/21(土) 14:42:19 ] やっぱり混乱の元になったか…… クラスベースについて疑問を思っているんじゃなくて、ただ単に 『表記法』 について疑問に思っただけだったんだけどな クラスベースとかインスタンスベースとか、正直どうだって良いんだけど >>308 >structで定義しているのは構造体の構造 同様に、class で定義しているのはオブジェクトの構造つまりクラス それは分かる。struct および class が 『定義そのもの』 を指すのか 『定義した生成物』 を指すのかの違いのような。 気分的には、生成物を指したい
326 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 14:46:28 ] いろんな「何を」や「何は」が抜けていて、「何に」ついて言いたいのかさっぱりわからない。
327 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 14:51:43 ] 頭おかしい人だから、放置しとけ
328 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 15:03:52 ] >>325 君が誤解している(もしくは不完全な理解をしている)のは、 クラスやオブジェクト等のOOの概念ではなくて、型という概念だ。 Cardelliでも読んで、型とは何か、型を宣言するとはどういうことか、 じっくり考えてみたらいい。
329 名前:306 mailto:sage [2005/05/21(土) 15:05:19 ] 頭おかしいって言われちまったい ^_^; んじゃ書き直す ====== C# の表記法について、 class では 『定義そのもの』 を指していることは明確であるが、 struct は 『定義そのもの』 と 『定義によって生み出される生産物』 の、どちらを指すのか分かり難いと俺は思う 言いたい事はこれだけ ====== >>307 C# ではクラスと構造体が同一になっちゃってるから困っているんです >>308 構造体の構造を定義するのならば、キーワードは 『struct_struct』 であるべきという気もします 『struct』 単体ならば、それは 『定義に代って生み出される生産物』 を指すのでは?
330 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 15:12:33 ] 国語の問題な気がしてきた。
331 名前:306 mailto:sage [2005/05/21(土) 15:12:37 ] >>328 了解……出来るように頑張ります Pascal の 『レコード型』 とか、C の 『構造体型』 とかと同じように考えると、class では 『クラス型』 を定義している筈。 しかし生成物の方は 『レコード型のレコード』 『構造体型の構造体』 とは異なり 『クラス型のインスタンス』 だから、 前2者に揃える場合、これを 『オブジェクト型のオブジェクト』 にしたほうが簡潔ではないかと思いまして。
332 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 15:13:00 ] >>330 正解
333 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 15:31:29 ] ドーナツの穴について話す時、 「ドーナツ」という単語が付いていると、あたかも「ドーナツ」が存在しているかのように感じる。 だから、「穴の穴」というのが正しいぃぃぃぃーーーーーーーーーーーーーー
334 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 15:33:18 ] 「ドーナツの穴」って、まるで穴の部分にドーナツがみっちり詰まってるみたいで、誇大広告だよな(ピーヒャラ
335 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 15:35:15 ] 人間という単語と、その実体を考えるとき、 実体は単なる人なのに、 単語に「間」という漢字がついているのが、直感に反する。 これからは、「人間」という単語を使うのはやめよう
336 名前:デフォルトの名無しさん mailto:sage [2005/05/21(土) 15:49:42 ] >>333-334 スレ違い。こっち行け ドーナッツの穴は空洞か存在か? academy3.2ch.net/test/read.cgi/philo/1049436081/l50
337 名前:デフォルトの名無しさん mailto:sage [2005/05/22(日) 08:11:20 ] >>306 そのobjectってVBでいうところのモジュールだよな? classと違うだろ。
338 名前:デフォルトの名無しさん [2005/05/24(火) 06:19:22 ] おれはstructで構造体の構造が定義されてるって自然に感じるけどな んでその構造を持つ変数を同時に生成することもできると
339 名前:デフォルトの名無しさん [2005/05/24(火) 09:52:10 ] >>331 PascalやCのほうを『レコード型のオブジェクト』、『構造体型のオブジェク ト』って思ってみては? オブジェクトとインスタンスは、まぁ、同義ということで。
340 名前:306 mailto:sage [2005/05/24(火) 17:24:00 ] 色々とすまなかった。整理したら間違いに気付いたよ。 こんな馬鹿をやったのは久しぶりだ。今は後悔している OTL 【正しいこと】 ・C# の 《クラス》 には 『クラス』 『インタフェイス』 『構造体』 の3種類が存在する ・『インタフェイス』 と 『構造体』 は、Object クラスを継承している 【俺が間違っていたこと】 ・《クラス》 と 『クラス』 を混同し、宣言時のキーワード 「class」 が主に 《クラス》 を指す物と考えてしまった ・『クラス←構造体』 に代表される 「言語系外での継承」 が、一般の継承と完全に同じであると信じて疑わなかった その結果、俺は 「class」 と 「struct」 が同一レベルの概念ではないと錯覚した そして、「class」 と 「struct」 のレベルを同じにしようと思い、「class」 を 《クラス》 から 『クラス』 にするために 「《クラス》 には 『オブジェクト』 『インタフェイス』 『構造体』 の3種類が存在する、と言い換えたらどうか」 と提案した (>>306 ) (実際は 「class」 は 『クラス』 であり、単なる言葉遊びだった orz)
341 名前:最凶VB厨房 mailto:sage [2005/05/25(水) 00:25:55 ] 全く意味わからんなw 【正しいこと】に書いてある内容が正しくない。
342 名前:デフォルトの名無しさん mailto:sage [2005/05/25(水) 00:36:00 ] だからまず国語を勉強するべきだって。 つまり言語学習を先にするべき。
343 名前:306 mailto:sage [2005/05/25(水) 13:28:06 ] >>342 悪い。相変わらず間違えてたみたい。 ===== 「C# の 《クラス》 には 『クラス』 『インタフェイス』 『構造体』 の3種類が存在する」 ってのは、 「Java の 《クラス》 には 『クラス』 『インタフェイス』 の2種類が存在する」 っていうどっかの本の台詞のパクリだった この 《クラス》 は、Smalltalk のメタクラスに該当するんかな。よく分からんけど それはともかく、構造体はクラス階層の中に含まれているから、よく考えたらこの中に入れちゃいけないのかもしれない ===== インタフェイスは対応するクラスが無いから、Object から派生しているとは言えないでした (ただし、インタフェイスを実装したクラスのインスタンスは Object であることは確定なので、Object として扱える) ここのところは訂正しておきます
344 名前:306 mailto:sage [2005/05/25(水) 13:38:42 ] 結局、まだ理解できていないことは 実質 「class StructA: System.Struct { 〜 }」 なクラスを 「struct StructA { 〜 }」 と記述させる C# において、 キーワード 「class」 と 「struct」 を同列に置くことが果たして妥当なのかどうか つまり System.Struct からの実際の継承は、神の領域において行われる (ソースとして記述できない) が、 神の領域において、結局はクラスである構造体が、クラスと同じレベルまで昇進しているのかどうか ……自分でも未だ混乱していることがありありと分かりますな あとで Smalltalk でも勉強しよう……
345 名前:最凶VB厨房 mailto:sage [2005/05/25(水) 19:09:30 ] 間違った前提知識からは(正しい推論をしたとしても)間違った結論しか得られんぞw 実質〜の部分が既に間違ってますがなw MSDN読め
346 名前:デフォルトの名無しさん mailto:sage [2005/05/25(水) 19:15:01 ] 太陽が西から昇るなら、このレスは346である
347 名前:デフォルトの名無しさん mailto:sage だsageだsage持ってこーぃ [2005/05/25(水) 19:24:49 ] www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/csref/html/vcrefStructTypes.asp 解説 struct 型は、Point、Rectangle、Color などの軽量のオブジェクトを表すのに 適しています。点はクラスで表現できますが、一部の事例では構造体の方が より効果的です。たとえば、1,000 個の Point オブジェクトから成る配列を 宣言する場合は、各オブジェクトの参照用に新たにメモリが割り当てられます。 この場合は、構造体を使用した方がリソースを使用しません。 構造体に対して既定の (パラメータなしの) コンストラクタを宣言するとエラー になります。構造体メンバを既定値に初期化する既定のコンストラクタが常備 されています。 構造体のインスタンス フィールドを初期化するとエラーになります。 new 演算子を使用して struct オブジェクトを作成すると、オブジェクトが作成 されて適切なコンストラクタが呼び出されます。クラスとは異なり、構造体は new 演算子を使用せずにインスタンスを作成できます。new を使用しなかった 場合、各フィールドは未割り当てのままになり、すべてのフィールドが初期化 されるまでオブジェクトを使用できません。 クラスには継承がありますが、構造体には継承がありません。構造体は、 他の構造体やクラスから継承できず、基本クラスになれません。 ただし、構造体は、基本クラス Object から継承します。 構造体は、クラスの場合とまったく同じ方法でインターフェイスを実装できます。 C++ とは異なり、キーワード struct を使用してクラスを宣言できません。 C# では、クラスと構造体は、意味が異なります。構造体は値型ですが、 クラスは参照型です。 値型の機能の詳細については、「値型」を参照してください。
348 名前:306 mailto:sage [2005/05/25(水) 21:23:41 ] >>347 あ、もしかして struct って System.Struct の継承じゃない……のか? でもインスタンスを作成しているわけじゃないし……なんなんだろう。 ===== それはともかく、え〜っと……アロエリーナに聞いたらヒントを教えてくれました。 >キーワード 「class」 と 「struct」 を同列に置くことが果たして妥当なのかどうか 「妥当じゃないです」 >クラスである構造体が、クラスと同じレベルまで昇進しているのかどうか 「そんなわけないです。クラスと構造体は別物」 >じゃあ、クラスと構造体はどうして同じような構文になっているの? 「それが利便性ってもんです」 ……俺、この時点で納得しちゃって良い? 「クラス定義と構造体定義は別物だけど、分かりやすいように同じ構文になっている」 で OTL
349 名前:デフォルトの名無しさん mailto:sage [2005/05/25(水) 21:38:25 ]
350 名前:306 mailto:sage [2005/05/25(水) 21:43:54 ] …… System.Struct なんて無いじゃん orz 昼間俺が見てたのは幻か〜 orz え〜っと……ってことは、struct は実質 System.ValueType の継承……じゃなくて…… 「struct で定義した構造体は、オブジェクト指向の世界からは System.ValueType を継承したオブジェクトのように見える」 ……で良いんか?
351 名前:デフォルトの名無しさん mailto:sage [2005/05/25(水) 21:53:05 ] 構造体はオブジェクト指向の外に属するのん?
352 名前:デフォルトの名無しさん [2005/05/26(木) 00:49:27 ] なにこの素人?
353 名前:デフォルトの名無しさん mailto:sage [2005/05/26(木) 08:53:23 ] ちょっとありえないバカだな。 知識がないだけなら調べることで補えるが、 知識がないことに自覚がない上に無根拠な自信に満ち溢れて混乱した言葉を垂れ流すレベルになると 矯正はかなり困難。
354 名前:デフォルトの名無しさん mailto:sage [2005/05/26(木) 08:57:33 ] 構ってクンのつまらんネタだな
355 名前:デフォルトの名無しさん mailto:sage [2005/05/26(木) 08:59:58 ] 考えるな、推測するな、勝手に言葉を定義するな。仕様書を読め。
356 名前:構ってクンうざい mailto:sage [2005/05/26(木) 09:21:27 ] >>355 >>347
357 名前:デフォルトの名無しさん mailto:sage [2005/05/26(木) 16:05:10 ] >>1 まあ、その問題は、エロ本によるオナニーがさきか、それとも 実戦のセックスが先か、みてーなもんだ。どっちにも固有の良さはある。 でも、いつまでもオナニーに留まってるわけにはいかない。 そーゆーもんだ。
358 名前:デフォルトの名無しさん mailto:sage [2005/05/26(木) 19:11:11 ] >>1 > VisualBasicやCといった手続き型言語をずっとやってきた人が、 > C#やJavaといったオブジェクト指向言語をマスターする場合 > オブジェクト指向の概念・概論を学ぶのが先がいいのか、 > それとも、C#やJavaの言語を学ぶのが先がいいのか、 > どっちがいいと思われますか。 1. オブジェクト指向の概念・概論を学ぶ 2. その概念を、ずっとやってきたVisualBasicやCで実現してみる 3. 次にC#やJavaの言語を学び、2でやっていたことが言語のprimitiveとして 存在することの良し悪しを考察する 4. VB5ってある意味オブジェクト指向の塊だよなあと感慨にふける
359 名前:306 mailto:sage [2005/05/26(木) 20:13:05 ] >>352-355 おお、なんか世界の裏まで知り尽くしているっぽい発言ですな 恐れ入ります で、結局 「C# の構造体」 って何者なんでしょね
360 名前:306 mailto:sage [2005/05/26(木) 20:22:49 ] >>353 >>355 『使うだけ』 ならば仕様書を読めば事足りる 細部まで理解したいのならば、それだけじゃ全然足りない ……って素直に思った 最低だな俺 OTL っていうかそれ以前に仕様書をマトモに読めよって OTL どうする?NG登録したければコテ付けるけど、それとも 306 のままで良い?
361 名前:デフォルトの名無しさん mailto:sage [2005/05/26(木) 20:24:40 ] 306でおっけーです。NG登録しときました。
362 名前:306 mailto:sage氏にたいですorz [2005/05/26(木) 20:27:33 ] 去るってのも選択肢の1つか……って、そういやもうネタ無いじゃないか メモ帳にしちまって正直すまんかった OTL もうちょっと精進できるよう頑張ってみるよ
363 名前:デフォルトの名無しさん mailto:sage [2005/05/26(木) 20:31:57 ] NG登録完了 でも、>>360 にはとりあえず同意しておく 「全然足りない」ときに「自己流の解釈をする」ってのは方法として間違っていると思うが
364 名前:306 [2005/05/26(木) 21:37:10 ] 306じゃないけど これ入れとけば 誰にも見つからないってわけか 3060でもいいのかな?
365 名前:デフォルトの名無しさん mailto:sage [2005/05/26(木) 21:42:56 ] 0306=198 0x306=774
366 名前:デフォルトの名無しさん mailto:sage [2005/05/27(金) 00:31:07 ] 童貞ですがなにか?
367 名前:デフォルトの名無しさん mailto:sage [2005/05/27(金) 00:33:08 ] おねぇさんのマンコ貸してあげようか?
368 名前:偽306 [2005/05/27(金) 05:32:30 ] 言語学習する前に概念をさらっと学ぶ必要はあるよな そしてその実例を言語学習で学ぶと概念が身に付く 車の両輪を右から作るか左から作るか悩むようなもので あまり意味のある質問とは言えませんよ>>1
369 名前:デフォルトの名無しさん mailto:sage [2005/05/27(金) 06:15:25 ] 0b306: Syntax Error
370 名前:デフォルトの名無しさん mailto:sage [2005/05/27(金) 12:34:10 ] ▂ ▂ ▄ ▄ ▄ ▄ ◢░ ▄▀ ▀▄ ░◣ ▌▐▄▀ ▌▐▄▀ ▐░:: ░▍ ▐▓░:: ▄ ░▍ ▐▓░░::░:: ▀▀▀▀▀▀▀▀ ░▓▍▅ ▅ ▄▄▄▄ ▐▓▓░░░::░::: :::░::░▓▍ ▊ ▋ ▐▓▓▓░░░::░::░::::: :: :: ::::░::░░░░░░▓▓▍ ▐▄▌ ▀█▓▓▓░▓░░::░:::░:::::::░::░░░░░▓░▓▓▓▌ ▄▅▀
371 名前:デフォルトの名無しさん [2005/05/27(金) 14:43:02 ] >>370 おおー ヴィジュアル系!
372 名前:デフォルトの名無しさん [2005/06/05(日) 21:47:37 ] カプセル化と継承ってオブジェクト指向の機能だけど ポリモーフィズムは機能じゃないよね? 継承を利用したデザインパターンだと思うんだけど 識者の意見をお聞きしたい。
373 名前:デフォルトの名無しさん mailto:sage [2005/06/05(日) 21:51:23 ] >>372 ・カプセル化はオブジェクト指向の機能ではない ・継承はオブジェクト指向の機能だが、必須ではない ・ポリモーフィズムには多数の種類がある。 貴方が遅延バインディングについて言いたいのだと推測すると、それはオブジェクト指向の機能 ・遅延バインディングは継承を利用しているが、それをわざわざもったいぶって「デザインパターン」と呼ぶのもどうかと思う
374 名前:デフォルトの名無しさん mailto:sage [2005/06/05(日) 21:52:28 ] ん? 2行目と3行目は矛盾している気がするが、とりあえず継承有りのオブジェクト指向を考えてくれ
375 名前:デフォルトの名無しさん [2005/06/05(日) 22:05:53 ] >遅延バインディングは継承を利用しているが、それをわざわざもったいぶって「デザインパターン」と呼ぶのもどうかと思う まぁ、じっくり騙ってくれ、その概念を
376 名前:デフォルトの名無しさん mailto:sage [2005/06/05(日) 22:06:59 ] >>373 それなんてエロゲ?
377 名前:デフォルトの名無しさん mailto:sage [2005/06/05(日) 22:47:09 ] ▂ ▂ ▄ ▄ ▄ ▄ ◢░ ▄▀ ▀▄ ░◣ ▌▐▄▀ ▌▐▄▀ ▐░:: ░▍ ▐▓░:: ▄ ░▍ ▐▓░░::░:: ▀▀▀▀▀▀▀▀ ░▓▍▅ ▅ ▄▄▄▄ ▐▓▓░░░::░::: :::░::░▓▍ ▊ ▋ ▐▓▓▓░░░::░::░::::: :: :: ::::░::░░░░░░▓▓▍ ▐▄▌ ▀█▓▓▓░▓░░::░:::░:::::::░::░░░░░▓░▓▓▓▌ ▄▅▀
378 名前:372 mailto:sage [2005/06/05(日) 22:51:30 ] >>373 遅延バインディングという概念は分かりませんが、 Javaで例えるとカプセル化の為にprivateという修飾子があり、 継承にはextendsという機能がありますよね? でもポリモーフィズムには言語の機能としては何もなく 継承を利用したデザインパターン(ストラテジー?)じゃないかと 思うのです。 >ポリモーフィズムには多数の種類がある。 これは詳しい解説キボンヌです。
379 名前:デフォルトの名無しさん mailto:sage [2005/06/05(日) 23:18:50 ] >>378 > でもポリモーフィズムには言語の機能としては何もなく >>373 はそれがlazy bindingだという話だろ?
380 名前:373じゃないが mailto:sage [2005/06/05(日) 23:20:13 ] >>378 > >ポリモーフィズムには多数の種類がある。 > これは詳しい解説キボンヌです。 adhoc polymorphism, inclusion polymorphism, parametric polymorphismの3つは 理解しておいたほうがいい。
381 名前:デフォルトの名無しさん [2005/06/05(日) 23:53:07 ] >遅延バインディングは継承を利用しているが、それをわざわざもったいぶって「デザインパターン」と呼ぶのもどうかと思う まぁ、じっくり騙ってくれよ
382 名前:デフォルトの名無しさん [2005/06/06(月) 02:41:09 ] プログラムがオブジェクト指向たる条件ってなに?
383 名前:デフォルトの名無しさん [2005/06/06(月) 02:48:32 ] >>382 本質的には、クラスという設計図をもとに、インスタンス(オブジェクト)を生成して使う仕組み。 カプセル化とかポリモーフィズムとかは、どちらかと言うとオマケ的な機能だ罠。
384 名前:デフォルトの名無しさん mailto:sage [2005/06/06(月) 02:51:27 ] ・クラスを重視するのは、むしろクラス指向なのでは? ・それだと、モジュール指向や抽象データ型とあまり区別がなくなるのでは?
385 名前:382 [2005/06/06(月) 02:59:55 ] 思うに、 ・対象をデータ構造に抽象化・カプセル化し、カプセル化されたデータの関数であるメソッドを持つ。 →データそのものであり、またデータを操作する主体である。 ・抽象されたものの集合の内包⇔外延関係が、派生という方法によって積極的に表現されている。 ということではないかと思うんだけど。どうでしょう?
386 名前:382 [2005/06/06(月) 03:10:17 ] カプセル化と書いてしまったけど、>>383 が書いている通り、 確かにカプセル化はオブジェクト指向の本質ではないと思うんです。 しかし、ポリモーフィズムに関しては、例えば自然言語というのは、 「抽象されたものの集合の内包⇔外延関係(例:犬⇔コギー)」によって構成・表現されている。 その自然言語の構造を踏襲するならば、この関係を積極的に表現する 派生という方法をOOPが持つのは、極自然に感じます。
387 名前:デフォルトの名無しさん mailto:sage [2005/06/06(月) 13:05:02 ] >>378-379 adhoc: interfaceのimplements inclusion: class, interfaceのextends parametric: C++のtemplateか
388 名前:デフォルトの名無しさん mailto:sage [2005/06/06(月) 14:12:43 ] >>387 adhocはC++のfunction overloadingが典型例。 C++のtemplateはparametricとは言い切れない。型的に。
389 名前:デフォルトの名無しさん mailto:sage [2005/06/06(月) 19:42:40 ] …えーと、よく解らないんだけど 「カプセル化されてないオブジェクト」って 有り得るの?想像付かない…
390 名前:デフォルトの名無しさん mailto:sage [2005/06/06(月) 19:50:25 ] struct point { int x, y}; とかじゃないか
391 名前:デフォルトの名無しさん mailto:sage [2005/06/06(月) 20:02:25 ] いつの間にか、話がムチャクチャな素人にかき回されてるな。 ブログラムもロクに書けない素人が平日昼間からシャシャリ出るな、と。
392 名前:デフォルトの名無しさん mailto:sage [2005/06/06(月) 22:15:57 ] >>387 adhoc polymorphismは、overloadingとcoersion (i.e. int < float) inclusion polymorphismは、例えばinheritanceの事。 parametric polymorphismは・・・C++ templateがお気に召さないなら、OcamlかJava Genericsでどうよ。 上記二つをまとめて universal polymorphismと呼ぶ。 >>373 下記の発言は一体どういう文脈の話なのか、ちゃんと説明しろよ > ・ポリモーフィズムには多数の種類がある。 > 貴方が遅延バインディングについて言いたいのだと推測すると、それはオブジェクト指向の機能 > ・遅延バインディングは継承を利用しているが、それをわざわざもったいぶって「デザインパターン」と呼ぶのもどうかと思う
393 名前:デフォルトの名無しさん mailto:sage [2005/06/06(月) 22:17:09 ] int < float つうと型パラメータみたいだな。 int number < float numberという比較演算子は、coersionとして実装される事が多い、と。
394 名前:デフォルトの名無しさん mailto:sage [2005/06/08(水) 12:59:46 ] >>392 >下記の発言は一体どういう文脈の話なのか、ちゃんと説明しろよ >> ・ポリモーフィズムには多数の種類がある。 ん? 「ポリモーフィズムは……」って聞かれたんでランタイムポリモーフィズムを想像したけど、 ランタイムじゃないポリモーフィズムももちろんあるって忠告したかっただけ テンプレートだとかメソッドのオーバーロードだとか、#if 〜 #endif でさえ 『ポリモーフィズム=多様』 で括れるし
395 名前:デフォルトの名無しさん mailto:sage [2005/06/08(水) 13:01:25 ] って言うか数レス前で既に出た話ですねスマヌ orz
396 名前:デフォルトの名無しさん mailto:sage [2005/06/09(木) 00:44:21 ] なんだ、やっぱ変な人が妄想騙ってただけか
397 名前:デフォルトの名無しさん mailto:sage [2005/06/09(木) 20:23:07 ] >>396 自分が理解できないからって変人扱いすることは筋違いだとか、 そもそも勉強中の人を変人扱いすることは筋違いだとか思った いや、俺もオーバーロードがポリモーフィズムの一種だと聞いたときには「ハァ?」だったわけだが
398 名前:392 [2005/06/09(木) 21:14:58 ] はぁ? >遅延バインディングは継承を利用しているが、それをわざわざもったいぶって「デザインパターン」と呼ぶのもどうかと思う これをまともに解釈するのは無理ってもんじゃないか?(hahaha
399 名前:デフォルトの名無しさん [2005/06/09(木) 21:17:42 ] だいたい >>387 、>>392 の後で、 >>394 みたいなタワケタ言い訳してる時点で終わってるよ
400 名前:デフォルトの名無しさん [2005/06/09(木) 21:18:34 ] だいたい >>387-388 、>>392-393 の後で、 >>394 みたいなタワケタ言い訳してる時点で終わってるよ
401 名前:373 mailto:sage [2005/06/09(木) 21:20:38 ] 悪い。普通に 「遅延」 って言ったが 「動的」 の間違いだった罠 (´・ω・`) あたま超混乱してます現時点で。 ……けど、「それを〜」 以降を訂正する気は全く無い。
402 名前:デフォルトの名無しさん [2005/06/09(木) 21:26:07 ] はぁ? >動的バインディングは継承を利用しているが、それをわざわざもったいぶって「デザインパターン」と呼ぶのもどうかと思う これもまともに解釈するのは無理じゃないか?(pupupu
403 名前:373 mailto:sage [2005/06/09(木) 21:27:36 ] 間違っているのがどこだか分からん 俺の頭か (^_^;
404 名前:デフォルトの名無しさん mailto:sage [2005/06/09(木) 21:30:27 ] えぇ〜と、 勉強中の人が「〜と理解しましたが、どうでしょう」と書くのは普通だが、 元々ろくすっぽ勉強する気もない荒らしが、掲示板で聞きかじった断片知識を >>373 のように書いてしまうのは、なかなか痛い行為だと思った。
405 名前:373 mailto:sage [2005/06/09(木) 21:35:54 ] いや、断片知識のほとんどが書籍からやわ
406 名前:373 mailto:sage [2005/06/09(木) 21:56:43 ] ……謙虚に成りたい
407 名前:デフォルトの名無しさん mailto:sage [2005/06/09(木) 22:02:27 ] 英語だけどこれがわかりやすい。 On Understanding Types, Data Abstraction, and Polymorphism citeseer.ist.psu.edu/cardelli85understanding.html
408 名前:デフォルトの名無しさん mailto:sage [2005/06/09(木) 22:07:45 ] ここに内容が一部紹介されている。 www.mamezou.com/tec/equip001.htm
409 名前:デフォルトの名無しさん mailto:sage [2005/06/09(木) 23:29:59 ] 言語はCさえ理解してれば十分 他の言語の文法は必要になったら覚えろ オブジェクト指向でも構造化でも、3日後に自分で理解できるコード書いてくれればなんでもいいよ……