オブジェクト指向は馬鹿ご用達
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2011/07/03(日) 00:41:23.02クラスにまとめること自体が目的化している低脳
0002デフォルトの名無しさん
2011/07/03(日) 00:43:31.970003デフォルトの名無しさん
2011/07/03(日) 00:45:58.24直接機械語で書けよ
0004デフォルトの名無しさん
2011/07/03(日) 01:00:59.49言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0005ラプラスの天使 ◆daemontaDA
2011/07/03(日) 03:24:12.10それ以外でオブジェクト指向とか、気狂いだからw
0006デフォルトの名無しさん
2011/07/03(日) 04:21:14.64http://hissi.org/read.php/newsplus/20110619/Mm5oM2lQTDcw.html
ラプラスの天使 ◆daemontaDA
名無しさん@12周年
0007デフォルトの名無しさん
2011/07/03(日) 05:31:53.120008デフォルトの名無しさん
2011/07/03(日) 08:13:52.110009デフォルトの名無しさん
2011/07/03(日) 08:45:13.09信仰の対象がないと困るから。
0010デフォルトの名無しさん
2011/07/03(日) 10:58:29.41企業の新入社員研修でJavaの学習はあってもOOPの学習はない
配属されてから自らOOPを勉強しようなどというモチベーションの高い人間はほとんどいない
0011デフォルトの名無しさん
2011/07/03(日) 11:37:34.37そして世界は全てOOで成立していると盲信している
0012デフォルトの名無しさん
2011/07/03(日) 11:53:59.720013デフォルトの名無しさん
2011/07/03(日) 12:00:36.04○OOPではないもの
0014デフォルトの名無しさん
2011/07/03(日) 12:05:14.380015デフォルトの名無しさん
2011/07/03(日) 12:09:59.930016デフォルトの名無しさん
2011/07/03(日) 12:14:34.240017デフォルトの名無しさん
2011/07/03(日) 12:15:04.32Haskellとか?
0018デフォルトの名無しさん
2011/07/03(日) 14:01:37.03某C++信者が「javaはバカにオブジェクト指向やらせるためにある。
だけどジェネリックの導入でそれができなくなってきた」みたいな
ことを言ってたけど、現場のことをぜんぜん知らないで想像で書いてるな
と思ったね。
バカにオブジェクト指向の強制なんてぜんぜんできてない。
0019デフォルトの名無しさん
2011/07/03(日) 14:55:03.410020デフォルトの名無しさん
2011/07/03(日) 16:35:09.66ただ日の目を見たのが最近ってだけで
0021デフォルトの名無しさん
2011/07/03(日) 18:03:19.980022デフォルトの名無しさん
2011/07/03(日) 18:04:09.980023デフォルトの名無しさん
2011/07/03(日) 18:08:16.92大人数での開発や再利用がしづらいんだが?
0024デフォルトの名無しさん
2011/07/03(日) 19:12:27.740025デフォルトの名無しさん
2011/07/03(日) 19:15:18.570026デフォルトの名無しさん
2011/07/03(日) 19:32:06.250027デフォルトの名無しさん
2011/07/03(日) 19:41:30.28そのレスが馬鹿さ加減を呈している
0028デフォルトの名無しさん
2011/07/03(日) 19:42:12.84> 一つ一つまとめていかないと実装できないアホ
> クラスにまとめること自体が目的化している低脳
0029デフォルトの名無しさん
2011/07/03(日) 20:04:36.77やっぱり理解していないなw
というか「1つ1つまとめていかないと」ってなんだよw
0030デフォルトの名無しさん
2011/07/03(日) 20:58:42.55多人数? レベル向上にチーム一丸となって勉強する事... 大事なのは ルールの厳守だよ
0031デフォルトの名無しさん
2011/07/05(火) 01:17:34.600032デフォルトの名無しさん
2011/07/05(火) 01:21:59.76C++がナウいよ
0033デフォルトの名無しさん
2011/07/06(水) 06:53:34.12底辺開発の人って大変やね
0034デフォルトの名無しさん
2011/07/06(水) 06:55:09.95本当にプロジェクトマネージャーの仕事をしてくれるならね。
0036デフォルトの名無しさん
2011/07/06(水) 08:40:38.520037デフォルトの名無しさん
2011/07/06(水) 09:29:24.19当然ながら、上は上の仕事をちゃんとやらないかんだろ
0038デフォルトの名無しさん
2011/07/06(水) 23:35:26.800039デフォルトの名無しさん
2011/07/07(木) 02:33:57.000040デフォルトの名無しさん
2011/07/07(木) 07:26:01.17いまさらJavaに取られる仕事なんて無い
土方仕事はJava最強状態
0041デフォルトの名無しさん
2011/07/08(金) 21:49:15.21わざわざ立てるなよ
0042デフォルトの名無しさん
2011/07/10(日) 08:01:13.37このスレの続きはこっちでいいんじゃ?
>>993
オブジェクト指向とリファクタリングは密接な関係がある。
一応wikipediaのリファクタリングの項目は読んでおけ。scalaみたいな
半端な言語ならリファクタリングは開発されるんだろうけど、他では
なくても問題はないわな。
>>999
関数型言語のテストは普通に行なわれているよ。言語によっては
難しいことを抱える場合もあるけど、保守点検が楽だって点からも
テストが楽なことが多いのは想像つかなきゃ。
というより、IDEだけで慣れてしまった人たちにそれ以外の環境について
理解を求めるのも無駄のような気がするな。だからこのスレなんて
続きをやるには丁度いい。
0043デフォルトの名無しさん
2011/07/10(日) 08:33:54.570044デフォルトの名無しさん
2011/07/10(日) 09:01:53.35関数型言語について何もご存知がないようですね。一度お調べになられた
ほうが脳みそにシワを増やせますよ。:-)
0045デフォルトの名無しさん
2011/07/10(日) 09:27:22.990046デフォルトの名無しさん
2011/07/10(日) 09:27:35.22そうは言うけどさ、例えばどんだけ指摘されても型付けを理解出来ない
アホとか世の中にはいるわけで、そういう想像を絶する低能にも
関数型言語が使えるとは俺には思えん
0047デフォルトの名無しさん
2011/07/10(日) 09:38:10.48業務のプログラムなんて用意されたライブラリの機能使うだけなんだから
こんなご高説はいらないんだよ
多分、コードを切って貼ったほうがいいものできる
MSの自動で吐き出すコードだってそうなってるだろ?
もし、ソフトウェア工学バリバリのことをやりたいならMSなんかのライブラリを作る側にまわることだと思う
0048デフォルトの名無しさん
2011/07/10(日) 10:10:00.31そもそもプログラミングの範疇に入れて良いものか微妙
0049デフォルトの名無しさん
2011/07/10(日) 10:21:44.67http://hibari.2ch.net/test/read.cgi/prog/1234180357/
7 :仕様書無しさん:2009/02/09(月) 21:07:55
>>3
プログラムが好きなのになんでPG辞めるの?
10 :1:2009/02/09(月) 21:11:02
>>7
プログラムで面白いと思われるクリエイティブな作業とはほど遠いからです。>職業PG
googleとかだと違うかもしれないけど。
0050デフォルトの名無しさん
2011/07/10(日) 10:47:54.04ここらへんが理解できないのなら文句言わず黙って手続き型書いてろw
Javaのオブジェクト指向入門
http://www.kab-studio.biz/Programing/OOPinJava/
疑りぶかいあなたのためのオブジェクト指向再入門
http://kmaebashi.com/programmer/object/index.html
Amazon.co.jp: デザインパターンとともに学ぶオブジェクト指向のこころ (Software patterns series): アラン・シャロウェイ, ジェームズ・R・トロット, 村上 雅章: 本
http://www.amazon.co.jp/dp/4894716844
0052デフォルトの名無しさん
2011/07/10(日) 10:54:16.87笑いすぎてお腹痛いwww
0053デフォルトの名無しさん
2011/07/10(日) 10:55:50.12馬鹿で申し訳ないが、>>1の主張がわからない
>一つ一つまとめていかないと実装できないアホ
>クラスにまとめること自体が目的化している低脳
この発言はオブジェクト指向を理解できていないからこそ出てくる意味不明な発言だと思っていたんだが違うのか
0054デフォルトの名無しさん
2011/07/10(日) 11:09:40.27もう1年プログラム経験を積もうか
0055デフォルトの名無しさん
2011/07/10(日) 11:22:47.140056デフォルトの名無しさん
2011/07/10(日) 11:23:28.181年経っても理解できそうにないから具体的な指摘を頼む・・・
0058デフォルトの名無しさん
2011/07/10(日) 11:25:16.16その前にお前が具体的に指摘しろよ
0059デフォルトの名無しさん
2011/07/10(日) 11:35:13.68オブジェクト指向を使ってるやつをdisるスレっぽいな
0060デフォルトの名無しさん
2011/07/10(日) 11:36:43.98オブジェクト指向の目的は1つ1つまとめくることではない
というか1つ1つまとめるってなんだよw クラスのこと?
クラスは実装であり、また加えてインターフェースを用いることにより設計と実装を分けることができる。
クラス、データ、処理が隠蔽されている設計に依存することにより拡張性が高くなる
0061デフォルトの名無しさん
2011/07/10(日) 11:42:51.24クラスベースOOPの単一メソッドディスパッチより汎用的だし
拡張性も高い気がするが、オブジェクト指向も嫌いじゃないし
どうでもいいや
0062デフォルトの名無しさん
2011/07/10(日) 11:44:26.66Java厨の癖によくわかってないんだな
0063デフォルトの名無しさん
2011/07/10(日) 11:48:03.450064デフォルトの名無しさん
2011/07/10(日) 11:49:06.84Scala使えばOK
0065デフォルトの名無しさん
2011/07/10(日) 11:49:49.30なのに実際はクラス設計ばっかりやるハメになる
クラス設計がやりたくてOOPやってるんじゃないのに
0066デフォルトの名無しさん
2011/07/10(日) 11:51:05.60でたらめ言うなボケカス
0067デフォルトの名無しさん
2011/07/10(日) 11:52:50.650068デフォルトの名無しさん
2011/07/10(日) 12:00:49.33なるほどー
0069デフォルトの名無しさん
2011/07/10(日) 12:11:48.760070デフォルトの名無しさん
2011/07/10(日) 12:14:32.32それあっちゃん
0071デフォルトの名無しさん
2011/07/10(日) 12:15:53.14まとめるだけなら、タプル的なものを要素とするコレクションとか、
ツリーでいいもんな。それは複数クラスが必要になるわけじゃなく、
オブジェクトのつながりで表現するからクラス自体は固定的になる。
しかも、オブジェクトによる振る舞いなんてどうでもいいから、
オブジェクト指向とも違う。別にオブジェクトじゃなくてスクリプト言語がよく持つ
コレクション機能でもいい。
0072デフォルトの名無しさん
2011/07/10(日) 12:18:51.02かっこいー
0073デフォルトの名無しさん
2011/07/10(日) 12:19:45.03オブジェクトに単一のメソッドもたせりゃラムダじゃん。
ラムダに対しオブジェクトは下位互換をもってる。
アランケイがやたらlispを褒めてたけど、
smalltalkのデザインは結構ラムダの影響をうけてる。
0074デフォルトの名無しさん
2011/07/10(日) 12:27:54.26本気で言ってる?
クロージャは参照してる変数(環境)を自動でキャプチャしてくれるけど
オブジェクトはしてくれないじゃん
0075デフォルトの名無しさん
2011/07/10(日) 12:31:33.12関係ない話なのにまた食いついちゃう馬鹿ばっかりだからどうしようもない
0076デフォルトの名無しさん
2011/07/10(日) 20:02:23.37真っ向から否定する人はオブジェクト指向が理解できなくて挫折した人なんだろうなと理解してる
0077デフォルトの名無しさん
2011/07/10(日) 20:20:54.12こう解釈されるのは何でだろね?
否定派にもやらせればオブジェクト指向プログラムできる人は沢山いるだろうに
0078デフォルトの名無しさん
2011/07/10(日) 21:59:58.60smalltalkにあるブロックオブジェクトは自動でキャプチャ(?)してくれるよ。
実装から言ってしまえば、大抵のラムダはクラス定義の構文糖。
そもそも、オブジェクトをクラスで定義せにゃならんなんて决まりはオブジェクト指向にはないし。
0079デフォルトの名無しさん
2011/07/10(日) 22:04:11.28クロージャもオブジェクトってだけだろ
クロージャがクラス定義の構文糖ってアホか
schemeとかクラスなんて概念ねーぞ
0080デフォルトの名無しさん
2011/07/10(日) 22:06:13.98状態機械をオブジェクトと呼んで、メッセージによってお互いの状態を遷移させる
というイメージなんだけどあってる?
0081デフォルトの名無しさん
2011/07/10(日) 22:10:33.85ついでに言うと、オブジェクト自体はリストの塊でもいいし、
実態要素に対する照合要素でも、メッセージに返事さえ返せれば
なんでもいい。更に言うと、メッセージに対応するメソッドは、メッセージと1対1の
関数形式である必要もない。メッセージを受け取るたびに1つのルーチンを回して
返事しても構わんし、送信と受信の2ルーチンだけって形でも構わん。
0082デフォルトの名無しさん
2011/07/10(日) 22:14:12.23あなたは、偉い先生がポインターはメモリの参照渡しに使うものですといったら
それだけを盲信するの?値としての側面には一切触れないの?
0083デフォルトの名無しさん
2011/07/10(日) 22:16:33.99オブジェクトが変化しなきゃいけないって義務は無いよ。
初期化以降まったく変化しなくても構わないし。
0084デフォルトの名無しさん
2011/07/10(日) 22:21:06.070085デフォルトの名無しさん
2011/07/10(日) 22:35:58.00は?その意味不明の例えは今の話と関係あんの?偉い先生って何?
そもそもポインタは値渡しだから、値渡しとしての側面は切り離せないが、
クロージャはクラス概念とは独立に定義できる
だからクロージャをクラス定義の構文糖とかいうのはアホすぎる
0086デフォルトの名無しさん
2011/07/10(日) 22:43:01.12みなせるだけで、それが仕様で別となっていようと、誰がどう言っていようと
どうでもいいってのが解んないの?俺や世界が明日からクロージャをクラスだと言えといってる
わけでもないの同列に扱えるといってるだけ。頭固いねぇ。
ポインターの話の芯の部分も解ってないようだし何言っても無駄なだけなんだろうけど。
0087デフォルトの名無しさん
2011/07/10(日) 22:50:31.10まぁ、Lispなんかは関数をクラスにぶら下げてるからそういう感覚があるのかもしれんし、
LispのクロージャはCLOSのクラスでできてるわけじゃないから違うと言い張りたいのも解る。
もちろん関数型の上で作られたクラスと、クロージャは違う。それは確かだろう。
だが、バイナリーレベルでは構造が同じなのはCommon LispやHaskelの処理系の実装をみてみても明らかだ。
まぁ、そのへんこの話とはあんまり関係ないし、ここに注目してる限りは間違いなんだけどな。
0089デフォルトの名無しさん
2011/07/10(日) 22:59:20.11これも
0090デフォルトの名無しさん
2011/07/10(日) 22:59:48.07これも論外
0091デフォルトの名無しさん
2011/07/10(日) 23:00:11.43Point1とVector1があったとき、
Point2 = Point1 + Vector1;
を行ったとする。
この時Point1が(0,0)だったとするとVector1はベクトルではなく
Pointのひとつとみなす事ができる。
さらにこれを応用して、Point1を原点とみなすと、Point1に加算した全てのベクトルは、
Point1を原点とする空間においてはPointのひとつとみなすことができる。
つまりPoint ≒ VectorであるためPointをVectorで代用する事もできる。
そういう考え方できねぇだろうなァ。
0092デフォルトの名無しさん
2011/07/10(日) 23:00:22.05いや、87は多方面に気を使った折衷案的発言な気が
0093デフォルトの名無しさん
2011/07/10(日) 23:01:49.64で?
0094デフォルトの名無しさん
2011/07/10(日) 23:03:17.080095デフォルトの名無しさん
2011/07/10(日) 23:04:12.18お前の書き込みアホ過ぎるよ
0096デフォルトの名無しさん
2011/07/10(日) 23:08:01.900097デフォルトの名無しさん
2011/07/10(日) 23:10:52.84結論は?
0098デフォルトの名無しさん
2011/07/10(日) 23:12:56.35>オブジェクトに単一のメソッドもたせりゃラムダじゃん。
という意味は大して間違ってないことが解る。
ついでに、ラムダの生成物はオブジェクトのひとつとして見なせるので、
オブジェクト指向で培われたノウハウの大半を転用することができる。
1.例えば、UMLでは、1つの無名メソッドをもったクラスを定義する事でラムダ及び関数を表現できる。
2.オブジェクトに発生する制約はそのままラムダにも発生する。
3.ラムダで可能な事は当然オブジェクトでも可能である。
4.ラムダと単一のメソッドを持ったオブジェクトの違いといえば書き方が面倒かどうかぐらいである。
0099デフォルトの名無しさん
2011/07/10(日) 23:17:52.75構造体(レコード)があって関数へのリファレンスが持てるなら
どんな言語でもできるわけ
でもそれをもってクラスがあるとかクロージャがあるとか言わないだろ?
クラスなら継承できたりメソッドがクラススコープ持ってたりする必要があるし、
クロージャなら静的スコープで環境をキャプチャできる必要がある
010098
2011/07/10(日) 23:18:34.07>オブジェクト指向で培われたノウハウの大半を転用することができる。
補足するとここって本来は逆なんだけどね。先にできたのはラムダだし。
0101デフォルトの名無しさん
2011/07/10(日) 23:19:41.09C++系言語に毒されすぎ。
0102デフォルトの名無しさん
2011/07/10(日) 23:22:17.87頂いたメッセージにお返事ができる事がオブジェクト指向の全て。
それ以上の機能はあろうがなかろうがどうでもいい。そこ解ってる?
0103デフォルトの名無しさん
2011/07/10(日) 23:23:31.49そりゃそういう言語もあるさ
Pythonなんてクラススコープ無いからself必要だしな
でもただの構造体をクラスとは言わないし、
そしてクロージャの場合は環境を持てるのは必要条件だ
0104デフォルトの名無しさん
2011/07/10(日) 23:25:01.48ベクトルの話はやっぱ理解できなかったか。そこまで実践的な教養もないんだろうから、
オブジェクト指向やらラムダを語るなんてできないわな。
(高校レベルの数学も解らずラムダを語るとか・・・)
0105デフォルトの名無しさん
2011/07/10(日) 23:26:43.28じゃあ、クロージャでオブジェクトは実装できるけど
オブジェクトでクロージャを実装できるとは限らないね
メッセージをやりとりできるだけじゃ静的スコープをキャプチャなんてできないもんね
そうか、オブジェクトはクロージャの構文糖だったのか
0106デフォルトの名無しさん
2011/07/10(日) 23:26:48.71なんどもいうけど別に構造体でオブジェクト構成しなきゃいけないとか
関数で実装されなきゃならんて条件はオブジェクトの要件にないの。
>>102が全て。
0107デフォルトの名無しさん
2011/07/10(日) 23:27:08.69まとめて書けアホ
0108デフォルトの名無しさん
2011/07/10(日) 23:27:27.65ベクトルはおろかヒルベルト空間も理解出来ますが何か?
0109デフォルトの名無しさん
2011/07/10(日) 23:28:07.13構文糖の意味解って使ってる?
0110デフォルトの名無しさん
2011/07/10(日) 23:29:22.39一緒のプロジェクトにいたら迷惑なタイプだな
1社に1人はいるんだよな独自の理念で行動して毎回損害出す協調性のないヤツ
0111デフォルトの名無しさん
2011/07/10(日) 23:29:28.02もちろん分かってるよ
>>78のアホに合わせて誤用してるんだよ
皮肉くらい分かれ
0112デフォルトの名無しさん
2011/07/10(日) 23:32:51.17ヒルベルト空間はベクトルしってりゃ名前知らなくてもすぐ思いつく話だぞ。
0113デフォルトの名無しさん
2011/07/10(日) 23:35:44.29お前が高校レベルの数学すら理解できていないことがわかった
お前はA+AB↑とかやるのか
0114デフォルトの名無しさん
2011/07/10(日) 23:36:14.37>>91が二次元のベクトル空間を例に挙げたから
無限次元ベクトル空間も理解出来るって仄めかしただけだが?
何か可笑しいか?
それに恥ずかしい恥ずかしくないで言えば>>91には負けるわ
あんな文章恥ずかしくて書けん
0115デフォルトの名無しさん
2011/07/10(日) 23:40:31.12var x;
object = function(){return x*2;};
x = 5;
method(object);
int x;
object = new Function{public void performed(int x){return x*2;}};
x = 5;
method(object);
これで全く同じ動作をする環境が存在する。
こういうものが構文糖の例だけど。知らんわなぁ。
0116デフォルトの名無しさん
2011/07/10(日) 23:44:33.44頭かてぇな。
>つまりPoint ≒ VectorであるためPointをVectorで代用する事もできる。
お前のなかでは絶対これが成立しないのか?
そして制約を持たせた上でこれを利用したコードを書いちゃいけないのか?
常にPointとVectorを別で書き続けるのかよ。
応用が効くだろって話をかいてんの。
0117デフォルトの名無しさん
2011/07/10(日) 23:44:59.160118デフォルトの名無しさん
2011/07/10(日) 23:45:57.29なんで頭悪い人に合わせないといけないの?
0119デフォルトの名無しさん
2011/07/10(日) 23:47:18.51そのPointとは何を表してんでしょうね
まさか座標なんて言わないよね
0120デフォルトの名無しさん
2011/07/10(日) 23:47:37.82普通さ。教科書に書いてあることじゃなくて、自分で気づく内容書くだろ。
ベクトルと微積の関係やら、ベクトルの複素数の関係やら。
そういう話をされりゃ納得するって。
0121デフォルトの名無しさん
2011/07/10(日) 23:48:34.35うーん^^;
0122デフォルトの名無しさん
2011/07/10(日) 23:49:01.36だから特定の言語(Javascript)でクロージャが関数オブジェクトの構文糖だとしても、
それを一般化してクロージャがクラスの構文糖っていうのがアホなの
Javaなんてクラスはあるしオブジェクト指向言語として分類されるがクロージャは無いぞ
0123デフォルトの名無しさん
2011/07/10(日) 23:49:38.69だから明日からラムダがクラスになるような話は言ってねぇって話書いたろ。
0124デフォルトの名無しさん
2011/07/10(日) 23:50:24.98なんか言い方が怪しいな
0125デフォルトの名無しさん
2011/07/10(日) 23:51:17.89> ラムダはクラス定義の構文糖
0126デフォルトの名無しさん
2011/07/10(日) 23:54:00.79かわいそうに自分の頭がおかしい事に気が付かないんだね
お前が仕様にない応用を利かせたせいでプロジェクトが破綻していく様がリアルに見える
≒を勝手に=と曲解して扱うな
話題にのぼっていないベクトルを突然出してきて語りはじめたあたりから察するに
クラスの中で数学が得意なことを売りにしてる中学生あたりだろうけど
妄想はノートに書いてろ
0127デフォルトの名無しさん
2011/07/10(日) 23:55:41.03ひとつ言うが、このスレはお前と俺一人がいる訳じゃないからな。
お前は構文糖である事を異常に否定しようとしてるが、
少なくとも、俺はどうでもいい。>>98に書いた通りの事しか言うつもりはないし。
0128デフォルトの名無しさん
2011/07/10(日) 23:57:19.87応用をきかせろって話をベクトルを例に書いてるのに、
ベクトルにしか頭が行かないの?一人で必死そうだけどやっぱバカだね。
0129デフォルトの名無しさん
2011/07/10(日) 23:57:53.480130デフォルトの名無しさん
2011/07/10(日) 23:59:09.00まともな例を出せずに墓穴を掘る厨を見た
0131デフォルトの名無しさん
2011/07/11(月) 00:00:09.97お前の挙げた例が適切でない
やり直せ
0132デフォルトの名無しさん
2011/07/11(月) 00:01:06.27一人じゃないと思うが?
0133デフォルトの名無しさん
2011/07/11(月) 00:04:46.870134デフォルトの名無しさん
2011/07/11(月) 00:04:58.86一人だと思ってたんだ
みんな君がおかしいからアンカつけてるのに
君は一人だけ自分と意見が違うのがいると思ってたんだ
幸せだよ君は
0135デフォルトの名無しさん
2011/07/11(月) 00:09:36.08あ?どこの誤爆だよボケが
0137デフォルトの名無しさん
2011/07/11(月) 00:12:17.33ポイントとベクトルを分けることに、運用上の重要な意味があるのか?
逆に質問したいのだが、じゃぁRGBの色値はポイント?ベクトル?
3DCGのポリゴンの頂点はベクトル?ポイント?
これらがベクトルかポイントかの、明確な根拠を示してください。
126がこれを明確に示せないのであれば、
ベクトルとポイントの別扱いに拘る根拠が、実は何も無かったってことの証明。
よろしくおねがいしますw
0138デフォルトの名無しさん
2011/07/11(月) 00:14:53.71他人のふりなんかしなくてもいいよ
0139デフォルトの名無しさん
2011/07/11(月) 00:15:43.69>>119
0140デフォルトの名無しさん
2011/07/11(月) 00:16:24.49もともと分けて書いたのはお前で
それからいきなり同じものだと言い出したんだが?
0141デフォルトの名無しさん
2011/07/11(月) 00:17:31.83・ベクトルと和をとれるのはベクトルのみだが、Pointって何?
・おそらく幾何ベクトル(いわゆる矢印でイメージされるやつ)を考えてるんだろうが、
それを数の組で表すアイデアを皆が知らない画期的発想のように言っている
(>>120で教科書云々言ってるし)
でも、それって只のベクトル空間ですよね?教科書に載ってますよ?
0142デフォルトの名無しさん
2011/07/11(月) 00:19:18.67そうだよな
Pointって表現から間違っている
0143137
2011/07/11(月) 00:20:26.14私はこのスレッドに初めて書き込んだのだが。
137以外は別人だよ。
それより質問に答えてみてよ。
それともベクトルもポイントも同一でOK?
0144デフォルトの名無しさん
2011/07/11(月) 00:21:31.53別人のふりしなくてもいいよ
0145デフォルトの名無しさん
2011/07/11(月) 00:22:39.48そう教育されてるから仕方ないってのもあるが
0146デフォルトの名無しさん
2011/07/11(月) 00:23:12.02>>98 のやつと >>91 のヤツ >>122のヤツ >>126のヤツが居るわけだ。
>>98 はクロージャをオブジェクトの一種と見なせると主張する
>>91 はクロージャはクラスの構文糖じゃないと主張する
>>122 はベクトルを例にだして応用を効かせろと主張する
>>126 はベクトルぐらい解るわ!と>>122は人格破綻者と主張する
まぁ、おそらく>>91と>>126は同一人物。
まず、>>98と>>91は主張してる根本が違う。
その時点でアレだ。
で、ある種一番馬鹿なのは、理解力のない>>91に延々と
レスを引きずった>>122。コイツが放置しとけば無駄なやりとりが増えなかった。
0147137
2011/07/11(月) 00:25:13.78とくに、ベクトルとポイントを別物だと拘ってた人。
煽りでもなんでもなく、純粋に、その根拠を知りたいだけです。
拘るだけの理由があったってことでしょ? 何がちがうの? ポイントとベクトルの何が違うの?
0148デフォルトの名無しさん
2011/07/11(月) 00:25:51.87別人だと思うが
0149デフォルトの名無しさん
2011/07/11(月) 00:26:01.08本当に違うのに一人で哀れだな。
>>146
いや、普通高校数学"程度"の話をすれば伝わると思うだろ。
煽ったのは悪かったけどさ。
0150デフォルトの名無しさん
2011/07/11(月) 00:27:03.510151デフォルトの名無しさん
2011/07/11(月) 00:28:35.96他人のふりするなら文体変えろ
お前のは特徴的だから
0152デフォルトの名無しさん
2011/07/11(月) 00:30:16.34すでに散々指摘受けてるだろ
頭かてぇな
0153デフォルトの名無しさん
2011/07/11(月) 00:30:38.63> とくに、ベクトルとポイントを別物だと拘ってた人。
それ以前の問題として、ポイントって何だよってツッコミが入ってるだろ>>119>>141
0154137
2011/07/11(月) 00:30:47.970155146
2011/07/11(月) 00:30:51.97>>91と>>122逆に書いてしまった。
すまん。もう書かないわ。
とりあえず訂正残しとく。
>>98 のやつと >>91 のヤツ >>122のヤツ >>126のヤツが居るわけだ。
>>98 はクロージャをオブジェクトの一種と見なせると主張する
>>122 はクロージャはクラスの構文糖じゃないと主張する
>>91 はベクトルを例にだして応用を効かせろと主張する
>>126 はベクトルぐらい解るわ!と>>91は人格破綻者と主張する
まぁ、おそらく>>122と>>126は同一人物。
まず、>>98と>>122は主張してる根本が違う。
その時点でアレだ。
で、ある種一番馬鹿なのは、理解力のない>>122に延々と
レスを引きずった>>91。コイツが放置しとけば無駄なやりとりが増えなかった。
0156デフォルトの名無しさん
2011/07/11(月) 00:30:57.30>>116には後から自分の解釈だけで資料も読まずに改造設計する臭いを感じたから書いた
>>116はどう見てもベクトル覚えたてで単語を使いたいだけ
>>137にも似た臭いがある。お前煽りたいだけだろ
0157デフォルトの名無しさん
2011/07/11(月) 00:33:52.72おまえが>>91本人だろ
0158デフォルトの名無しさん
2011/07/11(月) 00:36:31.000159137
2011/07/11(月) 00:38:13.05ベクトル覚えたてもなにも、
ベクトルなんて、そんな理解しがたいほどに壮大で複雑怪奇な論理なのか?
あんなのただの大きさもった方向だろ。それだけのことじゃないの? なんかもっと他に超難しいことでもあるの?
0160デフォルトの名無しさん
2011/07/11(月) 00:39:20.69つまんね
0161137
2011/07/11(月) 00:40:41.710162デフォルトの名無しさん
2011/07/11(月) 00:40:45.20同列に扱っていいかとかそういうものは初期設計時に文書化しておくものだよね?
今回のはPoint1とVector1。
まずこれらは一般名詞過ぎて何を指してるか前提を書かないと危険だよね
今の流れから分かると思うけどこんな風に意見の相違が出てくる。
>>116 はそれにも関わらず自分の中の思いつきだけでこれらを同列として
扱いだした。
こういうのを勝手に判断して行動されるとチームの他の人間が困るのは分かりますか
もちろんこれが幾何学分野でのベクトルと座標という前提があれば同列に扱う
事もありうるし演算子をオーバーロードして扱うこともよくある
0163デフォルトの名無しさん
2011/07/11(月) 00:42:12.600164デフォルトの名無しさん
2011/07/11(月) 00:47:11.87幾何的にはそんなイメージでいいがね
一応、和とスカラー倍が定義されるものをベクトルっていうんだわ
で、和はベクトル同士、積はスカラーとベクトルでしか定義されないのね
>>91はVectorとPointを足してるけど、これってVectorがベクトルだとすると
Pointもベクトル以外有り得ないわけ
でも
> Vector1はベクトルではなくPointのひとつとみなす事ができる
みたいなこと書いてるし、もう意味不明なわけよ
0165デフォルトの名無しさん
2011/07/11(月) 00:54:41.88あと>>156。>>141はおかしいからな。
座標点(Point)とベクトルとの加算概念がないという時点で信用できん。
高校数学程度なら点Pというものが同じ概念で登場する。
また、幾何学全般においてPoint1-Point2という式が存在するし、
Point1 + Vector1というものが存在する。幾何分野じゃ点を
示す値がないとユークリッド空間に落とせないからな。
0166デフォルトの名無しさん
2011/07/11(月) 00:55:21.32辞書読めば?
http://ejje.weblio.jp/content/vector
0167デフォルトの名無しさん
2011/07/11(月) 00:55:23.14いやそこは本人であることを否定しとけよ
0168デフォルトの名無しさん
2011/07/11(月) 01:02:04.81だからね、なんで君の頭はpoint:=座標, vector:=大きさ持った方向って
意味しか持ってないの?
単語の意味からはこういう定義のされ方もあるのにPointとVectorは必ず
加算出来ると思って疑わない脳が信じられないんだけど
typedef string Point;
typedef int[3] vector;
Point point1 = "794うぐいす平安京"
Vector vector = {0, 0, 0};
Point point2 = point1 + vector;
0169デフォルトの名無しさん
2011/07/11(月) 01:03:21.790170デフォルトの名無しさん
2011/07/11(月) 01:07:05.78お前の頭の中にはアフィン空間は存在しない事はよく解ったよ。
あと俺が例に出した位置ベクトルの話も教科書通りっていってる以上
それ以上話の進展がないって事も解ったよ。
ま、お前が頭の固い人間?らしいことも解ったし、一例でレスを伸ばすのを
そろそろやめようか。
0171デフォルトの名無しさん
2011/07/11(月) 01:15:24.02みんな暇つぶしで>>170みたいな中途半端な知識の中学生煽って遊んでるだけから安心して寝ろ
明日学校あるだろ ちゃんと登校してるかどうかはわかんねけど
0172デフォルトの名無しさん
2011/07/11(月) 01:15:54.21ベクトル空間自体がアフィン空間
当然ユークリッド空間も
0173137
2011/07/11(月) 01:17:13.20vectorがpointと同じ仕組みを使うことに問題は無いのでは?
ということを91は言ってるんだと思ってたわ。
ちがうのか?
0174デフォルトの名無しさん
2011/07/11(月) 01:17:58.09お前も忙しいな
0175デフォルトの名無しさん
2011/07/11(月) 01:18:34.23だから文体変えてやり直せ
0176デフォルトの名無しさん
2011/07/11(月) 01:21:21.62お前の書き方はおかしいけどな。
アフィン空間とベクトル空間がまるで同一に見える。
0177デフォルトの名無しさん
2011/07/11(月) 01:21:24.680178デフォルトの名無しさん
2011/07/11(月) 01:23:10.770179デフォルトの名無しさん
2011/07/11(月) 01:25:24.35本当にひとりなんだな。
0180137
2011/07/11(月) 01:26:50.31要するに、ポイントとベクトルの関係を、ポイントを親とするか、ベクトルを親とするかで、
91はポイントを親とすると言ったので、それに対する違和感ってことか?
0181デフォルトの名無しさん
2011/07/11(月) 01:29:37.45そう思うんならお前が馬鹿なんだろ
0182デフォルトの名無しさん
2011/07/11(月) 01:29:38.27いいから書けよ
0183デフォルトの名無しさん
2011/07/11(月) 01:30:48.14>>91
> この時Point1が(0,0)だったとするとVector1はベクトルではなく
> Pointのひとつとみなす事ができる。
アフィン空間なら座標とベクトルを足した結果は(0,0)とか関係なく常に座標だ
お前の書き方だと「足した結果はベクトルだが、座標としても解釈できる」以外に
読めねーだろ
0184デフォルトの名無しさん
2011/07/11(月) 01:32:02.750185デフォルトの名無しさん
2011/07/11(月) 01:37:29.460186デフォルトの名無しさん
2011/07/11(月) 01:38:06.59なんでだろうな、本当に逐一説明しないと理解できないのか、
それとも2chの反骨精神の影響なのか。ゆとりどうのというけど、
ゆとり教育以前にコミュニケーションがおかしいってのが
ゆとり最大の問題だわ。
0187デフォルトの名無しさん
2011/07/11(月) 01:38:12.920188137
2011/07/11(月) 01:40:52.11ポイントの定義は、0に始点を持った特殊なベクトルと考えてはどうか?
0189デフォルトの名無しさん
2011/07/11(月) 01:41:02.560190デフォルトの名無しさん
2011/07/11(月) 01:45:51.42>>184
>>91の結果がアフィン空間をベースにしてんだろ何かおかしいか?
0191デフォルトの名無しさん
2011/07/11(月) 01:47:07.190192デフォルトの名無しさん
2011/07/11(月) 01:47:12.63これ以上このスレ汚すな
0193デフォルトの名無しさん
2011/07/11(月) 01:48:05.83構造体も禁止します
0194デフォルトの名無しさん
2011/07/11(月) 01:59:32.89このスレにそんな事書きこむお前も大概だけどな。
ADHDっぽいヤツが増えたのは確かだな。
0195デフォルトの名無しさん
2011/07/11(月) 02:01:02.780196デフォルトの名無しさん
2011/07/11(月) 02:06:46.67無駄だよ。>>183からしてみたら、俺もお前も>>91一人にしか見えないらしいから。
しかも、こんな事書いてる時点で職業プログラマーじゃないし。
>お前が仕様にない応用を利かせたせいでプロジェクトが破綻していく様がリアルに見える
(コード自体の仕様ってあまり書かないし、UMLとかで書いた場合その枠から出た時点でレビューで引っかかる)
0197デフォルトの名無しさん
2011/07/11(月) 02:09:26.35>>192≠>>196=>>91
0198196
2011/07/11(月) 02:09:44.08>しかも、こんな事書いてる時点で職業プログラマーじゃないし。
しかも、こんな事書いてる時点で職業プログラマーじゃないし。まともに話は通じそうにない。
0199デフォルトの名無しさん
2011/07/11(月) 04:38:30.070200デフォルトの名無しさん
2011/07/11(月) 06:18:50.70ここが終わったら
http://hibari.2ch.net/test/read.cgi/tech/1293264747/l50
の掃除もよろしく。
0201デフォルトの名無しさん
2011/07/11(月) 10:09:38.16UMLじゃないところも多いだろ
0202デフォルトの名無しさん
2011/07/11(月) 22:13:31.800203デフォルトの名無しさん
2011/07/11(月) 22:41:05.06マルチプルインスタンスだと思う
STLやLinqみたいな関数型ともうまくあうし
0204デフォルトの名無しさん
2011/07/11(月) 22:42:54.430205デフォルトの名無しさん
2011/07/11(月) 23:06:48.69こんなにプロトタイプベースのjavascriptが流行ってるのに
0206デフォルトの名無しさん
2011/07/11(月) 23:08:34.39モダンな書き方を見ると、どうもクラスベースっぽく
書くのが流行ってるよねw
0207デフォルトの名無しさん
2011/07/11(月) 23:14:17.320208デフォルトの名無しさん
2011/07/12(火) 00:41:21.150209デフォルトの名無しさん
2011/07/12(火) 00:54:02.650210デフォルトの名無しさん
2011/07/12(火) 01:08:33.650211デフォルトの名無しさん
2011/07/12(火) 01:22:29.890212デフォルトの名無しさん
2011/07/12(火) 01:41:00.440213デフォルトの名無しさん
2011/07/12(火) 03:55:17.69設計してみたら失敗した
カプセル化以外の目的で使用するとすごい手間
がかかって難しいね
0214デフォルトの名無しさん
2011/07/12(火) 06:20:54.600215デフォルトの名無しさん
2011/07/12(火) 08:47:00.38すでに出来上がったものに対して再利用するために書き換えるというのがいいよ
0216デフォルトの名無しさん
2011/07/12(火) 08:58:35.43ビジネス指向です
0217デフォルトの名無しさん
2011/07/12(火) 17:57:19.30デザパタオタクが居るとデスマーチの声が聞こえてくる テク走りはオブジェクトの勘違いじゃねぇの?
オタクはこんなのを読んでオブジェクトの整理ができればなんとかなるかな?
http://www.amazon.com/Object-Models-Strategies-Patterns-Applications/dp/0138401179
0218デフォルトの名無しさん
2011/07/12(火) 22:57:21.42メッセージを受ける者
0219デフォルトの名無しさん
2011/07/12(火) 23:24:45.270220デフォルトの名無しさん
2011/07/12(火) 23:31:22.440221デフォルトの名無しさん
2011/07/12(火) 23:57:30.380222デフォルトの名無しさん
2011/07/13(水) 00:21:37.95メッセージのやりとりでプログラム構築
つかオブジェクト指向でオブジェクトは全然重要じゃない。
むしろ実装上の都合ぐらいのもんだし。
0223デフォルトの名無しさん
2011/07/13(水) 00:30:56.47何と何がメッセージのやり取り?
0224デフォルトの名無しさん
2011/07/13(水) 00:41:57.48仮にプロセス(実行プロセスではない)の集合体をグループとして扱えて、
グループの識別名を基準にメッセージを送れる言語があっても構わん。
'groupA groupB'.Message(10);
groupAとgroupBに所属するプロセス全てにメッセージを送信。
昔は負荷がでかすぎて現実的じゃなかったが、
いまはマルチコアの影響とかで、ぼちぼち近いものを見るようになった。
しかも、何故かOOから名前を変えて独立した扱いになってる。
0225デフォルトの名無しさん
2011/07/13(水) 00:51:17.220226デフォルトの名無しさん
2011/07/13(水) 00:58:16.310227デフォルトの名無しさん
2011/07/13(水) 01:00:28.46ネットは文字ベースだがオブジェクト指向は文字ベースではない、
ってことにすればいいだろ。
0228デフォルトの名無しさん
2011/07/13(水) 01:05:23.60は?その定義だとオブジェクト指向にはオブジェクトが重要になるんだが?
> オブジェクト指向でオブジェクトは全然重要じゃない
0229デフォルトの名無しさん
2011/07/13(水) 01:07:55.29例えばunsigned longで一意に識別される値とそれに紐づいた
ひとつの関数ばっかりで構成されてても構わんし。
メッセージを受け取るときに、オブジェクトが自分で振る舞いを判断
できさえすれば実装はなんでもかまわん。
0230デフォルトの名無しさん
2011/07/13(水) 01:09:16.17だからオブジェクトが重要なんだが?
> オブジェクト指向でオブジェクトは全然重要じゃない
0231デフォルトの名無しさん
2011/07/13(水) 01:14:13.94文字かどうかは関係ないんだよ。
別にインターネットをメッセージの送信先にしても構わんし。
実際、TCPで動くMPI(Message Passing Interface)もオブジェクト指向の
考えを汲んでる(どっちかというとこっちが先)
0232デフォルトの名無しさん
2011/07/13(水) 01:16:55.87オブジェクトという言葉を使わなければメッセージの送受信のつながりを説明できないからか?
それともオブジェクトだけ掘り下げれば話が広がるからか?
後者の意味で言うなら全然重要ではないと思うけれども。
0233デフォルトの名無しさん
2011/07/13(水) 01:19:40.89自分で言ったこと忘れたの?>>226
0234デフォルトの名無しさん
2011/07/13(水) 01:20:24.56なんで自分にレスしてるの?
0235デフォルトの名無しさん
2011/07/13(水) 01:31:03.88ああ、そっちを意図してんのね。
まぁ、便宜的に呼ぶならオブジェクトなんて言わずノードやプロセスの方が直接的でいいんだけどな。
とはいえノードやプロセスは一般的すぎて誤解を呼ぶから現実的じゃなかったりする。
0236デフォルトの名無しさん
2011/07/13(水) 01:31:05.23SQLのような文字列を
なるべく使わないのがオブジェクト指向だろ。
0237デフォルトの名無しさん
2011/07/13(水) 01:37:51.02そのレベルならそもそもオブジェクト指向とは関係ない。
JavaやらC#とかプログラミング言語のただの作法の話。
0238デフォルトの名無しさん
2011/07/13(水) 01:39:54.59Objective-Cやjavascriptなんかはメッセージと文字列が極めて近い
相互変換が言語レベルで可能
0239デフォルトの名無しさん
2011/07/13(水) 01:44:55.13SQLでも、SQLの受信者が、指定した受信先へメッセージを送ってくれるなら
オブジェクト指向として成立するんだけどな。
0240デフォルトの名無しさん
2011/07/13(水) 01:50:02.68OOデータベースだって文字列のやりとり多いぞ。
0241デフォルトの名無しさん
2011/07/13(水) 01:56:36.500242デフォルトの名無しさん
2011/07/13(水) 02:12:28.30Window Objectにメッセージを送るっての変だろ。
Windowにメッセージを送るっていうだろ。
Fileポインタを開くとは言わずファイルを開くというだろ。
概念の説明にfoo bar的にオブジェクトいってる理由で、
実際にメッセージを受信する物をオブジェクトって呼ぶのはおかしい。
少なくともオブジェクトという表現は、実際にメッセージを受信する
対象の名前に比べれば重要じゃない。
0243デフォルトの名無しさん
2011/07/13(水) 02:14:20.28ただの言語機能だろ。
COBOLの埋め込みSQLはオブジェクト指向ですか?って言っているようなもんじゃん。
0244デフォルトの名無しさん
2011/07/13(水) 02:24:10.65Windowってなんですか?
0245デフォルトの名無しさん
2011/07/13(水) 02:28:00.80>SQLでも、SQLの受信者が、指定した受信先へメッセージを送ってくれるなら
>オブジェクト指向として成立するんだけどな。
これを誤解したのかもしれないけど、これはSQLにメッセージの受信先を指定してやったら、
selectでNULLが含まれる行が見つかるたびに、DBが受信先にメッセージを送ってくるとか
そういう話。
0246デフォルトの名無しさん
2011/07/13(水) 02:29:34.10この前ボコボコにされた気分はどう?
0247デフォルトの名無しさん
2011/07/13(水) 02:31:55.82GUI方式でよく使われるアプリケーション用描画領域の事。
0248デフォルトの名無しさん
2011/07/13(水) 02:38:52.950249デフォルトの名無しさん
2011/07/13(水) 06:30:45.59抽象的な定義を与えようとしてる輩は
アーキテクチャ宇宙飛行士
0250デフォルトの名無しさん
2011/07/13(水) 17:15:13.94それってただの関数コールと何が違うの?
0251デフォルトの名無しさん
2011/07/13(水) 17:46:01.79でもメッセージの人はどれでも同じだと言いそう
0252デフォルトの名無しさん
2011/07/13(水) 18:57:44.30OOPとはシステムの考え方であって クラス、オブジェクトを物と振る舞いにしっかり区別して考えられる事だと思うが?
デザパタハイになってる奴が今 横に居るが w
0253デフォルトの名無しさん
2011/07/13(水) 19:19:14.960254デフォルトの名無しさん
2011/07/13(水) 20:12:41.35メッセージは、オブジェクトに所属していない。
メンバー関数やメソッドはオブジェクトに縛られてる。
そこが根本的に異なる。smalltalkなんかではメソッドと
メッセージが分離してるから、一度さわってみればよく解る。
それから、メッセージを強調する理由は2点。
1.メソッド&クラスの話になると、カプセル化とか継承とか
クラス構造とかピントのズレた話になる。
そもそも、オブジェクトを中からの視点で見ちゃいけない、
外部からの振る舞いにこだわらないと本来の再利用性とかの
メリットが失われる。
2.メッセージの概念を実装できていれば、どういう形であれOOとして成立する。
例えば、WinAPIのウィンドウは、SendMessageやPostMessageで
ウィンドウ間の通信が行えるけど、smalltalkとNeXTのOO方式をCで実装してる。
昔のMSのAPIの説明なんかには、CloseHandleとかを例に上げて
これがポリモーフィズムです。なんてほざいてたが、ウィンドウ部分に
関しては割とOOの概念に忠実だった。
0255デフォルトの名無しさん
2011/07/13(水) 22:19:15.30なんだ、またマルチメソッドの話になるのか
OOPスレにいた人?
0256デフォルトの名無しさん
2011/07/13(水) 22:28:24.110257デフォルトの名無しさん
2011/07/13(水) 22:38:48.22↓
オブジェクトに所属してないメソッド
↓
マルチメソッド
という連想だったんだけど全然違うの?
メッセージが何なのか具体的に説明してくれ
0258デフォルトの名無しさん
2011/07/13(水) 23:14:37.47どう処理に結び付けられてるかを調べてみ。
先に言うがそこでのswitchの分岐一つ一つがメソッドになる。
0259デフォルトの名無しさん
2011/07/13(水) 23:31:06.42Smalltalkerが勤勉な人が多いためか、ブルーブックとかに書かれている内容を
正しく使う人が多いよね
ちゃんとメッセージセレクタとメソッドが別っていう具合に
でも、C++なんかでも結局function-call-expressionでメッセージセレクタを指定してる
といえばそうなのかもしれないと思った
0260デフォルトの名無しさん
2011/07/13(水) 23:31:07.45SendMessage経由で呼び出してるようにしか見えない
結局のところメッセージって何?
0261デフォルトの名無しさん
2011/07/13(水) 23:40:35.67もしかしたら、Javaあたりの言い回しから
あるメソッドを呼び出したら、どのメソッドが
呼ばれるかオブジェクト次第で不定とか思ってる?
前者の"メソッド呼び出し"の部分が元々
メッセージってよばれてる部分なんだけど。
0262デフォルトの名無しさん
2011/07/13(水) 23:41:20.36254はいろいろとちょこちょこと間違っているような気がする。^^; あと、
Smalltalkを含めて、現実装からメッセージを解釈しようとすると250みたいになるのはしょうがない。
メッセージって言うのは、しょせんは(主には発案者のアラン・ケイの)気持ちの持ちようの問題。
もともと、多細胞生物における細胞の動的協働をソフトウエアに応用できないかという着想を得て、
現在主流の言語の仕組みでいう動的な関数呼び出しをそう解釈してみようって思考実験程度のもの。
Smalltalk はその世界観の体現の試みではあるけれど、理想にはほど遠い。話を聞いた他の人が
愚直に実装を試みたActorとかSELFとかもあったけど、ケイはどちらも「コレジャナイ」と言っている。
0263デフォルトの名無しさん
2011/07/13(水) 23:42:48.98>>262
Smalltalkの#doesNotUnderstand:とかRubyのmethod_missing、Obj-CのdoseNotRecognizeSelector:を
使った俗に黒魔術と称される類のテクニックの方がこの「気持ち」にはいくらか近いと思う。
なので通常とは逆に、これらの処理の特殊なパターンが普通のメソッド呼び出しだと発想を逆転できると、
なんとなく「メッセージング」とやらの目指す方向性がつかめるかも。ってもやっぱわかんないよね。ごめん。
0264デフォルトの名無しさん
2011/07/14(木) 00:06:19.07いらない子
0265デフォルトの名無しさん
2011/07/14(木) 00:07:31.40>前者の"メソッド呼び出し"の部分が元々
>メッセージってよばれてる部分なんだけど。
>>250 → >>254 → >>261 → >>250 → ・・・
無限ループって(以下略)
0266デフォルトの名無しさん
2011/07/14(木) 00:13:15.83ちゃんとJavaやら新参言語がメソッドの一言でごちゃ混ぜにしてる
メッセージとメソッドを分離できるようになれば、そのうち止まるんじゃね?
0267デフォルトの名無しさん
2011/07/14(木) 00:28:40.290268デフォルトの名無しさん
2011/07/14(木) 00:33:14.24○○の機能はあるか?で考えたほうがいい。
0269デフォルトの名無しさん
2011/07/14(木) 00:55:13.50つまり動的型付けでダックタイピングが良い…と?
0270デフォルトの名無しさん
2011/07/14(木) 01:11:34.79言語上のインターフェースに囚われてる限りはそうかもね。
そっちはインターフェースのメソッドとか、言い回しを工夫して
どうにかメッセージ的部分とメソッドを言いわけてるし。
ただし、大抵オブジェクトや、メソッド部分にばかり話が広がって
メッセージをいかにデザインするかって話が広がりにくい。
特に話してる人によってメソッドをどの面で捉えてるかバラバラな事が大半。
>>269
smalltalkとか純粋なOOPLは今でいうダックタイピングだし、
ライブラリレベルで実装されたOO環境もダックタイピング多いじゃん。
どっちかってとダックタイピングできない環境の方がイレギュラーじゃね。
0271デフォルトの名無しさん
2011/07/14(木) 01:53:30.49smalltalkが純粋と言われる理由は
初期のOOPLってだけじゃない?
0272デフォルトの名無しさん
2011/07/14(木) 01:55:13.19単にsmalltalkがそうだっただけの話。
OOPLにダックタイピングが必須だとは思わないし、
逆に初期の未熟なOOPLではダックタイピングでしか
実装できなかったと考えるべきだろう。
0273デフォルトの名無しさん
2011/07/14(木) 02:09:02.02例えれば、変数定義が必要ない構造化言語みたいなもんだと思うけどね。
変数定義があってもなくても変数は使える。
変数定義が必要なければ、いつでもどこでも好きな変数が使える
定義する面倒さがない。
が変数定義があるとバグが起きにくくなる。
ダックタイピングも同じで多態を行うときに
多態定義が必要なければ、いつでもどこでも好きな多態が行える
定義する面倒さがいらないが、多態定義があればバグが起きにくくなる。
0274デフォルトの名無しさん
2011/07/14(木) 02:10:44.59メッセージとオブジェクトが完全に独立してる事じゃない?
全く同じメッセージを受け取れるのに、インターフェースが違うから
メッセージを受け取れない事がよくあるってのは純粋じゃないでしょ。
副作用を許した関数型と同じじゃん。
0275デフォルトの名無しさん
2011/07/14(木) 02:23:20.31なぜそれが純粋なのか。
> 全く同じメッセージを受け取れるのに、インターフェースが違うから
> メッセージを受け取れない事がよくあるってのは純粋じゃないでしょ。
「全く同じメッセージ」の定義は何か。
たとえば「つまらん」という言葉がある。
「つまらん」と「つまらん」全く同じメッセージにように見えるが、
片方は標準語インターフェースのつまらん。
もう片方は九州弁のつまらん。
インターフェースというのは、一見同じに見えるが違うメッセージを
区別するときに使うもので、本質的には違うメッセージなのだから
分けるべきではないのだろうか?
いわばインターフェースは違うメッセージを区別するためのメタ情報。
0276デフォルトの名無しさん
2011/07/14(木) 02:26:59.70メッセージ名が同じなら反応する。
でもプロジェクトが大きくなって他の人が作ったものを利用しだすと、
メッセージ名は短すぎてかぶることがあるよね。ってことで
インターフェース名+メッセージ名で区別する。
単に名前が被らないようにするためだけの違いでしかないのではないか?
0277デフォルトの名無しさん
2011/07/14(木) 02:31:21.93ダックタイピングもインターフェースも両方使える。
newで生成したオブジェクトをobject型変数に入れて呼び出すと、
ダックタイピングでメソッドが一致したものが呼び出される。
同じオブジェクトをインターフェース型変数に入れて呼び出すと
そのインターフェースのメソッドが呼び出される。
0278デフォルトの名無しさん
2011/07/14(木) 07:33:51.67継承やらスタティックバインドを一杯作ってOOPプログラマーでござ〜い とか?
馬鹿に オブジェクト間のカップリングや稠密度の話が理解できるのか? そもそも馬鹿はOOPなんてできんだろ?
0279デフォルトの名無しさん
2011/07/14(木) 08:55:51.300280デフォルトの名無しさん
2011/07/14(木) 15:52:29.640281デフォルトの名無しさん
2011/07/14(木) 17:09:44.82メッセージさん的にはそもそもJavaをオブジェクト指向言語というのはおかしいってこと?
ちなみにJava界でオブジェクト指向大好きな人たちが名著というオブジェクト指向のこころという書籍ではメッセージなんて本質ではないと書いてあったな
書籍内でメッセージという単語は一切出てこない
やっぱり同じオブジェクト指向という言葉を使っていても人によってまったく別の意味として認識しているとしか思えない
0282デフォルトの名無しさん
2011/07/14(木) 19:03:05.94抽象なんて思考はないんじゃね? イベントをクリックするとIDEが自動で関数を生成してくれるからそこに処理を書いていくだけという...
メインフォームのソースが1万行とか w
ん? 継承の事か? 継承もOOPの一部だが それで解決しようなんて アホ教科書がいまだに山ほどあるからな
20年前のオブジェクト指向を今も継承しているという馬鹿プログラマーが居る事も事実 w
まっ 日々 実務に追われているプログラマーなんてそんなもん has-a is-aのTPOが解らんのさ w
という現状を見れば>>1の指摘も間違いでは無い
>>281
メッセージは本質ではないよ 大事なのはオブジェクト間の結合だよ そして 物と振る舞いの分離 それと それらを調停するコーディネーター
メッセージドリブンは絶対的要素ではあるが...
0283デフォルトの名無しさん
2011/07/14(木) 19:21:06.31smalltalkのような手取り足取りの世界でOOPを味わった後に CでOOPを記述してみる事だ w
今は CでOOPファームウェアを書くのは苦で無くなったが Delphiでアプリを書いている頃は チャレンジの度に心臓パクパクだった w
0284デフォルトの名無しさん
2011/07/14(木) 20:32:44.82そもそも、JavaやC++が得意とするオブジェクト指向と、Smalltalkで目指したオブジェクト指向は
いくつかの言語要素と「オブジェクト指向」という名前が共通するだけで、本質的には別物だから
ごっちゃにしないほうがいいよ。
前者は抽象データ型をクラスで実現する手法で、後者はメッセージングを介在させてできるだけ多くの事を
疎結合に保とうとする試み。前者は型安全であることが重要で、後者はできるだけ動的であることが大事。
JavaやC++でメソッド呼び出しをメッセージと解釈することもできるけれど、そもそも抽象データ型のOOと
メッセージングのOOとでは出自も目指すところも違うから、あまり幸せになれないと思う。逆もまたしかり。
0285デフォルトの名無しさん
2011/07/14(木) 20:40:00.33はずだったが、底辺環境のプログラマは手続き型で書くのがやっと。
たまにクラス書かせると、それはもうひどいものが出来上がってきてしまう。
教育って大事だ。
底辺だからと諦めて欲しくないが、中途半端な知識でオブジェクトは使い物にならないっていうのは、さらに酷いという自覚をも持って欲しい。
できる人間は手続きもオブジェクトも関数型も上手に乗りこなす。
0286デフォルトの名無しさん
2011/07/14(木) 20:55:01.86底辺はJavaだろ
C/C++なんて仕事少ないから底辺は駆逐される
0287デフォルトの名無しさん
2011/07/14(木) 21:00:22.31コーディネーターもイニシェーターもそのルールに従うだけ
0288デフォルトの名無しさん
2011/07/14(木) 21:20:27.03Javaを使えばオブジェクト指向
そんなふうに考えていた時代がオレにもありました…
0289デフォルトの名無しさん
2011/07/14(木) 21:49:04.63>>276
object.connect("http://example.com/");
object.connect("jdbc:oracle:oci8:@oracle.techscore");.//危険だ〜
こういう事か?これをインターフェースなら綺麗にやれるというなら、
そもそも開発方針が間違ってるよ。あと、こういう安全面は、
オブジェクト指向というより型安全の世界の話でしょ。
0290デフォルトの名無しさん
2011/07/14(木) 22:02:48.49実験的に作られ、そこで関数呼び出しとメッセージ送信を
それぞれ実装(lambdaとalpha)してみたら
まったく同じ実装になった、とかいう話があったような
0291デフォルトの名無しさん
2011/07/14(木) 22:03:52.70定義する側の構文ね、分かると思うけど
0292デフォルトの名無しさん
2011/07/14(木) 22:45:47.81オブジェクト指向を支援してくれるというのは解るが、
殆ど構造体の発展形にしか見えず、Smalltalkなんかを
使った事の無いプログラマーには何も教えてくれない。
getPoint().getX();みたいなのが平気でまかり通ってる。
あと、こんな感じの定義はよく見る。
void parse(Map<Key,String> params)
このメソッドはparams.get()しか呼ばないとする。
parseは、インタフェースによって使いもしない他のメンバーを
実装することを強いてる。仮に同じparseのget()だけが必要という
要求に答えられるオブジェクトをユーザーが知っていてもparseに
渡すことはできない。そういうコードに慣れたユーザーはどんどん不必要な
メソッドを要求するメソッドを書くことに違和感が無くなっていく。
型安全と速度の引換に依存性の分離から、メッセージの独立性で生まれる
本来の意味での再利用性とカプセル化の意義をユーザーに見失わせてる。
0293デフォルトの名無しさん
2011/07/14(木) 22:54:40.6210種類もオブジェクトを生成するなとは言わないけど、せめてフィールドには、正体が解ってる
オブジェクトを置くのは避けるべきだ。
※正体を知ってる・・・どのクラスが生成したか知っている
0294デフォルトの名無しさん
2011/07/14(木) 23:09:59.320295デフォルトの名無しさん
2011/07/14(木) 23:25:36.81> void parse(Map<Key,String> params)
> このメソッドはparams.get()しか呼ばないとする。
> parseは、インタフェースによって使いもしない他のメンバーを
> 実装することを強いてる。
えとさ、継承って知ってる?
その場合、Map<Key,String>を継承してgetを
オーバーライドすればいいだけだよ。
0296デフォルトの名無しさん
2011/07/14(木) 23:28:26.14> void parse(Map<Key,String> params)
> このメソッドはparams.get()しか呼ばないとする。
この考えはダメ。
parseがparams.getしか呼ばないということを、
「君は知っている」つまり
中の実装を気にしているってことだ。
関数同士の依存関係を薄く保つには
関数の中にコードに依存したコードを書いてはいけない。
parseが中で何をしているかを意識してはいけない。
ブラックボックスとして扱うべきだ。
0297デフォルトの名無しさん
2011/07/14(木) 23:34:05.10parseがparams.getしか呼ばないということが
仕様で決まっているというのなら
引数はそもそもgetだけをもったインターフェース型にするべきだ。
そうすればparseはgetしか呼ばない。と言葉で書くのではなく、
関数のシグネチャとして、getしか呼ばないことが保証される。
つまり間違った設計を自分でしておいて、
自分で間違っていると指摘しているに過ぎない。
さらに引数をgetだけを持ったインターフェース型にしておけば
もしあとでparseの実装が変わってget以外も使うことになったとき、
parseの引数の型によってオーバーロードできるから
互換性を保ったまま、新たなparseをつくることも可能になるし、
またインターフェースそのものを変えてしまえば、影響があるコードは
コンパイルエラーを起こすので、柔整箇所の把握も楽になる。
0298デフォルトの名無しさん
2011/07/14(木) 23:37:55.11言いたいことは解る。
でもね、他の言語だとオーバーライドすらしなくて済むんだよ。
メッセージはインターフェースやクラスに縛られてないから。
>>296
それを言えばインターフェースは既に外に漏らしてるって事だよね。
要求とブラックボックスは別領域。
引数に対し要求を求めることはブラックボックス化が崩れる事にはならない。
なぜだか解るかい?
0299デフォルトの名無しさん
2011/07/14(木) 23:38:36.720300デフォルトの名無しさん
2011/07/14(木) 23:39:15.730301デフォルトの名無しさん
2011/07/14(木) 23:40:04.43インターフェースってのは、何かと何かをつなぐための決まりのことだ。
漏らすのはインターフェースの本質だ。
隠すもの(内部実装)は隠して、
漏らすもの(インターフェース)をはっきりさせよう。
はっきりさせるとは、コード読めやコメントを書くことではない。
コード自身にそれが含まれているということ。
0302デフォルトの名無しさん
2011/07/14(木) 23:40:59.590303デフォルトの名無しさん
2011/07/14(木) 23:41:12.85型を最初に書くというのは
このテスト駆動に近いものがあるよね。
あとから(実行時)に動くかどうか考えるのではなく、
最初にきっちりとテスト(型)を書いておくことで
後が楽になる。
0304デフォルトの名無しさん
2011/07/14(木) 23:43:00.55オーバーライドすることで、もしparseがget以外を使うと
仕様が変わっても対応できる。
オーバーライドという手間が必要になるが、
それは先にテストを書くのと同じこと。
急がば回れというだろう。
0305デフォルトの名無しさん
2011/07/14(木) 23:47:15.87インターフェースとは、
この関数(parse)はgetしか使わない。という決まりを
表した物だと考えれば、これに反論する人はいないだろう。
関数の最初に「もし引数のオブジェクトが、getを持っているならば」という
チェックコードをを書くのといっしょだよ。
このチェックコードに文句をつける理由があるかい?
0306デフォルトの名無しさん
2011/07/14(木) 23:49:18.26そもそも要求仕様を変えちゃいけない。
修正においてもオブジェクトは閉じてないといけない。
0307デフォルトの名無しさん
2011/07/14(木) 23:49:38.69仕様は変わる物。
0308デフォルトの名無しさん
2011/07/14(木) 23:52:24.60例えば.net上で公開されたインターフェースにMSが勝手にメソッドを追加することが許されると思う?
0309デフォルトの名無しさん
2011/07/14(木) 23:52:25.06型安全に実現するために考え出されたものだから、使い方を間違わなければ
(型安全に拘るか否かのトレードオフはあるけれど)できることは基本、同じ。
0310デフォルトの名無しさん
2011/07/14(木) 23:55:30.101インターフェースに付き1メッソッドでならやや近い部分はあるね。
あと他のライブラリのクラスを移譲なしでインターフェースに入れられるかってのも大事だね。
まぁ、その辺の理想的なところはGoogleがGoで実験してたりする。
0311デフォルトの名無しさん
2011/07/14(木) 23:55:36.46それはユーザーが沢山いるライブラリにおいての話。
ユーザーが沢山いて、そのユーザーが誰かわからない。
お前は.netのライブラリと同じぐらいユーザーがたくさんいる
ライブラリを作ってるのか?
大部分の人はライブラリを使う側だ。
お前の話は対象範囲が的外れで参考にならない。
0312デフォルトの名無しさん
2011/07/14(木) 23:58:35.68型テストコードを書いているのと一緒
型が嫌いなやつは、テストコードを書くことも嫌いなんだろうな。
なんで型を書かないの?の答えが面倒だからだもんなw
0313デフォルトの名無しさん
2011/07/15(金) 00:01:58.26コンパイル時にシグニチャのチェックが入るだけ。
OOのブラックボックスとは、まるで関係ない。
0314デフォルトの名無しさん
2011/07/15(金) 00:04:54.32大抵OOPLはクラスライブラリとの連携を主体にしてる。
そもそも、smalltalkなんかはオブジェクトを利用するのが主で、
クラスを書くことがプログラミングの中心ではない。
0315デフォルトの名無しさん
2011/07/15(金) 00:06:14.410316314
2011/07/15(金) 00:08:23.48コードは積極的に書かず、必要な分だけライブラリで用意された
オブジェクトに差し込んでやる。いい例はSqueakToysだよ。
コードをほとんど書かなくても、ある程度のものは作れちゃう。
0317デフォルトの名無しさん
2011/07/15(金) 00:11:00.31C++のテンプレートでダックタイピングしてて、
実装されてない関数なりメソッドをコールしてる箇所があったら、
それはコンパイルエラーになるでしょ。
やっぱ型の本分はメモリ上のレイアウトの解決だと思う。
C++では、型に色んなものを担わせて、クラスがどうとかこうとか言い出したからおかしくなっちゃったんだろう。
ただ、C++でのダックタイピングってオーバーロードの活用だから静的に解決しなきゃならないんだよな。
オーバーロードが動的になれば全てが一気に解決する。
0318デフォルトの名無しさん
2011/07/15(金) 00:12:32.200319デフォルトの名無しさん
2011/07/15(金) 00:12:42.88土方おつ。
自社ライブラリ持ってる企業だったら、
インターフェースを変更せずに保守していく方法を
多かれ少なかれしってるよ。
0320デフォルトの名無しさん
2011/07/15(金) 00:14:21.540321デフォルトの名無しさん
2011/07/15(金) 00:14:25.44void parse(params) {
}
インターフェースってのはこれをコンパイラが
理解できる形で書いたにすぎない。
あとは本当にgetメソッドしか使用していないか
引数のオブジェクトは必ずgetメソッドを実装しているかを
手動でテストするか、コンパイラで自動テストするかの違いだよ。
小さいプログラムなら、手動でテストできるレベルだから最初に準備しなくて良い分楽だろう
プログラムが大きくなってきたら、手動でテストをするのは現実的ではない。
手間を最初に持ってくるかあとに持ってくるかの違いであって、
それ以外の柔軟性とかそういうのは全く関係ない話。
0322デフォルトの名無しさん
2011/07/15(金) 00:17:03.72本当にインターフェースが変更されてないって
どうやって確認するの?
例えばparseのコードがすごく長くて、
もし引数paramsのget以外のメソッドを使ってるコードが紛れ込んだ時、
それを10秒以内にチェックする方法を教えてくれ。
型っていうのは、インターフェースを変更せずの保守していることを
確認する手段でもあるんだよ。
0323デフォルトの名無しさん
2011/07/15(金) 00:18:34.77どうすんだって話と同じだしな。
0324デフォルトの名無しさん
2011/07/15(金) 00:19:09.93実装していない関数をコールしてるんだからな。
0325デフォルトの名無しさん
2011/07/15(金) 00:19:20.19それなら、正の数しか取らない型を作ればいいのでは?
0326デフォルトの名無しさん
2011/07/15(金) 00:22:07.73引数の値をチェックするコードを書いているのなら、
そこを型にするだけで、引数のチェックが必要なくなる。
0327デフォルトの名無しさん
2011/07/15(金) 00:23:21.62既存のparseを使ったテストコードでエラーになるからそのparseはアウト。
そもそも言えば、parseは既に他のプロジェクトで使用されてる可能性があるので、
インターフェースを崩す動作は変えられない。
0328デフォルトの名無しさん
2011/07/15(金) 00:24:28.60正の数しかとらない型に負の値を入れられたらどうするの?
0329デフォルトの名無しさん
2011/07/15(金) 00:24:29.18それは、テストコードが正しい場合の話。
じゃあ、テストコードが正しいかどうやってテストするのか?
テストコードのテストを書くの?w
0330デフォルトの名無しさん
2011/07/15(金) 00:26:10.83既存のテストコードなんだから正しいもクソもないがな。
インターフェースを書いたソースコードが正しいかどうか解からんっていってんのと同じだぞ。
0331デフォルトの名無しさん
2011/07/15(金) 00:26:30.58そんなものにテストコードまで担わせてどうするの?
テストコードはテストコードで別でやれよ。代用するなよ。乱用悪用の類。
0332デフォルトの名無しさん
2011/07/15(金) 00:26:51.11使うところではなく、入れるところでエラーが起きるから
不具合の箇所がどこか把握しやすくなる。
知りたいのは、負の値が入っていました事実ではなく、
どこで負の値を入れたかだからね。
0333デフォルトの名無しさん
2011/07/15(金) 00:28:05.58> インターフェースを書いたソースコードが正しいかどうか解からんっていってんのと同じだぞ。
ぜんぜん違う。
テストは書かなくても動く。
インターフェースは書かないと動かない。
強制的にテスト駆動開発をさせられているようなもんだ。
あとはそれが嫌かどうかの話。
0334デフォルトの名無しさん
2011/07/15(金) 00:29:36.44お前は頭が固すぎ。
型がメモリのレイアウトを決定するだけなら、
RTTIなんてものはつくられていない。
0335デフォルトの名無しさん
2011/07/15(金) 00:32:06.85だから、RTTI作った奴はバカなんでしょ。
このスレはタイトルからして、そういうスタンスでしょ。
作るべきは、動的オーバーロード呼び出し機能であって、RTTIでは無かったんだ。
0336デフォルトの名無しさん
2011/07/15(金) 00:33:32.98極端に言えば、何も書かなかったらバグは見つけられない。
既存のテストコードに足りないところがあれば、
テストは正しく動くが、バグはあることになる。
テストコードを過信してはいけないよ。
所詮人間がチェックしてるんだからね。
0337デフォルトの名無しさん
2011/07/15(金) 00:33:39.170338デフォルトの名無しさん
2011/07/15(金) 00:34:26.83うちみたいな、社内に試験用の部署持ってるとこからすると
型で既にチェックされてるなんて些細だと考えてるんで、
テストで保証されてることが、最低レベルの保証になるし。
0339デフォルトの名無しさん
2011/07/15(金) 00:36:05.22なんか満足のレベルを勘違いしているみたいだけど
静的チェック + テストコード > テストコードのみ
この公式が揺らぐことはないよ。
0340デフォルトの名無しさん
2011/07/15(金) 00:38:19.52ユーザーは、テストケースで渡されてないものを入れちゃいけないの。
テスト外のものを渡して動作がおかしくなったら、ユーザー側が直さなきゃいけないの。
0341デフォルトの名無しさん
2011/07/15(金) 00:40:11.03型だとコンパイルエラーになるんで、
試験用の部署の持っていくまでもない。
いちいちテスト用の部署に持って行って、些細な型エラー
(つまり想定外のメソッドを使っていた)で戻ってくると
行ったり来たりさせる無駄はあほらしい。
大企業病とかいうやつですかね。
自分でテストはしないでいいと考えてるでしょw
0342デフォルトの名無しさん
2011/07/15(金) 00:41:19.03> テストでインターフェースが保証されるってところが解る?
そのテストが正しいと保証されている場合はね。
テストのテスト、ちゃんとやってるか?w
0343デフォルトの名無しさん
2011/07/15(金) 00:42:48.80全部がずれてる。
0344デフォルトの名無しさん
2011/07/15(金) 00:43:01.610345デフォルトの名無しさん
2011/07/15(金) 00:44:07.45根拠が示されてない以上。
俺がそう思っているから、そうなんだといってるだけだなw
0346デフォルトの名無しさん
2011/07/15(金) 00:45:59.24静的テスト+動的テストの
二段階を行っている。
ダブルチェックという言葉知ってるか?
0347デフォルトの名無しさん
2011/07/15(金) 00:46:46.84テストコードの内容から、保証をしてんのに何いってんの?
このコードは通りました、このコードと同じ使い方なら、
問題は有りませんって事なのに。
0348デフォルトの名無しさん
2011/07/15(金) 00:47:17.79未定義の変数を使わない。
なども含まれている。
変数の定義をしなくてもいいと思うのだろうが、
こうすることで動的テストをするまでに
些細なエラーを修正できるので
時間を効率よく使用できる。
0349デフォルトの名無しさん
2011/07/15(金) 00:48:43.35だから、その保証が足りない場合はどうするのさ。
想定外の使われ方をしました。
想定外なのでテストコードを書くなんてできません。
0350デフォルトの名無しさん
2011/07/15(金) 00:51:00.07土方的なんだよ。
せっかくコンピュータがあるのだから
人間が頑張るよりも前に
コンピュータに頑張らせるを事考えないといかん。
テストコードを書かなくてもテストできることがあるのなら
それらは全部コンピュータにさせるべきだ。
人間が楽をするためにコードを書くべき。
楽をするというのは手抜きするということじゃない。
0351デフォルトの名無しさん
2011/07/15(金) 00:51:46.75想定外の使い方をした方が直すに決まってんだろ。
0352デフォルトの名無しさん
2011/07/15(金) 00:54:17.95簡単じゃん。お前の言ってる
「想定外のメソッドを使っていた」
の場合、ビルドが通らないんだから、
それ以上のことは必要ないだろ。
あとは仕様書に従って、間違ってる方が直すだけ。
0353デフォルトの名無しさん
2011/07/15(金) 00:54:38.55OOPLじゃなくても型付け言語は存在するし、
オブジェクト指向自体とは関係ない。
0354デフォルトの名無しさん
2011/07/15(金) 00:58:02.29え?ビルド?
ビルドは静的言語の特権だけど。
0355デフォルトの名無しさん
2011/07/15(金) 00:59:10.17話ズレてるよ。
想定外の使われ方をされた場合
テストコードもないわけで、
「テストが不足」している状態になる。
このようにテストコードは不足していることがあり得るのだから
テストがあれば完璧などということにはならない。
0356デフォルトの名無しさん
2011/07/15(金) 01:02:12.04だよね。
俺は最初から、テスト駆動と一緒で
最初に型書いていて静的チェックできるようにするか
動的テストをあとから書くかの違いだって言ってるだけなのに。
面倒くさいところを最初にやるか、
あとでやるか(やらないやつもいるけどw)
それだけの違いで柔軟性とかそんなのには関係ない
どっちも同じことができると言ってるだけ。
でもどうも静的チェックがなんか悪い物だって考えているやつがいるようだ。
0357デフォルトの名無しさん
2011/07/15(金) 01:03:06.30仕様をコードに組み込める。
それは手間がかかるが便利なこと
0358デフォルトの名無しさん
2011/07/15(金) 01:11:09.77だから、たとえインターフェースで保障されてなくても、
実装されてない無い関数呼んでたんじゃ、どうせ、ビルドできないだろって言ってる。
「そんな関数ありません」ってコンパイラに言われる。
だから、コンパイラの静的型チェックとインターフェースは関係ない。
インターフェースはポリモのためにある。
インターフェースを使わなくても、型チェックはガチガチに働くわけで。
普通の人がインターフェースと聞くと、ポリモの話かと考える。
なのにお前は型チェックのことを言い出すから、アホかと思われる。
0359デフォルトの名無しさん
2011/07/15(金) 01:14:09.94権力が強い企業が担当していた箇所が仕様と違ってた場合、
仕様と合致していても弱い企業が泥臭いコードで直して吸収しなければならない
社会の常識
0360デフォルトの名無しさん
2011/07/15(金) 01:16:12.57インターフェースの仕様変更が飛んでくるのとなんら変わらない。
0361デフォルトの名無しさん
2011/07/15(金) 01:26:23.06知らないなら、知らないほど良い。但し粒度は細くしすぎずに。
(整数型一個とかまで小さくしないって事ね)
0362デフォルトの名無しさん
2011/07/15(金) 01:52:42.87賛成。その話題が本筋だわな。
だけどその理想のオブジェクトとやらを考えたとき、
自分のことだけを考えるってことだから、
メソッドがセッターとゲッターだけになっちゃわない?
また、他のオブジェクトの事を知らないで、どうやって他のオブジェクトと連携していくの?
あるいは、ダックタイピングなら、他のことをまったく知らなくても他と連携できるけど、
ほとんどの静的型言語で、動的なダックタイピングは認められていないよね。
基底クラスやインターフェースって本当に必要?
規約にはなるけど、その分結合度が上がって可搬性が落ちるよ。
そこはトレードオフなんだろうけど、C++やJavaでは動的なダックタイピングが出来ないから、
初めから選択権が無かったりするけど、それってどうなの。
0363デフォルトの名無しさん
2011/07/15(金) 05:28:30.88横同士がうまく連携できるかどうかはクラスどうこう以前の話だと思う
0364デフォルトの名無しさん
2011/07/15(金) 06:00:13.05クラスの実装は知らなくても良いように、インターフェースを使うんだろ
自分のことしか考えないからこそgetter,setterは減る
他のクラスからgetしてsetしてる時点で自分のフィールドに対する一連の処理を呼び出しもとのクラスに任せちゃってる
そうじゃなくてその一連の処理を自分のメソッドとして実装すればいい
こうするとこにより呼び出しもとのクラスはgetしていた内部のフィールドを意識する必要はなくなる
次にそのメソッドをインターフェースとして公開することにより、メソッドの実装も知る必要がなくなる。更に言うとどのクラスであるかさえ意識する必要がなくなる(生成はまた別に必要)
君はAPIを使うとき関連するすべてのクラスの実装を確認してるの?
オブジェクト指向の原則というかインターフェースの使い方を知らない人がちらほらいるな
0365デフォルトの名無しさん
2011/07/15(金) 06:03:26.80まあ、後から出来たもんだからねw
継承やインターフェースなんて言い出してオブジェクト指向に入れちゃった人はなに考えてたんだろうね?
こういうよく考えると「あれ?」っての多いんだよ>オブジェクト指向
0366デフォルトの名無しさん
2011/07/15(金) 06:05:35.61オブジェクト同士でなんのイベントもないのにデータの受け渡しが行われることはありえない
なのにsetter getterで穴をあけている
0367デフォルトの名無しさん
2011/07/15(金) 06:13:15.89知る知らないの視点が違う
重要なのはそのインターフェースを利用する人がクラスの内部実装などを知る必要がないことであって、基底クラスから派生するクラスを実装している人は、規約としてインターフェースを実装すると決めておくことは必要
派生クラス同士に結合関係はないのだから結合度が上がるなんてことはない
0368デフォルトの名無しさん
2011/07/15(金) 06:16:44.61だって大抵全部ひっくるめて修正しなきゃいけないのに使う側って・・・自分なんですけお!w
0369デフォルトの名無しさん
2011/07/15(金) 06:29:37.71それが他人か自分かなんて関係ない
新たに派生クラスが増えたときに基底クラスやインターフェースがあることにより、呼び出し元の変更がなくなる(生成の変更だけで済む)
呼び出してるクラス全部変更なんてやりたくない
インターフェースがそもそも変わるっていうのは、基底クラスがあるないとか関係なく設計が悪い
0370デフォルトの名無しさん
2011/07/15(金) 06:31:29.79なくなるなんてことねぇよ
そっちのがなにかおかしいんだよ
0371デフォルトの名無しさん
2011/07/15(金) 06:38:18.60でもまわりのオブジェクトの都合でそんなもんいくらだって起きるんだよね
0372デフォルトの名無しさん
2011/07/15(金) 06:46:04.10そこに変更がないなら便利ですよという話
そのことにメリットを感じられないならしょうがない
0373デフォルトの名無しさん
2011/07/15(金) 07:13:51.33それは終わった公式
新しい公式は部分型をチェックする
つまり継承関係を宣言できないと不利になるぞ
0374デフォルトの名無しさん
2011/07/15(金) 07:48:52.70だからやくたたないのは確定してんだから妙な条件つけて頑張らなくていいんだよ
馬鹿は頭が固いな
0375デフォルトの名無しさん
2011/07/15(金) 12:24:10.560376デフォルトの名無しさん
2011/07/15(金) 12:28:57.750377デフォルトの名無しさん
2011/07/15(金) 16:46:57.97困ったら人格否定
0378デフォルトの名無しさん
2011/07/15(金) 17:59:57.55引数の増減とオブジェクト指向に一体どんな関係があってこんな縛りが役のたつと思っているのか知りたい
0379デフォルトの名無しさん
2011/07/15(金) 18:02:39.810380デフォルトの名無しさん
2011/07/15(金) 18:05:06.63呼び出されると想定されるオブジェクト側のメソッド名や引数などが、
正しく合致しないといけない
それがどのように合致しているかを、プログラム中に明示しなくてはいけないのが、
Javaのインターフェイス宣言で、
自動的に型推論してコンパイル時に合致しているかをチェックしてくれるOcamlのような言語もあるし、
実行時に呼び出しを解決するPythonのようなスクリプト言語もある
それぞれ、バグの見つけやすさやデバッグ方法や記述の簡単さなどの点で一長一短あって、
どれがいいという確実な答えはない
0381デフォルトの名無しさん
2011/07/15(金) 18:35:51.230382デフォルトの名無しさん
2011/07/15(金) 21:07:03.69誰か入れる前に精査して止める奴いねーの?
0383デフォルトの名無しさん
2011/07/15(金) 21:08:04.53インターフェースの変更に弱い所だな。
アジャイルな開発では
インターフェースが変わることはよくあること。
ウォーターフローのように最初に設計がバッチリできて
もう変わりませんよというならば動的言語でもいいが。
0384デフォルトの名無しさん
2011/07/15(金) 21:16:59.93ていうかインターフェースなんて誰も管理する気ねーからわざわざワンクッションおくなよ
面倒くせーな
変えたら呼び出し元で堂々とエラーだせ
そのときに大音量で「かーわーりーまーしーたーよー!」ってPCから超でかい音でも鳴らしとけ
0385デフォルトの名無しさん
2011/07/15(金) 21:18:15.08インターフェースのいいところ。
0386デフォルトの名無しさん
2011/07/15(金) 21:22:06.80関数/メソッドに引数を追加するとき、
いわゆるJavaのようなインターフェースがあるよりも、
キーワード引数とデフォルト引数がある方が便利に感じる
0387デフォルトの名無しさん
2011/07/15(金) 21:22:30.31はぁ?てかそれが利点だと思ってる時点でレベル低い
あんたの呼び出してたunko()はもうお前の知ってるunko()じゃないんだよ
って変わったなら変わったことを伝えるのがたしなみだろ
なんで気がつかないようにするんだよ
堂々と大本営発表しろよ
はじめて実行するときはメッセージボックス出して「OK」を5連発しないと先へ進めないようにしてもいいぐらいだ
0388デフォルトの名無しさん
2011/07/15(金) 21:24:23.26プログラムを修正しないといけないと思ってるだろ?
動的言語ならプログラムを修正しなくても良い。
あまり使われない機能は後回しにすることができる。
使われない機能が一度も実行されないのであれば
なおす時間の無駄だ。
バグは表面化してから対応すれば良い。
0389デフォルトの名無しさん
2011/07/15(金) 21:26:41.64変わったことを伝えるというのなら
インターフェースのほうがいいだろ。
100%伝えることができる。
もし伝える相手が休みだったら、
離席していたら、聞こえていなかったら、
どうする?
0390デフォルトの名無しさん
2011/07/15(金) 21:56:10.09これらの書き込みと文体から漂う土方臭がすげぇ
これってJava土方の自作自演だろ
さしずめタイトルは「動的言語厨はアホばかり」か?
0391デフォルトの名無しさん
2011/07/15(金) 22:03:03.34インターフェースを変更してるやつは、どういう具体的ケースで変更してるんだろ。
普通に考えて、一度プログラム内で動作しはじめたインターフェースを変更する事は無いと思うけど。
0392デフォルトの名無しさん
2011/07/15(金) 22:04:29.770393デフォルトの名無しさん
2011/07/15(金) 22:25:32.00お前は人をばかにすることしかできんのだな
人間のクズだ。
0394デフォルトの名無しさん
2011/07/15(金) 22:27:56.560395デフォルトの名無しさん
2011/07/15(金) 22:29:31.19保守性も拡張性もいらないはずだよね。
0396デフォルトの名無しさん
2011/07/15(金) 22:32:45.79既存のコードを書き換えない事で成り立ってると思うけど?
DirectXなんかがいい例じゃん。
0397デフォルトの名無しさん
2011/07/15(金) 22:33:26.73何言ってんだこいつ?
0398デフォルトの名無しさん
2011/07/15(金) 22:35:53.43そんなわけねぇじゃん
変更しまくりだよ
だから邪魔だっての>インターフェース
だいたいなんで作ったの?アフォなの?死ぬの?誰にどう使わせたいの?
ってインターフェースばっかり量産してんじゃん
ライブラリ開発者でもないのにこんなのいらねぇよ
分をわきまえろよ
お前等雑魚がこんなもんこさえる必要はこれっぽっちもないからw
0399デフォルトの名無しさん
2011/07/15(金) 22:36:03.250400デフォルトの名無しさん
2011/07/15(金) 22:37:55.17なんだ?IDEさんって
そうやって特定のだれかだと決め付けるお前の精神疾患に付き合ってる暇はないんだけどな
0401デフォルトの名無しさん
2011/07/15(金) 22:41:30.11やねうらおとその配下にいる奴等の戦いがおもしろかったらしい
0402デフォルトの名無しさん
2011/07/15(金) 22:42:19.10だから具体例を教えてよ。
まさか下駄と雪駄だらけのクソインターフェースじゃないよね。
0403デフォルトの名無しさん
2011/07/15(金) 22:43:48.67IDEさんとは、IDEでインターフェースを修正することが
プログラミングにおいて主要な位置を占めると考えるプログラマの総称である。
典型的には Java + Eclipse ユーザであり、
日々どこからも呼ばれない無用なモジュールを
リファクタリングし続ける仕事をこなす。
土方のなかの土方、土方エリートである。
0404デフォルトの名無しさん
2011/07/15(金) 22:51:23.120405デフォルトの名無しさん
2011/07/15(金) 23:07:07.03俺もそういう仕事がしたい
0406デフォルトの名無しさん
2011/07/15(金) 23:22:42.02言語機能のインターフェースを書き換えていい場合って、
帰納型抽出の場合だけだよね。
※帰納ってのは専門語じゃなくて一般的な帰納の意味ね。
0407デフォルトの名無しさん
2011/07/15(金) 23:24:26.350408406
2011/07/15(金) 23:25:25.07帰納抽出なんて必要ないんだけどね。
0409デフォルトの名無しさん
2011/07/15(金) 23:34:36.920410デフォルトの名無しさん
2011/07/15(金) 23:36:39.39型安全語りたいならよそでやれよ。
0411デフォルトの名無しさん
2011/07/15(金) 23:40:48.33OOPの意味でのインターフェースって全然
型安全とか関係ないよなぁ。
純粋なインターフェース(メッセージング)について
話をしてる時に型安全じゃないとか話を振出すやつは何なんだろうね。
0412デフォルトの名無しさん
2011/07/15(金) 23:43:55.120413デフォルトの名無しさん
2011/07/15(金) 23:51:12.75当時の大半のプログラマーは、便利なC程度の認識しかなかっただろうけどね。
マジメにOOやってたOpen Window Libraryが負けて、MFCというクソライブラリが
普及したのが何よりの証拠。
0414413
2011/07/15(金) 23:57:24.050415デフォルトの名無しさん
2011/07/16(土) 00:21:32.77ほんとそうだよな
理解しているならインターフェースから型安全の話は出てこないはずなんだが
0416デフォルトの名無しさん
2011/07/16(土) 00:40:28.060417デフォルトの名無しさん
2011/07/16(土) 00:52:38.22> ゴスリングでさえ、何年か前、すべて始めからやり直すとしたら、
> インタフェースは使わないだろうと言っていた。
って書いてあるけど、ホント?
0418デフォルトの名無しさん
2011/07/16(土) 00:57:32.90Javaは一度死んだろ。当時、JavaがOOPLである事にメリットを感じているヤツは居なかった。
今もJava使ってるヤツの大半はそうだ。ライブラリとVM環境の支援が欲しいだけ。
客先のシステム覗いたら哲学もストラテジーも微塵も感じないコードがゴロゴロしてる。
0419デフォルトの名無しさん
2011/07/16(土) 01:00:28.21やるとしたらGoのinterfaceやGCCのsignature形式を
とるだろうよ。interfaceを直接型に結びつけるなんて馬鹿げてる。
0420デフォルトの名無しさん
2011/07/16(土) 01:18:32.53書いてあったが、アレっておかしいよな。
実装を隠すのは人間に対してじゃなく、オブジェクトに対して隠せっていってるのに
履き違えている。オブジェクトは他のオブジェクトの実装はメッセージの仕様以外
知っててはいけない。なぜなら、オブジェクト同士が切り離せなくなるからだ。
だから、プログラミング言語はその法則を維持するためにアクセス指定子を
持っていたりするわけだ。決して人から見た理解のためじゃない。
そもそも、オブジェクト指向でプログラムすれば現実に近くて分かりやすいって
考え方してんのもおかしい。
0421デフォルトの名無しさん
2011/07/16(土) 01:25:25.43おまえは何でも曲解するんだな
0422デフォルトの名無しさん
2011/07/16(土) 07:14:43.76いや、でもやっぱり使い手が実装みないといけないのはおかしいよ
0423デフォルトの名無しさん
2011/07/16(土) 08:05:25.24> そんなわけねぇじゃん
> 変更しまくりだよ
> だから邪魔だっての>インターフェース
一度決めたインターフェースは
変更するものではない。
それは言語機能として
インターフェースがなかったとしても同じこと。
0424デフォルトの名無しさん
2011/07/16(土) 08:25:46.07データが必要になったらどーすんだよ?
てめぇの脳内にある前提がまったくわからないから話にならないな
説明しようともしないし
0425デフォルトの名無しさん
2011/07/16(土) 09:09:42.36新しいバージョンとして作るんだよ
0426デフォルトの名無しさん
2011/07/16(土) 09:14:15.43ただの変更とかわんねぇじゃん
0427デフォルトの名無しさん
2011/07/16(土) 09:37:42.75動的言語みたいに、一部だけ変えられるものは、
結局変更漏れができてしまう。
インターフェースがあれば、一箇所定義を変えると
変更すべき箇所を教えてくれるから、変更漏れがない。
0428デフォルトの名無しさん
2011/07/16(土) 09:40:01.130429デフォルトの名無しさん
2011/07/16(土) 09:40:58.92他の部分でバグが発生したとしても、とりあえず今やってるとこだけは変更できる。→変更しやすい
変更するならバグがないように、全部変えないといけない→変更しにくい
こういう発想なんだろうな・・・
0430デフォルトの名無しさん
2011/07/16(土) 09:42:08.41インターフェース使っても特に面倒さが増えるってことには
ならないと思うが、
0431デフォルトの名無しさん
2011/07/16(土) 09:54:35.290432デフォルトの名無しさん
2011/07/16(土) 12:17:37.310433デフォルトの名無しさん
2011/07/16(土) 14:51:01.96こういうバージョン別の拡張じゃだめなんだろ。
具体的に。
namespace Version1
{
struct Interface;
}
namespace Version2
{
struct Interface;
}
0434デフォルトの名無しさん
2011/07/16(土) 17:15:48.38アダプターやデコレーターがあるぐらいだから OOPはベースを改変しないのが基本なんだが...
0435デフォルトの名無しさん
2011/07/16(土) 18:08:16.42やっぱり、そのレベルだったかw
こんなやつがインターフェースに文句言ってるんだろうな。
0436デフォルトの名無しさん
2011/07/16(土) 18:17:58.98インターフェースも定義してから使うとバグが減る。
変数もインターフェースも
必要に応じて変えても良い。
0437デフォルトの名無しさん
2011/07/16(土) 20:03:17.57OOレベルのインターフェースの話をしててもお前等のせいで、
型安全とか程度の低い話になる。
0438デフォルトの名無しさん
2011/07/16(土) 20:23:32.56WindowとButtonの関係って親と子ではあるけど、オブジェクトレベルでは単なるトポロジーの一部じゃん。
WindowはButtonの事を一切知ってる必要もないし、Buttonは、1つのWindowに
所属しておかなきゃならない義理もない。だからと言って複数のWindowに所属させる用途も
あんまり無いんだけどね。ただ、Windowから他のWindowに画像領域を移動させたりするときは
障害が如実になるよね。
0439デフォルトの名無しさん
2011/07/16(土) 21:16:57.52具体的にOOレベルのインターフェースって何?
0440デフォルトの名無しさん
2011/07/16(土) 21:22:16.58メッセージに指定するオブジェクトの要件の事。
言語レベルで用意されているinterfaceやprotocol、signatureに囚われない話。
0441デフォルトの名無しさん
2011/07/16(土) 21:30:56.85なるほど
どこらへんでその話してるの?
0442デフォルトの名無しさん
2011/07/16(土) 21:45:59.53インターフェースは所詮実装上の決まり。
変数の定義と同じでOOの思考実験において
インターフェースは存在しない。
0443デフォルトの名無しさん
2011/07/16(土) 21:49:41.28メッセージの話がでてるあたり。
そこからインターフェースを言語レベルでしか語れないヤツらが出てきて
更に型安全厨が登場し、下らない話になってる。
0444デフォルトの名無しさん
2011/07/16(土) 21:51:03.22言語とかコンピューターの世界じゃなく、純粋な意味でのインターフェースを考えてみろよ。
0445デフォルトの名無しさん
2011/07/16(土) 21:53:08.74オブジェクト指向をどうやって実装するか。
システムが大きくなればなるほど、
それを制御する技術も必要。
型安全、いや安全プログラミングを
考えないやつは、所詮机上の空論で終わってる。
空論を技術に転用するのも重要な話。
0446デフォルトの名無しさん
2011/07/16(土) 21:54:19.27ないよそんなもん。
理論としてのオブジェクトはどんなメッセージも受け付けるんだから。
あとはそのメッセージに反応するかしないかでしかない。
0447デフォルトの名無しさん
2011/07/16(土) 21:54:42.54OOにインターフェースが定義されてる訳じゃなくて、
演繹的に見てインターフェースと呼べる部分があり、
そこの事をメッセージと言っている皆はインターフェースと読んでるだけ。
瓶の口といっても、瓶に物を食べる口はないだろ、口に見えるから口と
いってるだけそれと同じ。
0448デフォルトの名無しさん
2011/07/16(土) 21:55:41.86じゃあどっかの言語スレでやれよ。
話の程度が低くなる。
0449デフォルトの名無しさん
2011/07/16(土) 21:57:42.33そういう話をしだすと、そっちに話が流れて
トポロジー的な側面の話やメッセージの話ができなくなるんだよ。
勘弁してくれ。
0450デフォルトの名無しさん
2011/07/16(土) 21:58:18.54> いってるだけそれと同じ。
え?なに?言葉遊びを始めたいの?
物や人の出入りする所を口というんだけど。
0451デフォルトの名無しさん
2011/07/16(土) 21:59:25.71じゃあインターフェースではないものはなんというんだよ。
0452デフォルトの名無しさん
2011/07/16(土) 21:59:51.19揚げ足取りでレスを伸ばすなよ。
気に入らないなら無視しろ。
0453デフォルトの名無しさん
2011/07/16(土) 22:01:12.510454デフォルトの名無しさん
2011/07/16(土) 22:04:32.74"どんなメッセージも"って事は、メッセージに種類があるんだろ。
OOにインターフェースがあります。って書いてなくても、
メッセージの種類が存在してるってのは書いてあることじゃん。
種類がそんざいして情報のやりとりがあるってことは、
インターフェースそのものじゃん。
0455デフォルトの名無しさん
2011/07/16(土) 22:10:16.00オブジェクトとメッセージしか残らないわけで
もういまさら話すことは何も無いと思うけどね。
ダックタイピングとかMIX-INとかそういうのも
オブジェクトを構築するための実装の話でしかないし。
0456デフォルトの名無しさん
2011/07/16(土) 22:12:44.46> "どんなメッセージも"って事は、メッセージに種類があるんだろ。
種類? メッセージはメッセージだよ。
Aというメッセージ、Bというメッセージ、Cというメッセージ。
メッセージはそれぞれ個別であり対等のものだ
実装の段階においては、それじゃ区別付けにくいので
グループ分けするけど、これは実装の話。
0457デフォルトの名無しさん
2011/07/16(土) 22:19:09.22ちょっと面白い話だな。メッセージを受け取っても何もしないという振る舞いができる。
だから、受け取れないメッセージはないし、ある種のメッセージを受け取れるという定義は存在しないって事か。
でも、メッセージ毎に構造はあるでしょ。それもひとつに統合できちゃうの?
0458デフォルトの名無しさん
2011/07/16(土) 22:26:39.790459デフォルトの名無しさん
2011/07/16(土) 22:27:55.45なんか造詣がありそうなんで聞いてみよう。
オブジェクト同士のメッセージのやりとりを上から俯瞰すると
一種のトポロジーが見えてるじゃん。数学面じゃなく
ネットワーク方面で言ってみると、バス型やハブ型、リング型等々。
現実他人が書いてるコード見るとトポロジーの構造が偏ってると思わない?
適切じゃない部分でも同じ構造ばっかり使ってるとか。
0460デフォルトの名無しさん
2011/07/16(土) 22:30:12.76> でも、メッセージ毎に構造はあるでしょ。それもひとつに統合できちゃうの?
だからそれは実装の話。
0461デフォルトの名無しさん
2011/07/16(土) 22:31:53.36> 現実他人が書いてるコード見るとトポロジーの構造が偏ってると思わない?
うん、だから実装の話ね。
実装の話は、
ハ,,ハ
( ゚ω゚ ) お断りします
/ \
((⊂ ) ノ\つ))
(_⌒ヽ
ヽ ヘ }
ε≡Ξ ノノ `J
0462デフォルトの名無しさん
2011/07/16(土) 22:32:16.93まぁ、由来もその辺だし。
0463デフォルトの名無しさん
2011/07/16(土) 22:33:16.73そこまで概念を抽象化すると話のネタが無くなるだろ。
0464デフォルトの名無しさん
2011/07/16(土) 22:35:46.52カプセル化の話もできない。(実装を隠す物)
継承も結局はオブジェクトを構築するための手段にすぎない。つまり実装。
オブジェクトを構築するやり方が色いろあるってだけだからな。
実行前に構築してしまうやり方、実行時に構築するやり方、
他のオブジェクトを取り入れて構築するやり方。
どれも実装の話になっちゃう。
クラス、インスタンス、プロトタイプベース。
これらもオブジェクトを何をもとに生成するかって話に過ぎないし。
さて一体なんの話をすればいいのやら。
0465デフォルトの名無しさん
2011/07/16(土) 22:36:00.85処理や言語の話が出てないんだから実装の話ではないだろ。
0466デフォルトの名無しさん
2011/07/16(土) 22:37:08.50メッセージネットワーク。
もともとオブジェクト指向の命題だし。
0467デフォルトの名無しさん
2011/07/16(土) 22:38:21.46本当にその辺の話はどうでもいいよ。
そんなん言語スレとか初心者おいでませ系のスレで語ってりゃいいし。
0468デフォルトの名無しさん
2011/07/16(土) 22:38:57.52"メッセージネットワーク"でぐぐったけど、
・・・メッセージ、ネットワーク・・・
みたいなのしか引っかからないよw
0469デフォルトの名無しさん
2011/07/16(土) 22:41:26.68メソッド呼び出し以外で実装した言語は
何かありますか?
0470デフォルトの名無しさん
2011/07/16(土) 22:44:54.20固有名詞じゃないよ。
[smalltalk メッセージ ネットワーク]
とか
[オブジェクト指向 メッセージ ネットワーク]
でぐぐればそこそこ出てくるだろ。
まぁぐぐれってもどうのとか言うだったら話にならんかもしれないけど。
0471デフォルトの名無しさん
2011/07/16(土) 23:05:30.07ある程度調べれば、オブジェクト指向の基礎は群体の相互作用だって話が見つかるでしょ。
群体の相互関係をネットワークだのトポロジーだと言ってるだけ。
0472デフォルトの名無しさん
2011/07/16(土) 23:11:25.66それで?
0473デフォルトの名無しさん
2011/07/16(土) 23:16:14.59反応の仕方がおかしい。
0474デフォルトの名無しさん
2011/07/16(土) 23:19:43.77だからオブジェクト指向はネットワークだ!でそれでなんなのさ。
0475デフォルトの名無しさん
2011/07/16(土) 23:27:39.12ある種の問題に対してどういうネットワーク構造の組み合わせやデザインが汎用的で、
独立性が高くなるだのあるだろ。
まぁ、それを言い出すとOO設計の話になるからスレ違いか。
0476デフォルトの名無しさん
2011/07/16(土) 23:32:08.33単に煽るだけなら、OOは入れ子構造の発展だの、
getter,setterがどうのいってる連中は的がズレてるって事だけど。
0477デフォルトの名無しさん
2011/07/16(土) 23:35:29.49で、ネットワークだで話が終わりでしょ。
だからこのスレはお前の言う違う話に
焦点がうつってしまうわけなんだが。
0478デフォルトの名無しさん
2011/07/16(土) 23:40:04.61このスレに書いてるだけ無駄か。
0479デフォルトの名無しさん
2011/07/17(日) 00:12:43.16概念的な話もしてくれてもいいと思うけど、結局はどう実装や設計にその概念が反映されているかが重要だと思うから、実装しかわからない人間のためにそこまで説明して欲しい
0480デフォルトの名無しさん
2011/07/17(日) 00:15:42.29元々OOを実装した言語の話をするなって言ってたんだから
別に設計はよくね。
0481デフォルトの名無しさん
2011/07/17(日) 00:16:30.66だからこの手のスレは、それはOOPであってOOではない。
という話に終始する。OOではないというだけで
じゃあOOという話は?となると何も出てこない。
何も出てこないとOOPの話になる。
そしたらまたOOではないと言いに来る。
この繰り返し。
実際のところOOP以外のOOはあまり役に立たない。
0482デフォルトの名無しさん
2011/07/17(日) 00:19:17.09例えばあれか、コンストラクターで生成されたオブジェクトが
そのオブジェクトを持ってるオブジェクトの寿命まで固定されてんのは、
設計としてあんまり良くないとかか。
0483デフォルトの名無しさん
2011/07/17(日) 00:20:22.74設計ってどの言語で実装するかによって変わると思うけど
>>481
その通りだな
ネットワークくんもそれ以上の話をしてくれないし
0484デフォルトの名無しさん
2011/07/17(日) 00:22:42.22それって単にOOPの話してるだけじゃないの
その話の中でOOの本質的な概念とはどこ?
0485デフォルトの名無しさん
2011/07/17(日) 00:24:36.46BASICじゃクイックソートはできないとかか?
アルゴリズムとおんなじで言語には依存しないだろ。
それじゃUMLも書けんだろ。
0486デフォルトの名無しさん
2011/07/17(日) 00:25:51.66じゃ命題のトポロジーの話でもするか。
OOに同適用するとか。(メッセージでどう繋ぐとか)
0487デフォルトの名無しさん
2011/07/17(日) 00:27:01.32どうぞ。さっそく話してくれ。
0488デフォルトの名無しさん
2011/07/17(日) 00:28:11.36群体の話でもしたらいいんじゃない?
数学とか物理とか社会学とかプログラムから離れられるぞ。
0489デフォルトの名無しさん
2011/07/17(日) 00:29:30.940490デフォルトの名無しさん
2011/07/17(日) 00:31:17.75いやOO自体群体ベースなんだから群体でも構わんだろ。
群体の話なくなったらOO自体なくなるだろ。
0491デフォルトの名無しさん
2011/07/17(日) 00:33:56.75そういう決めつけだけではなくて具体的にそれがどういうことかを説明してくれよ
OOPの話を否定するならそこまでしっかりしてくれ
0492デフォルトの名無しさん
2011/07/17(日) 00:36:04.08当たり前だけどトポロジーというのはオブジェクト指向に限った話ではないよね
オブジェクト指向のトポロジーというのはどういうことを指すの?
0493デフォルトの名無しさん
2011/07/17(日) 00:43:50.86仕様が減るわけじゃないもんね
0494デフォルトの名無しさん
2011/07/17(日) 00:44:04.50オブジェクトの繋がりにトポロジーを適応できるという話でしょ。
現実問題オブジェクトの中にオブジェクトが滞留してるってのはよくある。
できるだけオブジェクトの中にオブジェクトが滞留するのは避けるべきだ。
基本的に、他のメッセージを送った結果としてオブジェクトを得られないのであれば
設計を見なおしたほうがいいかもしれん。
0495デフォルトの名無しさん
2011/07/17(日) 00:46:40.13○他のオブジェクト
0496デフォルトの名無しさん
2011/07/17(日) 00:47:20.140497494
2011/07/17(日) 00:47:52.04他のオブジェクトにメッセージを送った結果だった。
0498デフォルトの名無しさん
2011/07/17(日) 00:49:32.58してんじゃん。
0499デフォルトの名無しさん
2011/07/17(日) 00:50:33.65それはなぜか、
その理由は語られないのであった。
0500デフォルトの名無しさん
2011/07/17(日) 00:53:16.46滞留ってどういうこと?
オブジェクトにメッセージを送ってオブジェクトを得るっていうのは、実装レベルでいうとメソッド実行して返り値としてオブジェクトを得るということ?
0501デフォルトの名無しさん
2011/07/17(日) 00:55:55.18どうせオブジェクトなんて、メソッド持ったデータなんだから
メソッド呼び出しと共に、他のオブジェクトにデータが渡るだろ。
0502デフォルトの名無しさん
2011/07/17(日) 00:57:02.80そうじゃない。
オブジェクト指向ってのは、オブジェクトに指向しろってことだ。
プログラムには色々な要素があるけど、それらのうちのオブジェクトに指向するのがオブジェクト指向だ。
C言語では、関数の引数が関数に対するオブジェクトで、それは大概が構造体だったから、
構造体に指向するってことになって、C++では構造体がクラスになった。
OOの最大の問題は、本当にオブジェクトに指向して良かったのかどうか。
OOではもはや関数はオブジェクトの一部で、オブジェクトにぶら下がる。
プログラムの動作や性質は、オブジェクト次第となる。
そんなのは本当に正しいのかねぇ。
0503デフォルトの名無しさん
2011/07/17(日) 01:02:52.28簡単じゃん。
固定されてるって事は、固定しているオブジェクトを知っていると同義。
固定されてるオブジェクトはネットワークの構成要素として本来メッセージで得られるもの。
0504デフォルトの名無しさん
2011/07/17(日) 01:03:31.79固定ってどういうこと?
0505デフォルトの名無しさん
2011/07/17(日) 01:03:55.53えっ?Cのどこが?
0506デフォルトの名無しさん
2011/07/17(日) 01:05:32.770507デフォルトの名無しさん
2011/07/17(日) 01:05:54.05説明のために実装を引っ張り出すと一つのフィールドを一つのオブジェクトがずっと占拠してること。
メソッドの中で生成されたオブジェクトは固定されてるとは言わない。
0508デフォルトの名無しさん
2011/07/17(日) 01:09:54.92現実世界で考えると、オブジェクトによって動作が違うのは当たり前だから考えやすいけどね
もし別のオブジェクトに共通の動作を定義したいならその動作をオブジェクトとすればいいし
0509デフォルトの名無しさん
2011/07/17(日) 01:10:24.22群体ってのが解ってないでしょ。
位相幾何学に出てくる頂点の集合体みたいなもんよ。
0510デフォルトの名無しさん
2011/07/17(日) 01:10:29.780511デフォルトの名無しさん
2011/07/17(日) 01:10:45.21ようするに定数ってことね。
定数を使うなって何のために?
そんなもん使うときに使うし、使わないときは使わない。
当たり前にやっていることだけど、
そんなに難しく言うことか?
0512デフォルトの名無しさん
2011/07/17(日) 01:11:55.46おれは「オブジェクト指向でなぜつくるのか」
0513デフォルトの名無しさん
2011/07/17(日) 01:13:22.98このルールに従わないと駄目だ。といっているだけに聞こえる。
なんのためのルールなのか、その根拠が示されていない。
0514デフォルトの名無しさん
2011/07/17(日) 01:16:29.72定数とは限らないって。
メッセージ送って状態が変異するオブジェクトも含まれる。
0515デフォルトの名無しさん
2011/07/17(日) 01:17:25.630516デフォルトの名無しさん
2011/07/17(日) 01:18:56.37定数とは限らないというのを聞きたいのではなく、
定数以外のものを聞きたい。
お前はOOPであってOOではないと言ってるのと
同じことを今やってるぞw
0517デフォルトの名無しさん
2011/07/17(日) 01:19:49.86オブジェクトも定数にできるんだが・・・
0518デフォルトの名無しさん
2011/07/17(日) 01:20:23.30低学歴にもほどがある・・・
0519デフォルトの名無しさん
2011/07/17(日) 01:21:35.33それを一概に悪いとは言えないと思うけど、オブジェクトが属性を持つなら必要でしょ
上にあるようなそれぞれ違うオブジェクトに共通の動作があるときとか
ただデータが必要だからフィールドに持つというのは良くないと思うけど
0520デフォルトの名無しさん
2011/07/17(日) 01:24:15.63別の言い方をしよう。
private継承してんのと同じようなオブジェクトの事だ。
0521デフォルトの名無しさん
2011/07/17(日) 01:24:46.180522デフォルトの名無しさん
2011/07/17(日) 01:28:37.43それを言えて、満足したなら消えてくれ。
0523デフォルトの名無しさん
2011/07/17(日) 01:29:19.29研究者や開発者はいない
0524デフォルトの名無しさん
2011/07/17(日) 01:29:55.89private継承は必要なときは使うし
必要ないときは使わない。
それだけだろ? 難しく考えるなw
0525デフォルトの名無しさん
2011/07/17(日) 01:30:37.24オブジェクトが滞留してるということ。
0526デフォルトの名無しさん
2011/07/17(日) 01:31:12.76現実世界で言うと、動作は複数のオブジェクトの組み合わせで決定することが多い。
つまり、マルチメソッドってことになる。だけどほとんどのまともな言語でマルチメソッドは実装されてない。
しかもマルチメソッドだと、メソッドが単一のオブジェクト(クラス)に紐づいている訳ではないから、
オブジェクト指向かどうかも怪しい。どっちかって言うと、動的なオーバーロードみたくなる。
メソッドの定義もクラスの定義の外に書くことになるしね。
C++のテンプレートなんかはかなり理想的なプログラミング環境だね。
ダックタイピングできて、オーバーロードてポリモしてっていう。
ただしあれは静的なんだよねぇ。
C++のテンプレートはOOが嫌いな人が作ったとかなんとか。
0527デフォルトの名無しさん
2011/07/17(日) 01:31:29.20だからprivate継承で十分だろそんな要素。
0528デフォルトの名無しさん
2011/07/17(日) 01:31:43.65そうでないものは滞留させない。
自然に考えればいいだけ。
0529デフォルトの名無しさん
2011/07/17(日) 01:34:12.94さすがです
0530デフォルトの名無しさん
2011/07/17(日) 01:35:02.99private継承で十分ならそうするし、
publicにするべきならそうする。
開発経験ないのか?
なんか気分は俺が農業やっていて、そこに学者さんがきて、
○○なときはこうすれば言ってるのを聞いて
「んなもん、あたりまえだぁ。爺ちゃんの代からずーっとそうしてきたべさ」
といっているようなそんな感じだよw
0531デフォルトの名無しさん
2011/07/17(日) 01:35:19.48本当に必要ならね。
滞留しているオブジェクトは振る舞いをやや変えづらい。
例えば賃貸の部屋に30年前の冷蔵庫が固定されていて動かせないのと同じだ。
0532デフォルトの名無しさん
2011/07/17(日) 01:37:15.04んなもん、あたりまえだぁ。
振る舞いを変える必要がないから、
滞留させてるんだべさw
0533デフォルトの名無しさん
2011/07/17(日) 01:37:22.37べつにそういう話はしてない。
実装は、概念上の話をしても通じないから引っ張り出しただけだし。
あとpublicかprivateとかは関係ないよ。
0534デフォルトの名無しさん
2011/07/17(日) 01:38:16.06だから、できるだけっていってんべ。
0535デフォルトの名無しさん
2011/07/17(日) 01:40:24.18DFDとオブジェクトって設計でいうとまったく別の概念だと思うけど
データの流れを書いただけの物の中に、設計したうえでのオブジェクトが登場するとは限らない
もちろんDFDに現れないオブジェクトもいっぱいある
>>526
複数の動作をフィールドとして持って、組み合わせればいいんじゃないの?
動作の組み合わせとC++のテンプレートって関係あるのかな
0536デフォルトの名無しさん
2011/07/17(日) 01:44:48.30引用元?総括でコピペじゃないからそんなもん無いよ。
根拠を見たいならここの論文みていきな。
http://scholar.google.co.jp/scholar?q=object+oriented+topology&hl=ja&as_sdt=0&as_vis=1&oi=scholart
0537デフォルトの名無しさん
2011/07/17(日) 01:46:24.76コンポジションした方がカプセル化できるし、オブジェクトの生存期間や所有権も明確で分かりやすい。
しかし、他のオブジェクトと共有しなきゃならない場合も有ったりして、
その場合は逐一に引数で渡したり、ポインタ握らせたりする。
だけどそんなもん、C言語でも同じことだよ。OOまったく関係なし。
オブジェクト指向は「オブジェクトに指向する」こと。
関数よりも引数に着目して、処理対象を中心に考えること。
それが本当に正しいかどうかが問題の焦点。
0538デフォルトの名無しさん
2011/07/17(日) 01:47:13.96つまり引用できないんですねw
0539デフォルトの名無しさん
2011/07/17(日) 01:48:08.73データの流れを表してんのがDFD。
オブジェクトだろうが、APLの行列だろうが関係ない。
DFDはデータの状態を説明すんのに使っただけ
0540デフォルトの名無しさん
2011/07/17(日) 01:48:12.860541デフォルトの名無しさん
2011/07/17(日) 01:56:43.78C++関数のオーバーロードは、全ての引数の型の組み合わせで決定される。
いわば静的なマルチメソッド。関数が単一のオブジェクトに属している必要も無い。
一方で、基底クラス使ったポリモは単一ディスパッチしかできない。
メソッドは単一のオブジェクトに属している必要がある。
そんで、その、単一のオブジェクトにメソッドが属するって所から、
基底クラスがどうとかやらインターフェースがどうとかといった
OO独特のドロドロした話が派生している。
マルチメソッドにすれば、何もかも関係なくなる。
別の問題も出てくるけどね。
0542デフォルトの名無しさん
2011/07/17(日) 01:58:18.92その言い方ならそうね。コンポジションせず集約にしろって言ったほうが直接的か。
>オブジェクト指向は「オブジェクトに指向する」こと。
こっちのほうが意味が解からん。
0543デフォルトの名無しさん
2011/07/17(日) 02:00:17.41ようは、名前が同じだけど、引数の型で反応が違うってだけだろ?
foo(型、引数)
こうやって型みて、ifで処理を分岐させればいいだけじゃないか。
さらに発展して、型_foo(引数)とすればいいだけじゃないか。
名前が同じことに何の意味がある?
0544デフォルトの名無しさん
2011/07/17(日) 02:01:43.60メソッドが、クラスやオブジェクトに所属するものだというオブジェクト指向を否定しているの?
それとも、特定のメソッドが、複数クラスやオブジェクトで割り当てされるマルチメソッドというのがオブジェクト指向だと主張してるの?
0545デフォルトの名無しさん
2011/07/17(日) 02:01:53.72違うでしょ
OOパラダイムは構造化パラダイムへのアンチテーゼ
機能をツリー状に構造化して作るというのに対して
データにメソッドをくっつけたものを中心に作って
機能はそれらを適当に呼べばいいっていうのがOOパラダイム
0546デフォルトの名無しさん
2011/07/17(日) 02:02:08.06>滞留ってのがもう意味不明だけど、要はコンポジションするしないの話でしょ。
結局なんだかんだいっても実装レベルで話ができるレベルのことだよね
滞留くんはわざわざ分かり難く言って自己満足してるとしか思えない
>だけどそんなもん、C言語でも同じことだよ。OOまったく関係なし。
OOがまったく関係ないかと言われると違うんじゃないかな
どちらかというとC言語でもOOは可能というのが正しい気がする
ただC言語には、OOが実装しやすくする機能がOOPとして実装されていないということであって、
コンポジションがOOの一要素であるのは間違ってないと思う
0547デフォルトの名無しさん
2011/07/17(日) 02:07:35.24まーオブジェクトに着目するってことだよ。
オブジェクト指向って言うんだから、オブジェクトを中心に考える。
オブジェクトって対象って意味で、何の対象かといえば、関数の対象。
つまりオブジェクト=関数の引数。
だから、オブジェクト指向では、関数よりもその引数を中心に考えるってことになる。
だから、func(obj)ではなくobj.func()と書く。
引数が前に出た訳だ。まさにパラダイムシフト。
で、問題は、この逆転現象が正しいのかどうか。
0548デフォルトの名無しさん
2011/07/17(日) 02:08:00.45if連続で書きたければ書いてれば?
むしろオブジェクトの多態もifで書いたいいんじゃない?
君にとっちゃ両方くだらんだろ。
0549デフォルトの名無しさん
2011/07/17(日) 02:10:10.88いやいや、
オブジェクト=対象ではなく
オブジェクト=モノでしょ
0550デフォルトの名無しさん
2011/07/17(日) 02:12:56.92名前が同じじゃなきゃダックタイピングできないだろー。
C++やJavaでは基底クラスまで揃えなきゃならないってのに、名前ぐらいは諦めろよ。
0551デフォルトの名無しさん
2011/07/17(日) 02:13:31.08マルチメソッドは全然オブジェクト指向の否定してないぞ。
オブジェクト指向は、オブジェクトにメッセージさえ送って振る舞わせればいいだけだし。
0552デフォルトの名無しさん
2011/07/17(日) 02:15:14.74http://www.kab-studio.biz/Programing/OOPinJava/11/01.html
こういう意見もあるね
まず、意味が分かりづらい「指向」という言葉について見てみましょう。
「オブジェクト指向」は、英語で「object-oriented」と書きます。
「orient」は、「Encarta World English Dictionary」によると「〜へと親しませるようにする」「〜の方を向かせる」といった意味があります。「〜の方へと肩を押す」といった感じでしょう。
また「object-oriented」と間にハイフンが付いているため、これは「主語 述語(過去形)」の関係ではなく、「名詞-過去分詞」の形容詞的な意味になります。
つまり「Object-oriented」は「オブジェクトへと向けられた」という形容詞ということになります。
となると、「オブジェクト指向」という言葉だけだとちょっと変です。
本来なら、「オブジェクト指向の○○」のように、何か掛かる言葉があるはずです。
そういう意味では「オブジェクト指向」という言葉だけ一人歩きしてしまった日本語訳はちょっと状況がおかしいとも言えます。
確かに外国のwikipediaではObject-orientedというページは存在せず、「Object-oriented programiming」「Object-oriented analysis and design」「Object (computer science)」は存在する
0553デフォルトの名無しさん
2011/07/17(日) 02:16:05.30だから名前を変えれば済む話だって。
>>550
ダックタイピングしたいところは同じにすればいいだけ。
0554デフォルトの名無しさん
2011/07/17(日) 02:16:36.96まだ君にはオブジェクト指向は早いわぁ。
多分大体の人は初心者の時に通った道だよ。
上の方でメッセージの議論してるでしょ、
なんで皆メッセージっていってるか考えてみ。
0555デフォルトの名無しさん
2011/07/17(日) 02:17:47.51モノ指向だとより一層意味不明なんだけど。モノ指向てw。
だいたい、モノがポテンとその辺に転がってても何の意味も無いだろ。
メソッドを呼ぶなりなんなりしなきゃさ。で、メソッドの「対象」なんだろ。
0556デフォルトの名無しさん
2011/07/17(日) 02:18:01.450557デフォルトの名無しさん
2011/07/17(日) 02:18:18.45元々何を目的としてたか書いてない不毛な記事だね。
0558デフォルトの名無しさん
2011/07/17(日) 02:19:30.400559デフォルトの名無しさん
2011/07/17(日) 02:24:14.46「機能」指向に対しての「モノ」指向
0560デフォルトの名無しさん
2011/07/17(日) 02:27:00.65OOの話をするときメッセージって言えば
なんか玄人っぽくてかっこいいからw
つーか、メッセージをメソッド以外で
実装している言語はないんだから
メッセージ=メソッドでいい。
メソッドといえ。
0561デフォルトの名無しさん
2011/07/17(日) 02:28:59.37オブジェクト指向は、オブジェクトにメッセージさえ送って振る舞わせればいいのだから、
特定のメソッドが、特定のクラスやオブジェクトに結びつけられるのは不便だといいたいんだね。
その考え方は、メソッド(関数)が多相型であるかという問題で、特にオブジェクト指向に限った話題ではないと思うのだけれど。
0562デフォルトの名無しさん
2011/07/17(日) 02:30:55.13なんでも出来るものは、間違ったこともできるということで
不便なだけなのだ。
たとえば変数を定義しなくても、使える言語は
どんな名前の変数でもすぐ使えるが、
それは間違いも増やすわけで、便利ではない。
0563デフォルトの名無しさん
2011/07/17(日) 02:34:22.01>オブジェクト指向は、オブジェクトにメッセージさえ送って振る舞わせればいいのだから
その定義はあなた独自の定義だ。OOと言わずOO_551とか言ったらいいと思う
0564デフォルトの名無しさん
2011/07/17(日) 02:35:04.81その物に動作があるだろ
それがメソッドだ
>>560
同じくメッセージなんて言葉に深い意味はないと思ってる
ただOOPのメソッド実行をそれっぽく読んでる異常の意味はない
0565デフォルトの名無しさん
2011/07/17(日) 02:36:31.96だから、機能の対象=オブジェクトだろ?
機能ってのは英語でfunctionなんだから、関数だろ?
そのアンチテーゼなんだから、関数の対象=引数のことだろ。
0566デフォルトの名無しさん
2011/07/17(日) 02:39:42.16>メッセージは、オブジェクトに所属していない。
>メンバー関数やメソッドはオブジェクトに縛られてる。
C言語の関数はどうなるんだ オブジェクトに縛られていないし、そういう意味ではメッセージになる
>>551こんな定義だとどんな言語、どんな書き方でもOOPになる
0567デフォルトの名無しさん
2011/07/17(日) 02:40:41.52これはおかしい。
英語ではどちらもfunctionという単語を使うけれど、
機能と関数はどちらも意味が異なる。
0568デフォルトの名無しさん
2011/07/17(日) 02:40:44.23Bというオブジェクトを
合わせるとき、
Aにaddというメソッドをつけるのはおかしいよね。
Aという木とBという木をくっつけるのは
ボンドというオブジェクトだもの。
他にも接着剤というオブジェクトでくっつけることも可能。
0569デフォルトの名無しさん
2011/07/17(日) 02:42:50.46どんな書き方でもOOPになるのかどうかは知らないけど、
マルチメソッドといっている人は、LISPのCLOSのようなものを考えているんじゃないかという気がする。
0570デフォルトの名無しさん
2011/07/17(日) 02:43:04.09関数もオブジェクトという言語があるように、
機能もまたオブジェクトの一種なんだよ。
0571デフォルトの名無しさん
2011/07/17(日) 02:43:04.58>その物に動作があるだろ
その動作の対象がオブジェクトだろ?
メッセージを送るんだろ?送り先が要るだろ?
メッセージを送る対象がオブジェクトだろ?
メッセージを送る対象によって多態するからオブジェクト指向なんだろ?
0572デフォルトの名無しさん
2011/07/17(日) 02:43:27.16オブジェクト=引数と言いたいの?
意味不明過ぎるw
↓これの対象はvoid?w
void hello(void){
printf("Hello");
}
0573デフォルトの名無しさん
2011/07/17(日) 02:44:06.82>関数の対象=引数のことだろ
その言い方をするなら「特別な第一引数」=「暗黙のthis」のことだ
obj.method(param)
のparamのことではなく、objのこと
それをわかった上で
>関数よりも引数に着目して、処理対象を中心に考えること
と発言していたのであれば日本語をもっと勉強した方がいい
0574デフォルトの名無しさん
2011/07/17(日) 02:44:37.92だからオブジェクト指向でメッセージというものを
オブジェクトと区別して語る必要はない。
オブジェクトにオブジェクトを送るのが
真のオブジェクト指向さw
0575デフォルトの名無しさん
2011/07/17(日) 02:47:37.69C言語でも関数はデータに過ぎない。
だけど、通常、関数をデータとは言わないんだよ。
0576デフォルトの名無しさん
2011/07/17(日) 02:51:28.33Smalltalkとかだと、割と何でもオブジェクトだけれど。
0577デフォルトの名無しさん
2011/07/17(日) 02:52:28.70だからお前はその程度の認識なんだろ。
メッセージと関数はそもそも違う。
メッセージをおくると対応するメソッドが呼び出される。
そもそもメソッドとメッセージは別に存在するものだ。
objective-Cやsmalltalkはメッセージだけ変数に格納して
好きなときにオブジェクトに送りつけることもできるんだぞ。
0578デフォルトの名無しさん
2011/07/17(日) 02:52:34.540579デフォルトの名無しさん
2011/07/17(日) 02:53:21.710580デフォルトの名無しさん
2011/07/17(日) 02:54:48.60その場合は関数helloの対象は無いんだよ。
対象が無くても関数は呼べる。関数の方が偉いからね。引数の数を選べるのさ。
>>573
それはお前が勝手にシングルディスパッチだと決め付けているからだろ。
多重ディスパッチの場合、特別な第一引数なんて存在しないし、
引数としか言うほかないぞ。しいて言えばレシーバか。
0581デフォルトの名無しさん
2011/07/17(日) 02:54:58.19メンバー関数ポインタはクラスに属してるだろ。
0582デフォルトの名無しさん
2011/07/17(日) 02:57:27.82複数もてばいい話
0583デフォルトの名無しさん
2011/07/17(日) 02:58:09.19C++で言えば
メッセージ=メソッドのシグネチャとその引数
メソッド=メソッド自体の実装
なわけでほとんどどんな言語でもメソッドとメッセージの概念は分離している
していないのはN88-BASICとかくらいじゃない?
0584デフォルトの名無しさん
2011/07/17(日) 02:58:18.67関数ポインタじゃ引数も束縛できないでしょ。
0585デフォルトの名無しさん
2011/07/17(日) 02:58:25.110586デフォルトの名無しさん
2011/07/17(日) 02:59:06.24動的か静的かの話がしたいの?
0587デフォルトの名無しさん
2011/07/17(日) 03:01:14.59ちょっと違う。メッセージは本来ダックタイプ。
0588デフォルトの名無しさん
2011/07/17(日) 03:03:09.37マルチディスパッチはメッセージの要件を満たしてると言いたいの。
0589デフォルトの名無しさん
2011/07/17(日) 03:08:00.81でも実際には関数の動的オーバーロードにしか見えないっていう。
プログラミングスタイルもC言語の時代に先祖がえりするしね。
まさか (obj1, obj2).method(obj3) なんて書かないでしょ。
func( obj1, obj2, obj3 )でいいよね。
0590デフォルトの名無しさん
2011/07/17(日) 03:09:02.46ダッグタイピングをC上で実装してみれば分かる。
OOPの話じゃないというならなおさらだ。
0591デフォルトの名無しさん
2011/07/17(日) 03:09:10.91本来じゃなくSmalltalkやobjective-Cではってことでしょ?
メッセージという概念は当然C++でもJavaでも存在してそれが
メソッドのシグネチャと引数として実装されているんだから
「本来」=「Smalltalk原理主義」
という主張でしょうか?
0592デフォルトの名無しさん
2011/07/17(日) 03:10:51.660593デフォルトの名無しさん
2011/07/17(日) 03:14:25.46本来=アランケイがオブジェクト指向として発表した内容。
具体的にはbyteだったかなんだったかに掲載されたインタビューと
smalltalkのリファレンスにのってたメッセージベースの章。
0594デフォルトの名無しさん
2011/07/17(日) 03:15:15.980595デフォルトの名無しさん
2011/07/17(日) 03:16:29.37Cに実装してどうするよ。コンパイラに実装するんだよ。
ダックタイピング+マルチメソッドを実行効率落とさずに実装しようと思うと、
コンパイラレベルでのサポートは必須だね。
かなり面倒だから誰もやらないけど、そろそろ誰かがやった方が良い頃合だろうね。
皆気づき始めてるから。
0596デフォルトの名無しさん
2011/07/17(日) 03:17:37.84その対象が物なんでしょ
プログラミングの世界でいう一般的なオブジェクトを対象と訳す?
それともオブジェクト指向のオブジェクトという文字列と、プログラミングの世界でいうオブジェクトはまったく別物ということ?
0597デフォルトの名無しさん
2011/07/17(日) 03:19:12.65じゃあ君は何が正しいと言いたい?
オブジェクト指向と言い出したのはアラン・ケイだし、
それ以上の定義があるのかい?
0598デフォルトの名無しさん
2011/07/17(日) 03:21:45.67http://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91
0599デフォルトの名無しさん
2011/07/17(日) 03:22:16.96今普及しているOOPはSIMULA由来のC++/Javaだよ。
その視点がない時点でキチガイ。
0600デフォルトの名無しさん
2011/07/17(日) 03:24:08.27>なおオブジェクトという用語は時に「もの」という直訳語で認識される場合があるが、
>英語のobjectには「目的語」、または「目的となる対象物」という意味がある。
>従ってオブジェクト指向は本来「述語(機能)よりもその対象を中心に据える」というニュアンスをもつ用語である。
0601デフォルトの名無しさん
2011/07/17(日) 03:27:10.53その部分を読んで
Object=対象と思ったのならもう少し日本語を勉強しよう
そして
対象=引数と思ったのであればもう少し冷静に考えてみよう
0602デフォルトの名無しさん
2011/07/17(日) 03:28:11.36普及してりゃ概念が変わる訳じゃねえだろ、
winAPIのメッセージ機構やOSXのメッセージベースAPIも
OOだって名のってんのに全否定じゃねえか。
0603デフォルトの名無しさん
2011/07/17(日) 03:29:28.38なぜ主流と亜流が存在するか考察したことないんだね
0604デフォルトの名無しさん
2011/07/17(日) 03:32:02.26>winAPIのメッセージ機構やOSXのメッセージベースAPIも
メッセージの実装方法にはいろいろあり、Smalltalk風もC++風もwinAPI風
もすべてメッセージを実装している
>OOだって名のってんのに全否定じゃねえか
だから全肯定。
Smalltalk原理主義だとSmalltalk風以外を全否定するが
0605デフォルトの名無しさん
2011/07/17(日) 03:32:03.54>述語(機能)よりもその対象を中心に据える
って書いてあるし。
述語(機能)って関数や命令やメッセージやメソッドの事でしょ。
その対象だから、OOP以外の言語で言うところの引数やオペランドってことになると思うけど。
ただ、OOでは引数のことをレシーバーとかオブジェクトって言うけど、呼び方の問題でしかないよね。
0606デフォルトの名無しさん
2011/07/17(日) 03:34:36.90>述語(機能)よりもその対象(となるモノ)を中心に据える
と言葉を補えば
機能指向→モノ指向
というのがはっきりするんじゃない?
0607デフォルトの名無しさん
2011/07/17(日) 03:37:05.38俺も勝手に補うぜ。
>述語(機能)よりもその対象(である引数)を中心に据える
0608デフォルトの名無しさん
2011/07/17(日) 03:41:00.44何で間違いを認められないんだろうね。
>>600 を100回読み直せよなー。
ここまでストレートに指摘されてるのにね。
0609デフォルトの名無しさん
2011/07/17(日) 03:46:43.33>〜というニュアンスをもつ用語である
と書いてあるじゃん
つまり直訳で「モノ」だと完全に感じが伝わらなく、
「操作の対象」という意味のニュアンスもあるよってこと
>>600 を100回読み直せよなー。
つ鏡
0610デフォルトの名無しさん
2011/07/17(日) 03:48:36.92定義がっていってんの。
>>604
が言うように実装方法は色々あるし、現実的なパフォーマンス上の
問題で妥協している言語は色々ある。
そもそもマルチディスパッチがOOの原義に反さない
というところの話しだったと思うがかなりずれたな。
0611デフォルトの名無しさん
2011/07/17(日) 03:50:23.61微妙な捏造はやめよう
>モノと直訳語で認識される場合があるが、Objectには他の意味があり…
と書いてあるだけだ
「本来は」などとは書いていない
0612デフォルトの名無しさん
2011/07/17(日) 03:55:23.490613デフォルトの名無しさん
2011/07/17(日) 04:06:28.31ねぇ、何で間違いを認められないの?これ以上まだ恥かきたいの?
>>600
>〜「時に」ものという直訳語で認識される「場合」があるが、
>〜「本来」〜その対象を中心に据えるというニュアンスをもつ用語である。
時に〜場合があるけど、本来は〜というニュアンス〜
って書いてあるよ?
0614デフォルトの名無しさん
2011/07/17(日) 04:09:23.53書いてあるじゃん、「本来」って。マーカー引かなきゃ分からない?
http://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91
>なおオブジェクトという用語は時に「もの」という直訳語で認識される場合があるが、
>英語のobjectには「目的語」、または「目的となる対象物」という意味がある。
>従ってオブジェクト指向は本来「述語(機能)よりもその対象を中心に据える」というニュアンスをもつ用語である。
0615デフォルトの名無しさん
2011/07/17(日) 04:12:34.31>本来は〜というニュアンス
そうだよ、単に「もの」ではなく「対象」っていうニュアンスもある
って書いてある
「もの」ではなく「対象」である
なんて書いてないよ
0616デフォルトの名無しさん
2011/07/17(日) 04:24:35.75ニュアンス「もある」、じゃなくて、本来〜ニュアンス「を持つ」、って書いてあるが。
>>「もの」ではなく「対象」であるなんて書いてないよ
>時に「もの」という直訳語で認識される場合があるが
「もの」と訳すのはマイナーらしいよ。だって、時に〜場合があるって書いてあるからね。
それに元々オブジェクトを対象と訳した俺に噛み付いてきたのはお前なんだが。
お前は「モノ指向」だって言ってて、俺はオブジェクトをモノと直訳することも知ってたけど、
だけどモノと訳すと意味が分からないだろうと言ってただけだよね。
0617デフォルトの名無しさん
2011/07/17(日) 04:34:40.82あえて言えば「もの」80%、「対象」20%
>「もの」と訳すのはマイナーらしいよ
訳すのがマイナーなんて書いてない
「もの」100%と認識するのは本来のニュアンスが伝わっていない
と書いてある
>それに元々オブジェクトを対象と訳した俺に噛み付いてきたのはお前なんだが。
>>545 >>573 を読み直してみなよ
>関数よりも引数に着目して、処理対象を中心に考えること
におかしいって言っただけだよ。特に「引数」にね
0618デフォルトの名無しさん
2011/07/17(日) 04:34:41.66メッセージとメソッドが一体化してる言語なんて
C++/Java/.net系言語/Simula/Delphi/Eiffel
ぐらいじゃん。他のオブジェクト指向を標榜してる言語や
ライブラリはメッセージをオブジェクトから独立させられるぞ。
0619デフォルトの名無しさん
2011/07/17(日) 04:42:25.12>メッセージをオブジェクトから独立させられるぞ
メッセージとオブジェクトの分離ならポリモさえあればどのOOだってできるだろ
>C++/Java/.net系言語/Simula/Delphi/Eiffel
そもそもこれ以外のOO言語ってなに?
最初の3つでシェア90%くらいあるんじゃない?
0620デフォルトの名無しさん
2011/07/17(日) 04:49:48.06>あえて言えば「もの」80%、「対象」20%
ねぇまだがんばるの?何でそんなわけの分からないパーセンテージが捏造できるの?
>なおオブジェクトという用語は時に「もの」という直訳語で認識される場合があるが、
>英語のobjectには「目的語」、または「目的となる対象物」という意味がある。
>従ってオブジェクト指向は本来「述語(機能)よりもその対象を中心に据える」というニュアンスをもつ用語である。
これ読んでどうやったらそういう理解になるの?
「時に〜場合がある」とか「本来」の意味分かってるの?
大体本当に、「もの」80%、「対象」20%なんだったら、こんな説明がわざわざWikipediaに載ると思うか?
>>関数よりも引数に着目して、処理対象を中心に考えること
>におかしいって言っただけだよ。特に「引数」にね
では、一体何を中心に考えると?まさかオブジェクト?オブジェクト指向の説明するのにオブジェクトって用語を使うの?
0621デフォルトの名無しさん
2011/07/17(日) 05:02:37.56「もの」100%だと思う人がときどきいるが、
本来は「もの」80%、「対象」20%というニュアンスをもった言葉だ
ということを説明したいんでしょ。
>では、一体何を中心に考えると?まさかオブジェクト?
そうだよモノだよ。対象だってobjectなんだからこの疑問はそっくりそのまま
お返ししますよ
0622デフォルトの名無しさん
2011/07/17(日) 05:11:20.12では、「時に〜場合がある」はどう考えるの?ものと認識されるのは「時に」でしかないようだけど。
>そうだよモノだよ。対象だってobjectなんだからこの疑問はそっくりそのまま
>お返ししますよ
俺はオブジェクトは関数に対する引数だって言ってるんだが。
引数って言葉に引っかかってたんじゃなかったの?
で、Wikipediaによると、オブジェクトは対象物らしいけど、
一体何の対象物なの?操作?処理?
0623デフォルトの名無しさん
2011/07/17(日) 05:29:03.30他の言語やライブラリにどれだけ影響与えてるかじゃなく、エンドユーザーのシェアの問題かよ・・・。
0624デフォルトの名無しさん
2011/07/17(日) 07:14:27.68「もの」100%だと思う人が「時に」はいるが
という意味だよ
>で、Wikipediaによると、オブジェクトは対象物らしいけど、
>一体何の対象物なの?操作?処理?
操作の対象だよ
Wikiの引用でいえば
「述語(機能)」の対象
0625デフォルトの名無しさん
2011/07/17(日) 07:20:42.68主流か亜流かの話(>>612)に反論してたんじゃないの?
学術的な影響云々っていうならOOPLなんてとっくに終わってるだろ
0626デフォルトの名無しさん
2011/07/17(日) 08:26:26.67むちゃくちゃワロタw
0627デフォルトの名無しさん
2011/07/17(日) 10:11:05.38オブジェクトというのは、対象物という意味であり、指向は重要視するとかそんな意味
対象物を重視するプログラミング
手続き型プログラミングとの違いを考慮して具体的に言うと、
手続き型時代のC言語の書き方では、どの対象物が関数コールするのかということは意識されていなかった。
hello(); ←どの対象物がHelloするのか? そんなの気にしないのが手続き型
それに対して、OOPでは明確に対象を指定して関数をコールするようにすることによって○○というメリットがある。
hello(対象); ←C言語でOOP
そしてそれをもっと明示的に対象物を強調した実装になっているのが、現在のOOP言語であるC++やJava
対象.hello(); ←OOP言語でOOP
これにはどんなメリットがあるの?
0628デフォルトの名無しさん
2011/07/17(日) 10:23:15.61オブジェクトというのは、物という意味であり、指向は重要視するとかそんな意味
物を重視するプログラミング
手続き型プログラミングとの違いを考慮して具体的に言うと、
手続き型時代のC言語の書き方では、物が定義されていなかったため、
どの物について記述しているかがわからず、すべてのファイルを意識してコーディングする必要があった。
修正時には、すべてのファイルをチェックする必要がある。
それに対して、OOPでは物が明確に定義することにより、その物の責務を明確になり、
スコープを限定し、修正の影響範囲を限定できるようになった。
微妙・・・
もっとまともな説明求む
0629デフォルトの名無しさん
2011/07/17(日) 10:35:57.020630デフォルトの名無しさん
2011/07/17(日) 11:18:36.62そして手続き型の言語でオブジェクト指向プログラミングはできる
0631デフォルトの名無しさん
2011/07/17(日) 11:30:37.26×オブジェクトはオブジェクト指向のため作られた。
○オブジェクト指向は、クラスやオブジェクトの後に作られた考え方。
だから、オブジェクト指向の説明にクラスやオブジェクトを使うのは構わない。
前後するが後述の各OOPの違いは、クラスやオブジェクトをどんな目的で使うか、という点。
×オブジェクト指向と呼べるのは「メッセージング」だけ。
○OOPだけでも抽象データ型のOOP、メッセージングのOOP、プロトタイプベースのOOPがあり
部分的に衝突する方向性に折り合いをつけられれば併用も可能な、しかし異なる考え方の総称。
0632デフォルトの名無しさん
2011/07/17(日) 11:35:44.28OOの文脈上で「メッセージ」はでてこない
0633デフォルトの名無しさん
2011/07/17(日) 12:09:37.72ストラウスストラップが提唱。メイヤーやリスコフなどもこれに準じる。
クラスを抽象データ型として用いるアイデア。俗に「カプセル化、継承、多態性」。
抽象データ型というのは簡単にはユーザー定義型のこと。
・メッセージングのOOP
アラン・ケイが提唱。ヒューイットのアクターはここから派生。
オブジェクトをメッセージのレシーバーとして使うアイデア。
クラスは型ではなく、委譲先の特殊なオブジェクトの一つととらえる。
システム全体を可能なかぎり動的に保つことで、長期・永続的な運用を目的とする。
俗に「オブジェクトにメッセージを送る」。
・プロトタイプベースのOOP
SELFの作者達の考え方をベースにNewtonScriptとJavaScriptの作者らが洗練させた。
オブジェクトに知識フレームのフレームとスロットの役割を担わせ、不在のスロットへの
アクセスは、特殊スロットに指定された委譲先に委譲する考え方。
フレーム、スロット、関数(メソッド)、委譲というシンプルな要素と概念で多くのものを
表現可能である(最たるものでは、クラスベースのシミュレーションとか)ところが売り。
0634デフォルトの名無しさん
2011/07/17(日) 12:32:03.28これってさ、システム全体=「OS+アプリ」 を想定してるだろ?
smalltalk初期時代はOSなんてものはなかったから、
システム全体(≒OS+アプリ)をつくらないといけなかった。
今はシステム全体は作られ、動的に保たれている。
その上でアプリが動き、そのアプリはカプセル化され単体で動く。
アプリをOOで作ろうが作るまいが、システム全体から見れば
OOとして機能しているのが、今の状態。
この考えならWindowsはオブジェクト指向OSと言われてるのも説明がつく
0635デフォルトの名無しさん
2011/07/17(日) 12:32:03.86サブルーチンに寿命を持たせることで擬似並列処理を実現するための枠組みとして作られた。
各オブジェクト指向(と、リスコフの抽象データ型)は、このクラスとオブジェクトの
それぞれ目先を変えた応用例としてとらえると収まりがいい。
0636デフォルトの名無しさん
2011/07/17(日) 13:01:00.47たしかに、.NET とかスジがいいってアラン・ケイも褒めてたこともありましたが、
http://itpro.nikkeibp.co.jp/members/ITPro/ITARTICLE/20030605/1/
いち利用者の実感としては、暫定実装に過ぎないSmalltalkに比べても「まだまだ」って
かんじはしてしまいますけれどもね。ここらへんは、ケイ自ら、Smalltalkでの試みの
総括みたいな文章を書いているので、こちらを参考にしながら今のWindowsでどこまで
実現できているかと対比させながら考察を加えていただければと。
「ソフトウェア工学」は矛盾語法か?
http://metatoys.org/oxymoron/oxymoron.html
0637デフォルトの名無しさん
2011/07/17(日) 13:49:05.94OSとそのアプリでなりたつアプリ間の連携や
複数のサブシステム(アプリ)の連携で動く
大きなシステムを構築するときの方法論
オブジェクト指向設計のおけるメッセージは
メソッド呼び出しではなく、COMであったりOLEであったり
SOAPであったり、プロセス間通信のことである。
言語やライブラリによって、これらはメソッド呼び出しのように
行えるかもしれないが直接の関係はない。
オブジェクト=プロセス。
メッセージ=プロセス間通信。
こう置き換えると分かりやすい。
0638デフォルトの名無しさん
2011/07/17(日) 14:04:01.740639デフォルトの名無しさん
2011/07/17(日) 14:06:43.710640デフォルトの名無しさん
2011/07/17(日) 14:07:34.650641デフォルトの名無しさん
2011/07/17(日) 14:11:17.640642デフォルトの名無しさん
2011/07/17(日) 14:12:08.980643デフォルトの名無しさん
2011/07/17(日) 14:12:09.38>オブジェクト指向設計のおけるメッセージは
>メソッド呼び出しではなく、COMであったりOLEであったり
>SOAPであったり、プロセス間通信のことである。
どうしてそういうことになったんだよw
0644デフォルトの名無しさん
2011/07/17(日) 14:13:36.40案がないならせめてリファレンスくらい出せ。
昨日からメッセージかメソッドかなんてまったく面白くない。
0645デフォルトの名無しさん
2011/07/17(日) 14:21:35.510646デフォルトの名無しさん
2011/07/17(日) 14:24:11.13自称OO通は、俺が理解したらOOを語ってるだけで、
OO通というより、OO痛w
0647デフォルトの名無しさん
2011/07/17(日) 14:50:09.49OOP、OOD、OOAこれがすべて
0648デフォルトの名無しさん
2011/07/17(日) 15:09:21.870649デフォルトの名無しさん
2011/07/17(日) 16:08:13.21英語=日本語
0650デフォルトの名無しさん
2011/07/17(日) 17:44:57.85アブストラクトの世界で跋扈しているようだからシステム構築が専門とお見受けしたが... 何か実績は?
OOだけではつまんないんじゃね ? 普通! 下働きのPが無いと? 何も具現しない世界では w
0651デフォルトの名無しさん
2011/07/17(日) 18:09:55.14俺的にOOPでよかった事は ヒューマンI/Fがフレンドリーになったという事かな?
uITRONやFreeRTOSで書いていた操作系機器をOOPに書き直し 仕様も超変わって使い勝手の評判は良くなった
どうも 構造化前提のRTOSは 頭が固くなってかなわん... そもそも 気楽にUMLを書けん!
メンテ性や機能追加も楽になった... ただ それは俺だけの事で,,, w
Cでの記述上 複雑なんで理解できるパートナーがいなくなったのは痛い!
チームプロジェクトではデザパタやら統一ルールだけやっても 最後は個人の力量!
0652デフォルトの名無しさん
2011/07/17(日) 19:26:38.12今は過渡期だと思うぜ。
組み込みでも、ディスパッチャをゼロから構築が当たり前だった頃から比べると、オブジェクト指向の考え方が役に立つ案件が増えて来てる。
OOPを含む各種の計算モデルの基礎を学習するなら、CTMCPあたりがお薦め。
0653デフォルトの名無しさん
2011/07/17(日) 20:37:43.69SOAPがなくたってJavaはOOP言語だよね
0654デフォルトの名無しさん
2011/07/17(日) 20:42:42.990655デフォルトの名無しさん
2011/07/17(日) 20:58:31.780656デフォルトの名無しさん
2011/07/17(日) 21:27:55.90呼ぶべきではないものである。
オブジェクト指向における設計とは
デザインパターンやそれに類する物のことであり
OOAやOODは眉唾ものだから、そんな話を
してくるやつは聞き流したほうがいい。
0657デフォルトの名無しさん
2011/07/17(日) 22:52:30.85というと、OOAは眉唾だけどアナリシスパターンはOOってことになるの?
0658デフォルトの名無しさん
2011/07/17(日) 23:52:10.31抽出したものだよ。
0659デフォルトの名無しさん
2011/07/18(月) 00:16:42.03オブジェクト指向は設計からオブジェクト指向するのに
デザパタって実装抜きに語れないじゃん
なんかデザパタ書いた人ってそもそもオブジェクト指向わかってない気がする
0660デフォルトの名無しさん
2011/07/18(月) 00:23:24.090661デフォルトの名無しさん
2011/07/18(月) 00:31:18.89だってコード抜きでデザパタって語れるの?
こんなもんが入ってくるフェイズがあること自体不思議じゃない?
0662デフォルトの名無しさん
2011/07/18(月) 01:01:36.38その時点ですでに実装済みの部品がたくさんある
0663デフォルトの名無しさん
2011/07/18(月) 01:08:15.38いきなりなに話と全く無関係なこと言い出してるの?
0664デフォルトの名無しさん
2011/07/18(月) 01:10:18.030665デフォルトの名無しさん
2011/07/18(月) 01:18:47.970666デフォルトの名無しさん
2011/07/18(月) 05:47:29.100667デフォルトの名無しさん
2011/07/18(月) 10:02:27.42実装は、メソッドの中身の具体的な処理でしょ
>>659はGoFに対してよくもそんなことが言えるもんだな
どれだけ偉いのかwww
0668デフォルトの名無しさん
2011/07/18(月) 10:21:54.45ほぼ実装だよ。
クラス図に、型とかprivateメソッド・変数とか
書き出したら、完全にこれは実装。
0669デフォルトの名無しさん
2011/07/18(月) 10:38:09.75ファウラーのアナリシスパターンとか?
0670デフォルトの名無しさん
2011/07/18(月) 11:30:20.85あくまで他人のアホな意見をまねしているだけで自分は馬鹿ではないという立場
0671デフォルトの名無しさん
2011/07/18(月) 20:38:46.35単にコード抜くだけなら、社会システムをUMLで書けるだろ。
public methodとしてシステムを外部から見た機能を並べていき、
private fieldをそのシステムが活動するのに使用しているリソースを並べていけばいい。
------------------------
小売店
------------------------
-在庫商品:商品[]
-資本金:金額
------------------------
+口座加入(銀行);
+販売(商品名,財布):商品;
+仕入(商品名,仕入元):商品;
------------------------
そうすると、構造が重複するものが現れるので、
組織の切り出しや、問題構造を切り出すことができる。
まあ、コレって新しいことをしてるわけじゃなく、
帰納型ロジックツリーをUML書式で拡張し書いてるだけなんだけど。
0672671
2011/07/18(月) 20:41:37.77Simulaの物理シミュレーション機能が元になってるから、
ロジックツリーと相性がいいというはなし。
0673671
2011/07/18(月) 20:52:22.71揚げ足にしかならないんで細かいとこは気にしないでくれ。
0674デフォルトの名無しさん
2011/07/18(月) 22:13:22.43なにそれ?
まったく関係ないことしゃべってない?
0675デフォルトの名無しさん
2011/07/18(月) 22:16:38.04コードそのもの。
コードの内容を図解したただけ。
0676デフォルトの名無しさん
2011/07/18(月) 22:29:34.96コードと言えばコードかもしれないけど、コードそのものの実装というのは処理も含めて言う物だと思う
クラス図というのは設計図、実際の詳細な処理に依存しない
クラス図通りなら、メソッド内はどう実装しようと外見は同じような物ができあがらなければいけない
もしある2つのクラスが繋がっていて、入力と出力はクラス図の規程通りだが、
実装の処理によって全体の挙動に影響を及ぼすようなことはあってはならない
0677デフォルトの名無しさん
2011/07/19(火) 00:27:46.28いくらなんでもクラス図がコードそのものって意見(愚見?w)は初めて聞いた。
コードそのものというのなら、じゃあ「絶対解読できなない暗号化を行うクラス」
のクラス図か書ければ(たぶんどんなアホでも書ける)即コーディング可能なのか?
ありえない。
0678デフォルトの名無しさん
2011/07/19(火) 00:34:21.13外でも中でもコーディングは必須ですよ
0679デフォルトの名無しさん
2011/07/19(火) 01:25:01.83いわばプログラミングにおける普遍的なテーマみたいなもので、OOに限定した話ではない。
OOPと構造化言語はXORでないって誰かも言ってたが、その通り。
オブジェクト指向はオブジェクトに指向すること。
func( param1 )
のparam1に指向するのがオブジェクト指向。
一方でfuncに指向すれば(制御の)構造化によるC言語的アプローチとなる。
ただそれだけのこと。何処に着目するか、何処に指向するかってだけの話。
考える視点が違うだけで、実際に出来上がるプログラムの構造はほぼ同じだったりする。
だから設計の話をしても意味が無い。ほぼ記述性の違いでしかないから。
問題はほとんどのOOPLがシングルディスパッチであること。
これがOOPLを使うものの頭を日々悪くしている。ある種の洗脳。
馬鹿ご用達ってのはそういうことだろう。
0680デフォルトの名無しさん
2011/07/19(火) 01:52:54.86「1」に「+2」というメッセージを送っている、と説明する人が居るが、
こういった人たちは、昔ながらの「物」中心の考え方をする人か、もしくはOOPに洗脳されてしまった人たちだ。
オブジェクト指向のオブジェクトを物と訳すのも同上だろう。
彼らに共通している過ちは、OOPはシングルディスパッチだと決め付けてしまっていること。
普通の人はこう考える。
「1」と「2」に「+」というメッセージを送り、決定された処理をコンピュータが実行する。
しかし、「1」と「2」にメッセージを送る、とはどういうことなのか。
「1」と「2」それぞれに送るのか。はたまた多段的に送るのか、または、「1」と「2」の結合体に送るのか。
そこで、すぐに無理があることに気づいて考え方を改める。
「+」に「1」と「2」というメッセージを送ると考えた方がより素直だから。
メッセージを受け取った「+」が実際にどういった処理を実行するかは「+」次第と言う訳だ。
述語は一つなのに対して、対象は複数取りうるから、(例 func( a, b, c ) )
一つしかないと分かりきってる述語に指向するわけだ。軸は一つの方が良いからね。
これが正常な脳みそ。
0681デフォルトの名無しさん
2011/07/19(火) 02:13:22.301に対して+2というメッセージを送る?
1がもっている+という機能に対して2を送るって考えるんじゃね、オブジェクト指向の人は
0682デフォルトの名無しさん
2011/07/19(火) 05:03:33.84上はプログラミング普遍的なテーマではないような、C言語がOOPLではないというだけでOOPは可能ということだと思ってたんだけど
あとどうしてシングルディスパッチであることが問題なのかわからないからもう少し説明して
0684デフォルトの名無しさん
2011/07/19(火) 10:25:31.18だってデザパタはよく使われる実装に名前を付けただけなんだもん
アセンブリしか無かった時代に、特定の条件付きジャンプのパターンに「ループ」って名付けたりしてたようなもの
0685デフォルトの名無しさん
2011/07/19(火) 10:44:48.48今それが役立つなんてことがあればそれは20年前の超時代遅れなプログラミングスタイルをとってるプロジェクトということにならぬか
0686デフォルトの名無しさん
2011/07/19(火) 11:10:46.08GoFに変わる現代のプログラミングスタイル教えて
0687デフォルトの名無しさん
2011/07/19(火) 11:11:54.83> 1に対して+2というメッセージを送る?
> 1がもっている+という機能に対して2を送るって考えるんじゃね、オブジェクト指向の人は
いえ、>>680 の後半の主張はツッコミどころ満載ですが、この部分は問題ありません。
実際、アラン・ケイの着想は 1 に + 2 というメッセージを送るというところから始まっています。
くわしくは、The Early History of Smalltalk
http://c2.com/cgi/wiki?EarlyHistoryOfSmalltalk
の IV. 1972-76--The first real Smalltalk (-72), its birth, applications, and improvements
あたりを参照してください。
0688デフォルトの名無しさん
2011/07/19(火) 11:49:38.07そうだな少なくともデリゲートやGenericsは今日では当たり前のように使われてるけど
GOF執筆の時点では一般的なOOP言語のfeaturesとして含まれてなかったよね
0689デフォルトの名無しさん
2011/07/19(火) 11:51:48.380690デフォルトの名無しさん
2011/07/19(火) 16:33:08.39それがデザインパターンに変わるもの?
ただの言語機仕様だと思うんだけど
0691デフォルトの名無しさん
2011/07/19(火) 17:46:24.870692デフォルトの名無しさん
2011/07/19(火) 17:49:50.60それらが増えたことによりデザインパターンの変わりとなる何か新しいものはできたの?
0693デフォルトの名無しさん
2011/07/19(火) 18:28:23.720694デフォルトの名無しさん
2011/07/19(火) 18:28:54.030695デフォルトの名無しさん
2011/07/19(火) 18:40:15.99>>685からの文脈を辿ってくれると嬉しい
GoFのデザインパターンは古くさい → じゃあGoFに変わる物は何?
っていう流れ
それらはGoFに変わる物じゃなくてGoF+αだよね
GoFが古くさいという所以を知りたい
0696デフォルトの名無しさん
2011/07/19(火) 19:47:46.170697デフォルトの名無しさん
2011/07/19(火) 23:39:51.43言語側で、デザインパターンを実装しやすくしましょう。
あくまで実装するのはデザインパターン・・・。
0698デフォルトの名無しさん
2011/07/20(水) 00:44:16.74仕様書にあるものそのままクラスにすればいいと思うんだけど
デザパタってなんか余計な汎用性を混入してない?
んでプロジェクトが長く続いたときにそれが適切な適用じゃなかったときに
最悪なコードになってる場合が多いと思うんだけど・・・
0699デフォルトの名無しさん
2011/07/20(水) 02:14:04.52プログラマーじゃないやつは
およびじゃないよ。
0700デフォルトの名無しさん
2011/07/20(水) 04:52:38.47どんなものでも適切に使わなかったら良くならないだろ
仕様書にあるものそのままクラスにする ってどういうこと?
0701デフォルトの名無しさん
2011/07/20(水) 07:00:06.30多分それら使ったパターンはSmalltalkとかで昔からあったものに名前を付けたものもなるだろう
0702デフォルトの名無しさん
2011/07/20(水) 08:19:18.580703デフォルトの名無しさん
2011/07/20(水) 12:06:38.47OOPは関数とポインタをうやむやにしたが配列はスルーできなかった。
ちなみに固定長配列はdependent typeの元ネタにもなるが今は無視する。
0704デフォルトの名無しさん
2011/07/20(水) 13:02:17.50ひとつは、主にSmalltalkの玉石混淆オブジェクトスープの中から主要なパターンを抽出して分類・命名したこと。
もうひとつは、それらを抽象データ型OO向きの言語(C++)で実装・再利用可能であることを示したこと。
0705デフォルトの名無しさん
2011/07/20(水) 15:10:10.45> 16 of the 23 patterns in Design Patterns were "invisible or simpler" in Lisp
> (for example, because of the power of higher order functions)
0706デフォルトの名無しさん
2011/07/20(水) 16:14:31.09Haskellはデザインパターンよりも酷い
0707デフォルトの名無しさん
2011/07/20(水) 16:30:11.630708デフォルトの名無しさん
2011/07/20(水) 17:21:30.47OOだけを語れば ふるまいの抽象化とメッセージふるいになるんじゃね? ・・・と哲学を語ってみた
0709デフォルトの名無しさん
2011/07/20(水) 17:28:03.43まず 何かを創ること!
まだまだ オブジェクトモデルの構築が現場に生かされていない日本だ 純粋OOの尊師よ がんばれ!
0710デフォルトの名無しさん
2011/07/20(水) 17:32:10.04どこをどう読んだら>>705からその結論になるのか
0711デフォルトの名無しさん
2011/07/20(水) 18:01:01.68C++のtemplateの元ネタはC言語のマクロだ。
#define swap( type, a, b ) { type tmp; tmp=a; a=b; b=tmp; }
とかな。
0712デフォルトの名無しさん
2011/07/20(水) 22:15:08.51だから仕様書に使われてる概念や図をそのままプログラムに反映すりゃいいんだよ
そのためのクラスだろ?
一旦Gofにある構造に組み替える必要が俺にはわかんね
0713デフォルトの名無しさん
2011/07/20(水) 22:22:09.15genericsの元ネタはMLや型付きラムダ計算だろう。
0714デフォルトの名無しさん
2011/07/20(水) 22:25:09.970715デフォルトの名無しさん
2011/07/20(水) 22:26:34.390716デフォルトの名無しさん
2011/07/20(水) 22:34:27.60デザパタは戦闘術の型であって戦略じゃないからな。
いくら知ってたところで、オブジェクトDB、オブジェクト辞書、
IOデバイスを1つのプログラム内に構築する時のような
設計の戦略方針にはならないんだよな。
あと、デザパタはC++ベース故か型安全を趣向してる感がある。
型安全を意識せず、単に汎用的な部品を作って高速に
コーディングって方面とはちょっと反する感じがする。
0717デフォルトの名無しさん
2011/07/20(水) 23:04:26.89そのままってなんだw
その概念や図は、現実世界に対してどの程度抽象化されたものなの?
>一旦Gofにある構造に組み替える必要が俺にはわかんね
それはそれぞれのパターンのメリットを理解した上で言っているの?
それともメリットが理解できないと言っているの?
それとも理解しようとしていないの?
0718デフォルトの名無しさん
2011/07/20(水) 23:09:59.61ガンヲタうざい
0719デフォルトの名無しさん
2011/07/20(水) 23:11:43.19ガンダム?になんの関係が?
0720デフォルトの名無しさん
2011/07/21(木) 00:33:27.40いや、だからGofに構造があるように
仕様書に書いてある対象の業務にも構造があるじゃん?
それを一旦Gofに置き換える意味がわかんね
っていうの
そのまま仕様書に書いてある業務(たとえば集荷システムならその概念の説明とかついてるだろ?)を
そのままクラスでその構造を再現すりゃいいんじゃねぇのか?
ファクトリーとか無駄なクラスいらんで
0721デフォルトの名無しさん
2011/07/21(木) 01:29:52.07お前の作るシステムはコボルみたいな
同じようなコードを大量コピペしたものになりそうだなw
たとえば集荷システムなら、仕様書には対応すべき配送会社
すべて書いてあるだろう。仕様書の段階ではこれでいい。
だが実際のコードでは、各配送会社を抽象化し
メインのシステムと連携するアーキテクチャが必要になる。
でないと拡張性がなくなり、行き当たりばったりのコードで
人海戦術による開発になる。
効率の良い開発をするための設計。そのサンプルがデザインパターンで、
これは仕様書レベルで書かれることはまずない。
仕様書のクラスをそのままコードにしてはいけないのだよ。
だからクラス図はプログラミングの一部であり
デザインパターンのまたプログラミングの一部なのだよ。
0722デフォルトの名無しさん
2011/07/21(木) 05:04:39.19それはもうGoFのデザインパターンを勉強しろとしか言えない
0723デフォルトの名無しさん
2011/07/21(木) 06:03:13.76いや、俺はみやすさのために仕様書とわざわざ一致させる
こうすれば誰がみても仕様書と一致してるんだからわかりやすいでしょ?
わかりやすくするためにわざわざ仕様書と一致させてるの
それをお前等は勝手に違うクラス生成して
仕様にない汎用性を追加して
本当に意味不明なことをするから「なんで?」って聞いてるの
0724デフォルトの名無しさん
2011/07/21(木) 06:30:08.45仕様書レベルで修正するべきだと思うよ
お前が主張する拡張性云々もそこで追加したらいいと思う
仕様書とソースが不一致な状況のがまずいと思う
頑張るフェイズがズレてる
0725デフォルトの名無しさん
2011/07/21(木) 07:07:32.710726デフォルトの名無しさん
2011/07/21(木) 07:15:16.42どちらもお互いに虚勢を張って、口から出任せを言い合ってるようにしか見えない。
(「おれは凄いんだ」と虚勢を貼るのが主目的になってるように見える。その証拠に、具体的なコード例が1行もでてこない!w)
もっと具体的なコード例を出して議論しないと無意味。
(おそらく具体的なコード例を用いて反論すると、お互いに、自分がヘボいことがバレてしまうため、具体的なコード例を避けてるように見える)
0727デフォルトの名無しさん
2011/07/21(木) 07:16:57.11完璧な仕様書は日本語とは思えないほど複雑な構造になる
というパターン
0728デフォルトの名無しさん
2011/07/21(木) 08:30:10.12C++やJavaのような言語特有の問題(>>705)
つまり使ってる言語が悪い
0729デフォルトの名無しさん
2011/07/21(木) 09:34:00.44だからデザパタって話はおかしいよね
0730デフォルトの名無しさん
2011/07/21(木) 09:39:13.66型安全のためということにすればクラスを多めに作っても正当化できるが、
動的言語ではそのような言い訳ができない。
だからJavaが強い。
動的言語やるならオブジェクト指向と全然関係ない方向に進むのが得策だ。
0731デフォルトの名無しさん
2011/07/21(木) 17:06:34.39Javaのような言語ではクラスを作らなくては難しい事も、
クラス作らずに簡単に出来る言語はある
例えばDecoratorパターンなんて本来クラス作る必要は無い
(Javaの例:http://ja.wikipedia.org/wiki/Decorator_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3#.E5.88.A9.E7.94.A8.E4.BE.8B)
import new
class Price(object):
def __init__(self, value):
self.value = value
def getValue(self):
return self.value
p = Price(120)
p.getValue = new.instancemethod(lambda _, f=p.getValue: f() * 2, p, Price)
p.getValue = new.instancemethod(lambda _, f=p.getValue: f() + 80, p, Price)
print p.getValue() # 320
0732デフォルトの名無しさん
2011/07/21(木) 17:37:13.33classを減らそうと思えば0個にもできるのに
Pythonは何がしたいんだ?
PerlにもJavaにもなりたくないなら何になりたいの?
0733デフォルトの名無しさん
2011/07/21(木) 17:43:14.56ただ汎用性を求めるのにクラス作る必要は必ずしも無いってだけ
0734デフォルトの名無しさん
2011/07/21(木) 20:27:15.75大抵の言語はPerlにもJavaにもなりたくないだろ
0735デフォルトの名無しさん
2011/07/21(木) 21:19:50.030736デフォルトの名無しさん
2011/07/21(木) 21:53:37.40マイナスイメージを植え付けたJavaの罪は重いな
0737デフォルトの名無しさん
2011/07/21(木) 22:08:21.36> それをお前等は勝手に違うクラス生成して
> 仕様にない汎用性を追加して
> 本当に意味不明なことをするから「なんで?」って聞いてるの
private関数やローカル変数を作るのと一緒。
その方が作り易くてバグも少なくなるから。
それともお前はそこまでちゃんと書くのか?
書かないだろう?
コーディングしやすいという観点で設計書を書いているか?
書いていないだろう?
もし書いているとしたらデザパタもそこに含まれているはずだ。
(デザパタをかけないならそれは技術不足)
0738デフォルトの名無しさん
2011/07/21(木) 22:15:25.16デザパタを使う理由が拡張性がどうとか言ってたよね?
その時点でもう仕様書変更せずにプログラム組んじゃうのはなんか違うよね?
拡張性を反映した仕様書にしないとダメだよね?
当然工数も違ってくる(増えるんか減るんか知らんけど)
0739デフォルトの名無しさん
2011/07/21(木) 22:15:46.41お前の罪じゃね?w
そうやってマイナスイメージを植えつけてるでしょ。
0740デフォルトの名無しさん
2011/07/21(木) 22:15:52.24確かにクラスは少ないけど
この手法がわかりやすいかと言うとそうでもない気がする
0741デフォルトの名無しさん
2011/07/21(木) 22:29:13.52> 工数も違ってくる
工数自体は別のレイヤーの話だよ。それはコミュニケーションで解決すればいいだけの話。
仕様書を変更する必要があるというのも別レイヤーの話。変更する手続きをとって解決すればいいだけの話。
どっちもデザインパターンを使う理由を否定することにはならないんだよ
技術不足な人が間違って使うのは論外として、デザインパターンを使うのは、
作りやすく修正しやすく拡張しやすく他人と技術を共有しやすく、するためのもの。
もちろんそれで工数がかかるかもしれないよ。
なら、工数を調べた上でどっちにメリットがあるか判断すればいいだけの話。
デザインパターン自体をに否定するものじゃない。
君はデザインパターンを否定しているのではなく「勝手にやるな」といっているだけ。
それよりも実装者が入れた(少なくとも実装者はメリットがあると考えている)デザインパターンを
なぜ最初の段階で仕様に入れることができなかったのかその理由を考えてみたら。
もっと言えば、君はデザインパターンを仕様に入れるだけの技術力があるかを考えてみたら。
俺が書いてないんだから書くな。俺が知らないんだから使うな。それは正当な理由じゃないからね。
デザインパターンを否定するのなら、少なくともそのパターンを使わない理由を言えないとだめ。
まあ開発のやり方としては「俺は上流工程やってるのだからデザインパターンを考える立場じゃない」という
考えもありだろう。なら実装者がやるしかないよね。
0742デフォルトの名無しさん
2011/07/21(木) 22:41:42.21クイックソートとかのアルゴリズムとデザインパターンって何が違うの?
どちらも技法なんだから、アルゴリズムOKならデザパタもOKだとおもう。
だけど、逆に言うと、デザインパターンとかっていう呼び名は要らなかったんじゃ。
そういう意味じゃアホっぽいよな。パズワードって言うんだっけ?
アルゴリズムって言えばいいのにデザパタっていうから変なことになるんだろう。
OOPってそういうのが多い気がする。
0743デフォルトの名無しさん
2011/07/21(木) 22:50:09.51デザパタはオブジェクトデザイン
0744デフォルトの名無しさん
2011/07/21(木) 22:53:27.53一方でアルゴリズムって言葉に嫌悪感を示す人は居ないんだから、
少なからず嗅ぎ分けてる奴も居るってことだよ。
0745デフォルトの名無しさん
2011/07/21(木) 22:57:03.91それに途方も無い価値があるように見せかける
セミナー屋のやり方だよね
ファウラーはこの手法で大儲けできたね
0746デフォルトの名無しさん
2011/07/21(木) 22:59:53.06オブジェクト指向こそ、それそのものじゃん。
だって、誰も定義すらよく分からないのにさ。
0747デフォルトの名無しさん
2011/07/21(木) 23:00:02.42デザパタは再利用技法。アルゴリズムは問題解決策。
デザパタ無視してもプログラムは動くが、アルゴリズム無しじゃプログラムは動かん。
アルゴリズムを如何に改良しようと、再利用性には影響ないがデザパタを無視すると再利用性が無くなる。
0748デフォルトの名無しさん
2011/07/21(木) 23:04:05.05アルゴリズムと言っても差し支えの無いようなのも多いが。
0749デフォルトの名無しさん
2011/07/21(木) 23:06:02.66再利用性無視して依存関係バリバリのコードでも同じ事が書ける。
0750デフォルトの名無しさん
2011/07/21(木) 23:08:11.74デザパタにアルゴリズムが存在するとしたら、
非デザパタ適用コードじゃ同じ問題は今まで解決出来なかったて事になるぞ。
0751全部wikipediaから
2011/07/21(木) 23:08:56.52過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し
名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したもの
アルゴリズム
数学、コンピューティング、言語学、あるいは関連する分野において
問題を解くための効率的手順を定式化した形で表現したものを意味する。
オブジェクト指向
オブジェクト同士の相互作用としてシステムの振る舞いをとらえる考え方
オブジェクト
関連するデータを束ね、代入、演算、手続き(関数やメソッドなど)を介した受け渡しといった
操作の対象にでき、またメッセージの受け手になれる実体
バズワード
一見、専門用語のようにみえるが、明確な合意や定義のない用語
「広義の」とつけると何でもバズワードになるよね
0752デフォルトの名無しさん
2011/07/21(木) 23:10:12.78でもこの名前を付けるというのが大事ともいう
0753デフォルトの名無しさん
2011/07/21(木) 23:11:56.29アルゴリズムは副作用がない
0754デフォルトの名無しさん
2011/07/21(木) 23:13:18.74>オブジェクト同士の相互作用としてシステムの振る舞いをとらえる考え方
考え方ってのが凄いね。思想みたくなってる。
これが技術用語ってんだから、ソフトウェア界は緩いよなぁ。
0755デフォルトの名無しさん
2011/07/21(木) 23:16:05.29あくまで解法の実体を形容した言葉だから。
0756デフォルトの名無しさん
2011/07/21(木) 23:19:43.02あんだけどんどん特許見たく名前付けられたら、非デザパタ適用コードなんてかけないでしょ。
知らずに使ってたってのは有るだろうが、探せばどれかに当てはまるでしょ。
シングルトン−インスタンスを一つに固定する「アルゴリズム」。
とかでも別に良い気が。
単に新しい用語作って本と名前を売りたかっただけじゃね>デザパタ
0757デフォルトの名無しさん
2011/07/21(木) 23:21:23.78それを使ってOOPの各種原則を議論した試みは無いのか
OOP界隈に漂うゆるふわを取っ払った真面目なOOPを知りたい
0758デフォルトの名無しさん
2011/07/21(木) 23:27:49.70それまでは機能での分割しか意識されなかった
0759デフォルトの名無しさん
2011/07/21(木) 23:30:50.62だから、それはアルゴリズムじゃ無いってば。
アルゴリズムは結果を出さなきゃならない。
D ← F( S )
アルゴリズムを単純化するれば、この関数Fになる。
このFをどう再利用できるようにするかは、アルゴリズムの範疇じゃない。
0760デフォルトの名無しさん
2011/07/21(木) 23:32:09.44いやだからそれはね、
オブジェクト指向−object-oriented で、英語って文型がきっちりしてるでしょ。
SVCとかSVOとか。この「O」がまさにobjectの「O」。
これに着目しなさいってのがオブジェクト指向。
色んな人が色んな事を言うけど、「オブジェクト指向」っていうからには、
ここだけは覆せない。
でも英語の文型ですら、SVOOとかあるわけでさ。
この場合どっちの「O」に着目すれば良いんだろうね。
V(O1,O2)をO1.V()O2とするかO2.V(O1)とするかって悩みは永久について回る。
マルチメソッドにすれば良いんだけど、
そうすると「V」が多態用の分岐テーブル持つことになるから、
あんまオブジェクト指向っぽくないっていう。
0761デフォルトの名無しさん
2011/07/21(木) 23:33:05.17状態の分割じゃなくあくまで再利用性の問題。
デザパタをよく見てみろよ。まぁ、Wikipediaに載ってるヤツは
アホなこと結構書いてるけどな。ダブルディスパッチの例とか最悪だし。
0762デフォルトの名無しさん
2011/07/21(木) 23:34:24.48理解してないことが分かった
状態の分割と再利用性は排他じゃない
0763デフォルトの名無しさん
2011/07/21(木) 23:35:21.60OOの発案者は全くマルチディスパッチを批判してないけどな。
あとオブジェクトが状態を持つ必要はない。結果だけ持ってても十分。
0764デフォルトの名無しさん
2011/07/21(木) 23:37:03.72排他な存在だとは思ってないが、状態の分割とやらは全く関係ないと思ってる。
じゃ君の言う状態の分割って何だい?
0765デフォルトの名無しさん
2011/07/21(木) 23:40:28.40だけど、メッセージとか言い出すと途端に困るだろ?
method( o1, o2, o3 );でマルチメソッドした場合、
メッセージの扱いはどうなるんだ?
どれが受け取るの?全部が受け取るの?誰が処理するの?
実際には処理はオブジェクトではなくコンピュータがする訳で、
その辺の行き違いがあるわな。
分かりやすく例え話をしようとして、微妙な差異から余計分からなくなった
ってのと似ていると思う。
0766デフォルトの名無しさん
2011/07/21(木) 23:40:30.52これを認めた場合、
rand();
はsrand()がどこで呼ばれるか分からないのでrand()の再現性が保証できない。
この不透明さを回避するために
r new = CRand(0);
r.GetRand();
とする。
0767デフォルトの名無しさん
2011/07/21(木) 23:42:59.03であってOO事態とは別問題だよ。副作用の無い言語だとOOを実装できないことになる。
でも副作用のない言語でもメッセージの概念を反映できるから、堂々とOO可能だと名乗ってる。
0768デフォルトの名無しさん
2011/07/21(木) 23:46:30.77実際に関数型(Haskell)で書いてみ
状態なしにはかけないから
それを彼らはモナドと呼ぶけど
0769デフォルトの名無しさん
2011/07/21(木) 23:47:47.27OOは別にオブジェクトが本体じゃないから。
メッセージが与えられて、変化が起きればいいだけの話。
メッセージがOOのコアで、オブジェクトは二の次。
0770デフォルトの名無しさん
2011/07/21(木) 23:48:16.190771デフォルトの名無しさん
2011/07/21(木) 23:50:14.81だから、>>765の場合、メッセージが誰に与えられるんだ?って聞いてるんだが。
0772デフォルトの名無しさん
2011/07/21(木) 23:53:11.49別にHaskellにこだわる必要も無いだろうに。
引数にオブジェクトを受け取って戻り値で変更を加えたオブジェクトを返せばいいだけじゃん。
0773デフォルトの名無しさん
2011/07/21(木) 23:54:43.39誰かはいらないんだって。
0774デフォルトの名無しさん
2011/07/21(木) 23:55:15.110775デフォルトの名無しさん
2011/07/21(木) 23:55:59.660776デフォルトの名無しさん
2011/07/22(金) 00:00:08.82言ってることが次第にしどろもどろなんですけど。
>メッセージが与えられて、変化が起きればいいだけの話。
「与えられて」って発言しといて、誰に与えられるの?って聞くと、誰かはいらない、と。
う〜ん、悟りですね。
0777デフォルトの名無しさん
2011/07/22(金) 00:07:50.29最終的に満たすべき条件(P)っていうのがあるよね、まぁ仕様ともいうけど
その一部を満たすコード辺が沢山あると仮定して、それらが満たす条件を適当に組み合わせてPが満たされるとしたときに
Pを適当な単位に分割する事ができると考えられるよね
その分割した単位をオブジェクトと呼ぶのはどうだろうか?
0778デフォルトの名無しさん
2011/07/22(金) 00:11:13.420779デフォルトの名無しさん
2011/07/22(金) 00:11:20.04拡張性?再利用?
やれば?
ただし、仕様書に明記した上でな
0780デフォルトの名無しさん
2011/07/22(金) 00:14:27.86状態にメッセージを送ってるとでも言えば満足かい?
それが解ったところで何も変わらないけど。
0781デフォルトの名無しさん
2011/07/22(金) 00:15:56.77自慢げに敗北宣言w
0782デフォルトの名無しさん
2011/07/22(金) 00:16:32.63実装に癒着した設計書って・・・。
詳細設計書でもそんなこと書かんぞ。
DB使うのにいちいちクエリの構文について書いてるぐらい馬鹿げてる。
0783デフォルトの名無しさん
2011/07/22(金) 00:17:59.41これで君は何かを得られたらしい。
おめでとう。
0784デフォルトの名無しさん
2011/07/22(金) 00:18:44.860785デフォルトの名無しさん
2011/07/22(金) 00:23:07.97はぁ?
拡張性と汎用性のための構造が入ってんだろ?
これが明記されなくてなにを書くの?
明らかにこれを入れるために生成されたクラスがあるんだよね?
0786デフォルトの名無しさん
2011/07/22(金) 00:27:22.88なんか凄くあおられてるけど、あおってるのは俺(>>776)じゃない。
俺とお前の考え方は似てると思うよ。
ただ、それだったら、俺はオブジェクト指向ではなく、述語指向って言えって思うけど。
オブジェクト二の次で、メッセージ主体なんでしょ?述語指向だよね。
0787デフォルトの名無しさん
2011/07/22(金) 00:54:54.88別にそう言ってもいいんじゃない?
もともと、OOなんてアランケイと禿が別の観点で言い出してて、
その時点でズレてるわけだし。
0788デフォルトの名無しさん
2011/07/22(金) 00:59:02.30詳細設計書なんてプログラムの外から見た内容しか書かんだろ。
どのタイミングで実際にファイルを移動するとか、
どういうプロトコルを用意するとか。
出力データの基盤となるアルゴリズムは何を使うとか。
並列で動かすとか。
0789デフォルトの名無しさん
2011/07/22(金) 01:07:08.650790デフォルトの名無しさん
2011/07/22(金) 01:09:29.01普通そこまで具体的な内容は、ソースのコメントか、
プログラマー同士のメモじゃね?
メモって言っても、正式な文章じゃないってだけで
ある程度体裁がまとまってるけど。
0791デフォルトの名無しさん
2011/07/22(金) 06:07:43.41述語指向っていわゆる手続き型とは違うの?
述語を関数名にすれば完成だよね
それに対象物というものが加わったのがオブジェクト指向プログラミングでしょ
0792デフォルトの名無しさん
2011/07/22(金) 06:20:22.15クラス図に書いてあるけど、それでは満足できないの?
あとは仕様書にクラスの説明が書いてあれば問題ないでしょ
何を求めているのかがまったくわからん
変更されるであろうところをカプセル化して、汎用部品にすることに納得できてないの?
理解してないならそこまでは勉強しろ
理解しているなら具体的にその構造のどこに納得いかないのか教えてくれ
0793デフォルトの名無しさん
2011/07/22(金) 08:29:03.48ちがう
0794デフォルトの名無しさん
2011/07/22(金) 08:42:59.74・関数:副作用無し、戻り値有り
・メッセージ:副作用有り、戻り値無し
だったんだけど、関数概念が拡張されて(副作用を許したり)
メッセージも表現出来るようになっちゃった
0795デフォルトの名無しさん
2011/07/22(金) 08:48:54.940796デフォルトの名無しさん
2011/07/22(金) 08:55:50.380797デフォルトの名無しさん
2011/07/22(金) 08:59:49.430798デフォルトの名無しさん
2011/07/22(金) 09:05:36.01これ↓なんか、Smalltalkにおいてメッセージというものの介在を実感できる良い例だと思う。
ぼくがSqueakかじって結構衝撃的だったのは、「メソッドの定義なんかあとで書けばいい」
「呼んだ瞬間デバッガが怒るからそのときに実装をにょろにょろ書く」
「ていうかコーディングはデバッガの中でするもの」ってスタイルだった。
http://twitter.com/naru0ga/status/93859324388057089
0799デフォルトの名無しさん
2011/07/22(金) 09:10:27.11「関数の定義なんて後で書けばいい、関数呼び出しした瞬間デバッガが怒るから」
って言えるじゃん
0800デフォルトの名無しさん
2011/07/22(金) 09:16:33.04確かにSmalltalkは画期的だね。
妥当な処理構造が最初はサッパリ判らない未解決問題に対しては特に強力。
0801デフォルトの名無しさん
2011/07/22(金) 09:23:56.760802デフォルトの名無しさん
2011/07/22(金) 09:33:12.88デバッガが役に立つ、という意味ではそのとおり。
但し、処理構造の実績が無い種の問題の場合は、曖昧な構築を許容してくれる言語がありがたい。
0803デフォルトの名無しさん
2011/07/22(金) 09:36:07.550804デフォルトの名無しさん
2011/07/22(金) 09:36:26.520805デフォルトの名無しさん
2011/07/22(金) 11:05:50.34関数定義がぬるぽである事がなぜ衝撃的なのかというと
変数と関数をまったく別のものとして扱っているから。
変数なら、たとえ中身がnullでもメッセージ云々という話にはならない。
0806デフォルトの名無しさん
2011/07/22(金) 11:33:18.09> 変数なら、たとえ中身がnullでもメッセージ云々という話にはならない。
そうだろうか。IoやJavaScriptの始祖であるSELFは変数へのアクセスも
メッセージング(メッセージが嫌いなら動的結合)でやっていたし。
余談だけど、それだと効率が悪いっていうんで、JITとかの最適化などで高速化した成果が
その後、Javaの高速化(HotSpot VM)にも大きく貢献したという。
0807デフォルトの名無しさん
2011/07/22(金) 11:36:50.76> 手続き型でも関数型でもインタプリタ処理系なら
ほう。Smalltalk ばりにデバッガ駆動開発ができる処理系があったとは驚きだな。
具体的には何?
ちなみに念のため、Smalltalk は Java がそうと言える程度にはコンパイル型だけどな。
0808デフォルトの名無しさん
2011/07/22(金) 11:52:28.71「呼んだらデバッガが怒るから」なんて理由じゃないってことだろ
そんなことくらい分かれよ低能
0809デフォルトの名無しさん
2011/07/22(金) 12:14:33.51#doesNotUnderstand: というメソッドのデフォルトの振る舞いが例外をあげることであって
この時点ではまだデバッガは起動していないし、まして怒っているわけでもないんだけどね。w
0810デフォルトの名無しさん
2011/07/22(金) 12:59:48.20Smalltalk はそういう用途に使い辛いんだよね。
箱庭で遊ぶだけのおもちゃだからね。だから廃れたんじゃない?
あと開発中にウィンドウ開きすぎwマウス触らせすぎwうぜえwww
0811デフォルトの名無しさん
2011/07/22(金) 13:33:46.540812デフォルトの名無しさん
2011/07/22(金) 21:12:19.54デバッガ駆動開発って
BASICみたいなもんか?w
それともIDEのことか?
0813デフォルトの名無しさん
2011/07/22(金) 21:13:15.610814デフォルトの名無しさん
2011/07/22(金) 22:04:43.42>>807みたいな大口叩く程だからもっと凄い機能のはず
0815デフォルトの名無しさん
2011/07/23(土) 00:18:05.39コンパイルしてエラーが見つかるより
実行して見つかった方が良いという宗教だよ
0816デフォルトの名無しさん
2011/07/23(土) 00:50:02.29もちろん、ご指摘の既存のコードの変更や続行は当然として、
例えば Program というクラスも start() という staticメソッドも何も定義されていない状態で
おもむろに Program.start() という式を評価実行してデバッガーを起動、そのままその流れで
必要であると指摘されたクラスやメソッドを都度、適宜新規に定義して続行、という操作を
繰り返してゆくと、組みたいプログラムが組めているとかそんな感じです。
0817デフォルトの名無しさん
2011/07/23(土) 00:54:17.870818デフォルトの名無しさん
2011/07/23(土) 00:56:27.30関数型信者の全く逆方向だな
0819デフォルトの名無しさん
2011/07/23(土) 01:09:08.06まあ、デバッガ駆動開発とかSmalltalkの動的性の例ってだけで半分はネタだから。
なじみのイデオムやパターンだけで組めそうなときは、たまに流れでやっちゃうけどね。
0820デフォルトの名無しさん
2011/07/23(土) 01:15:20.01例えば Program というクラスも start() という staticメソッドも何も定義されていない状態で
おもむろに Program.start() という式をバッググラウンドコンパイルして、
エディタ上にでている関数未定義のエラーの箇所のコードを書いていくのと何が違うの?
0821デフォルトの名無しさん
2011/07/23(土) 01:38:23.59コール時の環境を再現(というかそのものだけど)できる。
そのため、たとえば静的に解決可能なシグニチャの不整合だけじゃなく、
副作用による想定外の事象もシミュレート(てかそのものry)できるとかが違うかな。
0822デフォルトの名無しさん
2011/07/23(土) 01:45:54.50ファイルやデータベースなどへの書き込みなので
そればかりはコール時の環境を再現したところで
意味ないんだけどな。
それ以外は再実行すればいいだけの話だし。
0823デフォルトの名無しさん
2011/07/23(土) 05:47:38.73ヒューリスティックではあるが宗教ではないぞ
型を使う方法も、型エラー以外のエラーは見つけられない一種の近似アルゴリズムだし
それを近似ではないと思い込む人がいると逆に面倒臭い
0824デフォルトの名無しさん
2011/07/23(土) 09:07:46.03たしかにコンパイル通るまでデバッグモードに入れないけど、
コンパイル通らないレベルじゃコールスタックとか見る必要無い
0825デフォルトの名無しさん
2011/07/23(土) 09:56:05.49一番痛いのは、完璧ではないから無駄だと考える人だろう。
人間に時間が無限にあれば別だが、そんなことはありえないので
いろんな技法・コンピュータを使い、エラーを人間ではなく
コンピュータに見つけてもらうように、様々な対策をする。
そうやっても完璧にはならないと、全部人間がやるというふうに
極端な結論を出すやつが一番痛い。人間がやったって完璧にはならんだろうにな。
0にならなくとも、人間の手間は減らしたほうが楽。
0826デフォルトの名無しさん
2011/07/23(土) 09:57:32.890827デフォルトの名無しさん
2011/07/23(土) 10:50:24.15結論は出さないで様子見すればいいんだが
結論は早いほうが良いなんて誰が言った?
0828825
2011/07/23(土) 11:24:50.68少なくとも俺は言ってないが、
本当に誰が言ったんだ?w
0829デフォルトの名無しさん
2011/07/23(土) 12:59:20.68そこはちょっとSmalltalk、というかメッセージングの(メッセージのメタファが嫌いなら
徹底した動的結合の―)パラダイムは特殊で、コンパイルといってもリンクは実行時の
ぎりぎりまでする気がないので、メソッド単位で本当の意味でインクリメンタルなコンパイルが
通るようになっています。だから次にコールするメソッドがまだなくても、コールするまでは
普通に実行できるわけです。このデバッガー駆動開発を、メッセージと普通の関数コールとで
何が違うかの端的な例として出したときの意図はそれでした。
0830デフォルトの名無しさん
2011/07/23(土) 13:33:29.63そもそも実装がないのなら、その関数の呼び出しを
コメントアウトでもしていれば済む話だろう。
0831デフォルトの名無しさん
2011/07/23(土) 13:41:30.87ものすごくシンプルに実装できるとか、は嬉しいうちには入らないですかね。
0832デフォルトの名無しさん
2011/07/23(土) 13:46:47.83間違った処理を途中まで動かしておいて、
その処理を途中で変更したのに、続きから
再開できることは殆ど無い。
どうせユニットテストのためのコードを書くので
何度でも簡単に最初から再実行可能なものができあがる。
だから嬉しくない。
0833デフォルトの名無しさん
2011/07/23(土) 13:49:42.79次スレですよ。 おっさんども!
0834デフォルトの名無しさん
2011/07/23(土) 13:58:26.86ホットデプロイとか興味ないん?
0835デフォルトの名無しさん
2011/07/23(土) 14:25:50.90ホットデプロイは遅くて面倒。
あれはデバッグ時に最終的な手段として使うもので、
通常の開発時はウェブサーバーしなくていい方法で
個々のパーツで開発作成テストしていく物。
状態が不確定のところから実行してもテストにはならん。
なんども最初の状態(どういう状態であるか分かっている所)から
やり直せることが重要。
0836デフォルトの名無しさん
2011/07/23(土) 14:39:31.63なんか自分のTDDに対する違和感の出どころがちょっとわかったようなきがした。
0837デフォルトの名無しさん
2011/07/23(土) 15:13:13.15ボトムアップなやり方を組み合わせて開発する
トップダウン的なやり方を使うときはアプリ全体の構造、
どういうパーツをどう組み合わせてなどの設計の部分。
この段階では、各パーツは完成していないので動かないし動かす必要もない。
だから関数呼び出しなんてただの日本語コメントで十分。
その後でボトムアップで各パーツを作る。各パーツはテストしやすいように
単体で動くように作る。テストコードからパーツを呼び出しテストをする。
そして関数は完成。そしたら、それをコメントの部分に組み込んで統合する。
この時の統合用のコードは最小限になるようにする。
このやり方が一番早く安全に作れるし、そしてこのやり方をする限り
「動かしながら書く」というやり方にはメリットを感じられなくなる。
ブラウザ(ウェブアプリの場合)や、GUIを人間が操作しながらテストをするやり方は、
人間が操作する時間の分遅いし、また最初からやり直すためにスタート地点から
同じ操作を何回も繰り返すはめるなる。普通のプログラマならストレスを感じるはずだ。
0838デフォルトの名無しさん
2011/07/23(土) 16:12:32.27ただアラン・ケイ的にはちょっと違ってて、どうせ完成なんかしない&設計なんて後から変わるんだから、
動かしながらやれるようにしようよ、って。そんな風に作られているのが(暫定ダイナブックOSとしての)Smalltalk。
おそらく、それが活きてくるシステムの規模とか運用スパンとか、そもそも問題領域が違うのだろうなとも。
0839デフォルトの名無しさん
2011/07/23(土) 16:31:19.96アラン・ケイの時代はOSというものがまだ確立されてない時代で、
smalltalk一つでOS含めた環境全体をつくろうとしていた。
アプリはシステム全体のプラグイン的な扱いだった。
その時の感覚の「動かしながら」というのは、
今で言うならOSを動かしながらアプリを作るということ。
OSを再起動しないで新たにアプリを作って起動しようという意味。
0840デフォルトの名無しさん
2011/07/23(土) 16:43:09.49今でいうなら、OSを動かしながらそのOSを作り続けるということ。
OSを再起動しないで新たな設計で一部、あるいは必要なら根幹をも組み直してなお
動作を続けられるという意味。
「ソフトウェア工学」は矛盾語法か?
http://metatoys.org/oxymoron/oxymoron.html
0841デフォルトの名無しさん
2011/07/23(土) 17:13:00.460842デフォルトの名無しさん
2011/07/23(土) 17:31:43.12作り始めるときは、その時点で適切だと考える設計とか仕組みとかがあるはず。
ただ、ケイが指摘するのは多くの場合、特にシステムの規模が大きく、製作や運用が
長期に及ぶ場合、当初の考え方の通りにはいかないことがあるってこと。
そんなときに、間違えた じゃあ最初からやり直しって訳にはいかない局面もあるって話。
0843デフォルトの名無しさん
2011/07/23(土) 17:38:18.88shiroさんが最近書いてたこんなのならどうだろうか。
動的型のメリットは「決断の遅延」かもしれない
http://blog.practical-scheme.net/shiro/20110719-dynamic-typing
0844デフォルトの名無しさん
2011/07/23(土) 17:44:41.65プログラムは完成してなくてもβ版やバージョンアップって普通にあるし。
静的でビルドアップ的な開発ができないかというとそうではないし。
0845デフォルトの名無しさん
2011/07/23(土) 18:09:40.64そん時は時間があるのなら、
新しい設計のものに作り替えればいいだけでしょ?
時間とか金額とかそういう話はあるが、
技術的に言えばそれができないものは無いはずなんだが。
0846デフォルトの名無しさん
2011/07/23(土) 18:11:14.140847デフォルトの名無しさん
2011/07/23(土) 18:18:08.180848デフォルトの名無しさん
2011/07/23(土) 18:40:58.94満足した?
0849デフォルトの名無しさん
2011/07/23(土) 18:43:14.66アプリを動かしながらアクロバット的に
コードを変えていく。
なんてことする必要あるのか?
まあ修正するときに絶対バグを入れないと
自信があるのなら、動かしながらやってもいいが、
普通は一時的にサービス停止して入れ替えるでしょ。
0850デフォルトの名無しさん
2011/07/23(土) 18:48:03.75機能拡張するときにとめずにできるんならやりたいでしょ。
Erlangはそういうの売りにしてた気が。
0851デフォルトの名無しさん
2011/07/23(土) 19:10:16.07いや、そういう場合は別で作っておいて、
完成してリリースするときに切り替えればいいだけだから・・・。
0852デフォルトの名無しさん
2011/07/23(土) 19:15:49.91クラスタですか? もし、そういう事がごく普通にできる処理系があったとして
どんなメリットがありそうか、とか。もっともそれがシステムとしてのSmalltalkが
かつて目指したところなわけだけれども。
0853デフォルトの名無しさん
2011/07/23(土) 19:24:09.95(他の方法で代用できる)っていい例だな。
0854デフォルトの名無しさん
2011/07/23(土) 19:34:25.95WINPなGUIしかり、MVCとかのAPIのOO設計しかり、コピペとか右クリックとかの操作体系しかり。
0855デフォルトの名無しさん
2011/07/23(土) 19:38:29.14ソフトウェアというのは人間を楽にするために
人間が作っているということを忘れてはいけない。
そう考えるとむしろそっちが本質かもしれんな。
0856デフォルトの名無しさん
2011/07/23(土) 19:47:42.310857デフォルトの名無しさん
2011/07/23(土) 20:42:48.90だから真理は立ち去ってしまう。不思議なことだ。” - 禅とオートバイ修理技術
0858デフォルトの名無しさん
2011/07/23(土) 20:50:09.560859デフォルトの名無しさん
2011/07/23(土) 21:10:56.750860デフォルトの名無しさん
2011/07/23(土) 21:21:17.290861デフォルトの名無しさん
2011/07/23(土) 21:22:37.74新旧二つ起動して
切り替えればいいって話だったと思うが?
0862デフォルトの名無しさん
2011/07/23(土) 22:11:45.19お前等本当にこのネタ好きだなwww
まあメッセージが云々みたいなオブジェクト指向ポエムより面白いのは認める
0863デフォルトの名無しさん
2011/07/23(土) 22:13:50.510864デフォルトの名無しさん
2011/07/23(土) 23:57:22.39これねー。読んでると鵜呑みしそうになるんだけど、ちょっと違うと思う。
要は、システムってのはインターネットみたいなもので、メッセージを投げ合って
協調動作する生態系のようなものだ、って書いてある。
だけどそれはハードウェアの仕様からそうなったってのもあるだろ。
コンピュータは直接他のコンピュータの中を覗くことは出来なんだから、
特定のプロトコルでメッセージを投げ合ってコミュニケートする他ない。
だからどうやっても神の視点は持てない。
一方でCPUに目をやると、例えば足し算するにしても、
足される二つのオペランドが両方レジスタに乗ってる丸見えの状態でないと
計算できない。
だからどうやっても神の視点「しか」持てない。
インターネットのサーバのプログラムは、古典的なC言語で書かれたりするわけでさー。
0865デフォルトの名無しさん
2011/07/24(日) 00:08:09.85マルチプロセスで協調動作しているようなシステムは、
まさにオブジェクト指向的だし、生態系的なんだけど、
その中のプログラムにまでそのモデルを適応するってのは違うと思う。
CPUは神の視点でしか計算できないし、オブジェクト指向のようなものでもないから。
一辺倒なモデルでは対応できない。
どのレイヤーで切り替えるのかって問題が付いて回る。
典型的なUNIXのシステムだと、プロセスは構造化的にC言語で書いて、
それ以上のレイヤーのプロセスとプロセスのコミュニケートには、
ソケット使ったりするよね。
0866デフォルトの名無しさん
2011/07/24(日) 00:23:10.260867デフォルトの名無しさん
2011/07/24(日) 00:26:56.29神の視点の話があるから>>840?
>その中のプログラムにまでそのモデルを適応するってのは違うと
まあ「全てのアイデアの為のモデルとモデリング」でケイ自身も「極端なアイデア」だと
のっけからことわっているからねぇ。でも、あえてこうした極端アイデアの適用があったからこそ、
古くはGUIやデザパタ、最近ではTraitsやClassboxesが培われたのがSmalltalkでありえたわけで。
全部がそうあるべきではないにせよ、そういう極端なシステムもあっていいじゃないかと。
0868デフォルトの名無しさん
2011/07/24(日) 05:37:13.290869デフォルトの名無しさん
2011/07/24(日) 09:16:32.980870デフォルトの名無しさん
2011/07/24(日) 09:22:44.91知りたいと伝えれば誰でもその中身を教えてもらうことができます。したがって、
送るメッセージが分からないといった状況は(神の視点による特殊な細工さえ無ければ)
想定しなくてよいわけです。
「直接覗き見するのは神の視点、メッセージを介して同意を得ればOK」というスタンス
ですね(ブートストラップ問題はこの際無視します)。
0871デフォルトの名無しさん
2011/07/24(日) 09:55:19.82C++とかJavaでオブジェクト指向を使ってる人はSmalltalkについて誤解しやすいと思う。
Message-Passing Concurrencyが肝。
0872デフォルトの名無しさん
2011/07/24(日) 10:11:01.02ウインドウメッセージのことと考えればいい。
もしくはRESTとかね。
0873デフォルトの名無しさん
2011/07/24(日) 10:31:10.50ただまあ「Concurrency」とまで言ってしまうと実装が追いついてなくて(あくまで暫定実装ゆえに)
かえって混乱を招きそうなので、(というのも、C++はともかくJavaとは使っている仕組みはほぼ変わらないわけなので)
そこは設計者も利用者(プログラマ)も、アクセス演算子など(つまり神の視点)は介在させず、すべてを
例外なくメッセージで行なう「縛り」があると思いなせぇ的世界観を楽しむある種のなりきりプレイだと
考えるのが良いでしょう。この種の縛りを設けることのメリットは>>840などでケイがまとめています。
コードもライブラリの設計も、すべてこの縛りでやってみようよという試み。それがSmalltalkというわけです。
身近な例として、Smalltalkには抽象データ型OO向けの言語にあるクラスはないことになっています。
それはクラスのように振る舞うよう仕立て上げられたオブジェクトにすぎない、と考えるわけです。
(で、実際その感覚に近くなるように実装されています。)
0874デフォルトの名無しさん
2011/07/24(日) 11:06:21.80ただSmalltalkと違い、言語やライブラリ設計者までを巻き込んでいるわけではないので、
あくまでユーザーサイド限定の遊びになり、おのずと(Smalltalkに比べれば)制約も多く、
徹底も難しいものとなります。
当然、同じようなことはSmalltalkのようなメッセージングOO向けの言語で、あえて抽象データ型のOOを
実践しようとした場合にも言えます。C++やJavaでできることに比べれば、意識してそのための仕組み
(例えば private などのアクセス制限や静的型チェックなど)を設けない限り、かなり限定的に
なってしまうのは必然です。
こうしたパラダイムの違いを踏まえておかないと、すぐに言語間宗教戦争が始まってしまいます。
0875デフォルトの名無しさん
2011/07/24(日) 12:45:55.65ローカル変数はレジスタにアドレスを置いて間接参照するよね
アドレスって、なにかをどこかに送る宛先のことだよね
0876デフォルトの名無しさん
2011/07/24(日) 12:49:18.53グローバル変数でも何ら問題はない。
人間のためにプライベート変数というものができた。
0877デフォルトの名無しさん
2011/07/24(日) 13:26:35.810878デフォルトの名無しさん
2011/07/24(日) 13:49:35.44部分型が完璧でないからといってそれが無駄だとは限らない。
0879デフォルトの名無しさん
2011/07/24(日) 14:51:32.240880デフォルトの名無しさん
2011/07/24(日) 16:11:27.53そんなもん考え方次第だろ
明確な定義があるわけじゃないんだから悩むだけ無駄
0881デフォルトの名無しさん
2011/07/24(日) 17:25:56.16違うと思う。
func( obj1, obj2 );
のとき、funcはobj1とobj2を対等に扱う。これが神の視点。神の視点=制御構造視点。
obj1.method( obj2 );
のとき、obj1がmethodを実行する。オブジェクトが処理を実行するから神の視点は存在しない。
0882デフォルトの名無しさん
2011/07/24(日) 18:25:16.85お前の中ではcallerは神なのか?
0883デフォルトの名無しさん
2011/07/24(日) 18:52:20.73C++やJavaなどが得意とする抽象データ型のOOではクラスは型です。
そもそも、抽象データ型のOOではクラスを使って型を定義すればいいじゃん、
というアイデアがもとになっています。ただクラスを型にするといろいろと問題がおこることが
'80年代の終わり頃に指摘され、Javaのインターフェイスのような代替機能が考え出されました。
一方で、Smalltalkなどが得意とするメッセージングのOOでは、クラスは型とは考えません。
そもそもこのパラダイムではデータ型というものをあまり意識しません。すべてがオブジェクトですね。
クラスのような働きをするオブジェクトも存在しますが、1)インスタンスの生成器、2)メッセージの移譲先
という二つの役割を主に担います。
0884デフォルトの名無しさん
2011/07/24(日) 20:03:50.98↓
すべてが型ですね。
こう言い換えるとすっきりくる。
0885デフォルトの名無しさん
2011/07/24(日) 21:09:28.61残念ながら型はファーストクラスのオブジェクトじゃない
0886デフォルトの名無しさん
2011/07/24(日) 21:18:55.990887デフォルトの名無しさん
2011/07/24(日) 21:33:36.47でも他の処理系と違って型(インターフェイス)を勝手実装して導入することは簡単。
http://www.ogis-ri.co.jp/otc/hiroba/technical/Squeak4/S4-5-5_1.html
0888デフォルトの名無しさん
2011/07/24(日) 21:43:18.740889デフォルトの名無しさん
2011/07/24(日) 22:58:33.190890デフォルトの名無しさん
2011/07/25(月) 00:37:13.570891デフォルトの名無しさん
2011/07/25(月) 03:14:02.28そうでもしないとやってけないんだろう。
現実主義者とは対極の何かなんだろう。
0892デフォルトの名無しさん
2011/07/25(月) 05:54:04.22現実は記憶しなくてもそこにあるから何も記憶しない人に分かれる
0893デフォルトの名無しさん
2011/07/25(月) 05:54:53.85人間は間違える。だから間違えが起こりにくい仕組みを作る
人間は覚えられない。だから各部分をモジュール化する。
こういうのはオブジェクト指向にとっては必須ではないが、
人間重視だと必須なんだよ。
0894デフォルトの名無しさん
2011/07/25(月) 06:06:31.19それもない気がするな
すごく複雑に1箇所にまとまってるよりは
単純に100箇所コピペで貼ってあったほうが修正しやすいよ
作業見積もりも定量的だから簡単だしね
俺らはマイクロソフトの技術者(ライブラリ開発者的意味で)じゃないんだ
適切な開発手法を間違えちゃいけない
0895デフォルトの名無しさん
2011/07/25(月) 06:23:02.81単純に100箇所ではなくて複雑に100箇所修正することになるから問題なんだろ
0896デフォルトの名無しさん
2011/07/25(月) 09:03:16.16Scala信者とかやってきたらいったいどうするつもりだ?wwww
0897デフォルトの名無しさん
2011/07/25(月) 09:05:34.580898デフォルトの名無しさん
2011/07/25(月) 09:21:16.31やっかいなのはSqueakを薦める信者。これはいただけない。
あんなの両生類のクソを集めただけの価値しかないから。
0899デフォルトの名無しさん
2011/07/25(月) 11:24:04.62そんなのなるわけないだろ
コピペできないじゃん
0900デフォルトの名無しさん
2011/07/25(月) 11:28:38.070901デフォルトの名無しさん
2011/07/25(月) 12:49:19.87Scala信者ってどう痛いの?俺は奴等の恐ろしさを知らない
0902デフォルトの名無しさん
2011/07/25(月) 13:35:16.41みずなんとかさんのことだろう。
TLでScalaをdisったpost 見かけたんだけど、死者を出さないために何回も言ってるんだが、
Scalaな人怒らせると理屈でねじ伏せてくるから気をつけなよホント。複雑って言ったら、
FUDだってキレて鎮圧のためにMatzまで出てきたし…マジでScalaには手を出さない方がいいぞ…
0903デフォルトの名無しさん
2011/07/25(月) 13:41:56.35おれ あれで scalaに興味を持ってたけど覚めちゃった。それでhaskellのほう
やっとります。
0904デフォルトの名無しさん
2011/07/25(月) 15:18:02.21togetterまとめないの?
0905デフォルトの名無しさん
2011/07/25(月) 15:23:42.89Pharoもやっぱりクソ?
http://www.smalltalk-users.jp/Home/gao-zhi/dai32kaismalltalkbenkyoukai
0906デフォルトの名無しさん
2011/07/25(月) 18:02:30.57http://togetter.com/li/164700
どんなのかしらんが
0907デフォルトの名無しさん
2011/07/25(月) 18:23:46.37>1.汎用言語はスケーラブルでなくてはならない。
>同じ概念で、小さいプログラムも大きなプログラムも記述できるべきである。
あー俺これダメだわ。性に合わない。
プログラムの構造はハードウェアの構成の影響をモロに受けるから、
スケーラブルなんて意識するだけ無駄だと思う。
というか、現実世界にスケールしろよって思う。
メモリに載り切らないのなら、メモリマップ使うだろうし、
RDB使うのなら、それ相応の制限も受けるし、
そんなの現実世界にスケールしてはじめて決まること。
0908デフォルトの名無しさん
2011/07/25(月) 18:31:20.11レジスタ→キャッシュ→プロセス空間固有の仮想メモリ→物理メモリ→ハードディスク→ネットワーク
こんなだぜ?
>同じ概念で、小さいプログラムも大きなプログラムも記述できるべきである。
なんて言われてもなぁ。
受ける制限が粒度粒度で異なるのに、同じ概念で記述「するべき」である、とか、ねぇ。
「した方が良い」、ならまだかわいげもあるが。
教授様はこれだから困る。
0909デフォルトの名無しさん
2011/07/25(月) 18:48:54.02まるでガンダムのプラモデルを見せられているよう。
確かにあのスケールならプラスチックの材質で自重を支えられるだろうが、
実スケールだと無理だろう。構造や材質を変える必要がある。
プラモデルですら、スケーラビリティーなんて無いんだよ。
軽トラをそのまま拡大しても10トン車にはならない。
周りの環境までひっくるめて拡大される訳ではないからね。
重力加速度とかは大きかろうが小さかろうが一定な訳で、
スケール変えるとその辺の係数がずれてくる。
プログラムも同じで、プログラムのモジュールが拡大縮小出来ても、
環境まで、つまり、ハードウェアまで拡大縮小する訳ではないからね。
まーそこが飯の種でもあるわけで。
0910デフォルトの名無しさん
2011/07/25(月) 19:09:42.49scalaスレがあるからあっちでかいてみ〜。>>902の意味が実感できるかも
0911デフォルトの名無しさん
2011/07/25(月) 19:32:27.29http://hibari.2ch.net/test/read.cgi/tech/1307416864/
0912デフォルトの名無しさん
2011/07/25(月) 19:40:09.210913デフォルトの名無しさん
2011/07/25(月) 20:24:51.32>>902は真実だった
0914デフォルトの名無しさん
2011/07/25(月) 21:00:36.740915デフォルトの名無しさん
2011/07/25(月) 21:16:16.070916デフォルトの名無しさん
2011/07/25(月) 21:44:10.56> 構造や材質を変える必要がある。
プログラミング言語でその「構造や材質」に相当するのは何?
0917デフォルトの名無しさん
2011/07/25(月) 23:03:38.960918デフォルトの名無しさん
2011/07/25(月) 23:17:49.29必要なものがネットワークの向こうに有るから、直接は読めないなぁとか、
まともな時間で応答できないから前処理が必要だなぁとか、
こういった問題は、現実世界にスケールを合わせて、初めて浮上してくる。
だから、
>同じ概念で、小さいプログラムも大きなプログラムも記述できるべきである。
「べきである」なんてことは無い。
せいぜい「そうだといいなぁ」程度の話。
でも、そうならないから、飯の種になってる。
ソフトウェア業界だけじゃなく、全ての業界でそう。
現実とのすりあわせで皆飯食ってる。
0919デフォルトの名無しさん
2011/07/26(火) 06:32:53.81そのべきとかそうだといいなぁっていうのは原文かわからないとなんともいえないかと
訳のニュアンスによる
0920デフォルトの名無しさん
2011/07/26(火) 08:37:34.04言語ごと換える必要無いがな
そりゃ、言語の記述力が低くて上手くアルゴリズム/データ構造を
定義できないなら換える必要あるかもしれんが、
Scalaが他言語と比べて殊更disられる必要があるほど低いのかい?
少なくともJava辺りと比べりゃマシなんじゃないの?後発言語なんだし
0921デフォルトの名無しさん
2011/07/26(火) 18:29:15.01ところで 学校でOOPって授業で教えるの?
0922デフォルトの名無しさん
2011/07/26(火) 20:24:12.82うちはJavaは習ったけどOOPとして習ったという感じはない
ただJava文法を習ったという感じ
大半が手続き型と変わらないようなソースを書いて卒業する
0923デフォルトの名無しさん
2011/07/26(火) 21:10:30.45> すべてがオブジェクトですね。
> ↓
> すべてが型ですね。
>
> こう言い換えるとすっきりくる。
型ってのは値の集合だから、
君の言い換えを実行に移すと
「全ての集合を要素とする集合」
ってのを定義しなきゃならないのだが、
そいつは定義しちゃいけないんだぜ。
0924デフォルトの名無しさん
2011/07/26(火) 21:22:47.55nを隠すとラッセルさんがおとなしくなります
0925デフォルトの名無しさん
2011/07/26(火) 21:31:24.18同じ概念で、有限集合も無限集合も記述できるべきである。
0926デフォルトの名無しさん
2011/07/26(火) 21:43:20.900927デフォルトの名無しさん
2011/07/26(火) 22:17:56.830928デフォルトの名無しさん
2011/07/27(水) 10:16:23.66メッセージング型OOPの方が優れているという論調になりがちだけど
本当にそうだとしたら、何故普及しないんだろう?
0929デフォルトの名無しさん
2011/07/27(水) 12:37:29.79適応的なものが普及するとは限らないから、
qwertyキーボードがよく例としてあげられているけど、
あれは、決して打ちやすい配列ではなくて、タイプらインターの
チャタリング防止から作られた配列。それが今まで生き残っている。
それと同じ事なんだろうな。JavaやC++が中心となってしまったわけだからね。
0930デフォルトの名無しさん
2011/07/27(水) 12:45:21.810931デフォルトの名無しさん
2011/07/27(水) 13:24:13.990932デフォルトの名無しさん
2011/07/27(水) 13:37:51.06暫定実装(つまりコスト高でちゃんとは作れない)でありつづけるSmalltalkの存在からも自明だけど
メッセージングの(あるいは、徹底した動的性を目指す)OOは、いろいろな意味でコスト高だから
百歩譲って良い物だと分かっていても簡単には普及しえないはず。たまたまそうしたコストを
度外視できる恵まれたシチュエーションにおいてだけ成果をあげられていて、偶然それを目にする
機会を得た人が褒めそやしたりするから「あれはいいものだ」的な雰囲気を醸すとかそんな感じかと。
他方で、さほどコストをかけずに導入できる部分は、抽象データ型OOのメリットを損なわない、
あるいは、いくらかは損なったとしても最小限にとどめるかたちに変換されて、
それと気付かないだけでそれなりに普及している、あるいは普及しつつあるのではない?
古くはデザパタ、OO設計のGUIやAPIだとか、最近ではアジャイルな手法だとか。
0933デフォルトの名無しさん
2011/07/27(水) 14:01:48.07メッセージング型はマルチパラダイム化しやすいことに意味があるから
純粋なメッセージング型などといったものは普及しない
0934デフォルトの名無しさん
2011/07/27(水) 16:32:49.73メッセージ型のはどういうところが動的で、抽象型はどういうところが静的なの?
smalltalkを一切知らない俺に教えて
0935デフォルトの名無しさん
2011/07/27(水) 18:20:42.79速度と型安全神話じゃね。
Objective-Cなんかはその折衷案を上手いことやってる。
メッセージだらけにすると、コンパイル時に決定できる事を
実行時にやるんでどうしてもRubyみたいに遅くなる。
0936デフォルトの名無しさん
2011/07/27(水) 18:58:36.57発案者であるアラン・ケイが書いたこの文書は読まれましたか?
メッセージングのOOの成果と、特にその動的性やメタ性について
よくまとめられています。
「ソフトウェア工学」は矛盾語法か?
http://metatoys.org/oxymoron/oxymoron.html
もしSmalltalk(Squeak)を引き合いにした例でイメージしにくいところや
抽象データ型のOOPL(文書中では早期結合なシステム)との対比で
わかりにくいところがあったら言ってください。
あと、抽象データ型OOとの違いについて、とくに抽象データ型の考え方とは
一線を画している点(しかし、型システムに反対するわけではないなど)
については、こちらに言及がありますので参考にされるとよいと思います。
Dr. Alan Kay on the Meaning of “Object-Oriented Programming”
http://www.purl.org/stefan_ram/pub/doc_kay_oop_en
0937デフォルトの名無しさん
2011/07/27(水) 19:19:24.740938デフォルトの名無しさん
2011/07/27(水) 19:48:44.26> メッセージだらけにすると、Rubyみたいに遅くなる。
こらこら。Rubyが遅いのは
今の実装にたまたま問題が多いからなだけで、
動的だからといって通常ならあんなには遅くはならない。
事実、Rubyよりはるかに動的なJavaScriptとかでも
普通にRubyからすれば爆速な実装は存在する。
(例えばV8であれば、Cと同じか数倍程度。処理によってはCより速い)
0939デフォルトの名無しさん
2011/07/27(水) 19:53:45.160940デフォルトの名無しさん
2011/07/27(水) 20:05:47.20ただ「動的だから遅い」の例に
無駄に遅いRubyを持ち出すのはやめたほうがいい。
0941デフォルトの名無しさん
2011/07/27(水) 21:03:04.72動的言語は速くできる。
0942デフォルトの名無しさん
2011/07/27(水) 21:24:32.88はwwwwwwwwwやwwwwwwwwいwwwwwwwwwwwwwww
0943デフォルトの名無しさん
2011/07/27(水) 22:11:19.52なんでどのアプリもあんなに起動がもっさりになったの?
0944デフォルトの名無しさん
2011/07/27(水) 22:21:34.660945デフォルトの名無しさん
2011/07/27(水) 22:44:29.37例えばifやswitchといった分岐で実質進路が固定されてる物とかじゃね?
function call(x)
{
for(;;)
{
if(x){・・・・}
}
}
こういうコードだとforの実行中はifが必要なくなる。
どっちかっつうとOOよりJITの話になるとは思うけど。
0946デフォルトの名無しさん
2011/07/27(水) 22:51:07.860947デフォルトの名無しさん
2011/07/27(水) 22:52:50.64ベンチマークサイトを見ると、
http://shootout.alioth.debian.org/u64/benchmark.php?test=all&lang=v8&lang2=gcc
この中で唯一 JavaScript V8 が C Gnu gcc に勝ってるのは
regex-dna で、これは正規表現の性能を計ってる
多分 V8 の正規表現エンジン(C++)の実装が良いんじゃね?
# ちなみにCの方はTclの正規表現エンジンを使ってる
# Tclは正規表現は速いからなw
0948デフォルトの名無しさん
2011/07/27(水) 23:02:36.35strlenは遅いとかqsortは遅いという理屈がある
つまり標準ライブラリと、必死に最適化した別のライブラリを比較するんだ
0949デフォルトの名無しさん
2011/07/27(水) 23:04:42.680950デフォルトの名無しさん
2011/07/27(水) 23:07:00.670951デフォルトの名無しさん
2011/07/27(水) 23:14:46.460952デフォルトの名無しさん
2011/07/28(木) 03:01:12.93オブジェクト指向の場合の話題ですってことを強調したいので
ここに書きます。
たとえばあるオブジェクト($object)があったとして
$object->load()というメソッドは
$objectとは別の新たな$objectを生成すべきでしょうか?
それとも$object自身を変更すべきでしょうか?
同様に、$object->save()を実行したら
$objectの中身を保存すべきでしょうか?
それとも$object->save(値)という使い方をし
値を保存すべきでしょうか?
それとも引数があれば引数の値を保存し、
なければ$objectを保存するようにすべきでしょうか?
0953デフォルトの名無しさん
2011/07/28(木) 03:11:10.970954デフォルトの名無しさん
2011/07/28(木) 05:36:00.28天才進入禁止
0955デフォルトの名無しさん
2011/07/28(木) 06:02:22.930956デフォルトの名無しさん
2011/07/28(木) 06:20:37.39場合による。
loadやsaveしたいのは、そのobject自身のデータなのか、
それとも他のobjectなのかで決めればいいこと。
別の言い方をすれば、loadやsaveの仕方を知っているべきなのは、それを担当する専用オブジェクトなのか、自分自身なのかという違い。
一つの見方として、loadやsaveの処理が必要としている内部情報の多いほうのオブジェクトが、そのメソッドを持つべき。
0957デフォルトの名無しさん
2011/07/28(木) 08:30:39.59Stalinって中間コードとしてCのコードを生成するんじゃなかったか?
0958デフォルトの名無しさん
2011/07/28(木) 12:52:05.50んだ。たぶん人の書いたCコードより速いって意味なんだろう。使ったこと無いけど、読めないコードらしいし。
0959デフォルトの名無しさん
2011/07/28(木) 12:52:42.790960デフォルトの名無しさん
2011/07/28(木) 14:07:02.07cはaから派生。cは要素としてaを持つ
すなわちc' = c.b であり c'.a = c.a.bであるから
c.a = c', c'.a = cとした場合、c.bは循環する
>>952
save,loadの詳細による
0961デフォルトの名無しさん
2011/07/28(木) 14:19:03.38http://www.ibm.com/developerworks/jp/opensource/library/itm-progevo4/index.html?ca=drs-
> Stalinは、標準関数もひっくるめたプログラム全体の依存性解析と型推論を行い、徹底的に最適化されたコードを出力する
0962デフォルトの名無しさん
2011/07/28(木) 16:13:07.02やっぱり普及のネックは型検査かな
動的型アレルギー疾患者は結構多いぜ
0963デフォルトの名無しさん
2011/07/28(木) 16:43:05.970964デフォルトの名無しさん
2011/07/29(金) 11:33:09.83Javaのどこが良いのか分からんけど朗報だね!
0965デフォルトの名無しさん
2011/07/29(金) 18:44:06.43なら推論で良いんじゃね?
0966デフォルトの名無しさん
2011/07/29(金) 21:19:48.41だいたい動的型言語だと、
オブジェクトが〜のメソッドを持ってるときは呼んで、
持ってなきゃ例外投げる、みたいなノリだけど、
これってそもそもシングルディスパッチのときしか通用しないんだよね。
動的型でマルチメソッドしようとすると、
「コレとコレを引数に取る場合はこの関数」って指定しようにも、
そもそも型に名前が付いてないから、指定のしようも無い。
型に名前が無いから実物のオブジェクトを持ってくるしかないんだけど、
ちょっとそれは上手くいきそうに無いよね。
0967デフォルトの名無しさん
2011/07/29(金) 21:58:49.78全部合致するメソッドがある場合だけ呼び出して
それ以外は例外投げりゃ良いじゃん
0968デフォルトの名無しさん
2011/07/29(金) 22:12:09.06シングルディスパッチの場合だと、
obj.method = hoge;
とかで良いけど。
0969デフォルトの名無しさん
2011/07/29(金) 22:14:21.730970デフォルトの名無しさん
2011/07/29(金) 22:19:22.64x,yを引数にfooを呼んだとき、foo_x_yが呼ばれるように指定するにはどうしたらよいんだ?
0971デフォルトの名無しさん
2011/07/29(金) 22:24:33.92def foo(x, y):
print "List"
@multimethod(str,str)
def foo(x, y):
print "String"
foo([],[]) # "List"
foo("","") # "String"
こんな感じで
0972デフォルトの名無しさん
2011/07/29(金) 22:30:13.000973デフォルトの名無しさん
2011/07/29(金) 22:35:55.72何が言いたいのか分からんぞ
0974デフォルトの名無しさん
2011/07/29(金) 22:37:22.20分かると思うけど
0975デフォルトの名無しさん
2011/07/29(金) 22:38:29.48シングルディスパッチだと、
obj.method = method1;
とか出来るから、型名要らないけど、
それはシングルディスパッチ限定の話だよねって。
0976デフォルトの名無しさん
2011/07/29(金) 22:41:50.78どの動的言語を想定した意見なの? 動的のオブジェクト指向なんて
CLOSからRubyみたいなのまであるから、何を想定して何を勝手に
disってるのかよくわからん。
0977デフォルトの名無しさん
2011/07/29(金) 22:48:51.03まぁその上で動く型システムを導入するのは勝手だけど、
それって、静的型をエミュレーションしているだけだし。
やっぱり型名欲しいやってことでしょ。
0978デフォルトの名無しさん
2011/07/29(金) 22:48:51.98えーと、まず>>971のように振る舞うのがマルチメソッドってのはいいな?
あれはxとyの実行時の型によって foo(list,list) と foo(str, str) の
どちらを呼ぶかを切り替えてる
で、例えば次のような関数があれば切り替えられるが、
こんなのを人間が毎回定義するのは馬鹿馬鹿しいよね?
def foo_dispatch(x, y):
if (isinstance(x, list) and isinstance(y, list)):
foo_list_list(x, y)
else if (isinstance(x, str) and isinstance(y, str)):
foo_str_str(x, y)
そこで上の@multimethodというデコレータは関数を内的なレジストリに格納して、
foo_dispatchがやってるような切り替えを自動的にやってくれる
0979デフォルトの名無しさん
2011/07/29(金) 22:49:55.84えっと、動的型って意味じゃなくて、本当に型の無い言語の話か?
0980デフォルトの名無しさん
2011/07/29(金) 22:55:25.10動的型って実行時に型チェックすることか。
型無し言語と勘違いしてた。
0981デフォルトの名無しさん
2011/07/29(金) 22:58:38.12あれで大規模書ける奴は神
0982デフォルトの名無しさん
2011/07/29(金) 23:03:58.610983デフォルトの名無しさん
2011/07/29(金) 23:12:31.90http://hibari.2ch.net/test/read.cgi/tech/1293264747/101-200
0984デフォルトの名無しさん
2011/07/29(金) 23:58:48.30前提にコードを書くわけで、じゃあそのことを
コード上に書いて静的にチェックできるようにしたらいいよね。
という結論になる。
0985デフォルトの名無しさん
2011/07/30(土) 00:17:02.790986デフォルトの名無しさん
2011/07/30(土) 00:31:31.870987デフォルトの名無しさん
2011/07/30(土) 02:12:51.67型がほしいってことじゃないのか?
アヒルという型がほしいんだろ?
0988デフォルトの名無しさん
2011/07/30(土) 02:56:37.21アヒルとして扱っても問題がないことが重要なのであって
欲しいのは型であることじゃない
0989デフォルトの名無しさん
2011/07/30(土) 08:13:53.750990デフォルトの名無しさん
2011/07/30(土) 09:34:04.11アヒルとして扱っても問題がないってことは、
扱う場所には、アヒルとして扱うコードが書かれてるんだろ?
じゃあ、そのコード、オブジェクトをアヒル型変数に代入して
扱っても問題ないよな?
アヒル型変数に代入できるってことは
そのオブジェクトは、アヒル型インターフェースを
持ってるってことだ。
0991デフォルトの名無しさん
2011/07/30(土) 10:08:06.450992デフォルトの名無しさん
2011/07/30(土) 10:25:23.960993デフォルトの名無しさん
2011/07/30(土) 10:42:54.75それが、アヒル歩きメソッドとアヒル鳴きメソッドを持っているってことだろ?
アヒル歩きインターフェースと、アヒル鳴きインターフェースを持っているのと何が違うのさ?
0994デフォルトの名無しさん
2011/07/30(土) 10:51:41.030995デフォルトの名無しさん
2011/07/30(土) 10:58:28.03わっかんない奴だな。
「アヒルなら問題ない扱い」は部分集合だから、アヒル型であったり
そのインターフェイスを全て満足している必要はないんだよ。
処理のたびにそういう部分型をアドホックに定義する手法もあるけれど
どの型の部分型なのかを推論して暗黙のうちに合成・定義してくれる
型システムは一般にはまだ知られてないし、結局いちいち手で書くとなると
それはかなりコスト高になる。
0996デフォルトの名無しさん
2011/07/30(土) 11:05:46.40動的型付けはまだマシだ。 -- アラン・ケイ
http://d.hatena.ne.jp/katzchang/20080807/p2
0997デフォルトの名無しさん
2011/07/30(土) 11:32:20.25型があったとしても、それを知ってなきゃいけないのはcalleeだけで
callerは一切知る必要はない
そうやってオブジェクト間の疎結合を実現するのさ
0998デフォルトの名無しさん
2011/07/30(土) 11:40:29.74> そのインターフェイスを全て満足している必要はないんだよ。
理想と現実ってかんじだなw
現実には、そのインターフェースをすべて満足していることを期待してるんだよ。
アヒルなら、アヒルのように歩いて鳴くことを期待している。
そこにアヒルのように歩くけど、鳴かないものを持ってこられても困るだけ。
アヒルのように歩くだけで十分なら、それだけでインターフェースにすれば良い。
アヒル歩きインターフェースを作ればいいだけ。これがお前の言う部分型だし、
アヒル完全型は、アヒル歩きとアヒル鳴きインターフェースの両方を継承した
インターフェースにすればいい。
0999デフォルトの名無しさん
2011/07/30(土) 11:43:38.40ある型が同時に別の型としても扱えるってことをわかってないんじゃないのか?
静的言語でも、つくろうと思えばアヒルでありカバでもあるオブジェクトも作れるんだが。
callerはアヒルだと思っているが、caller側ではアヒルカバである。
ということも可能なわけで、
こうやってオブジェクト間の疎結合を実現しているのさw
1000デフォルトの名無しさん
2011/07/30(土) 11:44:21.52○callee側ではアヒルカバである。
反論求むw
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。