1 名前:デフォルトの名無しさん mailto:sage [2016/05/30(月) 23:08:42.31 ID:pIEuB3Z3.net] オブジェクト指向に限らず、理由もなく小さく細分化させるのはアホ オブジェクト指向は役割でオブジェクトに分割するものであって 処理で分割するものではない。
369 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:39:40.00 ID:xWVfr+QL.net] >>357 いや知らんわ。 オブジェクト指向に対する日本の貢献なんてないから。 お山の大将乙。
370 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:40:32.42 ID:4VbjelCP.net] >>361 じゃあ他にこの分野で誰を知ってる?
371 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:42:42.54 ID:xWVfr+QL.net] 英語できなさそうだな〜。 コピーするしか脳がない奴の話を聞くくらいなら原書読もうぜ。
372 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:43:19.81 ID:4VbjelCP.net] 名前が出てこない(笑)
373 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:43:23.51 ID:xWVfr+QL.net] >>362 日本人縛りって時点でw
374 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:44:39.14 ID:7emugrZg.net] 特に理由のない誹謗中傷が和田卓人を襲う!
375 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:45:36.21 ID:4VbjelCP.net] >>365 で外国人の名前は?w
376 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:46:21.40 ID:xWVfr+QL.net] 内容で語ろうぜ。 自分で評価できないってバカだよねえ。 そのうえ、プロセスを創造している海外では存在すら知られていない日本人って…。 ださいなあ。
377 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:46:47.14 ID:4VbjelCP.net] じゃあ、内容で語れよ(笑)
378 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:47:04.47 ID:xWVfr+QL.net] >>367 自分でぐぐったら? 英語を知らないから英語じゃぐぐれないの?w
379 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:47:39.12 ID:4VbjelCP.net] >>370 そのセリフ、自滅してね?w
380 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:47:46.41 ID:xWVfr+QL.net] >>369 語ってたじゃん。 俺の質問にお前がさっさと回答してくれやw
381 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:47:53.75 ID:7emugrZg.net] なんでそんなに和田卓人につっかかってんだよw
382 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:48:47.04 ID:xWVfr+QL.net] >>371 あれ、ほんと英語できないんだお前? いくらでも探せるものをいちいち聞くなよ…。バカすぎる。 https://en.wikipedia.org/wiki/Test-driven_development
383 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:48:51.20 ID:4VbjelCP.net] >>372 自分で、その語ってるレスを示せよw あくまで内容を語ってるセリフだ。 内容がないものはだめだぞw
384 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:49:09.65 ID:4VbjelCP.net] >>375 で、それがどうしたの?
385 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:49:26.20 ID:4VbjelCP.net] 間違えた >>374 で、それがどうしたの?
386 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:50:49.44 ID:xWVfr+QL.net] >>373 オブジェクト指向に対する日本人の貢献はないから興味ない。 提唱者あるいはその周辺の人が書いた本を読めるのにわざわざ無関係の奴らの発言に興味を持つのは謎でしかない。
387 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:50:58.39 ID:H1f9Dv2X.net] 関心ごとを明確にして、簡潔に語ろうぜ…
388 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:51:43.97 ID:xWVfr+QL.net] >>375 書いてあるから読み直せよ。 英語だけじゃなくて日本語も読めないのか? 2つくらい質問してるのが回答されないままだな。
389 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:51:52.62 ID:4VbjelCP.net] >>378 和田卓人の話をしてるのに、なんでオブジェクト指向の話になってるんだよw
390 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:52:41.90 ID:4VbjelCP.net] >>380 > 書いてあるから読み直せよ。 普通に書いてないよね? 書いてあるんだったら、それを示せばいいだけのはずだし。 行動が一々、墓穴踏んでるんだよね。お前w
391 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:52:57.05 ID:xWVfr+QL.net] >>377 ちょっとは読めよ。 ヒント Reference ま、お前には無理だから日本人を探してるんだろw だっさ。
392 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:54:52.35 ID:4VbjelCP.net] >>383 そこに書いてあるのは人の名前であって、 お前の意見を代弁しているものじゃないだろう? お前は、誰の名前を持ってきて、 その人は、どういうことを言っているといいたいんだ?
393 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:55:08.57 ID:xWVfr+QL.net] >>382 >>341 >>354 わざわざ探してやったんだから回答しろよ。
394 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:55:30.40 ID:aDP5A1Yp.net] TDDならケント・ベックじゃないの?
395 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:58:50.71 ID:4VbjelCP.net] ついでに英語で検索していったらこんな本見つかったわw xUnit Test Patterns: Refactoring Test Code www.amazon.com/xUnit-Test-Patterns-Refactoring-Code/dp/0131495054 あんた元々何がいいたかったんだっけ? テストはリファクタリングしない?(笑)
396 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:59:34.01 ID:xWVfr+QL.net] >>387 回答になってねえぞ無能。
397 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:01:25.71 ID:gXar6Rt9.net] テストのリファクタリングだけど テストってテストデータの準備、テスト対象の実行、テスト結果の判定の3ステップあって それぞれが単一責任になってるのでリファクタリングはそれぞれを単体で攻めるようにする 必要があればセットアップ用や実行用のユーティリティクラスもつくる 詳しくはxUTPの本を読め
398 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:02:57.32 ID:Sbqo4kno.net] >>389 テストはリファクタリングしない?とか言ってないわ。 w付けてるけどまったく的外れでこっちがwwwwだわw 勝手に妄想して自分の妄想の中で生きてる奴やばいwww
399 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:03:58.19 ID:Sbqo4kno.net] >>389 で、俺がわざわざ探してやった質問に回答してくれるんだろ? 回答は? あれ?無能だからできないw
400 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:05:00.14 ID:ZPhk/eMO.net] >>388 お前が回答しろよw 外国人なら、テストはリファクタリングしないと 言っているはずだっていいたかったんだろ? 外国人の名前持ってきても(それは誰でも出来る簡単なこと) なんの反論にも鳴ってないんだぞ。
401 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:07:01.03 ID:Sbqo4kno.net] >>392 テストはリファクタリングしないなんて言ってない。読み直せよ。 俺みたいにレス番上げてみろよ。 ないからwwwww 妄想ひどいwwwwwwwwwwwww
402 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:07:39.62 ID:EUBySE80.net] 和田卓人知らない奴はモグリと言われて顔真っ赤にしてるからな。 英語文献しか読まないから知らんと言ってるが、この時点で他のサイトに行って確かめるような事なんて何も無いのに、 英語が読める読めないの話に終始。今ID:xWVfr+QLは何を主張しているのか、自分で分かってないだろう。 取り繕い方が絶望的に下手。
403 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:08:28.17 ID:Sbqo4kno.net] >>392 で、お前はテストはリファクタリングしない俺に質問のレスをわざわざ探させた上に 回答できない? ほんとどうしようもない奴だな。呆れたもんだ。
404 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:09:05.57 ID:gXar6Rt9.net] >>391 なんの質問? メソッドが変わった時だっけ? 基本ユニットテストは対象クラスのメソッドに1体1だし 結合テストもテストデータの作成やテストの実行は単一責任のクラスで吸収できるだろ
405 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:10:18.42 ID:ZPhk/eMO.net] テストに興味があるのなら、 和田卓人知らない奴はモグリだろw
406 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:11:03.96 ID:Sbqo4kno.net] >>394 いや、日本人に興味を持つ奴らが不思議でしかない。 提唱者あるいはその周辺の人が書いた本を読めるのにわざわざ無関係の奴らの発言に興味を持つのは謎でしかない。 むしろ日本人の名前あげるってバカ丸出しだと思って見下してるよ。 これ以上方っても無意味でしかないから和田何某関連の書き込みはスルー。 吼えててもバカ晒して恥ずかしがってるJAP笑えるとしか思わないからw
407 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:11:50.36 ID:gXar6Rt9.net] >>391 もっというならOCPを徹底しているならばクラス間の関係がクラス内部の変更によって壊れないはず ただそれはただの理想論なのでなんとか単一責任のクラスで吸収しようとする苦肉の策
408 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:12:18.79 ID:Sbqo4kno.net] >>396 レス番つけてやったんだから分からなきゃ前後を読み直せよ。 お前は無能臭がすごいから説明するの面倒。
409 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:13:09.76 ID:ZPhk/eMO.net] >>398 お前が日本語でこの文章を書いている限り、日本語で 検索しているはずだし、検索に引っかからないわけがないだろw 興味が有るかどうかとは別の話だ。
410 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:15:10.94 ID:Sbqo4kno.net] 俺のほうがすごいって言うなら技術を実感させる回答すればいいのに 俺のほうがすごいって不毛な主張を繰り返している奴らってほんと無能だと思う。 技術者なら技術を感じさせろよ。だっせえなあ。
411 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:15:33.64 ID:ZPhk/eMO.net] 和田さんは日本語でテスト関連のことを調べていれば 必ずヒットするんだよ。 それを知らないってことはテストに興味が無いと言うのと同じこと。
412 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:15:52.46 ID:gXar6Rt9.net] >>400 xUnit使ったことある? もしあるなら>>354 みたいな質問は出ないはずなんだけど 釣り?
413 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:16:02.23 ID:ZPhk/eMO.net] >>402 俺のほうがすごいって言うなら技術を実感させる回答すればいいのに
414 名前:デフォルトの名無しさん [2016/06/04(土) 00:16:33.12 ID:Sbqo4kno.net] 異常な和田連呼まじワロタw
415 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:17:19.91 ID:Sbqo4kno.net] >>404 使った上での疑問。 で、回答は?
416 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:19:41.01 ID:Sbqo4kno.net] お前らの相手してるのアホが移りそうだからしばらく放置するわ。 俺に認めて欲しいなら質問にまともな回答を返してくれよ。 技術的にまともな回答が付いていたらそいつのことは評価するよ。 技術のある技術者は好きだから。
417 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:20:27.20 ID:gXar6Rt9.net] >>407 もしかしてコードが変わったらテストスクリプトも変えるってことか だったら>>396
418 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:21:29.06 ID:gXar6Rt9.net] テストスクリプトって ユニットテストを実行するTestRunnnerのことかと思った
419 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:22:00.25 ID:Sbqo4kno.net] >>409 基本ユニットテストは対象クラスのメソッドに1対1ならメソッドが変わったらテストも変えなきゃだめだろ。
420 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:23:10.14 ID:Sbqo4kno.net] >>410 テストコードだな。 最近スクリプトのテストを書いていたもんで間違った。
421 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:25:12.27 ID:ZPhk/eMO.net] >>408 俺のほうがすごいって言うなら技術を実感させるセリフいえばいいのにw
422 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:25:17.37 ID:gXar6Rt9.net] >>411 変えるよ でもリファクタリングでメソッドが複雑化する方向にはならないでしょ クラスとしての既存の振る舞いは変えないんだから 新たに追加するんだったら 別にTDDとかユニットテストじゃなくてもリグレッションテストやるから一緒じゃない?
423 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:29:02.08 ID:Sbqo4kno.net] >>414 ある奴が「クラスもメソッドもどんどん変える」と言ったからそんなことしたら 工数が膨れるのでは?って話。 インタフェースを変えない範囲に限定して修正するのが基本だと言ってる?
424 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:29:14.32 ID:gXar6Rt9.net] リファクタリングするときは クラスやメソッドが肥大化して単一責任でなくなった時に分離 重複コードをまとめる 必要に応じて依存性の注入くらいかな
425 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:30:46.54 ID:Sbqo4kno.net] >>416 そもそもリファクタリングの話は俺はしてないって…。
426 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:33:36.95 ID:gXar6Rt9.net] >>415 おそらくその「ある奴」は俺のことだと思うけど 「ユニットテストや結合テストによって全体の整合性が保たれてるから 局所的なクラスはどんどんリファクタリングする」くらいの意味 前提条件と言葉がたりなかったね APIというかインタフェースを変えるときはメンバーに相談とかレビューとかしっかりするよ
427 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:37:18.78 ID:Sbqo4kno.net] 俺の理解が足りないのか、言葉使いが不正確なのか分からんがすっきり理解できない。 まず、ユニットテストは一部だけをテストするんだから全体の整合性が保たれる理由になるのが不明。 次に、局所的なクラスはどんどん改修する場合、テストもそれに合わせて改修するんだろ? 認識のずれを生じるとめんどくさいから悪いけどそれぞれについて分けて回答欲しい。
428 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:39:15.95 ID:Sbqo4kno.net] もしかして、局所的なクラスの改修ってメソッドとしての動作は変えない (変えたとしても修正)範囲の修正ってことか?
429 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:40:09.16 ID:ZPhk/eMO.net] >>419 次に、局所的なクラスはどんどん改修する場合、に 他が壊れてないか、どうやってテストするんだって話だろ。
430 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:50:54.06 ID:Sbqo4kno.net] どうも>>420 っぽいな。 その範囲の変更を「クラスもメソッドもどんどん変える」と言うなよ…。 お互い時間を無駄にした。
431 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 00:53:56.58 ID:pn86qigp.net] 微妙なリファクタリング 微ファクタリング
432 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 01:34:22.66 ID:U+sUBqw0.net] 完全に横だが、、、 お前らもうちょっと話を噛み合わせる努力をお互いにしろよなと。 以下はお前らがやり合っている間に俺がググった内容だ。 >>316 の本の内容は、テストコードのデザインパターンだ。 > devtesting.jp/pekema/?0001%2FTopics 要するに、オブジェクト思考が「変更に強い」なら、テストパターンもまた同様に気を使えば「変更に強く」なるって事だ。 TDDは和田卓人本人が認めているように、 > テスト駆動開発に「完壁主義の呪い(完壁な設計を得るまではコードを書けないし良いシステムも出来ないという強迫観念)」を解いてもらってからは > xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E8%91%97%E8%80%85/%E5%92%8C%E7%94%B0%20%E5%8D%93%E4%BA%BA OOPや従来型の「しっかり設計してからコーディング」とはやり方が根本的に異なる。 デタラメでもいいからコーディングし、単体テスト/レグレッションテストの環境を構築してから、 リファクタリングで目的のコードを得ることを目指す。つまり、事前に「完壁な設計」は必要ない。
433 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 01:34:44.80 ID:U+sUBqw0.net] 説明として分かりやすかったのは以下で、まんまそのまま書いてある。長いがそのまま引用する。 > では、どんなときにTDDを採用すべきではないか。 > 筆者の個人的な感想ということをあらかじめ断っておくが、 > 恐らくオブジェクト指向のモデリングを重視して行うプロジェクトは、TDDと相性が悪いだろう。 > というのは、TDDではコードの重複を取り除き、リファクタリングを行っていく過程で、クラスが生まれたり消えたりするからだ。 > 例えば、『テスト駆動開発入門』に出てくる例でも、クラスが生まれたり消えたりする過程が描かれている。 > もし、個々のクラスが存在することに必然性があり、個々のクラスが特定の役割を担うことが期待されるなら、 > コードの重複を取り除く、というような目的のために、クラスが生まれたり消えたりすることは受け入れられるものではないだろう。 > このような問題は、オブジェクト指向モデリングという技法を支持しない筆者のようなプログラマであればまったく問題はないが、 > もっぱらオブジェクト指向モデリングを通してプログラムの構造をイメージする「オブジェクト脳」の持ち主には厳しい制約かもしれない。 > www.atmarkit.co.jp/fdotnet/special/tdd/tdd_04.html
434 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 01:35:25.53 ID:U+sUBqw0.net] TDDと従来型手法のどちらが効率がいいのかはよく分からない。 ただ事実として従来型は「設計」ありきなので、「設計」できない奴はそこで止まってしまう。 或いは意味不明な設計をして無駄が大量発生してしまう。 だからそのレベルに達していない奴なら、 TDDの方が動かしながら設計=必要/不必要なメソッドが分かりやすいので、捗るだろう。 で、言っちゃ悪いが>>1 は達していない。(これは多分みんな思っている) 「設計」出来る奴ってのはつまり、仕様を聞いたらおぼろげながらも「最終コード」が思い浮かぶ奴であって、 必要ないクラスやメソッドをぐちゃぐちゃやっているような奴は駄目だ。 ただ、ある程度「設計」出来る奴が使った場合にどちらが早いのかは分からない。 例えば上記サイト、 function add(x,y){return x+y;} で説明しているのだが、当たり前だがこの仕様なら誰しも最初からこの最終コードに到達できる(=「設計」出来る)ため、 このような状況ではTDDよりも従来型の方が確実に早い。 しかしこれがどこの規模まで行けるかということで、 さすがに最終コード(数千行)を最初からベタ打ちでいきなり動かせる奴なんていないので、 その時にどうなるのかはやってみないと分からない。 ただ、確実に言えるのは、進捗管理はおそらくTDDの方がやりやすいだろう。 >>1 みたいにアホな設計をしていると全部無駄になってしまうが、TDDなら曲がりなりにも着実に進む。
435 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 02:39:38.93 ID:ZPhk/eMO.net] TDDは出来るできないというよりも 慣れの問題なので、どんなにダメな奴でも やろうと思えば出来る。 ただしダメな奴は苦痛になるだろう。 なぜならば、従来は目視でやっていたものを コードで書くから、コードを書くことが苦手な人は苦痛。 そうでない人は面倒さを乗り越えるだけ。 ただ中には長ったらしいコードを書くことが苦痛と思わないやつが居るらしく、 そういうやつにTDDやらせると、通常のコードはもちろん テストコードもコピペだらけでメンテナンス不可能なものになる。
436 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 02:48:16.27 ID:8pa3f3ig.net] 合わせ技というのは考えないのか? 設計段階で大体のところを決めておいてさ というのも大まかにでも分けないと分担作業ができないからね 一人で書く場合でもソースコードは複数に分けるから まず大体にでも分割しないと何もできないよね 細かな部分は実際に書いてみるまで問題が発覚しない場合もあるから その、TDDとかいうのに任せてもよいんじゃね? 究極的には一つの関数の中でだったら、ある程度プログラマの自由なんだから 自分一人で勝手にTDDしても周りに迷惑かけないよね もう少し視点を広げれば、外部に公開しない部分であればTDDでも通用するんじゃないかな そういう意味では俺は君と考え方が全く逆だね 俺は能
437 名前:力が無くても大まかになら設計できるものだと思っている どんなに規模が大きくても、二つ三つに分けろと言われたら、まぁ分けられるでしょう ただ、細部に至って完璧に把握して問題を洗いざらい神経質に取り除けるかというと これは能力がいると思っている 従来型とTDDは別に相反しているとは思わないね 大まかな設計するのは当たり前だし、今書いている局所的なコードの一片に関してはTDD的だろうし ただ、それらがどこで出会うか、どのレベルで扱うかというだけの問題でしょう 一つの考え方だけで全てをこなさなきゃならないわけでもないでしょう [] [ここ壊れてます]
438 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 03:41:02.75 ID:8pa3f3ig.net] 従来型の設計と名指しされている方法は、どう考えてもトップダウンのことだし TDDとかいうのは、とりあえず書けるところから書いていくというのであれば、どう考えてもボトムアップの方法だし すでにこう言った言葉があることからもわかる通り、古くからある考え方で、珍しくもない 飲み会するとき、どこの店に行くかはトップダウン的に決めるが 何を注文するかはその時の気分でメニュー見てから決めるし、「とりあえず」生中っていうのと一緒で 大体の人が勝手に使い分けている 未来のことが大事だから良く考えるってのも分かるし 未来のことは分からないから今できることをするってのも分かる ちょうどよいバランスというものがあるし、中間層のグラデーションの部分が難しい ま、偏る必要はないでしょう
439 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 05:57:33.01 ID:Ux1fTD3c.net] >>353 そのリンク先ちゃんと読んだか? テストのリファクタリングはテストコードを書いた直後の話だし テストの重複の話に至ってはその和田某氏は重複を許容(=リファクタリングしない)って言う発言すらしてるぞ w
440 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 05:59:48.64 ID:Ux1fTD3c.net] >>354 なるけど、それってリファクタリングじゃないよね
441 名前:デフォルトの名無しさん [2016/06/04(土) 06:32:15.41 ID:T5kdlzfl.net] 人の名前を知ってたらオブジェクト指向ができるのかな
442 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 06:39:15.47 ID:QdGQjCl9.net] 32 :まちがって名前消しちゃいました。:2013/04/28(日) 23:55:48.52 ID:??? >>29 自分こそインベーダーさえも作れないんだろ?www どうでもいい言葉の揚げ足取りばっかして 結局口先だけで何にもアップロードできねーじゃんwww お前が古臭い口先だけで何も作れない、絶対的な証拠www 出来るものならアップロードしてみろよ、老いぼれジジイがwww 33 :まちがって名前消しちゃいました。:2013/04/28(日) 23:55:59.93 ID:ikP5EXjcコンソーレの文章中の単語は、コンソーレがいじめを受けた時の単語なわけ、 だからコンソーレが吐き出す単語がすべて、コンソーレ自身に当てはまる。 34 :まちがって名前消しちゃいました。:2013/04/28(日) 23:56:47.74 ID:??? >>31 ハブられてるのはお・ま・え 勘違いするな基地外 35 :まちがって名前消しちゃいました。:2013/04/28(日) 23:59:26.06 ID:??? >>31 なーんで、インベーダーのスクショの画像で 座標がマイナスになっているのかねーーーwwww フォントが切れているっていうか、頭の血管切れてるんじゃねーの?www
443 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 07:55:59.43 ID:n7HRsF8B.net] テスタビリティを追い求めるなら純粋関数の集まりで 機能を構成したほうがいいしオブジェクト指向はそのようになっていない モックオブジェクトやスタブといった複雑なテスト機構が必要になる 1.オブジェクト指向はテスト容易ではない また部分適用がないからインターフェースのシグニチャをどうするかという問題が非常に痛い そのためシグニチャを簡潔にしようとする、引数で状態を渡すという純粋関数的なアプローチを否定せざるを得ない クラスはプライベート変数を多く持ち、アクセサメソッドが必要になる。 プライベート変数をテストするためには.ToStringのオーバーライドがほぼ必須であり、 クラスを作るごとに必要になるであろう。 2.オブジェクト指向はテスト出来る状態にするために行数がかかる なぜならば、ユーザーだけでなくプログラマからみても状態という最も重要な情報が隠蔽されているからだ 何をするにしてもクラスクラスクラス クラスを定義するごとに、そのクラス専属のメソッドを書かなければならない 非常に似ているデータ構造があったとしても、統一的な関数でなく、クラスの「継承」によるメソッドの受け渡しを与儀なくされる 似ているデータ構造は所詮似ているだけで、別個のクラスなのだ 多重継承をサポートしているならいいが、単一継承しかサポートしていない言語にとって 複数のアスペクトからなるクラス構造を書くためにはどうすればよいか?また新たなシンタックスを追加すればよいだけだ 3.オブジェクト指向には再利用性がない クラスというものに単一の役割を持たせるのが好ましいというが、 本当に単一の役割を志向するならば、単一の機能をもった関数のほうがよほど簡潔に書ける クラスという概念そのものが、データ構造とふるまいという複数の役割を持っている オブジェクト指向システム設計という言葉が示唆するもの、それは単なるシステム設計ではないということだ 設計行為というのは性能、機能、品質、保守性といったトレードオフを人の手でバランス調整するということだが、 それは適切なデータ構造を定義し、抽象化された汎用性の高いアルゴリズムを書けば済むことで、 それらを一緒くたにし、SRPに反しているオブジェクト志向という土台が、設計行為の役に立つとは思えない
444 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 08:08:05.81 ID:n7HRsF8B.net] 然るにオブジェクト志向という概念を理解できるかどうかというのは一つのバカの壁だということだ 本来、概念を理解できることが知性の証であるが、オブジェクト志向に限ってはそうではない オブジェクト指向を理解できると主張することのほうが、無知蒙昧の証なのである これは全くの仮構の理論であり、虚構の設計手法であり複雑な土台を軸として、複雑な設計ができる人間などいない 人間の計算資源は限られている less is more 最小限の直交したブロックをうまく組み立てることこそ設計であり、 この複雑なブロックをどうすれば扱えるようになるか?ということに議論の中心が行くということは ただ単に議論がしたいだけで、仕事がしたくはないのだ こういった議論は性能や品質といった極めて常識的かつ合理的な設計対象から目をそらすのにはちょうどいいものだ クラス設計者は、性能を議論できない彼らは設計者ではなく、単にUMLでお絵かきしたい幼児でしかない
445 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 08:26:51.69 ID:n7HRsF8B.net] 設計者と単なる教義に従順な信者かを見分ける方法が一つある それは 「有る目的を実現するために”複数の方法”が思いつくか?」ということだ これは言語を複数またいでいる人間にとっては容易なことだが、言語を一つだけしか知らない人間にとっては厳しい問題になる そしてさらに設計者と信者を見分ける方法がもう一つある。 信者がなんとか複数の方法をでっちあげたとしても、これの答えでわかる。 それは「複数の方法があるとき”どのような基準”でどちらの方法を採用するか?」ということだ。 信者は例えばファウラーのリファクタリングという本にこういうことが書いてあったので、方法Aを採用するというだろう しかし待って欲しい、リファクタリングは矛盾している記述も多い いつ仲介者を介すべきで、いつ仲介者を介さないべきか、あの本でわかった人間はいただろうか。 我々設計者はそうではない、複数の案があるなら、複数の案を試作してみて パフォーマンスや行数を計測し、ただただ設計目標に邁進するだけなのである、 それがオブジェクト志向的か?なんてことには興味が無い。 そういうことを気にする人間はそもそもシステム設計をやるつもりなんてないし、その力量もない その力量もないからこそ、「オブジェクト志向システム設計」という奇っ怪なものにすがってしまう その設計指針が絶対的なものだと考えてしまう さらに言えば、信者はコーディングができないのであろう コーディングができないからこそ、パフォーマンスを計測するという最も単純な評価基準すらもたずに議論に邁進してしまう まあ私も一般的なオブジェクト指向言語でコーディングしろと言われたら拒否する おっくうでおっくうで仕方がない、シンタックスは山盛りで私が望むシステムを記述するためには あまりにも面倒で仕方がない、IDEでなんとかなるものではない だからこそオブジェクト志向主義者はオブジェクト志向言語を使いこなすことはできないだろう 彼らにとっては机上での再利用性が第一で、実際にコードを書くということに興味が無い コードをかいて様々な言語をトライしてみたら、「あっ、これはダメだ」という感覚がわかるだろう コードを書かないから、感覚もないし、自分自身で「テスト」できない、そんな人間がテスタビリティを語る
446 名前:デフォルトの名無しさん [2016/06/04(土) 08:38:02.62 ID:T5kdlzfl.net] テストすることが目的じゃないでしょうに
447 名前:憲法に守られる在日スパイ・創価・ヤクザ mailto:sage [2016/06/04(土) 08:48:09.66 ID:SVOilD6U.net] 皇室の危機に気づいていますか? 日本は、2,000年以上続く皇室のおかげで、世界最古の国として、 ギネス認定されているそうです。 自民党は憲法の改正で、日本の国家元首=天皇陛下と条文に明記することで、 天皇制廃止をもくろむ帰化人スパイ勢力(政党、憲法学者、弁護士・言論人等)から、 皇室を守ろうとしています。 ※イギリス、オランダ、ノルウェー、デンマーク、スペインなどは国王を国家元首と 憲法上に定めている。(日本同様、政治の実権は有さない。) ※日本で支配的な「護憲派」憲法学者の多くは反天皇。憲法から天皇の条項ごと削除したい 人たちなので、本来は改憲派である。(「象徴天皇制度と日本の来歴」坂本多加雄著より) 公明党「天皇は日本の国家元首ではない」 hayabusa3.2ch.net/test/read.cgi/news/1363226509/ 自民党・西田昌司 「橋下さん(おおさか維新)の憲法改正は、国柄を破壊することが目的」(自民とは真逆) https://www.youtube.com/watch?v=sRkdQ2Rlwxs 日本共産党 「目標としては天皇制をなくす立場に立つ」「天皇制のない民主共和制をめざす」 www.jcp.or.jp/jcp/22th-7chuso/key-word/b_1.html#Anchor-0507 反天皇、反皇室で共謀する民主党(現民進党)と田原総一朗 blog.liv edoor.jp/fjae/archives/51968115.html 田原総一朗「天皇は、働かないで国民の税金で食ってる。」 https://youtu.be/6Kd1LwY9e0I?t=280 (4:40〜) ※ただし、自民単独(カルト公明党抜き)で2/3議席以上与えない限り、 野党と公明党に骨抜きにされる。 ↓ 自民・船田氏…「野党・公明党のみなさんと協議し、衆参両院の3分の2をこえる人が 賛成してくれなければ発議はできない。だからこれから大いなる妥協が始まる。 自民の憲法草案は、 ズタズタになると思って結構だ」 hope.2ch.net/test/read.cgi/seijinewsplus/1425226082/
448 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 08:49:06.93 ID:Ux1fTD3c.net] にちゃんで長文書く奴はもれなくバカの法則
449 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 08:57:11.64 ID:n7HRsF8B.net] オブジェクト指向だとリファクタリングということすら「機械的」に処理できないよな リファクタリングを正しく記述してみてよ、間違いなく長文になり、 個人個人によってそのやり方、ニュアンスが微妙に違い、 場合によっては真逆のことを指しているかもしれないから 俺にとってリファクタリングとはただ単に 「関数の中にある述語などの評価式をより小さな関数として切り出すこと」でしかないが オブジェクトだとフィールドをあっちのオブジェクトに移籍させたり、 フィールドを増やしたり、いろんな手順があるだろ? だいたいリファクタリングを語るのに300-400ページの本がある事自体まさしく 「長文書く奴はバカ」の法則にひっかかりまくってるよな、ファウラー自身が
450 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 09:05:18.77 ID:wWz/yuFg.net] 毛の壁さんが出張してきたのかな? はやく巣にお帰り。
451 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 09:08:50.19 ID:gXar6Rt9.net] クロージャーはpoor man's objectsだって言われてるの知ってる?
452 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 09:10:24.49 ID:n7HRsF8B.net] なんで質問に対して質問に返すのかな? そんなメソッドや関数って普通あるっけ? リファクタリングとは何か? こんな単純な質問にすら答えられないのに、一体何を設計できるんだろうな?
453 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 09:14:49.00 ID:n7HRsF8B.net] ああそうか、質問に対して別のやつに質問するメソッド(デリゲート)はあるわな つまり君たちに質問しても君たちは答えられないわけだ 君たちは単なるラッパークラスであり、実体は別の人間が知っていればよいと それがオブジェクト指向であると 実際そんな無知蒙昧なオブジェクトが「設計行為」できるわけないけどな
454 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 09:20:26.52 ID:gXar6Rt9.net] chain of responsibilityね?
455 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 09:24:16.89 ID:ZPhk/eMO.net] >>430 重複を許容 ≠ リファクタリングしない バカすぎ
456 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 09:50:23.15 ID:Ux1fTD3c.net] >>443 > リファクタリングとは何か? >>327
457 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 09:51:41.72 ID:Ux1fTD3c.net] >>446 >>353 のリンク先読んでそんなこと言ってるなら恥ずかしいだけだぞ w
458 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 09:51:49.72 ID:OPSrDWPX.net] OOPするしないに関わらず設計と言うのは大きな概念から考えてその大きな概念を実現するために枝葉に至るべきである 大きな目的を定めず小さな目的に拘泥するのは馬鹿な行為である これはプログラムの設計に限らず絵などでも同様で細部をバラバラに描くから全体のバランスの悪い崩れた物しか描けない 末節のクラス設計にこだわり、総体としてのプログラムの構造を見ていない馬鹿がOOP信者には多い 抽象化に失敗してるOOPもどきは醜悪の一語だ 一方で大きな概念が適切に抽象化されていれば順次それを具象化していく段階でOOは優れた手法である 前段で述べた一部の馬鹿な信者を見てOOP全体を否定するのは馬鹿なOOP信者と同様に馬鹿な行為である 間違ってる馬鹿を見過ぎたか手法を理解できないのかはわからないがこちらも全体を見ていない 馬鹿と馬鹿が議論をしたところで結論なんか出るわけがないのである、どっとはらい
459 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 09:58:03.84 ID:ZPhk/eMO.net] >>448 >>353 のリンク先を読んだよ > テストのリファクタリング > 実装にコードの重複や無駄はあるでしょうか? 現時点ではリファクタリングの余地がないほどシンプルですね。 > ではテストコードはどうでしょうか? …かなり重複が見られますね。テストを書いたすぐ後のタイミングで、 > テストコードの重複も積極的に排除していこう、というのが最近の考え方です。テストの「リファクタリング」というと > 厳密にはもっと難しく、タイミングが遅れるほど困難なものですが、テスト実装直後では自分の頭にもテスト設計が > 残っているでしょうし、このタイミングでは大胆に行動できます。では重複を排除していきましょう。
460 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 10:06:47.58 ID:h8gmrQ4h.net] なんか、2chって、ちょっと長め(一般基準からすれば、十分に短文なものだが)の文章を目にすると、頭がスタックオーバーフローになっちゃう人たちが多いの?
461 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 10:25:12.33 ID:Ux1fTD3c.net] >>450 そっちじゃねーよ w 俺のレスすら理解してないのかよ...
462 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 10:38:44.34 ID:ZPhk/eMO.net] >>452 これは和田さんのブログなんだが、 お前は何がいいたいのだ? リファクタリングとは重複を全く無くすって意味じゃないんだが?
463 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 10:44:06.85 ID:n7HRsF8B.net] >>449 一方で大きな概念が適切に抽象化されていれば順次それを具象化していく段階でOOは優れた手法である ないない、もっとも抽象化された構造というのは、結局計算コストが高くつくものだから 継承するにもスレッドをブロックするにもコストがかかるってことわかってないよね 必ずしもハイパフォーマンスである必要はないが、ある機能拡張が 深刻にパフォーマンスに問題をきたすとき、それがOOのできる拡張の限界 建築でも同じだが単なるお絵かきデザイナーに、強度計算や構造計算はできないし、 そんなお絵かきデザイナーのいうことを真に受けないといけなくなったIT業界に まともなプロダクトは出せていないことは、この15年で証明済みだろ
464 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 10:44:11.73 ID:ZPhk/eMO.net] 俺も和田さんと同じ意見なんだが、 テストコードのリファクタリングというのは テストを読んだだけで、理解できるようにシンプルな形にすると言うもの。 テストコードのリファクタリングは重複を省くことじゃない。 重複があってもいいが、テストコードのテストとか意味不明なわけで そういうものを作らないためにテストコードは人間が読んだだけで 理解できるほど単純じゃないといけない。 単純にするためにリファクタリングする。
465 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 10:55:59.85 ID:Sbqo4kno.net] ID:ZPhk/eMOは誰と闘ってんだ? >>1 ってお前じゃないの?w まともな設計ができないことを正当化するために何某のブログを引用しているだけじゃん。 そんな奴知らないからそいつがほんとにそんなことを言いたいのか知らんけど。 で、疑問に対する回答がまったくなされていないという…。 テストコードが作られるとして、テストコードはクラス・メソッドを前提としている。 @クラス・メソッドを変えたらテストコードの修正が必要になるのでは? Aクラス・メソッドが変わっても対応できるテストコードの書き方なんてある?あるならどんな書き方なんだ? 同じ質問を無視してただただ持論を繰り返すってコミュ障かよ。 自分の主張をするだけなら自分のブログに書いてろw
466 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 10:57:47.40 ID:ZPhk/eMO.net] クラス・メソッドを変えても、動作が変わらないならばテストコードの修正は不要 当たり前の話だと思うが?
467 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 10:58:23.57 ID:Sbqo4kno.net] >>454 建築業界には設計図を書けない設計者がいると思ってんのか? 脳みそ腐ってるw
468 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 10:58:59.82 ID:Ux1fTD3c.net] >>453 だれも「全く」なんて言ってないのに... 人の話聞くの苦手なの? w
469 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 10:59:04.36 ID:ZPhk/eMO.net] > >>1 ってお前じゃないの?w ぜんぜん違う。 お前こそ>>1 と戦ってるんだろ? 俺に戦いを挑むなよw
470 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 10:59:21.59 ID:oaV48IC8.net] 前スレの1とこのスレの1は別人だよな 前スレの1は固定つけてくれたほうが分かりやすくて助かるんだが
471 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 10:59:31.60 ID:Sbqo4kno.net] >>457 メソッドを使わないテストコードって何それ?怖い。
472 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:00:58.59 ID:ZPhk/eMO.net] >>459 > だれも「全く」なんて言ってないのに... >>430 で言ってるだろw > テストの重複の話に至ってはその和田某氏は重複を許容(=リファクタリングしない)って言う発言すらしてるぞ w 重複を許容(=リファクタリングしない)って。 それとも自分の意見を変えるのか? 重複を許容(=でもリファクタリングはしない)
473 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:01:32.08 ID:ZPhk/eMO.net] >>462 「メソッドを使わないテストコード」ってどこに書いてあるの?www
474 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:03:00.27 ID:ZPhk/eMO.net] >>463 訂正。 × 重複を許容(=でもリファクタリングはしない) ○ 重複を許容(=でもリファクタリングはする) それともこっちのほうがいいか?w 重複を(一部)許容 (=その一部以外は重複を省くためのリファクタリングをする)
475 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:03:15.46 ID:Sbqo4kno.net] >>464 「クラス・メソッドを変えてもテストコードの修正は不要」なんだろ。 テストコードでクラス、メソッドを利用しているなら クラス・メソッドを変えたらテストコードも変更が必要なのでは? どういうことなのか合理的に説明しろ。
476 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:03:54.53 ID:ZPhk/eMO.net] >>466 クラス・メソッドが変わっても動作が変わらないならば テストコードの修正は不要。
477 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:04:42.44 ID:Sbqo4kno.net] >>464 それともクラス・メソッドを「変えても」の意味が不明ないのか? 「変えても」とは>>420 の意味か?
478 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:05:45.72 ID:ZPhk/eMO.net] 例えば、設定をYAMLに保存する、クラス・メソッドがあったとして、 それをXMLに保存する、クラス・メソッドに置き換えた時、 何に保存するかを隠蔽されている状態でのテストコードは修正が不要
479 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:06:57.96 ID:Sbqo4kno.net] >>469 つまり>>420 ってことだろ? YesならYes、違うならお前の言葉で正確に定義してくれ。
480 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:10:25.36 ID:Ux1fTD3c.net] >>457 ホワイトボックステストって知ってる?
481 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:10:26.64 ID:Sbqo4kno.net] どうした? 変更範囲の正確な定義も認識せずにこんだけ主張してたの? インタフェースは変えないことが前提なんだろ?
482 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:10:48.42 ID:ZPhk/eMO.net] >>470 二通り有る。 クラス・メソッドを変える時、正確に言うとテストより先に変えるとき、 それはリファクタリングや実装の変更(挙動は変わらない)ものしかやってはいけない。 クラス・メソッドの仕様が変わる → ならば テストを変えるのではなく。 仕様が変わったら、テストコードを先に修正する。 そして実行したらテストに失敗する。それは「バグがある(もしくは未実装)のクラス/メソッド」と 同じ扱い。テストが通るように、クラス・メソッドを書き換える。 クラス・メソッドを変えてもテストコードの修正は不要 テストコードを修正した場合には、クラス・メソッドの修正が必要
483 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:12:03.63 ID:ZPhk/eMO.net] 補足 クラス・メソッドを変えてもテストコードの修正は不要 テストコードを修正した場合には、クラス・メソッドの修正が必要 ただし、テストコードのリファクタリングの場合には、当然クラス・メソッドの修正は不要
484 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:14:33.02 ID:Ux1fTD3c.net] >>463 で、どこに「全く」なんて入ってるんだ? w 重複コードの排除はリファクタリングで普通にやられてますよ objectclub.jp/technicaldoc/refactoring/refact-smell#1
485 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:15:47.82 ID:Sbqo4kno.net] >>473 これは設計中の変更と普通は呼ぶ。 当然あるけど、お前が主張する設計ができてなくてもテストから開始するという プロセスとは関係ないので、これはお前の言ってる話からは除外しよう。 >クラス・メソッドを変える時、正確に言うとテストより先に変えるとき テストから開始するというプロセスを前提にしてインタフェースを帰る場合は >テストコードを修正した場合には、クラス・メソッドの修正が必要 となるだろ? これもYesならYes、違うならお前の言葉で正確に説明してくれ。
486 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:18:11.64 ID:ZPhk/eMO.net] >>475 > 重複コードの排除はリファクタリングで普通にやられてますよ それ以外のリファクタリングもあるだろw ↓これお前が言ったセリフな 「重複を許容(=リファクタリングしない)」 重複を許容するが長すぎるメソッドを短くする objectclub.jp/technicaldoc/refactoring/refact-smell#2 これは、重複を許容していてもリファクタリングだろ。
487 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:19:30.24 ID:ZPhk/eMO.net] >>476 > これもYesならYes、違うならお前の言葉で正確に説明してくれ。 さっきから、俺の言葉で正確に説明してるだろ。 アホかw
488 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:21:49.03 ID:Sbqo4kno.net] >>478 俺の理解があってるならYes。 何か違うならどこが違うか説明しろってことだが。 お前のやり取りって、他の人とのやり取り見てても認識がずれてるから ちゃんと確認してるんだよ。 で、はっきり回答しろ。
489 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:22:50.08 ID:ZPhk/eMO.net] >>479 だから、Yesって言わないで、 何か違うから、俺の言葉でずっと説明してるんだが?
490 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:23:38.96 ID:Sbqo4kno.net] >>480 >>476 に対する返事はない。
491 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:26:28.37 ID:ZPhk/eMO.net] >>481 > テストから開始するというプロセスを前提にしてインタフェースを帰る場合は > >テストコードを修正した場合には、クラス・メソッドの修正が必要 > となるだろ? > > これもYesならYes、違うならお前の言葉で正確に説明してくれ。 となるだろ?と言われても意味不明なんだが? Yesもなにも、それは俺が>>473 で言ってる言葉だw
492 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:33:29.79 ID:Sbqo4kno.net] >>482 >>473 がおかしいんだがw お前はテストから開始するというプロセスについて主張してるのに 「クラス・メソッドを変える時、正確に言うとテストより先に変えるとき」 ってお前が言ってたプロセスと違うじゃん…。 何言ってんだ?って状態だから確認してるんだけど。
493 名前:デフォルトの名無しさん [2016/06/04(土) 11:35:05.80 ID:AIJuo/HE.net] Haskellを使えばテスト必要ない。
494 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:38:09.90 ID:ZPhk/eMO.net] >>483 > 「クラス・メソッドを変える時、正確に言うとテストより先に変えるとき」 > ってお前が言ってたプロセスと違うじゃん…。 正確に引用しような?w 「クラス・メソッドを変える時、正確に言うとテストより先に変えるとき、 それはリファクタリングや実装の変更(挙動は変わらない)ものしかやってはいけない。」 何も違ってないじゃん? テストよりも先に変えるって言ってる。 テストよりも先に作るなんて言ってない。 それは即ちテストがすでにあるということ。 クラス・メソッドを変える時にはテストがすでにある。 言い換えるとテストを先に作っている。 クラス・メソッドをテストよりも先に変える時、 それはリファクタリングや実装の変更(挙動は変わらない)ものしかやってはいけない。
495 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:40:47.53 ID:Sbqo4kno.net] >>485 意味分からん。 これとか謎過ぎる。「テストよりも先に変える」のに「即ちテストがすでにある」って時系列がどうなってんだ? >テストよりも先に変えるって言ってる。 >テストよりも先に作るなんて言ってない。 >それは即ちテストがすでにあるということ。 テスト、設計、変更とかのステップの順序を正確に書いてくれ。
496 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:43:51.80 ID:ct4DNQD3.net] 48 :まちがって名前消しちゃいました。:2013/04/29(月) 00:46:16.62 ID:??? それでCPU云々ぬかしてるとか、バロスwwwww 49 :まちがって名前消しちゃいました。:2013/04/29(月) 00:47:53.21 ID:??? コンソーレは、ポインターの使い方を知らない。
497 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:44:07.65 ID:Sbqo4kno.net] >>485 結論としてはインタフェースを変更するならテストコードも変更するんだろ? テストコードが先にあるのにインタフェースを変えてもテストの変更がいらないケースがあるなら どういうケースなのかちゃんと説明しろ。
498 名前:デフォルトの名無しさん [2016/06/04(土) 11:45:12.68 ID:AIJuo/HE.net] コンソーレはポイントゥの使い方を知らない・・・の方が良いのでは。
499 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:45:18.46 ID:pn86qigp.net] visualstudioが提供するような ユニットテストはいらんなぁ uwscで一巡出来ればいい感じ
500 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:47:15.90 ID:ZPhk/eMO.net] >>486 あー、わかったw コードをテストコードよりも先に変えるときはリファクタリングしかしないから 結果的に既存のテストは変えないよw そうだね。そこは間違った。 たいていリファクタリングする前には、既存のテストは変えないが 追加して不足しているテストを書くことが多いので勘違いした。
501 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:49:24.99 ID:ZPhk/eMO.net] >>488 > 結論としてはインタフェースを変更するならテストコードも変更するんだろ? インタフェース(仕様)を変更したいならテストコードを先に修正してから バグが有るコードの状態にしてからコードを修正する。 これは一般的なTDDのやり方どおりだ。
502 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 11:51:19.80 ID:Sbqo4kno.net] >>492 インタフェースを変更するならテストコードも変更するってことだな。 となると、インタフェースの変更はテストコードと本体のコードの両方の変更が必要になり 工数の負担が大きくなる。
503 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:02:21.37 ID:ZPhk/eMO.net] >>493 何と何を比べてるのだ? インターフェースを変更したときに、それを手動でテスト(全部をね)するか テストコードで自動でテストするかだろ。 テストコードを書かなかったら、工数の負担はもっと増える。
504 名前:トの名無しさん mailto:sage [2016/06/04(土) 12:03:36.51 ID:gXar6Rt9.net] あるいは更新されない仕様書とかね
505 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:03:44.99 ID:Sbqo4kno.net] >>494 設計からやる場合との比較。 設計中の変更はテストにもコードにも影響しない。 テストを設計により先にやるならインタフェースの変更はテストにもコードにも影響する。
506 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:05:11.04 ID:ZPhk/eMO.net] >>496 その3つだけで言うならば、 設計 → テストコード → コード の順番だろ。
507 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:05:48.96 ID:Sbqo4kno.net] というか、テストを設計により先にやるべきだと提唱してる人なんていないと思うぞ。 何か誤解してるのでは。
508 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:06:47.90 ID:ZPhk/eMO.net] > テストを設計により先にやるべきだと提唱してる人 え? そんなこといい出した(>>496 が初出)のお前じゃねw
509 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:06:48.91 ID:Sbqo4kno.net] >>497 それって設計を先にやってるじゃん。 テストを設計の前に開始するって謎プロセスは何だよ?w
510 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:07:48.23 ID:ZPhk/eMO.net] > テストを設計の前に開始するって謎プロセスは何だよ?w 何だよって言われても、それお前以外誰も話ししてないんですが?
511 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:10:26.85 ID:Sbqo4kno.net] >>500 これはお前の書き込みかと思ってた。これについては同意しないと? >>424 OOPや従来型の「しっかり設計してからコーディング」とはやり方が根本的に異なる。 デタラメでもいいからコーディングし、単体テスト/レグレッションテストの環境を構築してから
512 名前:、 リファクタリングで目的のコードを得ることを目指す。つまり、事前に「完壁な設計」は必要ない。 [] [ここ壊れてます]
513 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:11:48.26 ID:ZPhk/eMO.net] >>502 日本語おかしい。 なんで他人の書き込みに「同意しないと?」 なんだよ、その「?」は?
514 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:12:14.17 ID:4uQe4rvn.net] アスべですなぁw
515 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:12:20.56 ID:Sbqo4kno.net] そもそもお前は何が主張したくて俺に絡んできたのか分からんわ。 主張したいことを明確にしろよw
516 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:13:12.05 ID:Sbqo4kno.net] >>503 和田の意見なんだからお前は同意するんじゃねえの? 和田和田連呼してたのお前だろw
517 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:18:15.78 ID:ZPhk/eMO.net] レベルが違いすぎるのかな? なんでこんな基本的なことが分かってないんだろw 設計 → テストコード作成 → コード作成 → (必要ならリファクタリング →) リリース ↓ 数週間〜ヶ月後、仕様変更発生 再設計 → テストコード修正 → コード修正 → (必要ならリファクタリング →) リリース ※仕様変更があったら当然テストコードを変更するが、新しい設計に対応しやすいように テストコード修正前に、コードのファクタリングを行うこともある。 だろ。
518 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:19:57.01 ID:ZPhk/eMO.net] >>506 > 和田の意見なんだからお前は同意するんじゃねえの? どれが和田の意見なんだよw 和田のブログか記事か書籍からの引用かそれ?
519 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:21:30.08 ID:4uQe4rvn.net] つうかさ、外部仕様がテストコードで、内部仕様が実コードって見れば 外部仕様から固めていくのは普通の行為なんだけどね。
520 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:24:43.61 ID:Sbqo4kno.net] >>507 当たり前過ぎて俺に対して何を主張したかったのか意味不明。 なんか知らんが当たり前だから反論はないよ。 >>508 和田信者だったら自分で確認しようぜ。俺はそいつを知らないし興味ないって言ってるじゃんw
521 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:26:48.20 ID:ZPhk/eMO.net] >>510 > 和田信者だったら自分で確認しようぜ。俺はそいつを知らないし興味ないって言ってるじゃんw だからお前は確認して無くて、 お前が引用した↓これが和田の発言じゃないってことに 気づいてないのかw 墓穴ほってるだけじゃんwww > OOPや従来型の「しっかり設計してからコーディング」とはやり方が根本的に異なる。 > デタラメでもいいからコーディングし、単体テスト/レグレッションテストの環境を構築してから、 > リファクタリングで目的のコードを得ることを目指す。つまり、事前に「完壁な設計」は必要ない。
522 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:28:05.40 ID:ZPhk/eMO.net] >>510 > 当たり前過ぎて俺に対して何を主張したかったのか意味不明。 当たり前のことに、お前が絡んできたんだろ
523 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:28:40.07 ID:U+sUBqw0.net] >>461 同意。が、そのつもりはなさそうなので、特定しよう。 >>456 , ID:Sbqo4kno > >>1 ってお前じゃないの?w 1の>>1 (前スレの1)はお前だよな? 当たり前だが俺の発言中の>>1 というのは前スレの>>1 の事だ。他のみんなが言っている>>1 もこの意味だ。
524 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:29:54.73 ID:Sbqo4kno.net] >>511 だから知らないって。 >>424 がそういってるからそうなのかねえってだけ。 興味ないから確認する気もないし、してない。 知らないと俺は認めてるのに「墓穴」って謎過ぎるwwww だから知らないってwwwww
525 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:30:56.64 ID:ZPhk/eMO.net] >>514 ↓あきらかに墓穴だろw なにが「和田の意見」だよw 506 返信:デフォルトの名無しさん[sage] 投稿日:2016/06/04(土) 12:13:12.05 ID:Sbqo4kno [37/39] >>503 和田の意見なんだからお前は同意するんじゃねえの?
526 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:32:08.06 ID:Sbqo4kno.net] >>513 >>424 はお前じゃん。 お前の書き込みが和田信者から疑われてるからちゃんと話し合えよ。 俺には関係ないから。
527 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:32:59.42 ID:Sbqo4kno.net] >>515 >>424 読めよ。 >>424 がそういってるからそうなのかねえってレベルだって書いたろ。 ほんと大丈夫か?
528 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:33:49.35 ID:gXar6Rt9.net] いやーおもしろいw
529 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:40:21.20 ID:U+sUBqw0.net] >>516 分かった、>>424 については後で説明を落とすから、まず皆が思っている疑問に答えろ。 前スレの>>1 は、お前だよな? そうならさっさとコテ付けろ。
530 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:42:09.54 ID:Sbqo4kno.net] >>519 付けたきゃお前が付けろよ。 ばっかじゃねえのwwww で、和田ソースは?
531 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 12:50:54.80 ID:gXar6Rt9.net] 単に引用符>がついてるかどうかじゃねーの?
532 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 13:21:09.88 ID:U+sUBqw0.net] >>520 >>424 は俺の解釈だ。そしてこれはこのスレの誰とも矛盾してない。お前が何か勘違いしているだけだ。 ソースは書籍のプロフィール欄なのだから、本人が書いたか、少なくとも本人の了解は取れているものだ。 もっと詳しく解釈すると、 > テスト駆動開発に「完壁主義の呪い(完壁な設計を得るまではコードを書けないし良いシステムも出来ないという強迫観念)」を解いてもらってからは、 > xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E8%91%97%E8%80%85/%E5%92%8C%E7%94%B0%20%E5%8D%93%E4%BA%BA つまり、和田は「完壁主義の呪い」に嵌っていたんだよ。この点で、和田は「センス」のあるプログラマではない。 「センス」のある奴は、最初から完璧に設計しきってしまえる。OOPでやれと言われても大して苦労しない。 ところで、OOPは最初に完璧に設計しきってそれを実装して終わり、を目指している。 これは、万人が「『センス』のあるプログラマ」になることを目指している。(これは目標としては正しい) ところが実際にはそんなことが出来る奴=センスがある奴なんてほぼいない。これは定義上そうだ。 10人中10人出来る場合は「センスがある」なんて言わない。10人のうち1人が出来るかどうかだから「センス」と呼ばれる。
533 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 13:21:24.82 ID:U+sUBqw0.net] OOPにしてもそれ以前の「手続き型」にしても、「センス」に頼りきっているところはある。 「無能には設計させるな」というのがそれだ。(俺もこれを支持するが) ところがこれは「無能=センスがない」だし、「センス」はそう簡単に鍛えられないから問題なんだよ。 そに対してTDDは「センスがない奴でもある程度何とかなる」という意味で画期的だ。(ただこれでいいのかという疑問はあるが) そして和田はそれを認めている。つまり、自分に「センス」はないことを認め、TDDに飛びついた。 この時点で和田は実力があると言える。自分を客観的に判断できる時点で、実力はあるんだよ。 問題なのは>>1 みたいにセンスもないくせにOOPにすがっている馬鹿なんだよ。 OOPも手続き型も関数型も結局の所プログラムの編集方針が異なるだけで、大差ない。 (というか俺にはそういう風に見えるし、そう言っている奴もこのスレにも多いだろ) 単純にどれを取ったら品質が上がるとか、テストが楽になるとか、そういうものではない。 それよりは、個々のプログラマの技量によって左右される部分の方が断然大きい。 つまりそれは「センス」なんだけど、従来の問題点はじゃあどうやって「センス」を身につけるのか?であって、 これに解がないから困っていたんだよ。 TDDは「(センスのない)万人がコーディングする時代」の実践的手法なんだよ。そこが違う。 C:センスのない奴はプログラミングするな OOP:センスのない奴はセンスを身につけろ TDD:センスがなくても何とかなる方法でやりきれ 分かるか?というか分かってない奴はお前だけっぽいんだが。 てか、お前こそTDD向きなんだよ。OOPじゃなくてね。
534 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 13:26:59.37 ID:ZPhk/eMO.net] >>522 > ところで、OOPは最初に完璧に設計しきってそれを実装して終わり、を目指している。 目指してねーだろw
535 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 13:29:10.52 ID:ZPhk/eMO.net] OOPは最初に完璧に設計しきってそれを実装して終わり、を目指しているというのが真なら、 OOPではTDDができないってことなってしまうし、 TDD信者はOOPを排除しようとするはず。 だけど、そうはなっていない。 むしろTDD信者はOOPを使ってる。 つまり、 OOPは最初に完璧に設計しきってそれを実装して終わりを 目指ざしていないということ。
536 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 14:04:05.25 ID:Ux1fTD3c.net] >>477 重複の話と言うことも理解してないのか w
537 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 14:15:15.11 ID:U+sUBqw0.net] >>525 それは結局の所、君の言うOOPは既に折衷案だからだ。 > 合わせ技というのは考えないのか?(>>428 ) 基本的には、トップダウン設計においては試行錯誤は悪なんだよ。 ただしどこまでトップダウンできるかはそいつの実力にも依るし、 そもそも細部までトップダウンすることが効率がいいのか?という疑問もある。 だから一般的なOOPだと骨組みまではクラスで組み、メソッドの子細は各クラスにお任せ、交換も可能、としてる。 もちろんメソッドの子細までトップダウンで設計しきってもいいが、 一般的なOOPに於いてはメソッドの実装はTDDしても問題ないと言われるだろう。(これも川俣晶は指摘している) しかしクラスまでTDDして新規クラスが発生/消滅するようならOOP出来ないだろ?というのが君らの論争だろ。 そしてそれは川俣晶も既に指摘している(>>425 ) TDDは最初から試行錯誤を織り込んでいる。 OOPは基本的に試行錯誤をせずに済ませようとしている。 ここが根本的に違う。 どの程度の折衷案を採るかは君のプロジェクトで自由に決めればいい。 お前ら、結局、言葉尻をつまんで自演したいだけか?少なくとも俺にはそう見えるので、以降は ID:Sbqo4kno ID:ZPhk/eMO にはレスを付けない。 お前らと議論をする価値があるとは思えないし、お前らに議論できる知能があるとも思えない。
538 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 14:38:11.97 ID:iJ55/nuN.net] >OOPは基本的に試行錯誤をせずに済ませようとしている。 こんなこと本気で思ってるとしたらその現場は地獄だろうな。。 絶対一緒に仕事したくないタイプだわ。
539 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 14:40:43.98 ID:Ux1fTD3c.net] トップダウン? ひょっとしてウォーターフォールのことを言ってるのか?
540 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 14:46:33.94 ID:i7cbgqH+.net] 和田って人は権威なのかも知れないけど、言ってる事に共感できんよ TDDって言ってしまえば単なる要求の記述に過ぎないのだから、 契約プログラミングの一種として見ればいいだけだ その場でモデリングしつつというのも別に全然駄目じゃないし、 それで不整合になるなら、そもそもの仕様がおかしいのだろ
541 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 14:47:47.76 ID:i7cbgqH+.net] 間違えた そもそもの要求がおかしいのだろ
542 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 15:18:45.79 ID:ZPhk/eMO.net] >>527 > そしてそれは川俣晶も既に指摘している(>>425 ) 川俣晶って、おまwww 川俣晶ってwwww 川俣 晶さんのスレッド pc.2ch.net/test/read.cgi/prog/1004673171/ ってのがあったから見てこいよ。 笑う所をわざわざ持ってくるなよwww
543 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 15:19:53.15 ID:ZPhk/eMO.net] >>527 > しかしクラスまでTDDして新規クラスが発生/消滅するようならOOP出来ないだろ?というのが君らの論争だろ。 そんな論争してない。 OOP + TDD は相性がいい。
544 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 16:19:19.31 ID:Sbqo4kno.net] >>522 ソースがあるならソースだけを示せ。 ソースとお前の解釈を同時に述べると訳分からん。
545 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 16:25:44.35 ID:Sbqo4kno.net] 「○○が言ってるから正しい」って言う奴って自分には判断力も説明する能力もないって自覚してるよなw ID:U+sUBqw0は和田がこう思ってるって言ったくせに後から「自分の解釈」だの言い出すし…w 「ソースなし夫」ってコテをつけてくれればそいつの書き込みは無視するからそうしてくれ。
546 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 17:40:51.25 ID:qjr7DQXX.net] ファイルシステムやクラウドストレージなどなんらかの手段でBLOBを階層管理するコンポートのインターフェースやクラス構成はどう書くべきでしょうか?
547 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 18:00:00.33 ID:pn86qigp.net] >>536 エクセルで
548 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 18:08:42.83 ID:ZPhk/eMO.net] >>535 > 「○○が言ってるから正しい」って言う奴って自分には判断力も説明する能力もないって自覚してるよなw 全くだなw 川俣晶が言ってるから正しいとかアホかとw 自分の頭で考えて、自分と同じ意見を持っている人の中で 一番信頼できるやつの名前を持ってこいよ。
549 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 19:13:25.23 ID:pn86qigp.net] 俺も○○が言ってるから系のキャラは好きになれないな ちゃんと自分の言葉で語るべき
550 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 19:23:41.43 ID:ZPhk/eMO.net] 最初に自分の言葉で語ってから、それを補足する形で 有名な人の言葉を引用するのは問題ない。 つまりソースを書いたってだけ。 今回はこのパターン ↓ (>>345 ) > テストのリファクタリングはするぞ? > というか、テストコードが正しく動くかどうやって確かめると思ってるんだ? > > テストコードのテストを書く?そんなことを言い出す馬鹿が本当に居るから困りものだがw > テストコードはテストコードでテストしない。その代わりにテストコードは人間が目視で読む。 > > テストコードというのは基本的に、○○をしたら××になる。というシンプルな > 形式になるので、ちゃんとしたテストコードであれば可読性は高く目視で読んでも > 負担にならない。というか負担にならないようすることが必須。 > > 略 ↓ >>345 に対する反論(>>350 ) > テストコードのリファクタリング? > テストコード書いたこと無いだろ w ↓ >>350 に対する反論(>>350 ) >>350 > お前が、和田卓人(t_wada)さんより優秀だと認めることが > 可能な証拠があるなら信じてやるよw > > d.hatena.ne.jp/t-wada/20100228/p1 > テストのリファクタリング
551 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 21:40:29.11 ID:NEIO1PVo.net] スゲー伸びてると思ったらまだテストの話してんの?
552 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 21:57:13.99 ID:i7cbgqH+.net] >>536 Compositeパターン 他は好きにしろ
553 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 22:34:25.63 ID:pn86qigp.net] そうやって仕様も出さずに○○パターンの適用から考えちゃうとか もうプログラマから足洗って欲しい マジで害にしかならない
554 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 23:08:13.44 ID:Sbqo4kno.net] >>543 >>537 と同一人物だよな…?
555 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 23:18:59.84 ID:4uQe4rvn.net] オブジェクト指向にデザインパターン持ち出すのは何でなの? いつから設計思想とプログラム構造がゴッチャになっちゃったの?
556 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 23:43:14.57 ID:pn86qigp.net] そもそもデザインパターンはオブジェクト指向として適切なの? ってのと そもそもデザインパターンは設計として適切なの? ってのと そもそもオブジェクト指向は設計として適切なの? ってとこをちゃんと足場を固める必要があるよね俺ら 砂の上にお城を建てて喜んでる奴なんて馬鹿みたいじゃないか
557 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 00:46:56.23 ID:eiIG0jy5.net] >>546 @オブジェクト指向は設計として適切 反対するなら設計手法の代案を。 Aザインパターンは適切 デザインパターンは設計指針だからな。 Javaを初めとしてデザインパターンにしたがっている(Javaなどで成功したパターンをデザインパターンとしてまとめたのか前後関係はしらないが) 以上、設計指針としての有効性は実証済み。
558 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 00:49:23.14 ID:eiIG0jy5.net] >>546 オブジェクト指向で失敗してるのはオブジェクト指向設計を正しく利用できていないから。 オブジェクト指向設計は一般人には活用できないのでは?という質問なら同意するかもしれない。
559 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 00:58:02.73 ID:PAgdOZpu.net] なおオブジェクト指向を採用しているフレームワークには Railsだけでなく、様々なものが有る。 使いこなせない人は、落ちこぼれw
560 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 01:36:03.72 ID:8zGv30iU.net] >>547 どういう仕組みでどういいの? 俺らがソフトウェア開発(製造業)でできることは2つ 品質を上げるか、工数を減らすか オブジェクト指向は品質を上げる オブジェクト指向は工数を削減できる この2つのどちらも成り立たないとき オブジェクト指向はクソと認定できる
561 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 02:40:40.54 ID:MTgm06wQ.net] C++に限って言えば >オブジェクト指向は品質を上げる >オブジェクト指向は工数を削減できる は成立するか微妙 言語の仕様的に破壊的副作用をCLASS内に隠蔽した状態で実装できてしまう C++の破壊的自由度が破壊的方向に作用することがある これを回避するには、C++以外の自由度への制限が多い処理系なみの不自由さを受忍する必要がある 破壊的CのプログラムをC++の機能によって、我慢と工夫次第によっては色々な恩恵が受けられますよ な感じ
562 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 03:15:08.11 ID:eiIG0jy5.net] >>550 本に書かれてるから読んだら。デザインパターンの本にも書かれてる。 基礎すら知らない奴に説明するのはめんどくさい。 基礎すら知らないで批判するのはバカだからバカの相手はしたくない。
563 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 06:29:39.07 ID:YNBwuY3J.net] >>545 オブジェクト指向にデザインパターン持ち出すのは何でなの? いつから設計思想とプログラム構造がゴッチャになっちゃったの? オブジェクト指向が、日本に最初に広まったときからだと思う。 その悪影響がずっと続いて現在に至る。
564 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 07:14:25.23 ID:8YdCKwaE.net] 歴史的にはデザインパターンの方が後だと思うけど? プログラミング実装の分類整理の研究で出て来たのがデザインパターンだよ。 主にデータとプログラムの関係性につての研究だったかな? プログラミングをブロックを積み上げるみたいに行う方向を目指してた感じ? なので、デザインパターンやってればオブジェクト指向かというとそうでは無いし オブジェクト指向ならデザインパターンで実装しないといけないというものでも無い。
565 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 07:38:00.95 ID:8YdCKwaE.net] オブジェクト指向は、現実にある対象の複雑さをいかに捉えて、プログラムという別の表現系に写し取るかを研究して出来た考え方。 複雑に見えるものでも一つ一つは単純な機能の積み上げでしかなくて、それぞれを扱う仕組みや動作は幾つかの同じ概念に集約できる。 そうやって単純な機能に分けて考えましょうってのがオブジェクト指向。 現実をいかに単純な似たようなかたまりで捉えるかが主な目的。 ところが運の悪いことにオブジェクト指向の誤った解釈のせいかやたら隠蔽だのといって同じコードをみんなが他人に公開せず自前で用意する事態に陥る始末だった。 そりゃ生産性に逆行してる罠w
566 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 07:54:16.76 ID:8YdCKwaE.net] 朝から連投で申し訳ない。 ここまで読めばオブジェクト指向とデザインパターンは別々の考え方だってのが分かると思うけど でも、デザインパターンがオブジェクト指向の舌足らずになりがちな実装面での問題を解決してくれているって一面もあるんだよね。
567 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 09:03:17.23 ID:8zGv30iU.net] >>552 自分の言葉で説明できないの? そもそもそこに抜けがあったらデザパタはゴミなんだからね
568 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 09:16:17.51 ID:kjF/TSSS.net] デザインパターンなんて「実際に作ってる時によく使ってたパターンに名前付けてまとめた、名前付けたおかげで(それを知っている者同士なら)説明が省けて楽」ぐらいの意味しかないだろ 適所で使えば便利だが、何も考えずに乱用すれば逆効果にもなり得る 逆効果なケースしか見ずに全否定する無能も全肯定して乱用する信者も迷惑だ
569 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 09:33:04.83 ID:PAgdOZpu.net] >>556 いやさ、デザインパターンと共に歩んできてないの?って思ったんだが デザインパターンといえば、有名なのはこの本だよね。 https://en.wikipedia.org/wiki/Design_Patterns 出版は1994年。もちろん研究レベルではもっと前からあるのだろうけど、 それを言ったらオブジェクト指向ももっと前からある。 で、この本自体に書いてあったと思うけど、デザインパターンというのは 巷にあふれる(当時主流となりつつあるオブジェクト指向言語の)設計のパターンをカタログ化したもの。 サンプルコードはこれまた当時主流で勢いもあったJava言語で記述されていた。 (ちなみにRubyは1995年生まれ) 今から勉強しているような人は、デザインパターンがすでにあって、 それを勉強してオブジェクト指向を理解するんだろうけど、 俺とかは逆。オブジェクト指向言語を使っていて、こういう場合は実装しよう? こうやればうまくいいんじゃね?と考えていたことを、体系化したものがデザインパターン。 デザインパターンは書籍化された当時(1994年ごろ)の問題、つまりオブジェクト指向の問題を 解決するものであり、それよりも前からオブジェクト指向はあったのだから、別々の考えだし、 設計をカタログ化すると言うアイデアは、オブジェクト指向にかぎらないものと、 他の分野にも広がっていったのは、常識なんだが。
570 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 09:35:22.10 ID:PAgdOZpu.net] >>558 > デザインパターンなんて「実際に作ってる時によく使ってたパターンに名前付けてまとめた、 > 名前付けたおかげで(それを知っている者同士なら)説明が省けて楽」ぐらいの意味しかないだろ 知ってる者にとってはその通り。俺とかデザパタ本を、 やっぱりこんな感じで実装するんだねとか、 こんな抜け道が有るなとか、こうやって解決すればいいのか などと自分の経験と重ねながら読んでた。 でもそういった経験がない人にとっては「よく使っていたパターン」が無いわけだから、 新しい技術を勉強するといった扱いだよ。
571 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 09:37:21.20 ID:PAgdOZpu.net] >>545 > オブジェクト指向にデザインパターン持ち出すのは何でなの? > いつから設計思想とプログラム構造がゴッチャになっちゃったの? 今でこそデザインパターンはオブジェクト指向に限らない概念になったが、 そもそもデザインパターンは当時の問題である 「オブジェクト指向における設計手法」をまとめた本。 だからオブジェクト指向にデザインパターンを持ち出すのは当たり前の話。
572 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 09:40:19.17 ID:PAgdOZpu.net] ちなみに、オブジェクト指向が普及する前の技術を カタログ化したものは、アルゴリズムと呼ばれていた。 昔は構造と呼ばれるようなレベルに発展しておらず、 処理レベルの話で終わっていたからだ。
573 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 09:45:01.70 ID:PAgdOZpu.net] >>555 > ところが運の悪いことにオブジェクト指向の誤った解釈のせいかやたら隠蔽だのといって同じコードをみんなが他人に公開せず自前で用意する事態に陥る始末だった。 おまえ、オープンソースが正しいオブジェクト指向だとかいいそうだなw 隠蔽と言ったって、それはあくまでオブジェクトから見た時の話で、 ソースコードは(オープンソースじゃないだけで) 関係者なら誰でも見れるって、たとえプライベートメソッドであったとしても。 自前で用意するとかいうのは、隠蔽されてるからじゃねーよ。 アホかw
574 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 10:22:15.35 ID:vibNsuKz.net] 型システムが貧弱で、抽象化の手段がOOくらいしか無い言語を使うとデザインパターンの出番増えるよ。
575 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 11:17:38.97 ID:+OMR19AC.net] 書籍以外で絶賛してる奴を見たことがないし そもそも仕様書や構成図から見えないクラスがいきなり登場してるのも ビジネスだと説明できない
576 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 11:27:09.25 ID:eiIG0jy5.net] >>557 オブジェクト指向すら知らない奴に説明するのはめんどくさ〜い。 知らないくせに批判するバカだとなおさら。 オブジェクト指向についてちょっとでも興味があって本を読めば書かれているから。 知らない=本すら読んでない。 知らない概念を批判するってすごいバカだと思わない?
577 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 11:31:27.48 ID:eiIG0jy5.net] >>559 「サンプルコードはこれまた当時主流で勢いもあったJava言語で記述されていた」 え?え?? Each pattern also includes code that demonstrates how it may be implemented in object-oriented programming languages like C++ or Smalltalk. って書いてあるけどwwww 読んでないのに語るなよ恥ずかしいからwww
578 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 11:34:33.87 ID:eiIG0jy5.net] >>562 アルゴリズムとデザインパターンは全然違うぞ。
579 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 11:39:37.67 ID:eiIG0jy5.net] >>565 Javaの標準APIのあちこちにデザインパターンが出てくるんだけど…。 評価うんぬんじゃなくて、そこにあるもの。 デザインパターンを理解していないとどうしてそんな構成になっているか理解できない。
580 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 11:
] [ここ壊れてます]
581 名前:46:21.88 ID:L71HvcLp.net mailto: デザパタって優秀なエンジニア達の良い設計に見られる共通項をパターン化したものだよね [] [ここ壊れてます]
582 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 12:00:30.99 ID:+OMR19AC.net] >>570 その「優秀」が怪しいって言ってるの それでも地球は回ってるわけで
583 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 12:03:32.73 ID:eiIG0jy5.net] >>571 >>565 みたいなことを言っちゃう奴に理解しろと言っても無理なのはまあ分かる。 素人には難しい。
584 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 12:34:18.99 ID:L71HvcLp.net] >>571 そうか・・・信用できないなら仕方ないね 僕は先人達の英知を無駄にはしないけどね
585 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 12:35:32.63 ID:3IJ+HIal.net] >>571 ある特定の場合に役に立つってだけなので理解できないなら使わないほうがいいし使っても見当違いな使い方してデザパタは使えないとかいう馬鹿が生まれるだけ
586 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 12:37:23.17 ID:8YdCKwaE.net] >>563 実際にオブジェクト指向を曲解して工数がべらぼうになった某携帯電話の共通化プロジェクトってのがあってだなw
587 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 13:07:21.68 ID:kjF/TSSS.net] 勘違いした馬鹿がやらかした失敗例を元に、他に成功例が多数存在する手法すべてがダメだと断じるのは やらかした馬鹿と同じレベルの馬鹿の思考パターンよな、普通は失敗例と成功例を比較して使い所を見極めるものだと思うんだ >>559 4人のギャング共が最初にデザインパターンをまとめたのはJavaの登場より少し前だよ Javaで書かれたサンプルが多いのは、Java登場が1995年でたまたま注目された時期が被ったに過ぎない
588 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 13:22:15.21 ID:8zGv30iU.net] 失敗例とか成功例って言うけど 失敗と成功の基準は何なのさ?
589 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 13:37:31.89 ID:fuiY39en.net] >>546 デザインパターンはオブジェクト指向の欠陥の見本市ですよ
590 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 13:37:49.19 ID:8YdCKwaE.net] 隠蔽で皆が同じコードを書く羽目になるのは 実装コードの結合度の問題なんで、オブジェクト指向とは直接関係無い話なんだけどな おまいら皆まで言わないと分からないんだな。 部品の共通化が結合度を強めてオブジェクト指向の思想にそぐわないので じゃあみんな同じコードを別々に実装しようとしてそうなったまでさ。 まあ、ここでは部品の共通化って部分が眉唾なんだ。 それは上手く部品のオブジェクト化が出来てないから結合度の高さが問題になるんじゃないのかってね。 本当に共通な所だけが共通化されてないから結合度の高さが問題になるんじゃないかってね。
591 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 13:43:05.93 ID:eiIG0jy5.net] >>579 「隠蔽」で皆が同じコードを書く羽目になる というスタートからおかしいな。 「隠蔽」をどう定義しているか分からないのと 「隠蔽」するとどうして同じコードを書く羽目になるのかおかしい。 「隠蔽」すれば内部のコードを意識する必要がなくなるんだから自分で書く必要性を減らす方向に働くようにしか思えない。
592 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 13:48:48.08 ID:fuiY39en.net] オブジェクト指向がいいってやつはセンスがない 自分が何やってるかもわかってねえ奴ばかりだ オブジェクト指向というのは関数の第一引数を贔屓にして 所詮関数の第一引数を元に、メソッドをパッケージング、ディスパッチしているものに過ぎない それがどれだけ抽象化を妨げているのか、バカにはわからないよ カプセル化といくらほざいたところでnullpoがある時点で何も安全じゃないし、 それこそ型推論が完全な言語に比べてどれだけ劣っているかも知っていない 究極的に言えばオブジェクト指向というのはDRY原則を満たすのに明らかに適していない思想であるにもかかわらず (∵関数の第一引数(クラス)に応じて、わざわざ挙動を変更しようとするから クラスを定義するごとに、ToStringのオーバーライドをしないと、ToStringすら使い物にならない はっきり言ってね、ここまで低レベルなことをサポートできない言語なんて他にはないんだけど? そんなしょうもないことのためにまさか継承すんの? モジュールを定義するにも、クラス構文でやるとかバカなんじゃねえの?冗長にも程があるわ) 君たちがやってることは、言語的に欠陥があり不自由でしかない言語で、 なんとかDRY原則を守ろうと、こねくり回しているだけ、もちろん保守性においてDRY原則は重要だよ だが俺の考えを言えば多重継承をサポートしないかぎり、DRYは満足できない しかしJavaはその多重継承すら捨てちまった、まあ英断ではあるけどな 結論:ゴミみたいなパラダイムからはゴミみたいなシステムしか産出されない オブジェクト指向が流行った理由?SunとMSの営業戦略にバカなエンジニアが引っかかってるだけだよ
593 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 13:52:36.96 ID:eiIG0jy5.net] >>581 すごい熱量を感じる。 ただ、残念なことに「第一引数を贔屓にして 」とか、「関数の第一引数(クラス)に応じて、わざわざ挙動を変更しようとするから」とか理解できない文言が多い。 他の人に伝わる文章で書いて欲しい。
594 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 13:54:31.58 ID:fuiY39en.net] オブジェクト指向ライブラリを少しでも触れば 微妙な挙動が制御できるかどうかは、そのライブラリ作者が挙動を制御できるように APIを書いているか否かで決まってしまう 内部実装をカプセル化するということは、ライブラリユーザーが 内部の細かい挙動を制御できないということをそのまま意味する なぜわざわざ目隠ししたままプログラミングをしなければいけないのか? カプセル化によって論理エラーの検出性、テスタビリティが損なわれているにも関わらず オブジェクト指向ではテスト・テストといっている いいか?結局オブジェクト指向技術で話題になる技術ってのは 結局のところ「オブジェクト指向」がサポートしないものなんだよ よくあがる議題:再利用性、テスト、保守性、etc これらが言語のコア、基本的な設計思想として含まれていないからこそ いつまで経っても議論が終わらないし、最終的な答え、共通見解に行き着かないってことぐらい いい加減わかったほうがいいんじゃないのか? 君たちは単に営業戦略に引っかかってるだけ そしてそれに費やした時間を否定したくないだけ、自分の食い扶持である技術が そんなにヘボいものだと認めたくないだけなんだよ
595 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 13:58:38.65 ID:eiIG0jy5.net] >>583 Cは評価しているのかな? Cの標準ライブラリを使うとき、ライブラリの正しさをチェックしてる?
596 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 13:59:09.84 ID:8zGv30iU.net] >>580 同僚が「隠蔽」してあるって言うから じゃ、テストもやらなくていいの? って聞いたら駄目だって言われた 隠蔽って誰に対して隠蔽してるの? 今まさにここを修正しようとしてる俺に対しても隠蔽してんの? って聞いたらよくわからない返答しか返って来なかった
597 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 14:00:34.20 ID:8zGv30iU.net] 後で見たら問題点シートからも削除されてて色んな意味で隠蔽されてた
598 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 14:01:18.81 ID:eiIG0jy5.net] >>585 同僚がどういう意味で「隠蔽」を使ってるかなんて俺には分からんよ。 お前は意味も分からないのに「隠蔽」と言ったのか? それじゃ会話にならんよ。
599 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 14:02:27.54 ID:8zGv30iU.net] >>587 俺もわかんないんだよ(笑)
600 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 14:03:32.47 ID:eiIG0jy5.net] >>588 お前の同僚なんて俺たちは知らないから意味が分からない言葉を使うな。
601 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 14:08:56.97 ID:fuiY39en.net] >>582 Dog.Walk(5) オブジェクト指向言語 Walk(Dog,5) C、関数型 オブジェクト指向信者は Dog.Walk(5)のほうがシンタックス的にいけていると言うのだ これがもしFightという関数になったとき Dog.Fight(Cat); Cat.Fight(Dog); Fight(Dog,Cat); これでいいたいことはうっすらわかりましたかね? WalkのコンテクストではDogを主語として扱うことに意味はあるのかもしれない。 しかしFightのコンテクストではDogあるいはCatを主語として扱うことに対する深い意味はないだろう。 言うなれば、主語を要しない文脈においても、主語を必要とする。 これを回避する方法はクラス・メソッドを使うという方法だ、 しかしそれは結局のところオブジェクト指向を殺している、 オブジェクト指向信者がバカにしているstaticおじさんの手法に過ぎない こんな単純なことすら穏便に解決できず、議論になりうる言語で一体何を設計しろと? 俺らは間違いなく Walk(animal,length)という関数を設計しFight(animal,animal)という関数を設計する さらに言えばFight(animal,animal.animal,・・・)といった可変長引数の関数を設計する そちらのほうが汎用性が高いのは自明だからだ >>584 Cのライブラリをテストするのとオブジェクト指向ライブラリをテストするのでは大きく違うだろ Cは所詮プリミティブを基本としているからこそ、簡単に関数の挙動をテストできるのに対して Javaはオブジェクトを基本にしているからこそ、わざわざモックオブジェクトを定義してやって 食わせてやらないと、簡単に構文エラーをはくだろ さらに言えばオブジェクトがカプセル化している状態(state)によっても、結果が異なる 聞きたいんだけど、オブジェクトという副作用の塊で何をどれだけテストするの?
602 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 14:12:47.82 ID:fuiY39en.net] 然るにまともにテストもできないし動作もさせられないからこそ テストという技術に重きが置かれるのである。 シンタックスエラーに怯え、さらには論理エラー(つまり実現したいロジックそのもののエラー)の検出性も低い シンタックスエラーが多いのは、君たちがアホなんじゃなくてシンタックスがいけてないってことなんだよ
603 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 14:16:01.21 ID:eiIG0jy5.net] >>590 DogとかCatとかを例に出す時点でどうかと思う。 非現実的な空想で語られても…。 後半は回答をごまかしてるけど、Cの標準ライブラリはテストせずに使ってるだろ? オブジェクト指向も標準ライブラリはテストしないで使う。 どっちも同じ。
604 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 14:19:25.59 ID:fuiY39en.net] >>592 標準ライブラリの話か、テストしないね 俺が問題にしているのは外部ライブラリの問題だからな 基本的にオブジェクト指向ってのは外部ライブラリを参照しながらアプリケーション構築するもんでしょ でなきゃ使いもんにならねえしな 外部ライブラリのテストはどうやるの?
605 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 14:22:50.15 ID:eiIG0jy5.net] >>593 作成したクラスはテストコード書いてテストする。
606 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 14:36:17.04 ID:fuiY39en.net] >>594 内部実装は見ないの? なぜ見ないのか 1.内部実装は隠蔽されているから 2.内部実装は多量なコードからなり読む気が失せるから 3.外部からの振る舞いが正しければいいので、精査はせずに動かす、動けばいいよ だってそれがオブジェクト指向だから 疑問に思うのは、答えが3だとして、その外部ライブラリのパフォーマンスをどのように推定するか?ということだ そしてどの程度テストコードを書けば「自分が思ったような挙動をしている」と確信に至ることができるかだ テストすべき対象はオブジェクトが内包しているプライベート変数の数kに比例するだろう もっと言えば、n個ののオブジェクトの相互作用を考えると爆発的に増えるだろう 最悪なのは、プライベート変数のゲッタは公開されているがセッタは公開されていない場合だ プライベート変数のセッタが公開されていない場合、オブジェクトのテストはどうやってするの?
607 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 14:38:23.48 ID:fuiY39en.net] というよりオブジェクト指向のファクトリパターンを使われたら 例えばオブジェクトの単純なコンストラクタも隠蔽されているよね このプライベート変数が状態Aから状態Bに遷移する条件が ドキュメントに記されていないってこともあるわけだが、 いったいどうやってテストするんだろうなあ
608 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 14:39:23.97 ID:eiIG0jy5.net] >>595 想定している状況を明確にしよう。 言語の標準には含まれないけど信頼できる第三者が提供しているライブラリないしクラスならテストせずに利用する。 そもそもソース自体が提供されないことも多いから。 で、想定している具体的なケースは?
609 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 14:48:46.08 ID:fuiY39en.net] >>597 ネットワークIOに関わるライブラリで、 ネットワークストリーム(websocket)をキャプチャするライブラリである。 このライブラリを連続して稼働させたいが、 ガベージコレクトしようにも、ネットワークストリームのデータは単方向リストで構成されており、 単純に言えば長期稼働によりOutOfMemoryの可能性がある 私はこの挙動に満足できないので、プロクシパターンでも使って改変しようと思っていたのだが オブジェクトのセッタ及びゲッタが満足に公開されておらず、そうすることもできない これのどこに再利用性が? この部分的な挙動以外の全てにおいて俺は満足しているが、 長期稼働を前提としない設計のおかげで、全てが台無しになっている 俺はどうすれば俺が期待するように稼働させられるかを知っているが、 たったこの一点だけでこのライブラリは「使えない」んだが
610 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 14:52:11.66 ID:DztPIEJ0.net] そのライブラリがOO以外で書かれてたらどう対応するの?
611 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 14:52:56.61 ID:eiIG0jy5.net] >>598 メモリリークが発生するコードがだめなだけでオブジェクト指向関係ないのでは。 Cのライブラリだったとして、メモリリークが発生するライブラリが使えないのは一緒じゃん。
612 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 15:08:36.99 ID:fuiY39en.net] このライブラリは複数の構成要素からなっている httpのキャプチャ この機能は使える データストリームのencrypt decrypt この機能も使える パケットのファイルへの書き出し この機能も使える websocketのキャプチャ この機能も使える ただし、データ構造は単方向リストで実装されている は? は? これはライブラリ作者が悪いの?俺が悪いの? 結局オブジェクト指向というのは、適切に全ての情報を開示できなきゃ成り立たないし ライブラリ作者と俺の考えが少しでも違ったら、場合によってはその全てがダメになっちまう 言っておくがライブラリ作者の考え方は間違いではないよ、もっとも汎用性のある構造はリストだからな キューを使ったりすると、そのデータストリームの速度によっては、キューからデータがあふれる事もありえる もっとも汎用的な解がリストだ、そしてそれは俺の求めるものじゃない なぜこの機能が別々のパッケージとして切り出せないのか? オブジェクト指向は巨大なライブラリを構築するための概念らしいが、 さて、実際のところは小さなライブラリにできない理由があるんだろうね >>599 もしライブラリが関数であれば、その当該関数のみを自作することができる 構造体であったとしても構造体がどのようなデータから構成されているかを見ることは出来る ところがオブジェクト指向であると、まずオブジェクトを構成して プライベート変数をセットして(時には自由にセットすらさせてもらえなくて) さらにはオブジェクトがどのようなデータから成っているかは「ドキュメントが公開されていないかぎり知ることはできない」 >>600 www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html Cプログラムでメモリリークなんて聞いたことがあるだろうか。今では、メモリリークの発見が大産業になってしまった。 全部見つけるのは費用がかかりすぎるから、たいていの会社はあきらめて、山ほどリークのあるプログラムを出荷してしまう。 I: ツールはあるけど…。 S: そのツールも、ほとんどは C++ で書かれているんだよ
613 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 15:10:13.16 ID:6ih2a7FC.net] >>598 関数Fの動作が少し気に入らないから改造したい しかしFの実装詳細はソースとして公開されていないから手が出せない って状況と同じ事だよね? OOP全く関係ないけど認識なんか違う?
614 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 15:12:40.93 ID:8zGv30iU.net] >>601 仕様で一週間に一度自動で再起動かける仕様にしておけば 再起動する仕組みさえ動けば ランニングは2週間も持てば良い ってして逃げてる(笑)
615 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 15:13:45.22 ID:k6yVAd6S.net] 隠蔽しちまったら安全に継承も出来ないよな。
616 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 15:21:10.78 ID:fuiY39en.net] 結局ライブラリを改変するためにはハッキングじみたことをするしかない それならば、自分で1から書いたほうが早い なぜそんなマネをしないといけないのかというと、 オブジェクトがプライベート変数という状態を隠しもっており、 それが自分自身の思うように統御できないように構成されているからだ さらにはそのオブジェクトはパッケージを横断しており、 だからパッケージの一部分のみを切り出して小さなパッケージとすることもできない これは事実上のグローバル変数だ もしencryptやdecryptの部分だけを切り出して公開してくれていればよかったのに でもおそらくDRY原則とやらがそれを妨げるのだろう もっとも効率よくDRY原則を行うにはどうすればよいのか?それはグローバル変数を使うということだ グローバル変数を用いればもっとも効率よく状態を共有することができる さらに言えばファクトリにオブジェクト生成を投げたりして 単純なオブジェクト生成すら封じられている場合もよくある >>602 もし単純な関数であるならば、その引数と返り値だけを気にしていればよい、それのみをプロクシすればよい もしその部分さえ隠蔽していたならば、ライブラリとして一切利用できず、誰かに不平を言われることもない オブジェクト指向は本来ユーザが定義すべき状態すらも隠蔽するので、確かに手軽に利用できる しかしライブラリ作者が規定した挙動がユーザの求めている挙動と同一であるという保証はない。 だからライブラリをしばらく使った後に捨てることになる 「やっぱあのライブラリイケてねえわ」 果たしてCや関数型のライブラリでこんな事になり得るだろうか? 1.最初から使えないか、2.思ったより遅いか、3.何度でも使える この3つにしかならないだろう。
617 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 15:25:24.73 ID:fuiY39en.net] オブジェクト指向というのは、 大きなシステム、大きなパッケージを作るための思想ではなく 小さなシステム、小さなパッケージを作らせてもらえない思想のことである UNIX思想の対極に存在するものであり、つまるところはwebの思想にも反するものである 言語のコアとライブラリを編みこむようにプログラムを構築できず 巨大なビルディングブロックを積み上げて、施工誤差に耐えながらも、 出来上がった行数を見てこんな巨大なものを作り上げたと悦に入る もちろん成果物も巨大であるからこそ、他人には保守することができない このオブジェクトがどのような状態、変数からなり、どのオブジェクトから継承されていて、 何をしていいのか、何をしてはいけないのかなどどこにも書かれてはいない
618 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 15:50:36.62 ID:DztPIEJ0.net] >>601 その機能構成なら普通は1クラスにはまとめないよ OOでもキャプチャクラスを書き直すだけだと思うけど
619 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 15:54:03.14 ID:8YdCKwaE.net] 大抵はクラス分けに失敗しているのと、表層だけをオブジェクト指向で設計して細部を放置のまま実装に入っちゃうケースばっかり。
620 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 15:54:35.34 ID:D6e8xYJD.net] >>581 > だが俺の考えを言えば多重継承をサポートしないかぎり、DRYは満足できない 同意。 多重継承に関しては出来ないことによる問題の方が大きい気がしている。 >>590 > これを回避する方法はクラス・メソッドを使うという方法だ、(中略) > オブジェクト指向信者がバカにしているstaticおじさんの手法に過ぎない 俺の理解では、staticおじさんの手法ってのは全関数をstaticにしてフラットにアクセス、 つまりC的にするということであって、クラスメソッドを使うことではないと思う。 それはさておき、実は.NETはクラスメソッドが主流で、Array.indexOf(array, value)となっている。 > https://msdn.microsoft.com/ja-jp/library/7eddebat(v=vs.110).aspx これについては俺も若干謎なんだが、とにかくインスタンスメソッドではない。 なぜだか知っている人が居たら教えて欲しいのだが、 少なくともヘルスバーグは君と同意見だったのだろう。 >>591 > 然るにまともにテストもできないし動作もさせられないからこそ オブジェクト志向は「設計」に重視で、「テスタビリティ」については考えられていないのはその通りだ。 その点、確かに「副作用がない」点に於いて関数型は「テスタビリティ」がいいのも事実だ。 ただし実際に「関数型ガー」と主張する馬鹿共は無理に状態変数を除去したおかしなコードで(キリッ する事も多く、これまた何でそうなるのかはかなり疑問なのだが。 とはいえ、確かに、「テスタビリティ」について何も考えられていないオブジェクト志向は、 今となっては時代遅れなのかもしれない。
621 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 15:55:25.83 ID:D6e8xYJD.net] >>601 > 単方向リストで実装されている 配列の間違いか? 一応、単方向リストならノードを抜けるので、正しく実装されていればGCは為され、OutOfMemoryは発生しない。 ただし、「正しく実装」されているかは確認できないが。 逆に、間違った実装であることは確認できる。例えば、マイナス方向へのシークが出来るとか。 >>605 言っていることは分かるが、それはオブジェクト志向ではなく、オープンソースでないことの問題のように思われる。 とはいえ、 > もっとも効率よくDRY原則を行うにはどうすればよいのか?それはグローバル変数を使うということだ > グローバル変数を用いればもっとも効率よく状態を共有することができる これについては同意だ。厳密に重複コードを排除したいのなら、オブジェクト間はだんだん密結合になっていく。 だから、どこまで厳密にやるかはその人次第で、オブジェクトがどれだけ粗結合を保てるかもそれ次第になる。 その点、巨大な固まりのリリースが多いかどうかは俺は知らない。 先に言っておくが、俺は1の>>1 程度の池沼を相手にする気はない。 レスを要求するのなら、池沼でないことを自らの書き込みで示せ。 お前らには池沼であり続ける権利はあるし、俺にはそれを止める権利はない。
622 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 15:55:43.41 ID:8zGv30iU.net] 俺は39yenさんの言いたいことが痛いほどわかるぜ オブジェクト指向は怪しい ぶっちゃけ使わないほうが開発がうまくいく
623 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 16:11:09.44 ID:D6e8xYJD.net] ついでに言っておくと、俺は ID:n7HRsF8B についてもほぼ完全に同意だ。 異なるのは、俺は>>449 にも完全に同意である点と、 リファクタリングはもう少し種類があってもいいだろ、という点だ。
624 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 16:16:20.94 ID:6ih2a7FC.net] こういう触ってほしくないところまでいじくり倒すバカがいるからこそのカプセル化なんだろうな ありがたみがよくわかるよ SOLID知らないバカと一緒に仕事をする事になったらアクセスを禁止して身を守るしかない ありがたみがよくわかるよ
625 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 16:19:19.30 ID:MVcwnGuc.net] >>601 もしそのライブラリが「理想的な」オブジェクト指向なら listという実装に依存していないインターフェースを公開するだろう オブジェクト指向だと継承よりもインターフェースについてプログラミングしたほうがいいので
626 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 16:23:32.02 ID:MVcwnGuc.net] 多重継承は禁止してmix-inはできるようにすればいいんじゃないかな 個人的にはscalaのコレクションなんかはいいOOの設計だと思う 利用者から見るとimmutableなんだけど 実装はmutableになっていてprivateでmutableな状態を隠してる
627 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 16:38:02.40 ID:D6e8xYJD.net] で、俺なりに何故1の>>1 みたいな池沼に限ってOOPにすがるのかな?ということを考えてみたんだが、 「形」があるからじゃないかなと。 センスがない奴はいざ仕様を出されて「設計」しろと言われても、何をやっていいか分からない。 もちろん「設計」の中にはOOPならクラス分けもあるのだが、それ以前に、 例えばC++なら「手続き型」等も選べるのだが、それをどう選んでいいかも分からない。 その点、OOPならクラス分けしたら「設計」した気分になれるし、「継承」しておけば正しくOOPした気分になれる。 だから考えられない池沼にはOOPは割とフィットすると思うんだよ。 ただこれは、局所的な最適化でしかない。 例えば、熟練したプログラマは10,000行のコードまでは苦もなく扱えるというのが通説だが、 このとき、10,000行のスコープで最適化が行われる。 OOP信者はこの例でいうなら1,000-3,000行のスコープでの最適化しかしておらず、 その上の「手続き型」「関数型」等の階層での最適化が出来てない。 だからその上の最適化が出来る連中からは、異常にOOPにこだわる奴は馬鹿に見える。 もちろんOOPにも利点があるので使われているわけだが、初めからOOPありきとなるべきではない。 とはいえ、OOPの問題点だと言われているのは、 「正しくOOPできてない」事による物が多々紛れ込んでいるのも事実だと思うが。
628 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 16:58:11.35 ID:IqB6Pujt.net] 並程度の能力だと正しくOOP出来ないのがOOPの問題点
629 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 17:23:51.46 ID:nosfsWv3.net] >>581 オブジェクト指向言語にありがちな仕様なだけでオブジェクト指向って書き出しは少し強引では
630 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 17:24:03.06 ID:eiIG0jy5.net] >>601 え?Cプログラムでメモリリークがないと思ってんの?
631 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 17:26:50.20 ID:eiIG0jy5.net] >>605 Cにもプライベート変数はあるんだが…。 不正確な記述が多くて主張したいことが分からない。
632 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 17:30:45.60 ID:eiIG0jy5.net] >>605 グローバル変数の利用まで推奨しちゃってんの? 俺の知ってるCではグローバル変数の利用は控えるべきってのが常識なんだが グローバル変数を積極的に推奨するって異常だな。
633 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 17:34:05.48 ID:D6e8xYJD.net] >>615 > 多重継承は禁止してmix-inはできるようにすればいいんじゃないかな mix-inでもいいのは確かなんだけど、そもそも禁止する意図は何なんだ? wikiの1-4なら、つまり「設計」が悪い。で終わってしまう。 > https://ja.wikipedia.org/wiki/%E7%B6%99%E6%89%BF_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0) private/publicみたいに、結合度を「文法的に」確定させようということなのか? (文法的に継承しにくい構造にして、オブジェクト間の粗結合化を促進する、つまり洗脳的) 俺としては、そこに書いてあるように、 「直感的」に書けない場合がある=良い設計が見えているのに記述できない方が問題だと思うのだが。
634 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 17:35:20.84 ID:nosfsWv3.net] >>590 コンテキストが必要の無い場面はクラスメソッドになるのが当然で、それをオブジェクト指向を殺しているなんて誰も思っていない。 話が極端で盲目的過ぎ
635 名前:622 mailto:sage [2016/06/05(日) 17:37:35.59 ID:D6e8xYJD.net] 分かりにくかったから修正 × wikiの1-4 ○ wikiの「継承_(プログラミング)」のページ内、「多重継承と仮想継承」の下半分に書いてある1-4
636 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 17:39:58.20 ID:eiIG0jy5.net] >>622 多重継承はどちらの親から継承するか競合する場合があるからだろ。 コードとして分かりにくいし、名前の解決も複雑になる。
637 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 17:41:12.98 ID:k6yVAd6S.net] 真のオブジェクト指向は、 オブジェクト同士がシステムで規定した唯一のフォーマットだけでメッセージ交換して動作する物なんだから、 結合度も最弱でどの機能を挿げ替えるにも一瞬で済むはずなんだ。 今の実装方法が間違いだらけなんだ。
638 名前:デフォルトの名無しさん [2016/06/05(日) 17:47:45.40 ID:zc7alBMy.net] メッセージ交換のオブジェクト指向が本来なのは確かだけど今のオブジェクト指向は抽象データ型の方を指す場合が多いからねぇ
639 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 18:09:55.26 ID:fuiY39en.net] >>623 キミはコンテクストが必要な場面と不要な場面すら区別がついてないだろう? いつ、クラスメソッドにしていつインスタンスメソッドとして実装すべきか明確な設計指針を持っているか?
640 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 18:10:02.90 ID:RNuHfoku.net] そして感情は基本的な物を組み合わせれば、複雑な物が作れるはずだ
641 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 18:10:20.48 ID:RNuHfoku.net] 誤爆
642 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 18:18:56.22 ID:fuiY39en.net] 理想的なオブジェクト指向、正しいオブジェクト指向など存在しないだろ 欠点を指摘したら、理想的なオブジェクト指向設計であったならば、この問題は回避されたという だがその欠点を克服するために標準的なオブジェクト指向言語がどの程度のコード量を追加で要求し あるいはパフォーマンス上でのオーバーヘッドがどれだけ発生するかなんて知ったことではないという なぜならば オブジェクト指向とは実装を隠蔽し、外部的からみた状況がうまくカプセル化されていればいいのだから もっともそんなことは単純な関数にだって出来るということは、誰も指摘しないし理解もできない 完全なオブジェクト指向であればという言葉は 単なるないものねだりを象徴する言葉で、言語が正しい設計を一切サポートせずに むしろ誤った方法を選ばせているという自白に過ぎない だいたい、システムを設計するのにそんな超自然的なセンスなど必要ない 計算すべき対象が、有限のメモリ空間、有限の時間で解ければいいだけだ やりとりの美しさや汎用
643 名前:性というものは存在するが、 オブジェクト指向という概念はその根底からして汎用的ではありえない クラスを定義するごとにメソッドの定義を要求されるというのはどこも汎用的な考えではない そしてそれを回避するために継承を行うというのも汎用的ではない 汎用性という概念でいうならば、 クラスオブジェクトは、構造体、あるいはハッシュテーブルに対して1mmも勝てる部分は存在しない [] [ここ壊れてます]
644 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 18:22:55.64 ID:eiIG0jy5.net] >>631 お前が例としてあげた欠点はCにもあること。 おまけにグローバル変数の多用などはCの世界でも忌むべき行為。 的外れな批判を繰り返してる。 間違ったコードを書きにくくなっただけでもオブジェクト指向は有用だとしか思えない。
645 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 18:26:04.99 ID:kjF/TSSS.net] グローバル汚染とかマジ勘弁して下さい
646 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 18:27:37.67 ID:DztPIEJ0.net] >>631 何にでも適用出来ることをOOPLにだけ当てはめて批判してるだけ
647 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 18:36:04.16 ID:nosfsWv3.net] >>590 Cがプリミティブを基本としてるってlibcとかの話でしょ 話がズレズレ
648 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 18:38:44.12 ID:fuiY39en.net] >>632 ごめんね、ちゃんと読み取れる人だけには意図が伝わるように書いたつもりなんだけどね こう言えばわかるよね オブジェクト指向のパッケージングが単一のクラスではなく複数のクラスからなる 比較的大きいモノリシックなものとなっているのは、オブジェクトが隠れたグローバル変数として機能しているから DRY原則に忠実になるためには、クラス定義もまた一つでなければならない もしこれがクラスではなく関数モジュールであったとしたならどうだろうか? その関数モジュールのみを一つのパッケージとして切り出すことに何の問題もないだろう。 しかしクラスというのはメソッド定義だけではなくデータ・タイプの定義も兼ねている。 このデータタイプ定義とメソッド定義の重複を許すならば、 小さなパッケージとして、ライブラリを切り出すことができるだろう でもオブジェクト指向ライブラリではそんなことはしないよな 君たちの言葉で言えば、オブジェクト指向というのは凝集性が低い キミが言っている間違ったコードやグローバル変数の排除というのは Cでいうところのモジュールで制御できる それはオブジェクト指向の問題ではなくスコープ制御の問題だ グローバル変数を無くすという意味合いではレキシカルスコープをサポートしていれば十分なのに private修飾子を使うことにしたことで、オブジェクト指向はテスタビリティを捨てたんだよ 間違ったコードならデバッグすればいい、事実デバッグできる だが間違った設計指針で突っ切ればそれじゃ済まないのは痛いほど理解しているよな? 何年経っても結合テストで悲鳴を上げ続ければいいんじゃねえの? 単体テストすら簡単にはできねえのにな
649 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 18:40:17.09 ID:fuiY39en.net] 間違ったコードを書かないという観点で言えば 関数型言語のほうがよほどオブジェクト指向よりも安全性をサポートしている
650 名前:デフォルトの名無しさん [2016/06/05(日) 18:49:57.16 ID:/bruxSbe.net] 関数型は遅いからな 現実的には使いものにならないことが多いだろう
651 名前:デフォルトの名無しさん [2016/06/05(日) 18:53:18.70 ID:zc7alBMy.net] よし じゃあrust使えば解決だな!
652 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 18:53:40.94 ID:fuiY39en.net] オブジェクト指向の問題点は Cよりも後発であるにも関わらず、より問題やシンタックスを複雑にしていて それもコード上で解決する問題から、設計上に関わる問題へと進化させている どれだけ俺達が頑張ろうとも機能を実現するのはアルゴリズムで有るにも関わらず カプセル化の海にアルゴリズムを沈め、不可視とした もっともプログラマが検討すべきデータ構造とアルゴリズムという観点をカプセル化の海に沈めた そしてもっとも重要ではないテクニカルなシンタックスについての井戸端会議を始めだした オブジェクト指向ユーザーは(Cに比べて)保守性や安全性が優れているというが、本当にそうだろうか? Cのポインタは確かに不要な機能かもしれないが、モジュール機能があれば最低限のスコープ制御はできる。 オブジェクト指向は名前をどのようにつけるかを気にしている。 もしそうでないならば、何かを継承する必要もないし、ポリモーフィズムも必要ない オブジェクト指向は確かに高尚な概念だ、しかしそれで創りだされるプロダクトがゴミでは意味が無いだろう オブジェクト指向をフル活用してどんなプログラムが作るかというと、それこそ電卓計算機以上のものは作れないし、作ってもいないだろ。
653 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 18:56:27.86 ID:fuiY39en.net] 僕らはそんな電卓計算機、あるいはタイプマッチングディスパッチャなんて 設計無しで書けますから
654 名前:デフォルトの名無しさん [2016/06/05(日) 19:04:37.43 ID:/bruxSbe.net] >>640 どっかの洋書のマルコピか?
655 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 19:07:18.20 ID:eiIG0jy5.net] >>636 「オブジェクトが隠れたグローバル変数として機能している」ってどういう意味? 「DRY原則に忠実になるためには、クラス定義もまた一つでなければならない」 とあるが、同じクラスを繰り返し定義することなんてDRY以前にあり得ない。 知ってる言葉を必死に繋げてる感じは伝わってくるんだけど、もっと平易に理解できるように書いてくれ。 何を言いたいのか分からん。
656 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 19:13:58.38 ID:eiIG0jy5.net] >>636 専門用語を使いたいお年頃なのかもしれないけど、文章の流れとかで理解度は分かるから。 Cはメモリリークがないと言っちゃうところとかからも。 背伸びするより伝わる文章書いたほうが印象いいよ。
657 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 19:16:03.53 ID:PAgdOZpu.net] > Cはメモリリークがないと言っちゃうところとかからも。 動的にメモリ割り当てた経験がないんだろうなw 組み込み業界に新卒で入ってそのやり方しか知らんとかかな。
658 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 19:35:56.66 ID:nosfsWv3.net] >>628 コンテキストに状態を保持する、または状態を利用する場合以外はクラスメソッドでいいだろ
659 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 19:38:45.17 ID:PAgdOZpu.net] >>590 > Javaはオブジェクトを基本にしているからこそ、わざわざモックオブジェクトを定義してやって > 食わせてやらないと、簡単に構文エラーをはくだろ コンパイル言語で構文エラー?
660 名前:デフォルトの名無しさん [2016/06/05(日) 19:41:52.40 ID:zc7alBMy.net] コンパイル時に構文エラーは出るんじゃね?
661 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 19:45:31.80 ID:PAgdOZpu.net] C言語でも、ネットワーク通信が含まれた関数をテストしたいときに ネットワークを使わないでできるようにしたいならモック関数が必要になるし、 別にネットワーク通信してもいいっていうのなら、Javaでも モックオブジェクト使わずに、本物のオブジェクトを 使えばいいはずだけど? なんか、なんのためにやるのか?を理解してない気がするね。
662 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 19:56:32.50 ID:fuiY39en.net] >>643 Cでグローバル変数(が増える)が嫌な理由は、 1.大域的にその変数にアクセスできることが嫌であること 2.グローバル変数のおかげでモジュールの分割が滞ること javaでクラス定義(が増える)のが嫌な理由は、 1.大域的にクラスをコンストラクトできるということが嫌であるということ 事実、そのクラスに無関係なコンテクストでもコンストラクトできる そんなことはしないとキミは言うかも知れないが、それならCのグローバル変数だって大差ないね、俺もそんなことはしない これは事実上のパッケージ内でのグローバルオブジェクトだ そしてそうであるがために、必要以上に脳みそを使わざるを得ない このオブジェクトは、あのオブジェクトと関係がある、そしてそのオブジェクトとは関係がないってね 2.クラス定義のおかげで、パッケージ分割が滞ること クラスが増えるということはクラスの依存性そのものが増えるということだ、 もしクラスAがBにクラスBがCにクラスCがDに依存している場合、 そのパッケージはクラスA,B,C,Dを内包するものになるだろう。 そのう
663 名前:ソBはFやGに依存するようになり DはV W X Y Zに依存するようになるだろう。 そうしてパッケージはモノリシックなものになっていくし、 事実オブジェクト指向ライブラリは俺の知る限り関数型のライブラリよりも一つ一つの粒度が大きい。 そしてそのライブラリの使い方を調べることほど面倒なことはない パッケージ分割されていないからこそ、オブジェクトの関係性や依存関係を整理することが苦痛で、複雑性が増す なぜこんなことになるのかというとオブジェクトがデータ・タイプとメソッド定義を混在させているからに他ならない もしオブジェクトがメソッドをもたないのであれば、オブジェクト同士の依存性やヒエラルキーは発生しない 俺も正直なぜデータタイプとメソッドを混在させておきながらSRPやDRYが達成できるのか理解できないのだよ [] [ここ壊れてます]
664 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:00:28.93 ID:PAgdOZpu.net] >>590 > これがもしFightという関数になったとき > Dog.Fight(Cat); > Cat.Fight(Dog); > Fight(Dog,Cat); > これでいいたいことはうっすらわかりましたかね? 何も言いたいことがわかんねぇwww 例えば、「戦士.戦う(スライム)」 だったら普通に武器で攻撃するだろうけど 「戦士.戦う(メタルスライム)」 だったら、聖水を使うかもしれない。 「魔法使い.戦う(フレイム)」なら弱点のヒャド系魔法使うかもしれないし、 「フレイム.戦う(魔法使い)」なら火炎の息を吐くかも知れないし。 自分が今どんな攻撃ができるかは、自分しか知らないだろ。 「戦う(魔法使い, フレイム)」 とか言われたって、 戦う関数は何すればいいか分かんねーよw
665 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:02:00.75 ID:nosfsWv3.net] C言語メインでやってたエンジニアが(たぶん)Javaでコード書けって言われて使ったライブラリがたまたま微妙なAPI設計で鬼の首取ったみたいに言われても、、、 オブジェクト指向って書いてある時にさしてるものがJavaのとあるライブラリだったり、Javaの言語仕様 (privateとか)だったり
666 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:05:43.86 ID:PAgdOZpu.net] >>650 > Cでグローバル変数(が増える)が嫌な理由は、 > 1.大域的にその変数にアクセスできることが嫌であること それ間違ってるから。アクセスと言っちゃうと読み書きの両方になってしまう。 グローバル変数がだめな理由は、大域的にその変数に「書き込み」ができるから。 読み込みだけならグローバルで構わん。っていうかOSから得られる様々な情報、 例えばプロセスIDとか空きメモリ量とかファイルとかC言語でも大域情報だらけだからなw ということで、Javaのクラス定義がグローバルにいくら増えようが、 クラス定義は読み込みなので、問題ないんだよ。 もちろん「どこからでもクラス変数が書き換えられる」のであれば それは(書込み可能な)グローバル変数と言っていいけど。
667 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:06:48.68 ID:eiIG0jy5.net] >>650 「javaでクラス定義の(が増える)が嫌な理由」って必要があるなら増えても問題ないから避ける必要はない。 あと、クラスを参照できる範囲は制御できるから他から使われたくないなら公開しなければいいだけ。
668 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:13:12.23 ID:fuiY39en.net] 俺は十分説明したと思う オブジェクト指向はCよりも遥かに複雑な依存関係を作り出せるし テストはしにくいし、よって論理エラーを補足しにくく、結合テストで悲鳴を上げる事になり、 メソッドとデータ・タイプが分離されていないおかげで、クラス構造の設計(という名のお絵かき)は大変になるわ、 デザインパターンとかいう言語仕様の欠陥の見本市に付き合わされるわ ToStringすらオーバーライドしないと使いものにならないし オブジェクトを主語としたおかげで汎用性はないし、 クラス・メソッド(関数)は用意されているもののおまけ程度で、関数型には程遠い使い勝手で 単純なことをするには必要以上に複雑で、複雑なことをするにはなおいっそう複雑で その主張がわかってくれればいいよ 結局Cが抱えていた問題を解決したといって、確かにその問題は解決できたのかもしれないが、 Cよりも規模の大きい、厄介な問題を引き連れていることに気が付かないようではな >>651 Fighter.Fight(Slime)
669 名前:@→たたかう Fighter.Fight(metalSlime) →聖水 まずこんな動作させたら、このメソッドを使うユーザープログラマが混乱するよね 百歩譲ってそれでいいとしよう、聖水を使うのは、ライブラリプログラマの配慮であり慈悲であると 問題はこれはオブジェクト指向の問題ではないってことだ この動作をオブジェクト指向で実現するなら、 FighterクラスのFightメソッドの中にif文をずらずらと並べて if(slime) {"slash"}else if (metalSlime) {"use holywalter"});とするしかない。 でもってmagicianクラスのFightメソッドには if(slime) {"Fire"} else if (Flame) {"Blizzard"} ... なぜならばオブジェクト指向言語はマルチメソッドという概念をサポートしていないからだ キミの指摘はオブジェクト指向がダメな部分を改めてあげつらっているに過ぎない ちなみに俺ならまずは2次元配列を使ってそれを実装することを考えるけどな [] [ここ壊れてます]
670 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:14:28.99 ID:D6e8xYJD.net] >>631 言いたいことは分かるが、現実的に多態は有用だ。 もちろんオブジェクト構文を用いずに無理矢理多態することは出来るが、 専用文法があるのならそれを用いた方が見やすいのは事実だ。 問題は「クラス作成」「継承」さえすればいいと思っている馬鹿が多いことだと思う。 これは関数型にも同様に言えて、こちらは「状態を持たない」「副作用がない」になる。 >>636 言いたいことは分かる。 > グローバル変数を無くすという意味合いではレキシカルスコープをサポートしていれば十分なのに 特にこれなんて本当にそう思うし、クラス階層がまともに作れないC++は仕様に欠陥があると思う。 ただ正直、レキシカルスコープはGC言語には似合うがスタック言語には似合わない。 だからC++のラムダはアレな仕様に「見た目は」なっている。 実際には確かに妥当な仕様なのだが、綺麗に便利に書こうって感じじゃない。 まあこれは脱線だが。 >>640 > Cよりも後発であるにも関わらず、より問題やシンタックスを複雑にしていて > それもコード上で解決する問題から、設計上に関わる問題へと進化させている ここについては俺の見解は少し異なる。 俺はタイプ量は気にしない。 型にしてもシンタックスにしても、それはコンパイル時点で静的にバグを落とすためだ。 静的に落とせるバグは全て静的に落とすべきだ。動的にテストで落とすよりも断然生産性が高い。 とはいえ、いちいちシンタックスがウザイのも事実だが、これは税金だと思っている。
671 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:20:00.92 ID:PAgdOZpu.net] > まずこんな動作させたら、このメソッドを使うユーザープログラマが混乱するよね え?なんで?wwww 相手に最適な攻撃をするのは、当たり前の話だけど もちろん、相手(引数)の情報を知らないならば 有効そうな攻撃をするしか無いけどね。 同じ戦うでも、知性によってどういう攻撃をするかは変わる。
672 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:22:15.49 ID:PAgdOZpu.net] >>655 > この動作をオブジェクト指向で実現するなら、 > FighterクラスのFightメソッドの中にif文をずらずらと並べて > if(slime) {"slash"}else if (metalSlime) {"use holywalter"});とするしかない。 あれ? でも、Fight(Fighter, Slime)とかだったら、 Fightメソッドにif文をずらずら並べないといけないだけだよね?w
673 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:24:05.47 ID:DztPIEJ0.net] >>655 >マルチメソッド メソッドだけの静的なクラスも作れるからそこで多重定義したらいい
674 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:26:32.30 ID:PAgdOZpu.net] >>655 > なぜならばオブジェクト指向言語はマルチメソッドという概念をサポートしていないからだ ほとんどの手続き型もマルチメソッドという概念をサポートしていませんが? https://ja.wikipedia.org/wiki/%E5%A4%9A%E9%87%8D%E3%83%87%E3%82%A3%E3%82%B9%E3%83%91%E3%83%83%E3%83%81#Common_Lisp > 汎用のマルチメソッド機能をサポートするプログラミング言語は次のとおりである。 > Common Lisp (Common Lisp Object System) > Dylan > Nice > Slate > Cecil > Perl6 > > 何らかの拡張でマルチメソッドをサポートする言語として、次のものがある。 > Scheme (TinyCLOS) > Python (gnosis.magic.multimethods) > Perl (Class:Multimethods) > Java (MultiJava) > Ruby (The Multiple Dispatch Library, Multimethod Package) この中で手続き型なのはどれだろう?w
675 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:30:40.15 ID:fuiY39en.net] >>657 Fighter.OptimalAct()ってことね で、その知性をオブジェクト指向で表現するにはどうするのかってことだが、 例えばFighter.monsterknowlegde というプライベート変数で それぞれのモンスターに対する知識ハッシュテーブルを定義してやればキミのやりたいことは出来る。 さらに言えばmagicianにも同じ変数が必要だから これはBattleClassというクラスから継承するのがおおよそ正しいオブジェクト指向だと考えられる そしてそれがオブジェクト指向的に正しい解であると同時に、俺がやらない方法でも有る >>658 真面目にやればそうだろうね、マルチメソッドも結局はif文みたいなもんだし というよりディスパッチ自体が実質if文だからね まあ俺は、2次元の関数配列を書いて処理しますけどね オブジェクト指向に従うと、Fighterに対して一次元のハッシュテーブル、というふうにしないといけない さらには継承を使わないといけない もっとも、Fighterがwizのように何人も生成できて、キャラクター生成の度に、monsterknowledgeを初期化して生成する っていうのはいかにもオブジェクトらしいけどな まあ、結局2次元の配列で処理できるんですが
676 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:33:28.30 ID:PAgdOZpu.net] >>661 > オブジェクト指向に従うと、Fighterに対して一次元のハッシュテーブル、というふうにしないといけない > さらには継承を使わないといけない ↑ 言い方を変えるだけでこんなにネガティブな印象に! ↓正しい言い方はこれ オブジェクト指向に従うと、Fighterに対して一次元のハッシュテーブルで十分である。 そして継承を使えばいいだけである。
677 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:37:34.37 ID:PAgdOZpu.net] 結局のところC言語で手動でオレオレマルチメソッドを実装するって話なら オブジェクト指向言語でも、手動でオレオレマルチメソッドを実装すればいいし、 言語仕様に組み込まれた、本物のマルチメソッドが使いたいならば C言語では不可能で、本物のマルチメソッドが組み込まれた言語 (もちろんオブジェクト指向言語にもそれは存在する)を使えばいいだけ。 ID:fuiY39en の話を読めばわかるが、結局こいつは Javaだけが唯一のオブジェクト指向言語だと勘違いしているのだ。
678 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:38:16.94 ID:MVcwnGuc.net] オブジェクト指向を批判しようとしてjavaの批判になっちゃうのはよくある
679 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:38:30.72 ID:eiIG0jy5.net] >>655 Fighterだのなんだの空想の世界で語ってるせいでよく分からんが違うクラスのオブジェクトに対して 異なる処理をしたいこともあるんだし、したければすればいいだけ。 同じ処理でいいなら分ける必要はない。 その部分の動作は切り分けたいならvisitorパターンを使えばいい。
680 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:39:35.10 ID:fuiY39en.net] Fight()なら Fighter F Magician M Slime S Flame F MetalSlime MS として OptimalActsという関数テーブルを用意して F M S Slash() Fire() F Slash() Blizzard() MS Use(holywater) Use(holywater) その通りに呼び出せばよいし、OptimalActsをとるかどうかは、MonsterKnowledgeで制御すればいい MonsterKnowledgeはmutableでなければならないし、OptimalActsはimmutableでもよい。 >>663 俺の指摘は、この問題を特にあたってJavaがCよりも有利な解決策を持ってないってことを示しているだけなんだけど よくRPGを使ってオブジェクト指向を例示する本があるけどさ、あれって無意味だと思うんだよね こういうちょっとでも問題が複雑になるとJavaはあまりにも無力だろ
681 名前:デフォルトの名無しさん [2016/06/05(日) 20:43:13.69 ID:MVcwnGuc.net] >>590 >オブジェクトという副作用の塊で immutableにすればいいのでは >>636 scalaだったら private[packege名]とやれば特定のpackageだけでさわれるprivateが指定できるので 単体テストだったら全然できる
682 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:44:16.06 ID:PAgdOZpu.net] >>590 で > WalkのコンテクストではDogを主語として扱うことに意味はあるのかもしれない。 > しかしFightのコンテクストではDogあるいはCatを主語として扱うことに対する深い意味はないだろう。 こんなこと言ったのに、↓主語として扱う意味を見つけてしまったなぁw > もっとも、Fighterがwizのように何人も生成できて、キャラクター生成の度に、monsterknowledgeを初期化して生成する > っていうのはいかにもオブジェクトらしいけどな 結局オブジェクト指向としての設計の話をするならば、これのほうが正しいんだよ。 > Dog.Fight(Cat); > Cat.Fight(Dog); ただし設計とは別の観点、つまり「メンテナンス性のために戦うアルゴリズムだけを分離したい」となれば、 それは、アルゴリズムだけを収録したクラスを作って(あれ?将棋でも同じ話しなかったっけ?w) それを入れ替えられるようにすればいい。それは上記の設計を変えずにできる。 設計は正しいままで、アルゴリズムを呼び出すようにする。
683 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:45:33.12 ID:8zGv30iU.net] すげーな39yenさん こういう問題をちゃんと文章にできるって羨ましいぜ 俺はその時々で舌打ちして終わり そして抱えたイライラは明日には忘れる
684 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:45:58.77 ID:MVcwnGuc.net] Visitorパターンはパターンマッチができる言語だったら パターンマッチで対処したほうがいいね
685 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:46:25.11 ID:PAgdOZpu.net] >>666 > こういうちょっとでも問題が複雑になるとJavaはあまりにも無力だろ 無力って言う割に、自力で解決できる簡単な方法を あなた自身が提示しましたが?w
686 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:46:45.55 ID:fuiY39en.net] Javaを使ってRPGを記述しようとしても一切体系的に記述できないし、 2次元の関数テーブルのほうが、明らかにデータの凝集度としても上なんだよなあ オブジェクト指向の教義を信じて それぞれの役割に応じて最適行動を散らばらせても待ってるのは悲劇だけだから 例えばだけど、Flameに対する各役割の最適行動はなんですかという疑問を持ったとしよう。 オブジェクト指向だと、それぞれの役割に対して、いちいち聞いて回らないといけなくなるよね Fighter.OptimalAct() Magician.OptimalAct() Thief ・・・ ここで、BattleClassの必要性は確定しちゃうよね Foreachでぶん回すことを考えると、各職業を集約してまとめあげるようなスーパークラスあるいはインターフェースが必要になる もちろん我々はそんなことをしなくてもFの行を横に見ていくだけでわかるのにね
687 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:47:40.30 ID:PAgdOZpu.net] >>672 反論を無視して同じことを繰り返し言っても無駄w
688 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:48:46.91 ID:PAgdOZpu.net] >>672 えとな、オブジェクト指向言語っていうのは 手続き型を踏まえてできたものなので、 手続き型でやれることは、オブジェクト指向言語でもできるんだよ。
689 名前:デフォルトの名無しさん [2016/06/05(日) 20:49:39.90 ID:MVcwnGuc.net] ID:fuiY39enはjavaは糞って言えば良かったんじゃないの それなら俺は同意する
690 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:50:05.15 ID:eiIG0jy5.net] >>670 どゆこと?
691 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:51:06.18 ID:PAgdOZpu.net] マルチメソッドをサポートしたオブジェクト指向言語を使えば 問題解決ってことだよなぁ(笑)
692 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:52:11.61 ID:D6e8xYJD.net] >>655 > メソッドとデータ・タイプが分離されていないおかげ 元々はそこをくっつけてカプセル化しようという思想だからな。 だから形式的にはデータタイプは全て独自で、当然メソッドも全て独自ってわけだ。 現実的にはInt64もDateも同じだったりして、結果、addメソッドも同じバイナリで問題ないわけだが、 それでも Int64.add と Date.add の区別を付けるのは、俺は「税金」だと思っている。 >>666 Cはポインタポインタって言われるけど、真の実力は実は関数ポインタにあるんだろ。 関数ポインタを使いやすく、また色々文法的チェック機構を付けまくったら、オブジェクトとメソッドになるわけで。 生ポインタ使える奴がGC言語はゴミと言うようなもので、 生関数ポインタを使える奴がオブジェクト指向はゴミというのは、当たってはいるがそれ言っちゃ議論はおしまいだ。
693 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:53:12.42 ID:8zGv30iU.net] もうオブジェクト指向やめようぜ 構成図書いてデータフロー図書いて入出力表書いてシーケンス図書いて状態遷移図書いて画面遷移図書いてデータテーブル図書いて処理フロー書いて 作る従来の開発に戻ろうぜ 絶対そのほうがすんなり終わるよ クラス設計は悪夢だよ
694 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:57:11.65 ID:fuiY39en.net] >>668 オブジェクト指向らしいとはいったけど別に必須じゃないんだよな 新しいキャラクターを創設したいなら、そのキャラクターに対する行を追加すればいいだけだから 普通に関数と構造体(レコード)で処理できる 単にデータ・タイピングの問題なので >>671 Javaが第一級関数をサポートしてればよかったのにな 少なくとも継承、カプセル化、ポリモーフィズムはこういう問題の解決には無力だぞ
695 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:59:20.68 ID:nosfsWv3.net] >>672 ただ単に関数ポインタがJavaには無いって言えばいいじゃん それってCはヘッダとソースの二つに記載するから面倒臭いみたいなレベルの話でオブジェクト指向とか関係無いよね
696 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:59:47.89 ID:MVcwnGuc.net] >>676 Visitorパターンは構文木を扱う処理にとかにたいしてよく使われるけど パターンなんか使わなくて言語組み込みのパターンマッチ使えば簡単に書ける
697 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 20:59:52.24 ID:fuiY39en.net] >>678 俺は別にC使いじゃないからな Cに比べてオブジェクト指向は優れているという割には オブジェクト指向は多くの問題を引き連れていませんか?という当て馬として使ってる 最低限のシンタックスとセマンティクスは知ってるつもりだけど
698 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:02:36.26 ID:eiIG0jy5.net] >>682 パターンマッチングに限定されないから。
699 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:05:03.17 ID:MVcwnGuc.net] >>683 c VS OOP にするよりは 構造化プログラミング VS OOP にしたほうがいいのでは 言語比較なら c VS Rustとかにしちゃうぞ
700 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:05:28.23 ID:eiIG0jy5.net] >>683 ご満悦のようだが、俺の書き込みはスルーしてるじゃん。 メモリリークとか、クラスの参照範囲とか、指摘されて困っちゃったのかもしれないけど 何が問題だといいたいのか分からないからちゃんと説明してくれ。 モンスター云々だと分からないから理解できる例にしてくれ。 RPGだったら攻撃方法を選択するのはプレイヤーだろ。 何がしたいんだか分からん。
701 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:10:15.04 ID:MVcwnGuc.net] >>684 まぁGofの中でも結構批判される事が多いパターンじゃん? 構造のあるものを再帰的に辿る以外に使う事ってそんなにあるかなこのパターン
702 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:12:04.61 ID:eiIG0jy5.net] >>687 基本はそうだろうけど、それがパターンマッチングに限定されない。
703 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:13:24.24 ID:MVcwnGuc.net] ググッたら 小田好教授も扱いにくいからパターンマッチング代わりに使え って言ってて吹いた
704 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:14:39.32 ID:fuiY39en.net] >>686 モンスターの例は勝手に誰かが出題したのに答えただけなんだが メモリーリークに関してはそして「オブジェクト指向言語である」C++に比べて Cはメモリーリークしうる要素が少なすぎるんだが? javaがメモリーリークしにくいのはガベコレを積んでるだけであってオブジェクト指向言語の長所ではないよな あと下手な実装してたら、メモリーリークに対して一切手をだすことができないのも先述の通り クラスのスコープについてもCより改善されている部分なんてないだろ? アクセス修飾子は、レキシカルスコープがあれば不要であることは指摘した。 さらにアクセス修飾子がテスタビリティを損ねていることも指摘した。もう終わったことなんだけど
705 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:16:03.72 ID:eiIG0jy5.net] >>689 ○○が言ってるって言うのはいい加減にしろw
706 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:16:54.20 ID:fuiY39en.net] 例えば、debug時にのみpublicにして、release時にはprivateにするといった アクセス修飾子はjavaには定義されてないよね IDEやライブラリによってはそういうのをサポートしてるのもたぶんあるだろうけどね 全てがprivateってあまりにもテストやりにくいんだけど、そのことわかってんのかな
707 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:19:08.52 ID:eiIG0jy5.net] >>690 Cとメモリリークは常に一緒なんだが…。常識を知らない相手と話すのは…。 >>654 に対する反論になってねえし。
708 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:20:50.73 ID:fuiY39en.net] >>693 クラスは増えても問題無いって言うけど クラスを作るか作らないかってのもオブジェクト指向設計の一つのキモでありよく議論の対象になる部分だろ アクセス性については散々言ってる通り、アクセス性を決めるのはスコープで事足りている 過剰なprivateはテストの邪魔にしかならない
709 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:21:38.26 ID:bBqsqHAQ.net] ゲームの話してはダメ ゲームの話は荒れる ゲームはOOPが向いているようで向いてない場面も多々ある ゲームは普通のアプリとは違う 相互作用が余りにも多すぎる しかも相互作用の相手が固定でない 「当たり判定のあった者同士」が出合頭に相互作用を始めるカオス OOPはここまでのものは想定していない 普通のアプリでは当たり判定なんてものは精々マウスカーソルぐらい ゲームは違う、もれなく当たり判定があると言ってよい ぶつかった瞬間に互いに相互作用が開始する だからゲームは相互作用を上手に記述するためにみんな工夫して書いている 工夫の仕方は色々 OOPの一部の機能を利用して工夫している人もいれば 全く諦めて、別の方法で工夫している人もいる だから荒れる
710 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:22:56.36 ID:eiIG0jy5.net] >>694 「クラスは隠れたグローバル変数だ」っていう謎主張は撤回したってことな? ちゃんと段階追って話そうな。
711 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:27:11.77 ID:fuiY39en.net] >>696 アクセス性を制御できることがキミにとってその解決になるのか? publicをinternalにしたところで、パッケージがモノリシックなら、何の意味もなく そのパッケージ内でグローバル変数と同様に振る舞うということはわかるよね? キミはpackageAからpackage Bの Class bが見えなくなれば、複雑性は解消されたと考えるのか? bの中にClassが50個ほど並んでいても同じことが言えるのかな?
712 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:27:38.14 ID:bBqsqHAQ.net] 普通のアプリは相互作用の相手が大体決まっている メンバに参照を持っているか、引数で渡すか、シングルトンかは知らないが 相互作用の相手は大体決まっている ロジックがそうさせる ゲームの場合は当たり判定があると相互作用が発生する ありとあらゆるものの間で相互作用の可能性がある だからみんな工夫して書く 工夫の仕方は色々 だから荒れるし、答えはない
713 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:29:38.59 ID:eiIG0jy5.net] >>697 パッケージがモノリシックってどういう意味?
714 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:32:00.11 ID:fuiY39en.net] >>699 「モノリシック」は一枚板という意味で、ソフトウェア的には、全体が1つのモジュールでできていて、分割されていないことを意味する。
715 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:32:58.93 ID:MVcwnGuc.net] >>691 あ いややっぱscalaの作者だからそう言うよなと思って面白かっただけ scalacはscalaで書かれてるからscalaのパースにはパターンマッチで十分なんだよな
716 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:34:25.03 ID:eiIG0jy5.net] >>700 クラスに分割するのはそれを解消するためだから パッケージがモノリシックってどういう意味か分からない。 設計がおかしいだけでは?
717 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:36:18.20 ID:PAgdOZpu.net] >>697 > キミはpackageAからpackage Bの Class bが見えなくなれば、複雑性は解消されたと考えるのか? > bの中にClassが50個ほど並んでいても同じことが言えるのかな? 誰にとっての複雑性か?を考える必要がある。 package Aからpackage BのClass bが見えなくなれば、 package Aの複雑性は解消されたといえる。 一方package Bの複雑性は解消されていない。 これじゃ複雑性は解消されなてない。 見えない所まで全部見て考えるんだ!というならば、 関数の中、そしてOSのAPIまで見て考えるのか?という話。 複雑性を解消するための方法は、モジュールを小さく分けて 内部を見なくていい状態を作り上げていくことだ。 お前だって普通に開発してるときに汎用関数の中のコードまで読まないだろ? そこにどんなに複雑なソート処理が実装されていたとしてもだ。
718 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:37:57.85 ID:MVcwnGuc.net] >>692 javaのmockライブラリによってprivateをmockにできるっぽいよ 使ったことないけど
719 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:38:38.28 ID:eiIG0jy5.net] パッケージがモノリシックという前提にしている時点で 設計が悪いオブジェクト指向システムを前提にしている。 そんなシステムに問題があるのは当然。 そんなものを批判しても意味ねえよw
720 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:44:33.59 ID:eiIG0jy5.net] ID:fuiY39enは知識も不十分な上に、背伸びした言葉を使い過ぎてるから議論する価値がないと判断する。 そんな半端な知識で
721 名前:批判するのはバカっぽいからもう少し勉強してから出直して来い。 んじゃ。 [] [ここ壊れてます]
722 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:49:17.07 ID:fuiY39en.net] >>703 複雑性を解消するための方法は、モジュールを小さく分けて 内部を見なくていい状態を作り上げていくことだ。 お前だって普通に開発してるときに汎用関数の中のコードまで読まないだろ? そこにどんなに複雑なソート処理が実装されていたとしてもだ。 もちろんそれが理想だ、 そしてそれを実現する唯一の方法は、オブジェクト指向を捨てることだ コードを読まずにすむためには、結果が引数によってのみ確定し副作用を持たないということ つまり純粋関数であるということが、真の意味でのカプセル化だということだ オブジェクトは状態を内包している、だからこそのオブジェクト指向であり そうでないならば、staticオブジェクトで表現しても支障は起きない プログラマの仕事とは究極的に言えば状態を管理することにある それを隠蔽するような言語では、話にならないことぐらいわかると思うんだが
723 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:51:38.09 ID:fuiY39en.net] データ構造を隠蔽してメソッドだけを公開するということが どれだけオブジェクト内の動きをプログラマが把握することに手を焼かせられることなのか理解してからきてくださいね .net Frameworkの図体のでかさを見てから モノリシックなライブラリは設計が悪いと言ってくださいね
724 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:55:42.18 ID:D6e8xYJD.net] >>683 > オブジェクト指向は多くの問題を引き連れていませんか?という当て馬として使ってる まあこれはその通りなんだが、俺は元凶はアホが設計やることだと思っている。 例えばGC言語、本来は「煩雑なリソース管理に脳内リソースを割かれるよりは、 自動化できるところは自動化し、本来プログラミングすべき部分に注力する」なのだが、 実際は「リソース管理できない馬鹿でもGC言語ならプログラミングできます」という逆方向に使われている。 オブジェクト指向も「なければできません」の奴が使うから駄目なのであって、 「なくても出来ますが、今回はオブジェクト指向が適切なのでこれを選択します」である限り大丈夫だと思う。 >>690 > クラスのスコープについてもCより改善されている部分なんてないだろ? 一応、Javaはクラス階層を自由に作成でき、親を ParentClass.this で参照できる。 だから手動レキシカルスコープみたいなことは出来る。 (ただし俺はJava使いではないので間違っているかも。なおC++はこれができない)
725 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:56:10.82 ID:PAgdOZpu.net] >>707 > つまり純粋関数であるということが、真の意味でのカプセル化だということだ C言語などの手続き型言語ではだめだって話に持っていくんだね わかったよw
726 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:57:10.61 ID:PAgdOZpu.net] >>708 > データ構造を隠蔽してメソッドだけを公開するということが > どれだけオブジェクト内の動きをプログラマが把握することに手を焼かせられることなのか理解してからきてくださいね データ構造を公開するメソッドを作ればいいだけでは???
727 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:58:06.65 ID:fuiY39en.net] ?設計が悪いオブジェクト指向システムを前提にしている。 ○オブジェクト指向システムは設計が悪い、だってオブジェクト指向は設計者を手助けしてくれないから だからできの悪いライブラリが止まらず、間違った設計思想を信じるにわか設計者が後を絶たない だってどこをprivateにしてどこをpublicにして、どんなインターフェースを定義してというふうに それこそまともなスコープ制御を持った言語や、動的言語なら一切気にすることがない部分を いつまで経ってもちまちま考えさせられているから 最後の極めつけは、「僕はデザインパターンも勉強したし、オブジェクト指向設計も勉強したのだから これが役に立たないはずがない、だって僕はこれに何年も時間を使ってしまった」という元を取りたがる考え方だ 俺がおすすめするオブジェクト指向設計の本はエリック・エヴァンスのドメイン駆動設計、これだけ これは他の言語に映っても使える示唆がある あとSOLID原則ってあるとおもうけど、あれ関数型のほうがよほど簡単に実現できるから ボブおじさんはその点でセンスはいいんだろうなって思うけど、それをオブジェクト指向でやろうとしたことが最高にセンスないよな
728 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 21:58:51.73 ID:PAgdOZpu.net] さっきも言わなかったっけ? > だってどこをprivateにしてどこをpublicにして、どんなインターフェースを定義してというふうに > それこそまともなスコープ制御を持った言語や、動的言語なら一切気にすることがない部分を Javaだけがオブジェクト指向言語だって思ってるでしょ? Rubyは動的言語かつオブジェクト指向だ。
729 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 22:02:56.64 ID:D6e8xYJD.net] >>707 > コードを読まずにすむためには、結果が引数によってのみ確定し副作用を持たないということ おっと?ということは君は関数型支持派か? なお言っていることには同意。 >>708 > .net Frameworkの図体のでかさを見てから あれは切り出しなんて考えられてないからね。 それが組み込み系なら問題になるけど、PCなら結局の所DLL扱いだから1個ロードして終わり。 現実的には大して問題にならない。
730 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 22:06:12.78 ID:PAgdOZpu.net] オブジェクト指向を否定して関数型言語がいいと言って、 関数型言語なら俺はもっと素晴らしい物を開発できる!って 考えている人が滑稽なのは、 言語によって生産性に差が生まれるって考えてることなんだよね。 たしかに言語によってある程度の差はある。 だけど、それは些細な差でしか無い。 重要なのは、ライブラリの多さやフレームワークの機能なんだよ。 Railsは大きな生産性向上を果たすことに成功したが、Rubyだけでは不可能だった。 Railsというフレームワークによって生産性は大きく向上した。 残念ながら、言語による差なんて些細な事でしか無いんだよ。 フレームワークを自作するっていうのなら、また話は変わってくるが、 今は他人が作ったものを利用して開発をする時代。 MITがSICPを教えなくなった理由 cpplover.blogspot.jp/2016/05/mitsicp.html > > 今日では、状況が変わっている。 > > ソフトウェアでも状況は同じだ。プログラミング環境は、多大な機能を提供する > 巨大なライブラリ群の集合として存在している。 > > Sussmanの今日の生徒は、その時間の大半を、ライブラリのマニュアルを読み、 > どのように組み合わせれば目的が達成できるのかを把握することに費やしている。
731 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 22:06:24.35 ID:fuiY39en.net] rubyをオブジェクト指向言語として使ってる奴なんているの? それをいったらpythonもオブジェクト指向言語だしJSもオブジェクト指向言語なんだけど さらにいえばScalaもそうだよな さらに言えばCommonLispですらCLOSがあるからオブジェクト指向言語なんだけど あんまり詳しくないけどCLOSのほうがJavaより出来がよさそうなのがマジで笑えるんだけど ゲッタやセッタ書かなくても確か自動生成されるんだろ
732 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 22:09:00.85 ID:PAgdOZpu.net] >>716 オブジェクト指向に決まってるだろ。 何言ってんだ? Railsでモデルを作るときとか 継承しまくりだ
733 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 22:13:25.73 ID:fuiY39en.net] >>715 そうだね、ライブラリが利用しやすい言語ならライブラリを使ったほうがいいよね でも俺がオブジェクト指向を批判する理由は、このスレでとっくに書いているんだよね ライブラリが自分が想定している挙動と異なった場合、自分で手直しすることが不可能 俺はそこまでハッカーじゃないからね レゴのブロックのように構築できるライブラリもあれば、そうでないライブラリもあるわけで ライブラリ製作者が定義したオブジェクトまみれのライブラリより 純粋関数からなるライブラリのほうがまだマシなんだよ、関数なら相互作用性が引数と戻り値のみに制限されるからね マクロとかになると読むのが多少は厄介になるけど rubyがrailsの助けを受けたとあるが、railsがrubyを選択したのは楽にかけるからということだろう 短く書けない言語というのは、結局のところ読むのも大変でライブラリから吸収できる量というのも少なくなってしまう javaでrailsが生まれなかったのは、まあそういうことなんだろうな ライブラリを使う能力も重要だが、ライブラリのスキマを縫うグルーコードをかく技術、かけるパラダイムかってのが 全てに関わってくる
734 名前:デフォルトの名無しさん [2016/06/05(日) 22:14:05.59 ID:zc7alBMy.net] Rubyはオブジェクト指向だろ さもなきゃまつもとゆきひろはアホだろ
735 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 22:15:03.77 ID:fuiY39en.net] え?rubyはlispのパクリだって聞いてるけど?
736 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 22:15:11.70 ID:PAgdOZpu.net] Ruby ・・・ Rails Python ・・・ Django JS ・・・ React、Express Scala ・・・ Play Framework ここらへんがよく使われている有名なフレームワークだな これらがオブジェクト指向ではないというのなら、 その根拠を提示せよ
737 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 22:15:59.00 ID:PAgdOZpu.net] >>718 > ライブラリが自分が想定している挙動と異なった場合、自分で手直しすることが不可能 > 俺はそこまでハッカーじゃないからね なんでだよw ソースコード修正すればいいだけだろ。 Rubyとかならモンキーパッチとかもできるし。 なんで不可能なんだ?
738 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 22:18:11.36 ID:PAgdOZpu.net] >>720 > え?rubyはlispのパクリだって聞いてるけど? lispはオブジェクト指向だよw
739 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 22:20:42.82 ID:PAgdOZpu.net] >>718 > rubyがrailsの助けを受けたとあるが、railsがrubyを選択したのは楽にかけるからということだろう この理屈から言えば、 railsがオブジェクト指向を採用したのは、楽に書けるからということだろうw
740 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 22:25:19.97 ID:qNlMN7jN.net] まあほにゃらら指向がどうたらってことばかり言ってないで テメーの仕事しろやって思う事はあるな。 そういう馬鹿に限ってテストさぼろうとするから。
741 名前:デフォルトの名無しさん [2016/06/05(日) 22:54:02.29 ID:/bruxSbe.net] >>725 コーダがテスタやるの?
742 名前:デフォルトの名無しさん [2016/06/05(日) 22:55:58.82 ID:zc7alBMy.net] テストコードの事やろ
743 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 23:18:16.29 ID:D6e8xYJD.net] >>718 それについては既に指摘したけど、 A. ライブラリが完璧に動くか、 B. オープンソース であれば解決するから、オブジェクト指向の問題ではないと思う。 ただまあ、オブジェクト指向出身の奴が既に言われているように「隠蔽」を勘違いしていて、 そういうことになりがちなのかどうかは、俺には分からない。 > 純粋関数からなるライブラリのほうがまだマシなんだよ、関数なら相互作用性が引数と戻り値のみに制限されるからね これはその通りなんだが、どのみちオープンソースじゃないとやりにくいとは思うけど。 内部状態を持っているから、外面から見ると意味不明(脈略不明)な所でバグる危険性を言っている? さすがにそんなライブラリは捨てるしかないと思うが。 みんなが使っている案牌しか使わないとかで対応するしかない。 ただ確かに、純粋関数のみのライブラリなら、 最悪辿っていって「ライブラリへの入力OK/出力NG」でそれが原因だと断定できる。 内部状態に依る場合、以前のどこかでおかしくなったということだから、ソースがないとどうやっても追い切れないね。
744 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 23:34:46.41 ID:MVcwnGuc.net] >>716 Scalaは作った人がオブジェクト指向と関数型の統合を目指した言語なのでオブジェクト指向 プリミティブや関数もオブジェクトなのでjavaよりもよりオブジェクト指向だと言える Rubyはまつもとゆきひろ自身が純粋なオブジェクト指向であると語ってるよ
745 名前:デフォルトの名無しさん mailto:sage [2016/06/05(日) 23:41:50.70 ID:L71HvcLp.net] ねえねえ C#も仲間に入れてあげてよ
746 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 00:04:09.69 ID:UaKeA7lT.net] お前ら、相変わらず日本語が出来ないみたいだが、>>716 が言っているのは、 > rubyをオブジェクト指向言語として使ってる奴なんているの? (>>716 ) > として > javaでrailsが生まれなかったのは、まあそういうことなんだろうな (>>718 ) > Javaが第一級関数をサポートしてればよかったのにな (>>680 ) 制御機構の中心に何を据えているかを言っているんだよ。 第一級関数/高階関数を中心に据えているのなら、それは関数型的、 継承、カプセル化、ポリモーフィズムを中心に据えているのなら、それはオブジェクト指向的、 直接データに手を突っ込んであれこれするのなら、それは手続き型的、となる。 Rubyで書いてあればオブジェクト指向(キリッとか言っちゃうような馬鹿では駄目なんだ。 それぞれの言語は基本的に既存言語のいいとこ取りをしているのであって、スタイルは選べる。 実用言語の中ではJavaだけがある意味「純粋オブジェクト指向」なんだよ。 そしてRubyで書かれている物もほとんどは関数型的じゃないか?という問いなんだ。 オブジェクト指向が中心であるなら、RailsはJava生まれるのが自然で、 逆に言えば、RailsがJavaに見向きもしなかったのは、 Java(純粋オブジェクト指向)では駄目だったからだと言っているんだよ。 俺はこの見方(推測の仕方)は妥当だと思う。実際どうなのかは知らん。
747 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 00:14:54.26 ID:Tzc6nBCT.net] お前ら盛り上がり過ぎだろw
748 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 00:17:10.11 ID:Tzc6nBCT.net] >>731 しかしprimitivesがオブジェクトじゃないJavaは純粋オブジェクト指向だろうか?
749 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 00:18:46.89 ID:s7mmSCjU.net] >>692 一応言っておくとJavaのアクセス修飾子は4種類ある public : 制限なし 修飾子なし : パッケージ無いのみアクセス可 protected : 自身及びサブクラスのみアクセス可 private : 自身のみアクセス可 でprivateがテストし辛いってのはリフレクションを知らないって事なの?それともリフレクションを利用しやすいようにしたライブラリの存在を知らないって事なの?
750 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 00:19:11.11 ID:okPwaxJe.net] 純粋なオブジェクト指向なんか誰も必要としていない プリミティブ型はオブジェクトじゃなくて結構
751 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 00:25:24.78 ID:N6ydBJjg.net] >第一級関数/高階関数を中心に据えているのなら、それは関数型的、 イミフだわ そんなの唯のオレオレ定義じゃん 一般的な定義から外れたオレオレ定義でいきなり語られてもこまる 第一プリミティブ型がオブジェクトじゃないjavaがどう「純粋オブジェクト指向」なんだ mutable objectを使いまくる(文字列からしてmutable)rubyが関数型とは笑止千万
752 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 00:28:47.72 ID:N6ydBJjg.net] >>735 プリミティブ型にメソッドはやせるのは結構便利だし 後 組み込みの演算子というのがなく演算子がメソッドなのは便利
753 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 00:36:09.08 ID:okPwaxJe.net] 俺が言ってるのは、プリミティブ型に仮想関数はいらないという事 メソッド生やしたりは記述の問題だけなのでどうでもよい 1+1も1.sum(1)もsum(1,1)も記述の問題だけで同じこと オブジェクトというからには仮想関数が欲しい しかしプリミティブ型に仮想関数はいらない むしろ、あると邪魔
754 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 00:43:28.32 ID:N6ydBJjg.net] rubyみたいなスクリプト言語なら仮想関数だろうがどうでもいいと思うし scalaだったら実行時のオーバーヘッドを無くす仕組みが備わっている
755 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 00:55:14.53 ID:okPwaxJe.net] もしプリミティブ型をオブジェクトのように扱いたいなら オブジェクト自体にvtableを持たせるという、大体のOOPの実装を変えなければならない まず、多態するときはポインタか参照を使って間接的に行うのが普通 さもなければスライジングが起こって大変なことになる ならば、オブジェクトにvtableを持たせるのではなく ポインタや参照がvtableを保持すればよい なぜなら、どうせ仮想関数はポインタか参照越しにしか呼ばないから そうすれば、intとか、Cの構造体とか、本来vtableを持ってないものを多態させることができる vtableを保持したポインタ越しにね 実際、C++のshared_ptrは似たような状態になっている shared_ptrは、仮想関数を持たない、言い換えればvtableを持たないオブジェクトが突っ込まれることもある その状態で、shared_ptrをアップキャストすると、本来のデストラクタを見失う ベースクラスのデストラクタしか見えなくなる このまま参照カウンタが0になって解放されると・・・ それじゃ困るので、shared_ptrは参照カウンタと一緒に本来のデストラクタを保持している
756 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 01:08:03.93 ID:N6ydBJjg.net] scalaはコンパイル前はプリミティブは完全にクラス & 多態を使いたいなら静的ディスパッチ+マクロでzero-overhead だな
757 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 01:19:29.38 ID:pfL89vbp.net] いや39yenさんすげぇわ まあ、ここまで文章で表現できなくても 「なんかオブジェクト指向で設計しない方が問題起きなくね?」 ってのは常々思ってたけどね オブジェクト指向って利点ないんだよなぁ って言うと人格攻撃始めるしね(笑)
758 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 01:23:23.27 ID:N6ydBJjg.net] >>742 そんなに人格批判されてたか オブジェクト指向の批判と言いつつjavaの批判ばっかしてたような気が
759 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 01:25:21.33 ID:pfL89vbp.net] >>743 いや別のスレでもさ オブジェクト指向役に立たないよ って言うと 真のオブジェクト指向使いが来てレベルが低くてお話にならないって お墨付きをくれるじゃん
760 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 01:31:29.24 ID:N6ydBJjg.net] >>744 いや別のスレの話されても知らんがな 2chだからそういう人ばっかなのはしょうがないし それに関数型界隈からみてオブジェクト指向批判って昨今そんなに珍しくないじゃん?
761 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 01:42:10.16 ID:UaKeA7lT.net] >>738 俺はRuby使いでもないんだが、個人的に思うのは、 あれは多分「対称性」を増して多態(または同一関数で処理)するためではないかと。 多態する時、中身がオブジェクト(参照渡し)とプリミティブ(値渡し)だと扱いを変えないといけない時が多い。 また、オブジェクトの場合にはgetter等での対応も可能なのだが、プリミティブだとこれができない。 結果、要するに一つの記述で済ませられなくてウザイ。 とにかく、形が揃っていることが重要。 単発でプリミティブに積極的に仮想関数はやして、ってのはそちらの言うとおり要らないと思うが、 オブジェクトと多態しようとすると、オブジェクト的アクセスが出来ないと無理だ。 だからRubyの仕様は、あれば便利だろうなとは思う。 >>740 Rubyは速度を気にする言語ではないので、多分Rubyは全てが全部ガチのオブジェクトなのではないかと思う。 ただ繰り返すが、俺はRuby使いではないし、詳しい仕様も知らないから、完全に推測だが。
762 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 02:13:17.50 ID:okPwaxJe.net] RubyはRubyで涙ぐましいことやっているよ ポインタは必ず4の倍数になるから ポインタとして絶対使わない値に数値を詰め込んでいる ただ、個人的にはそこまでしてプリミティブ型をオブジェクトにしなくてもよいと思っている 理由はコンピュータにとって、その方が自然だから 素直な実装を好むのでね
763 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 02:13:48.35 ID:yxmdKndQ.net] Rubyも、primitive っぽく、オブジェクトへのポインタに、 直接、Fixnum(小さい数値)・Symbol・nil・真偽値の値を納めて、メモリを節約している そしてたぶん、それらをオブジェクトとして扱うと、 (オブジェクトのメソッドを呼び出す際、) 何か特別な処理をするのだろう。Boxing, Unboxing
764 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 02:52:03.94 ID:N6ydBJjg.net] >>747 へー勉強になるわ 俺はてっきり他のオブジェクトと同じように扱うのかと思ってた
765 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 14:20:59.62 ID:88+5arvI.net] >>708 > .net Frameworkの図体のでかさを見てから って言ってるけど「図体のでかさ」ってどういう意味?対象範囲が広いってこと? 具体的に何を指して.net Frameworkはモノリシックだと言っているんだ? そして、その問題はオブジェクト指向じゃなければどうやって解消できたんだ? すべてを説明して初めてまともな主張になるのに相変わらずの単語の羅列。 単語を羅列して満足するのは中学生っぽいからやめよう。
766 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 19:29:59.14 ID:4wogmex0.net] パソコンの構造自体がオブジェクト指向が出来る様になって無いんだから 誤魔化すしか無いんだ。
767 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 20:34:02.75 ID:I5hI2Tg9.net] 関数型がOOよりマシに感じるのはOOに比べて普及してないから OOでクソ設計してる連中もそろそろそっちに行くから関数型に代わるパラダイムを探しとけ
768 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 20:57:47.03 ID:88+5arvI.net] 関数型だけでシステムを設計できんの? データオブジェクトの更新とかどうすんだ?
769 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 21:09:20.34 ID:okPwaxJe.net] というかマルチパラダイムでよいんだよ 一つの方法で全てしなければならない必要はどこにもないからな
770 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 21:17:51.69 ID:88+5arvI.net] >>754 併用するやり方は知ってるけど オブジェクト指向から関数型みたいな書き込みがちらほらあるのは分かってない奴が書いてるだけ?
771 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 21:23:28.39 ID:I5hI2Tg9.net] 立ち位置コロコロ変えながら長文で煙に巻いとる奴への皮肉で書いとるだけやぞ
772 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 21:28:12.06 ID:Box2vTFt.net] >>753 C言語でアプリは作れないの?
773 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 21:29:12.26 ID:okPwaxJe.net] あーこれは荒れる予感
774 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 21:31:58.39 ID:UaKeA7lT.net] >>747-748 いやそれは使い方にもよるが、多分プリミティブをオブジェクトにするためではなく、 GCヒープの二重ポインタアクセス **obj をケチっているだけだぞ。 V8(ChromeのJavaScriptエンジン)でも同じだ。 > V8 は Ruby と同様, 整数値はヒープにとらずポインタに埋め込む. だから 整数値をあらわす Smi (small integer) クラスのコードは少し面白いことになる. > // objects-inl.h > int Smi::value() { > return reinterpret_cast<int>(this) >> kSmiTagSize; > } > steps.dodgson.org/bn/2008/09/07/ (モロにRubyと書いてあるが、気にしてなかったわ、、、) JavaScriptでは整数はプリミティブだ。 それでも、**obj よりも (int)(*obj)>>1 の方がケチれるし速い。(とgoogleは考えた) これは型無しGCヒープだからだよ。 プリミティブは固定長だから管理ヒープのヘッダ側に突っ込める。 丁寧にやるのなら、オブジェクトヒープ(可変長)とプリミティブヒープ(固定長)を分けろということになるが、 2つ作るのは管理上かなり面倒な事になる。 したがって、ヘッダ側に突っ込むのは悪いアイデアではない。 というか、これについては大して努力も要らないし、O(1)で済むし、(貧民からすると)涙ぐましいと言うほどでもない。 C的といえばそうだ。1ビットでもケチろうというのが元来の(富豪プログラミングではない)Cの世界だ。 だから生まれながらの大富豪が「涙ぐましい」と感じるのも分かる。 余談だがV8のチームはド貧民ではない。同URLで > // objects.h > // Formats of Object*: > // Smi: [31 bit signed int] 0 > // HeapObject: [32 bit direct pointer] (4 byte aligned) | 01 > // Failure: [30 bit signed int] 11 となっている。ド貧民なら書き込み時のOR命令をケチるためにHeapObjectを00にアサインする。 Matzが貧民なのかド貧民なのかは俺は知らない。
775 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 21:35:52.33 ID:okPwaxJe.net] うん、俺もそう思う
776 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 22:08:36.12 ID:88+5arvI.net] >>756 そういうことな。
777 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 22:09:43.70 ID:88+5arvI.net] >>757 オブジェクト、関数型って区別するときはCは手続き型だろ。
778 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 23:30:38.18 ID:UaKeA7lT.net] 収まったか?ここまでに分かったことを纏めておくぞ。 1. 1の>>1 は無能。 2. Javaはゴミ。 3. OOPはまやかし。 異論ある奴は96時間以内に反対弁論を適宜開始してくれ。 無ければ次の議題があればそれ、それもなければ解散だろう。 次の議題の優先提出権は ID:fuiY39en にあるとするのが妥当だろう。
779 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 23:39:18.18 ID:88+5arvI.net] >>763 お前>>1 を意識し過ぎw 論破されたのがよっぽど悔しかったんだなw
780 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 23:52:53.12 ID:qaNk8WrT.net] Collectionとか有名どころのフレームワークとか使う時は気にならないけど 同僚がOOP的に作った物使ったり、自分でそういうのを目指すときは凄い違和感がある
781 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 00:10:23.92 ID:Gat57in+.net] ついでに言っておくけど、 >>752 > 関数型がOOよりマシに感じるのはOOに比べて普及してないから これは俺もそう思う。叩かれてないから埃も出てないだけ。 とはいえ、選択肢が増えることはいいことではある。 >>765 それはいわゆるスタティックおじさんの主張と一致する。 「馬鹿製のOOPなんて糞の役にも立たない。 謹製クラスはパーツとしては極めて優秀なので、それだけ使っていれば事足りる」って奴だ。 俺はこれについては「使い方が悪い」という立場だが、(OOPは正しく使えば有用) 達人にしか使えないシステムなんてつまりゴミ、という考え方も出来る。 >>631 はそれ以前で、そもそも筋が悪いからゴミ、という立場のようだが。
782 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 00:13:04.94 ID:AF8c7GVP.net] というか、多くのフレームワークが オブジェクト指向を採用していることからも オブジェクト指向が有用だってのは火を見るよりも明らかなわけで
783 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 00:23:09.28 ID:AF8c7GVP.net] あと関数型であればテストしやすいのは確かだけど、 関数型であればアプリを作りやすいとは限らないよね。
784 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 00:27:18.57 ID:a1/3IcbT.net] >>768 テストがしにくい方がアプリが作りやすいとおっしゃる?
785 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 00:29:10.50 ID:wZ7jqyPr.net] >>769 テストだけが構築のしやすさを決める要因じゃないだろ。
786 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 00:35:25.39 ID:a1/3IcbT.net] >>770 いや全部テストだと思うわ 不具合が一件もなければ誰も設計なんてせんもん したらテストがしにくいってのはかなりコアな部分でダメなんだよ
787 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 00:42:39.37 ID:wZ7jqyPr.net] >>771 バグがなければ設計しなくなるのはどうして??? >不具合が一件もなければ誰も設計なんてせんもん
788 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 00:47:09.94 ID:Gat57in+.net] >>767 LispやHaskellが本格的に使用され始めたら、関数型のフレームワークがごろごろ出て来ますー(棒)
789 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 00:48:44.00 ID:nXPTtP+t.net] >>773 じゃあ一生無いですね
790 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 01:13:07.58 ID:AF8c7GVP.net] >>771 例えばデータベースを使うウェブアプリってのは、殆どというぐらいたくさんある。 実績のあるMySQLを使う。 その中で例えば、フォームからユーザーの作成ボタンを押したらユーザーを作成する。 この時データベースにはユーザー名とメールアドレスと仮パスワードが記録されてており メールアドレスにメールが送信される。 そのメールのアドレスを表示すると仮パスワードと新しいパスワードを 入力するフォームが表示され、そこに仮パスワードを新しいパスワードを入力し、 仮パスワードが一致すれば、新しいパスワードを登録して、ユーザー登録が完了する。 いうとありがちなテストを、関数型言語(と関数型用のフレームワーク)で記述するとどうなるの? 面倒なら具体的に書かなくてもいいけど、どういったツールを使って どんな感じでやるのか教えてくれない? まったく想像つかないんだよね。
791 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 01:14:33.37 ID:Gat57in+.net] >>771 内容については同意。 ただ、だからといって関数型の時代が来るとは思わないが。 普通に考えれば、テスタビリティに問題があるのならそこを改善した「改善版OOP」を使おうということになる。 本質的に駄目な場合は諦めるしかないが、そこまで駄目だとも思わない。 なお、どうも馬鹿が2匹いる。 俺は付いて来れない奴は置いていった方がいいという立場だ。 当たり前の事を説明しても無駄に時間がかかるだけ。 ある程度の議論速度を保ったほうが質のいい議論が出来る。
792 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 01:17:12.72 ID:wZ7jqyPr.net] >>776 矛盾したこと言って説明できなくなるバカ二匹の自己紹介乙。
793 名前:775 mailto:sage [2016/06/07(火) 01:29:47.52 ID:AF8c7GVP.net] 少し質問が曖昧かもしれないからもう少し具体的に書く。 まずオブ
794 名前:Wェクト指向と関数型言語のハイブリッドである Scalaならこれらをどうやるかだいたい想像できるので省く。 これらのアプリのテストを行う時 1. 関数型言語には何を使う? 2. ウェブフレームワークには何を使う? 3. 開発用のウェブサーバーには何を使う? 4. URLとコントローラ相当へのルーティングの例 5. モデル相当に必要なデータベースと関数型へのマッピング?とかはどうするのか? (ORMはオブジェクトへのマッピングだから違うだろう?) 6. ビュー(HTMLへのテンプレートエンジン)は何を使う? 7. JavaScriptとCSSへのサポート機能(Railsでいうアセットパイプライン的な仕組み) 8. テストコード(ユニットテスト相当)は何で書く 9. エンドツーエンドテストには何を使う? 例えばRailsとかはこれらを包括的にサポートしてるんだよね。 このレベルでアプリを開発しやすいと言っているわけよ [] [ここ壊れてます]
795 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 02:03:02.34 ID:Gat57in+.net] >>778 そりゃ自分で答え言っているのと同じじゃん。君の意見は、 「Railsには素晴らしいフレームワークがあるからアプリ開発がしやすい」だろ。 なら関数型もエコシステムが回り始めたらこの点は改善されてしまうのさ。 しかもテストしやすい=デバッグにかかる時間が短い=フレームワークが出来上がる速度も速い、なんだよ。 (最大の問題は、その日が来るのかどうかだが) 今の議題は、「関数型」「OOP」のどちらがアプリ開発しやすいか?だろ。 「『今』フレームワークが揃っているから」というのは「現在」限定ならいいが、上記議題なら論点がずれているだろ。 テストしやすいってのは本質的にプログラミングしやすいって事なんだよ。 「関数型」が糞だって言われているのは実行速度の方だろ。 あれは本質的に遅いから、今後とも改善しないと思うし。 煽るだけしかできないもう一匹の池沼と比べて、食らいついてこようとするその姿勢は評価するぜ。 だから説明を書いた。
796 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 03:28:03.53 ID:AF8c7GVP.net] >>779 机上の空論はどうでもいいよ。 それでアプリは開発しにくいんだよね?
797 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 03:28:55.02 ID:AF8c7GVP.net] 関数型が本当に開発しやすいならば、 フレームワークはとっくにできていておかしくないはずだ。
798 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 04:30:33.62 ID:nXPTtP+t.net] 背理法
799 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 09:25:11.47 ID:gm11/fKn.net] 真のオブジェクト指向は、小さなコンピュータを無数に詰め込んだ理想装置の上でしか成り立たない。 いまやっているのは、所詮はナンチャッテOOPでしかない。
800 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 09:31:28.43 ID:lnz4LVtA.net] それをいうならマルチタスクだってそうなんだが。
801 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 09:40:33.90 ID:gm11/fKn.net] マルチタスクじゃ、プログラムリソースが全部載せだからダメなんだよ。
802 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 09:49:26.44 ID:NavrVuI3.net] >>783-785 ごめん、よくわからん
803 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 09:50:56.22 ID:gm11/fKn.net] よく分からないのは、オブジェクト指向を理解していないから。
804 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 09:55:11.46 ID:NavrVuI3.net] オブジェクト指向は 『人間が』プログラム開発を行う上で、ソースコードの複雑さ(開発の進めやすさ、理解しやすさ、メンテナンス性等)を何とかする為の技法 だと思ってるけど違う?
805 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 09:55:18.73 ID:gm11/fKn.net] オブジェクト指向ってのは、たとえるなら、多様な生物が寄せ集まって生態系を形作っている様な物。 万能生物を1体作ろうとしてはいけない。
806 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 10:02:22.59 ID:nXPTtP+t.net] つまりマイクロサービス?
807 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 10:04:05.56 ID:WYjIc07a.net] > ID:gm11/fKn アラン・ケイのオブジェクト指向を持ち出すなら最初にそうだと言わないと駄目だよ 今の流れは(このスレも世の中も)ストラウストラップが再定義したオブジェクト指向がベースなんだから いきなり再帰的なコンピューターシステムとか生物とか生態系とか言い出しても混乱を招くだけ ケイのメッセージングOOPのファンだしSmalltalkも好んで使っているので気持ちは分かるんだけど
808 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 10:09:11.65 ID:gm11/fKn.net] つまりみんな怪しい新興宗教に騙されてるワケか。
809 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 10:13:18.02 ID:gm11/fKn.net] オブジェクト指向が神の行いなのだから、凡人においそれと真似出来るワケが無い。 だから凡人のやるオブジェクト指向が問題を山の様に抱えるのは当然なのだよ。
810 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 10:19:24.81 ID:wZ7jqyPr.net] >>771 で「不具合が一件もなければ誰も設計なんてせんもん」って言ったのはどういう意味? こんな意味不明なこと言ってそれを指摘されると「分からないのがおかしい!!!」って言ってるのは周りから見てると笑っちゃうぞ。 それで「勝った勝った!」って騒ぐんだろw ちゃんと議論したいなら質問には答えろ。 「僕ちゃんの言ってることが正ちいんでちゅ」ってやりたいならここに書き込むなよ。
811 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 10:23:49.00 ID:wZ7jqyPr.net] >>779 それまで「OOPはテストしずらい」と言ってたくせに 「関数型もフレームワークができればOOPに追いつく」と言い出す。 言ってることが支離滅裂。 ロジカルバグ量産してんぞ。
812 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:15:20.56 ID:NYG4EICE.net] 大事なのは、自然の生態系を模したところで、それが便利かどうかは場合によるという点 ここが分かっていないとダメ インターネットは沢山の機器が生態系のように協調して、上手く動いている うむ、そうかもしれない しかし、1+1のような単純明快な計算に生態系がどうとか、そういう壮大さは必要ではない 小学生に1+1を教えるときに生態系の話をしたりしないし 大学の数学科でまじめに1+1を考える場合も、突然生態系の話になったりはしない まさにここが重要で スケールだとか、粒度だとか、そういう問題がある プログラムは最終的に物理的なコンピュータで動かすから 一台のコンピュータのメモリや実行速度などの影響を受けるし プログラミングという作業も、一人が受け持つに相応しい作業量というものがあるから CADで図面を引き延ばすかのように、簡単にスケールしたりはしない 必ず普遍的な物理世界の係数が絡んでくる だから大きなもので上手く出来たからと言って、小さなものでもうまくいくとは限らない 軽トラを図面上でそのまま拡大しても大型ダンプカーにならないし、逆もまたしかり だから、全てを同じ方法でする必要はない、偏る必要もない、とこのスレでさんざん言っているのだ 絶えずスケールを意識する必要がある
813 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:30:45.56 ID:gm11/fKn.net] 世界はフラクタルなのだから、物の大小によって見方を変える必要なんか無いよ? 変える必要があるのは、手に持っている定規の方。 顕微鏡の中を見るのに1メートル定規じゃ測れないだろ?
814 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:30:53.14 ID:NYG4EICE.net] 文章から文字列を検索したいとして、頭から順番にマッチするか調べていくシンプルなアルゴリズムにしたとしよう 実装が簡単だしバグる可能性が低く、良い選択かもしれない 十分なレスポンスも得られるだろうね だけど、同じアルゴリズムでGoogleのWeb検索と同じものを作ろうとするのは 誰がどう考えてもバカげている 永遠に等しい時間を待たされるので誰も使わない 小さな規模で上手くいったからと言って、大きな規模で上手くいくかはわからないということ この場合であれば、人間の待てる時間は決まっていて、それは検索規模と一緒にスケールしないからダメ、となる これこそまさにエンジニアリングの要 だから、いくらインターネットを持ち出して、生態系の様に振る舞っていて、上手くいっているといったところで 我々の書くプログラムは、インターネットと比べてあまりにも規模が小さいので、スケールが全然合わない インターネットが必ずしも我々の書くプログラムの参考になるとは限らない もちろん参考になる部分もあるが
815 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:34:28.28 ID:nXPTtP+t.net] KMPを並列で走らせてるだけじゃないの?(すっとぼけ)
816 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:34:54.36 ID:DfsgEpY7.net] 将棋作ってるヤツはどこいった?
817 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:35:27.46 ID:NYG4EICE.net] よくある、もしバッタが人間のサイズだったら、とかいうのは馬鹿げているという事
818 名前:oッタをそのまま拡大したところで、バッタを取り巻く世界の物理係数はそのままだから上手くスケールしない バッタはバッタのサイズだから、あれだけ跳躍するのだ [] [ここ壊れてます]
819 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:37:24.23 ID:gm11/fKn.net] 組み立てるレゴブロックの大きさを変えないからそうなるんだよ。 普通のレゴブロックで実物大の蟻は作れないけど、ディテールを表せる十分に小さなレゴブロックを使えば、上手くい。
820 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:41:39.96 ID:gm11/fKn.net] 設計なら粒度の取り方の問題に言い換えればいい。
821 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:41:58.61 ID:wZ7jqyPr.net] やっぱり具体的な問題を想定しないと、無益な空想を垂れ流す無意味で気持ち悪いスレになってしまうな。 「Cはメモリリークが起きない」と思ってる知識0の奴が長文を延々と吐き出してるようじゃ…。
822 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:44:59.90 ID:axhFPoUK.net] なんか前提をずらしながら良くわからん事書いてるな
823 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:46:42.86 ID:DfsgEpY7.net] >>802 十分に小さなレゴブロックにするとプラスチックのままだとブロックの側面が薄くなりすぎて、ブロック同士をはめ込んだ際に割れるかもしれない シリコンなど柔軟性がある素材に変更しないとうまくいかないかもしれないってのが、今言われてるスケールを考えるって事でしょ
824 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 13:04:30.27 ID:gm11/fKn.net] >>806 ブロックとして使うプログラムは、実は物凄く小さい。 幾ら積み上げてもバッタはおろかアメーバさえ形作るのが大変。 そのくらい小さい。 いま自分たちが試みているのは、そのスケールの遥かに違う物を、 いかに上手く作るかと言う方法。 いきなり埋めていくんじゃ無くて、何段階にも階層を分けて効率良く模倣する方がいいだろ?
825 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 13:30:19.95 ID:NYG4EICE.net] しかし実際に実行するのは物理的なコンピュータだし 書くのは人間であるから人一人がする作業量も相応しくなければならない という風に、ロジック以外の現実的な物理係数があり プログラムをCADみたいにグニャ〜んと引き延ばせたとしても それを取り巻く周りまで一緒にスケールしないから上手くいくとは限らない 小さなものには小さなものの理屈があって 大きなものには大きなものの理屈がある 町の商店街に行って、小さな八百屋に向かって、イオンと全く同じことをすればもっと流行るよ、と言えば殴られる もしくは、イオンのシステムをそのまま八百屋にもっていっても、規模が違いすぎて要らないって言われる だ・か・ら、エンジニアリングが必要で、それが仕事というもの ある程度大きな尺度であれば、生態系のような作りは上手くいくように思うし 一方で、1+1のようなプリミティブなものに、生態系のような大げさな仕組みは無駄であり、要らないという直感もある 全てを同じ考え方でする必要はないし、統一する必要もない
826 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 13:35:12.26 ID:No96cPk6.net] >>794 だからさ どう組んでも不具合が一件も出ないような現場なら設計なんて時間の無駄じゃん そんな現場がもしこの世にあったら設計をするなんて発想が出ないわけ つまり設計ってのは不具合を出さないためにやるわけよ
827 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 13:40:44.85 ID:axhFPoUK.net] ドキュメントを残すとか、設計フェーズとかそういう話? 日曜プログラミングだろうとREPLのお試しだろうと、 頭の中には必ず設計があるし、それは成果のコードの中に表れると思うけど
828 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 13:51:57.70 ID:WYjIc07a.net] >>796 > 大事なのは、自然の生態系を模したところで、それが便利かどうかは場合によるという点 発案者のアラン・ケイも大きく複雑なシステムでこそ当てはまる比喩だと言及してますし > In short, you can make something as simple as a clock and fix it when it breaks. > But large systems have to be negotiated with, both when they are grown, and when > they are changed. This is more biological in nature, and large systems act more > like ecologies than like simple gear meshing mechanisms. squab.no-ip.com/collab/uploads/61/IsSoftwareEngineeringAnOxymoron.pdf そこをあえて 1+1 とか単純ものに落とし込むのは、Smalltalk などで 1+1 もメッセージで 文法上扱われていることへの批判でしょうか? ただケイは 1+1(同文書では 3+4 等)もメッセージにするのは、文法やルールを単純にすることで 子供や非プログラマーの理解と着想を助ける配慮だとは言っていても、 こういうところでも動的遅延結合性が活きるとあえては主張していないですよね?
829 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 14:18:34.52 ID:gm11/fKn.net] 地図ひとつ取ってみても、スケールで表示する対象を切り分けてる。 世界地図見て俺の家が載ってないとか、町内会の道路地図見てアメリカはどこだとか、そんな屁理屈言ってるようなもんだよ。 規模が違えば対象の粒度も変わるんだから、登場する概念だって変わって当たり前。
830 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 14:24:26.11 ID:gm11/fKn.net] でも基本概念として、どのスケールでもオブジェクト指向で考える事に何の問題があるのか? 対象の塊の大きさに見合う分け方を行えばいいんだ。
831 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 14:31:34.25 ID:gm11/fKn.net] そしてそのひとつひとつの中身もまたオブジェクト指向で作るんだ。 当然、またその中身もな、またまたその中身も
832 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 14:42:15.44 ID:axhFPoUK.net] 何らかの粒度で切り分けて管理しやすくするなんて、みんなが普通にやってる事じゃん >>783 の理想装置云々はわからんが
833 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 14:45:42.00 ID:2wZrFkOW.net] 曼荼羅w フラクタル図形ww 無限地獄www
834 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 15:29:14.94 ID:gm11/fKn.net] 残念賞 無限地獄にはなら無いんだなぁ 最後は言語の基本動作単位になって、 たいていはそこまで細かくする前に 標準クラスライブラリに落ち着くんだから。
835 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 17:42:28.50 ID:wZ7jqyPr.net] >>809 設計は構築するものを明確にするためのもの。 「設計ってのは不具合を出さないためにやる」ものじゃない。
836 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 17:54:39.21 ID:opxniSDO.net] コーディングこそが設計
837 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:07:45.74 ID:80JpygVn.net] >>818 それは要件定義で終わってるだろ 設計はどうやって作るか? の話だよ バグらないならさっさと作っちゃえばいい
838 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:21:24.71 ID:Ic9MVfcw.net] (何言ってんだこの人…)
839 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:32:48.37 ID:80JpygVn.net] >>821 だから問題が出ないなら 設計はいらないんだよ さっさと作れよw 元の話題に戻ると テストがやりにくいってのは設計の目的から逆行してるよね って話だったわけよ わかった?
840 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:35:17.52 ID:BAxJi/a8.net] (もうそっとしとこう)
841 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:35:40.04 ID:wZ7jqyPr.net] >>820 要件定義は「こういうことが要求されている」 設計は「それを実現するにはこういうものを作ろう」 何を作るか決まってないのにどうやって作るんだ?
842 名前:デフォルトの名無しさん [2016/06/07(火) 19:36:06.85 ID:DORepsm7.net] 何を言ってるんだこいつは
843 名前:デフォルトの名無しさん [2016/06/07(火) 19:37:26.85 ID:DORepsm7.net] >>822 ね
844 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:40:33.63 ID:wZ7jqyPr.net] >>826 え? ID:80JpygVnとID:DORepsm7は同一人物だろ? 設計の意味すら知らない奴が二人もいるとは信じられないんだが。
845 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:44:05.34 ID:bRI80mcg.net] >>827 >>825 のレス先が>>822 だってことだろ
846 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:45:07.81 ID:rGbZ9k3R.net] あーいるいる、設計もろくにせんとロクでもないもの作って動くんだからいいだろって奴なw 大抵リファクタリングやメンテナンスで周りがえらい目に合う流れだわ
847 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:45:45.60 ID:wZ7jqyPr.net] >>828 あー、そういうことね。 設計の意味をここまでを知らない奴が二人もいるはずないもんなw
848 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:51:02.06 ID:nzxsUsEV.net] >>822 そもそもprivateのテストは言うほどめんどくさくない
849 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:53:11.55 ID:Gat57in+.net] そしてJava屋による最高の設計がこれである。 > FizzBuzzEnterpriseEdition > https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition > echo.2ch.net/test/read.cgi/tech/1463663267/629
850 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:54:27.56 ID:80JpygVn.net] >>824 何を作るかは決まってるだろw 要件を定義したんだぜw これで何を作るか決まってなかったらまずいだろw どうやって作るかが決まってないんだがこれは問題が起きないことが確定してるなら 別にいいだろ ってのが大元の話題な
851 名前:デフォルトの名無しさん [2016/06/07(火) 19:58:49.06 ID:hXIJefGv.net] >>832 すごい
852 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 20:02:58.68 ID:wZ7jqyPr.net] >>833 ここまでひどいのはさすがに釣りだろ?
853 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 20:03:54.27 ID:nzxsUsEV.net] 要件と実装の違いも解らんのかそりゃOOもわからんわ
854 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 20:04:05.41 ID:Gat57in+.net] >>800 ID:wZ7jqyPr
855 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 21:31:26.89 ID:Gat57in+.net] >>796 他 ID:NYG4EICE 意見の内容については同意。 そこでもう一歩掘り下げることにしよう。 >>781 に対抗するなら、 ・関数型が本当に糞ならば、とっくに死滅していてもおかしくないはずだ。 となる。俺はとっくに死滅したと思っていたが、どうやらそうではないらしい。 そこで俺なりに調査した結果、やはりどうにも実用性が無く、流行っているのは意識高い系()の中だけという結論に達した。 その分析だが、 > 文章から文字列を検索したいとして、頭から順番にマッチするか調べていくシンプルなアルゴリズムにしたとしよう > 実装が簡単だしバグる可能性が低く、良い選択かもしれない (>>796 ) どうやら関数型ではこれを「正義」として認められるようだ。 そこでは「定義」を出来るだけシンプルに記述することが「正義」であり、必要のない内部状態等の管理は「悪」のようだ。 一方、Cにおいては「速度」こそが正義であり、上記は初期実装としては認められるが、少しでももたつくようなら即差し替えられる。 場合によっては、最初からクイックソート等の「最速」アルゴリズムでの実装を義務づけられる。 もちろん速くするためには内部状態の管理も行う。 (関数型の連中は速度に問題があった時でも記述を調整して改善することをしない) だから関数型については、 ・自分でアルゴリズムを記述できない馬鹿(C的世界での落伍者)が、馬鹿にされない世界を見つけて飛びついた ように見える。実際の所、関数型の処理速度でいいのなら、挙げられた例のような初期実装でよく、 読みやすくてテストもしやすい記述は手続き型でも難なく実装できるからだ。 ただし、Cはテストのしやすさについては1mmも考慮されていない。 関数型は結果論でしかないが、学術的に純粋関数を追い求めた結果、確かにテストはしやすい。 この「テストしやすい記述」については学ぶ意味はある。 という感じなんだが、君はどう思う?
856 名前:838 mailto:sage [2016/06/07(火) 21:33:35.38 ID:Gat57in+.net] すまん、上記引用部分 × >>796 ○ >>798
857 名前:デフォルトの名無しさん [2016/06/07(火) 21:53:56.90 ID:wZ7jqyPr.net] >>838 >>795 は反論できないからスルー?w 関数型が内部状態の持つことに反対しているというのも不正確。 関数内部で情報を持っても問題ない。 他との干渉の発生を防止しようとしているだけ。
858 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 21:57:00.87 ID:wZ7jqyPr.net] >>776 で>>771 のバカ意見に同意しちゃってるしw 根本的な部分で分かってないのにどうしてそんな偉そうに書き込めるのがすごい自信過剰だと思う。
859 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 00:48:01.87 ID:lK4Ar35I.net] >>838 色々突っ込みどころがありすぎるが >そこで俺なりに調査した結果、やはりどうにも実用性が無く、流行っているのは意識高い系()の中だけという結論に達した。 twitterはScalaだけど 実用性ないのか Ocamlなんて海外じゃよく金融系に使われてるよね erlangなんてめっちゃ実用性ありますが(Amazon, Facebook,lineと枚挙に暇がない) >(関数型の連中は速度に問題があった時でも記述を調整して改善することをしない) 遅けりゃ普通に調整するよ haskellだって必要があれば普通にポインタ使う(よく勘違いされるがhaskellは再代入ができる) >・自分でアルゴリズムを記述できない馬鹿(C的世界での落伍者)が、馬鹿にされない世界を見つけて飛びついた 一昔前なら関数型言語を好んで使う層ならcで実装系くらい普通に書くでしょ
860 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 01:00:08.53 ID:lK4Ar35I.net] >あれは本質的に遅いから、今後とも改善しないと思うし 結構 意味不明だな haskellがcよりも遅いのはruntimeがあるからでvm上で動く手続き型言語と比べて遅いわけでもない
861 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 12:30:11.52 ID:p3PUcfdu.net] 要件とプログラミングの両方に精通した人達が、新しいアイデアを、鋭く素早く正確に反映していきたい。 そんな環境なら試しても良いのかもね 人売りから安く買い叩いた外注さんに、安いシングルモニタのPCで開発してもらう、 そんな従来の開発スタイルには関数型はマッチしないと思う
862 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 12:36:56.09 ID:RA0DudJa.net] 自分でアイデアを構築してアプリケーションを構築したい人のために関数型はそんざいする OOのライブラリはうっとうしい 場合によってはライブラリの都合でデータ構造が拘束されることもあるだろう まさしく依存性逆転の法則 使えないライブラリにひっぱられてドメインロジックが腐りはじめる
863 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 12:39:40.20 ID:RA0DudJa.net] 関数型はモジュールを分割すること以上にもじゅーるそのものが短くあることを手助けしてくれる 一方オブジェクト指向は外部からのふるまいが同じでさえあればよいというかんがえにある だから図体ばかりが大きくなる
864 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 13:02:15.13 ID:csf3E7O1.net] 関数型と言っても純粋でなければオブジェクト指向と相性悪いってことは無いよ。OCamlもScalaもF#もオブジェクト指向を使える。 特にOCamlに関しては、型システムに上手くOOを組み込んでて面白い。 大抵の場合はオブジェクト無しで済むから、逆に本当にOOが必要な場合が分かる。
865 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 13:30:31.03 ID:lK4Ar35I.net] Scalaはオブジェクト指向を使える。 というかオブジェクト指向の上に関数型の機能をエミューレートしてる感じかな 関数はFunctionN traitのインスタンスで パターンマッチはunapplyメソッド 代数的データ型はsealedとcase classで実現 型クラスはimplicit prameterなど
866 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 13:37:11.32 ID:qITYI7a9.net] オブジェクト指向初心者なんだが教えてほしい var list = []; list.push("hoge"); ってコードについてなんだが、これは変数listは初期化時点で配列オブジェクトの仲間になってるってことでいい? だからメソッドである.push()にアクセスできてるってこと?
867 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 13:52:12.06 ID:lK4Ar35I.net] >>849 javascriptかな? []が配列オブジェクトでlistに代入されてるって意味ならその理解で正しいと思うよ []というリテラルを使ってるからわかりにくかもしれないけど var list = new Array(); と意味は同じだよ
868 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 14:10:04.42 ID:qITYI7a9.net] >>850 なるほどそれで変数の型ごとに汎用性のあるメソッドが作れるのね Array.prototype.isover10 = function(){ ..... } で配列の要素が10以上の判定ができんのか サンクス
869 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 17:59:49.81 ID:mR1lO0J0.net] 設計スレでコーディングの話はするなよw
870 名前:デフォルトの名無しさん mailto:!sage [2016/06/08(水) 18:21:27.49 ID:knHwmdZY.net] 他のスレだったら間違えなくスレチ氏ねで追い出されていただろうねw
871 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 18:26:15.82 ID:xb5A0XRK.net] 設計と関係ない話がずっと続いているからしょうがないw
872 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 18:37:23.97 ID:mR1lO0J0.net] あははは、本当だ。 延々と実行速度がどうのとかやってらw
873 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 18:44:21.17 ID:xb5A0XRK.net] レゴと生態系の話とかもなw
874 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 18:54:42.30 ID:mR1lO0J0.net] 抽象化なんだからそれは避けて通れまいて
875 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 18:58:16.48 ID:lZ35IkHR.net] >>855 散々ウンチクタレて遅かったら笑えるな
876 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 19:11:09.85 ID:mR1lO0J0.net] 設計が終わらなくて納品出来ないよりマシだろ。 遅いのなら直し様もあるが、物が無けりゃ何も始まらない。
877 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 10:58:52.98 ID:LmdEjfia.net] まともにこーでぃんぐできないうんkが設計を語る
878 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 11:02:43.62 ID:8G0UYiga.net] 設計スレでコーディング語るのはおかしいと思わんかね?
879 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 11:19:46.27 ID:k9Pkeb8s.net] 設計にコーディング能力が必要か否かという話だから全然おかしくない
880 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 11:31:26.43 ID:faqsfj23.net] 実装を考慮するのはせいぜいデザインパターンまでで、 それすら実装者に無駄に足かせを付けるだけの愚行だがな。
881 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 13:00:58.15 ID:G4u6WZVB.net] >>861 コーディングこそが設計
882 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 13:22:05.79 ID:bsniAtVU.net] それでは、設計で使っているツールやサービスとかってあるのかね?
883 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 13:35:49.64 ID:8G0UYiga.net] ツールはastahとか サービスはどういう意味だろ?
884 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 13:36:55.42 ID:A1Kz5VJO.net] 「設計」がフェーズやドキュメントの残し方の話なら、社風やお客との関係や炎上具合で色々変わるよね
885 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 14:03:40.08 ID:B7MbAcn5.net] >>864 あるお方もそれを主張(?)しているのは俺も知ってはいるし 今となっては俺も単に同意するのだが たぶんこのスレにはまだそれは早い 誰もついてこれない
886 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 14:13:29.68 ID:8G0UYiga.net] >>868 簡単なプログラムならいきなりコーディングしてもいいけど 客と開発チームとどうやって意思疎通するんだ? 一人で開発する場合だってある程度複雑なものを作ろうと思ったら事前の計画が必要
887 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 14:26:29.05 ID:G4u6WZVB.net] >>869 それは要件定義プロセスと言うのだ
888 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 14:48:03.16 ID:8G0UYiga.net] >>870 要件定義と設計の違いを分からない人だったか…
889 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 14:50:57.42 ID:G4u6WZVB.net] >>871 あー、お前の客って元請けというやつで、設計内容を知らせる義務があるんだな
890 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 14:55:41.17 ID:G4u6WZVB.net] てか、コーディング前に客と意思疎通するために必要な「設計」って、具体的にどんなのだよ そんなの必要とされたことないぞ
891 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 14:58:05.93 ID:sXE05TDZ.net] ID:G4u6WZVBの主張はまだこのスレの人間には早い 早速「いきなりコーディングしてもいいけど」みたいな話になってる この反応はわかりきってたけど
892 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 15:07:32.79 ID:G4u6WZVB.net] >>874 そうかもな まぁ、何やったって"Design"とも言えるわけだし、どういう文脈の「設計」なのかを 定義してからじゃないと、まともな会話はできそうもない
893 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 15:09:45.38 ID:G4u6WZVB.net] DDDで顧
894 名前:客に見せるUMLで書かれたクラス図を導出するのを、ある人は分析だというだろうし ある人は設計だという どちらも正しい [] [ここ壊れてます]
895 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 15:11:30.32 ID:G4u6WZVB.net] IEEE Std. 830-1998のSRSを完成させるまでのプロセスを、要件定義だという人(俺)もいるし、 分析や設計だという人もいる
896 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 15:25:17.75 ID:faqsfj23.net] たぶん、設計の意味がみんな違うんだろうな。 立場によっても違うよな。
897 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 16:11:34.08 ID:VvFYMhkJ.net] 設計という工程の成果物は何か。
898 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 17:29:06.59 ID:Ry+aifej.net] このスレの人間にはまだ早いとかどうでもいいから OOPチームとFPチームで将棋ソフト作れよAIは合法手ランダムで
899 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 19:11:08.37 ID:vLkuz9RY.net] >>880 FPっていうと ファンクションポイント を思い出すなー…… めっちゃめんどくさかったなあ……
900 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 20:11:52.77 ID:8G0UYiga.net] >>880 前スレで3行のコード書いて設計だと言って失笑された奴がID:G4u6WZVBなんじゃねw
901 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 20:13:37.92 ID:ziShIi0x.net] >>880 この際良いか悪いかは置いておくとして、典型的なのは OOP: KifuAnalyzer, MoveGenerator, MovePicker, Evaluator, 駒クラス、駒タイプ、Moveクラス、ボードクラス、プレイヤークラス、マッチクラス echo.2ch.net/test/read.cgi/tech/1463663267/768 echo.2ch.net/test/read.cgi/tech/1463663267/819 手続き型:>>317 盤面は2次元配列、駒はenum、後は必要な関数を揃えるだけ 関数型:??? ← 俺は純粋関数型は知らない。教えてエロい人。
902 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 20:37:02.77 ID:8G0UYiga.net] >>883 どっちも設計の最初のほうをやっただけだよね 関数を呼び出す順序すら書かれていないんじゃ構築できない
903 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 20:54:04.55 ID:WT6LUlBS.net] まーた前スレ>>1 がアホみたいなことほざいてるな
904 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 21:11:42.30 ID:9GK5WJKb.net] >>844 そこまで指定するならコード書いた方が速いし正確だろうに。
905 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 21:36:24.45 ID:ziShIi0x.net] >>884 じゃあさっさとOOPの続きの「設計」を気が済むまでやれよ お前が1の>>1 だろうが
906 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 21:41:14.30 ID:8G0UYiga.net] >>887 お前がやれば これで構築に移れると思ってんの? あ、>>882 で怒っちゃった?wwwwww
907 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 21:55:28.33 ID:WcxAae3H.net] >>879 設計書とそのテスト仕様書(手順書) 同時に書かせるところ増えたぜ そのおかげで辻褄のあってない仕様や設計が見つけやすい
908 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 22:14:55.38 ID:WT6LUlBS.net] 最初に設計書書くところってウォーターフォール開発なの?人月はどれくらい? 途中で仕様が変更になったらまた設計書書きなおすの? コードがリファクタリングされたら設計書も更新されるの?
909 名前:が mailto:sage [2016/06/09(木) 22:33:32.90 ID:3LJlpztb.net] >>864 , 868 「コーディングこそが設計」に同意!!
910 名前:デフォルトの名無しさん [2016/06/09(木) 22:34:55.20 ID:pXMVc1f3.net] >>890 うちは120人月くらい 仕様が変わったら設計書書き直すよ リファクタリングで変わるような細かいことは設計書には書かない
911 名前:デフォルトの名無しさん [2016/06/10(金) 00:53:02.07 ID:Mkg+TQQo.net] >>864 >>886 >>891 将棋ソフトのコードのスケルトンを書いてくれよ
912 名前:デフォルトの名無しさん mailto:sage [2016/06/10(金) 05:54:44.86 ID:gmWPyVad.net] >>893 将棋知らないから、書けない。 個人的にそれって面白くないから、書く気もしない。
913 名前:デフォルトの名無しさん mailto:sage [2016/06/10(金) 07:04:25.61 ID:gmWPyVad.net] ふと、建築構造設計の仕事を思い出した。 構造計算は「設計」の仕事で、図面を書いて、柱や梁の本数や鉄筋の太さ、本数を計算して、それをPC等に入力する。 それから延々と計算をさせて、その結果を見て、「95%だから強度が足りない」などと判断して、太さを太くするとか、鉄筋の本数を増やす。 複雑な形状だと、専用のソフトを作ったりする。 そんな図面修正、データ修正、構造計算の作業を1ヶ月くらい繰り返して、うん百ページのリストができあがっていた。 この作業は「設計」に相当すると思うんだが、どうだろう?「施工」ではないはず。 そして、これをITの世界に当てはめれば、設計にあたるんじゃあないかな。 つまり、試行錯誤しているコーディングフェーズ。 建築の場合は、図面が完成しても、実体としてのビル完成までに、さらに多くの費用と時間がかかる。 でも、ソフトの場合、ソ−すコードが完成したら、あとは、コンパイラー、リンカーに任せれば、実体としてのオブジェクトが自動的にできるという差はある。 となると、SEは、デザイナー屋さんってところかもしれない。
914 名前:デフォルトの名無しさん mailto:sage [2016/06/10(金) 07:13:23.25 ID:lJsEyLcp.net] コーディングは製造
915 名前:デフォルトの名無しさん mailto:sage [2016/06/10(金) 08:38:51.58 ID:6HXdRm+E.net] >>895 建築物の場合は図面ができてGoサインがでたら建築途中で変更することは難しい しかしソフトウェアはいくら設計書ができてコーディングし始めたとしても お客さんの「やっぱこっちがいい」という一言でいくらでも変更できてしまう 「ソースコードが完成したら」というのはいうほど簡単ではない
916 名前:デフォルトの名無しさん mailto:sage [2016/06/10(金) 09:08:05.45 ID:BuEwbgPd.net] 変更を受け入れちまうから変更しなきゃならないだけで、 本来変更は人件費上乗せのリスクの高い依頼だときっちり対応しないとダメ。 プログラミングが設計だと嘘ぶいてる輩も、その試行錯誤は単なる給料泥棒だって事を隠してるだけ。
917 名前:デフォルトの名無しさん mailto:sage [2016/06/10(金) 09:35:25.90 ID:XqAkh7YW.net] >>897 >お客さんの「やっぱこっちがいい」という一言でいくらでも変更できてしまう 実はそうとばかりも言えない 実績のあるシステムをパッケージと称して使い回す場合に ほんのちょっぴりの変更でもカスタマイズ料と称してふんだくることが可能
918 名前:デフォルトの名無しさん mailto:sage [2016/06/10(金) 09:41:58.91 ID:o8hFzx97.net] そりゃ、試行錯誤の分が無ければ安いよ。 せいぜい、2千円ぐらいのソフト。それが、1千万円にもなる 客がよく言う。 市販で、2千円ぐらいのソフトなのに、 どうして、作ってもらうと1千万円もかかるのか? でもその客はどうしても、2千円のソフトを使わないんだよなw 安いソフトを使えばいいのに
919 名前:デフォルトの名無しさん mailto:sage [2016/06/10(金) 11:35:13.91 ID:Mkg+TQQo.net] >>894 将棋ルール https://ja.wikipedia.org/wiki/%E5%B0%86%E6%A3%8B ロジック概要 https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E5%B0%86%E6%A3%8B の6 コンピュータ将棋のプログラミング技術 これだけ要件がはっきりしていれば「将棋知らない」って言い訳はできないな
920 名前:デフォルトの名無しさん mailto:sage [2016/06/10(金) 14:20:14.40 ID:LT2C5Mf1.net] っていうか、将棋も知らないんじゃ、ろくな営業できないよなww
921 名前:デフォルトの名無しさん [2016/06/10(金) 16:26:04.50 ID:eVEt4/ZC.net] なんで営業するのよ
922 名前:デフォルトの名無しさん mailto:sage [2016/06/10(金) 16:54:42.74 ID:5LC8c5Pp.net] >>880 いいね。この週末、書いてみようかな。
923 名前:デフォルトの名無しさん mailto:!sage [2016/06/10(金) 17:34:40.03 ID:lPhKqXdH.net] 将棋のルール難しいからオセロがいい もちろん俺はO・O・P
924 名前:デフォルトの名無しさん mailto:sage [2016/06/10(金) 18:33:31.89 ID:f9UwuLwi.net] やっぱりここはチェスを作るべき
925 名前:デフォルトの名無しさん mailto:sage [2016/06/10(金) 19:09:04.30 ID:lJsEyLcp.net] 詰め将棋じゃないかな
926 名前:デフォルトの名無しさん mailto:sage [2016/06/10(金) 22:36:27.72 ID:gmWPyVad.net] >>896 コーディングが製造なら、建築の世界であれば、図面書くのも、構造計算するのも建物建築の実作業(施工)に分類されるというのだろうね。
927 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 00:13:37.71 ID:4NU9BH9s.net] 883みたいなのが設計なら設計者死んだ方がいいだろ 何の葛藤もトレードオフもなく欲しいクラス並べただけじゃん クラスの振る舞いもなければ生じるコストも議論できない 少なくとも建築設計においては強度が強い部材はコストも重量もかさも大きいというトレードオフがあるんだがUMLの絵かき屋は何を設計してるんだ
928 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 00:21:31.57 ID:4NU9BH9s.net] しいていうならUMLは意匠設計なんだろうな ソフトウェアだからなおさら達が悪い コードかけない設計者は 構造設計できない意匠設計者 H鋼がどれだけ重くてどれだけ強度は出るのか知らないのに設計できるらしい 単方向リストの各操作に対するコスト、オブジェクト生成のコスト オブジェクト破棄の条件及びコスト これらがわからないひとは設計しなくていいよ どうせこれが議論にならないレベルのソフトなら設計するだけ金の無駄だから
929 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 00:25:59.30 ID:rbw9FdPt.net] >>910 お前にとって設計ってなんのためにするの?
930 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 00:37:17.42 ID:y6LF40Yk.net] で、>>883 に対するID:4NU9BH9sの回答は? コードのスケルトンを書けば主張にも説得力があるから書けばいいのに 「コードが設計だ」と主張するならくだらない文章書いてるよりコードを書いてみせろよw
931 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 00:41:58.63 ID:XSNZ2uOi.net] >>909 > UMLの絵かき屋は何を設計してるんだ バカかおめえ? それっぽい絵を三つ四つ書いて気持ち良い汗流してらっしゃるんだろうが! 聞くないちいち当たり前のことを
932 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 00:48:01.15 ID:y6LF40Yk.net] だからコード書けよwww お前らって「図はいらない、コードから書く」ってしつこく主張してるくせに コードを書かずにくだらないことばかり書いてるから間抜けだよなあw もしかしてコードも書けないくせに「コードで設計する」って言ってたの?
933 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 01:04:07.50 ID:flLdNYbp.net] 何のコードだよ?w 他人にコードを書けっていうのなら、 じゃあ代わりにお前は図を書けよ。 その図相当のコードならいくらでも書いてやるが?
934 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 01:08:02.65 ID:AtNAlhvf.net] 設計に関心があってこのスレ見てるやつは居るけど いちいちこのスレの話題に合わせるために設計書やらコードやらをいちいち書きたい、という人はあまり居ないと思う
935 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 01:08:42.59 ID:y6LF40Yk.net] >>915 >>883 だろw さっさとやれよ
936 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 01:11:57.87 ID:y6LF40Yk.net] >>916 実際の設計図とかコードとかなら興味あっても くっだらない妄想の繰り返しに興味がある奴なんていないからw
937 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 01:54:55.05 ID:flLdNYbp.net] >>917 はいできた class KomaClass {} class KomaType {} class MoveClass {} class BoardClass {} class PlayerClass {} class MatchClass {}
938 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 02:00:09.96 ID:y6LF40Yk.net] >>919 こんなんじゃ設計の代わりにならないだろ 設計なしにコーディングするとこんなクソみたいなコーディングしかできないって実証されたねw
939 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 05:05:35.95 ID:aETEZ8Lc.net] >>920 設計なんて、そんなところからスタートするものだと思う。 あれがクソって思う奴がクソ。
940 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 06:46:24.38 ID:oW9rgFgK.net] コーディングは製造
941 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 06:55:52.82 ID:aETEZ8Lc.net] コーディングは設計
942 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 07:40:15.91 ID:UI22d5e9.net] 将棋なら思考ロジック以外は要求はある程度明確だし、すでに動いてるものが世に多数あるんだからイメージしやすいだろう 俺なら思考ロジック以外の部分をプロトタイピングしてから最終形を考えるな
943 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 08:29:32.95 ID:aETEZ8Lc.net] >>924 そういう手法に同意。だから「コーディングは設計」って思うんだよね。 何人か出会った「この人できそうかも?」と感じさせるプログラマさんも同じこと言っていた。
944 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 09:50:38.50 ID:Tx4f1KSS.net] 設計書書かない奴は雑魚 これは絶対覆らない
945 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 09:53:49.34 ID:JwbsVpE7.net] コードを書かない奴は雑魚 これは絶対覆らない
946 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 10:20:09.82 ID:bKLKFp2p.net] ドカチンがなんか言ってますぜ。
947 名前:デフォルトの名無しさん mailto:!sage [2016/06/11(土) 10:24:40.55 ID:8vn3zKAG.net] 俺以外は雑魚 これは絶対覆らない
948 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 11:56:48.05 ID:y6LF40Yk.net] >>921 それでは続きをどうぞ
949 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 11:58:59.51 ID:y6LF40Yk.net] >>924 プロトタイピングの結果をどうぞ ちゃんとした設計なら少し考えれば図が出てくる プロトタイピングの結果はいつになっても出てこないなあw
950 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 12:02:45.19 ID:y6LF40Yk.net] 正統派設計チーム echo.2ch.net/test/read.cgi/tech/1463663267/768 echo.2ch.net/test/read.cgi/tech/1463663267/819 「設計はコーディング」チーム class KomaClass {} class KomaType {} class MoveClass {} class BoardClass {} class PlayerClass {} class MatchClass {} 「設計はコーディング」の完敗なのは明白
951 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 12:08:32.61 ID:NAulAg4n.net] >>932 echo.2ch.net/test/read.cgi/tech/1463663267/768 って意味がわかんないんだけど、 Move(動詞)がクラスってどいう言うこと?w これって、ゴミク図なの?
952 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 12:09:49.75 ID:UI22d5e9.net] >>931 論点がズレてる 設計する方法としてUMLとかドキュメントにするかコード(プロトタイピング)にするかの違いだけ 図を描く事に執着するのは目的と手段を取り違えてる っでなぜプロのプログラマーやアーキテクトにタダでアウトプットを求めるんだ? タダで書くのは善意が大前提で、貴方に善意はわきません
953 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 12:16:14.80 ID:y6LF40Yk.net] >>934 「できないのをごまかしてる」だけなのか「できるけどやらない」のか、区別できないね 結果としては何もできていない 何もできていないのに「設計はコーディングだ!」って主張しても説得力ないなあ くだらない文章をスレに書くのもやめたら?w
954 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 12:18:20.76 ID:y6LF40Yk.net] >>933 うんうん それじゃ正しいと思う設計を書いたら有益な意見交換ができるよ
955 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 12:23:25.51 ID:y6LF40Yk.net] >>933 ちなみに move 【名】 動くこと、運動、移動 〔ある様態の〕動き(方) 〔一連の〕手だて、戦略 引っ越し、転居 〔チェスなどの〕手番、指し手 ちょっと恥ずかしいなw
956 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 12:24:49.16 ID:UI22d5e9.net] >>935 まず個人の設計に対する能力をここで問うのは間違っている ここでは方法論を議論していて、俺は場合によってはプロトタイピングを適用すると言っただけ 貴方は俺がプロトタイピングがまともに出来なかったらプロトタイピングの手法自体が意味がないと思うのか?違うだろ あと今日は天気もいいのでストレス発散はここではなく外に出てすれば良い、きっと溜まったものが落ちると思うよ
957 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 12:30:44.42 ID:y6LF40Yk.net] >>938 プロトタイピングって設計なしにするものじゃないと思ってるから お前の認識がおかしいと判断するだけ 設計について意見交換したいんだけど有益なレスがないんだよなあ このスレの内容って 「設計なんてしないでいきなりコーディングできる」 「じゃあちょっとやってみて」 「できません!!」 でまとめられる気がする…
958 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 12:41:30.00 ID:JwbsVpE7.net] >>939 そりゃ設計推進派もいっしょだろw やってみろ できません の繰り返しだw
959 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 12:48:20.63 ID:y6LF40Yk.net] >>940 >>932 全然違う
960 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 12:48:41.84 ID:UI22d5e9.net] >>939 頭で考えたものをドキュメントやコードに落としてそれを検証して修正して精度を上げていくのが設計 設計なしにって何を言っている? プロトタイピングのコードとプロダクトコードは別だけどそこの認識は合ってるよね?
961 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 12:56:48.33 ID:L/Ku0jBm.net] システムを組むならモジュール分けとモジュール間のIOぐらいの基本設計は先にやる チームでやるならここで仮ドキュメント化するが、詳細設計はこの時点ではしない 例えばこのスレの将棋の例ならこうだ [表示、対人用フロントエンド] UI必須、対局モジュールからの情報を盤面に表示 人間の入力を受けて対局モジュールに送り返す 遊びやすいUIとゲームらしい演出にこだわれ [AIモジュール] UIは一切不要、想定するハードウェア構成と時間内で最良手を選び出せるパフォーマンスにこだわれ [対局モジュール] 既存CSAプロトコル準拠サーバをラップして流用する方向で組み込み可能か検討せよ IOはCSAプロトコル準拠、CPU同士の対局の場合は画面出力のために対局者とは別に[表示・対人フロントエンド]の接続を受け付けること [その他] タイトルやゲームモード選択(ロビー)画面など対局以外のものを用意する、UIチームに余裕があればUIチームが担当 フロントエンド・AI共に対局モジュールとの通信はCSAプロトコルに準拠するものとする まああとの詳細設計はそれぞれの担当者が好きにやってくれ
962 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 12:59:18.37 ID:y6LF40Yk.net] >>942 >設計なしにって何を言っている? それはコーディングをいきなり始めることができる主張してる人に聞いてくれ 俺も不思議だから聞いてる
963 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:00:28.02 ID:y6LF40Yk.net] >>943 >>8-9 読んで
964 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:04:45.05 ID:UI22d5e9.net] >>944 ん? 自分で言ったことでしょ? 設計なしにプロトタイピング出来ないって設計なしにUMLは書けないって言ってるのに近いと思うけど? 設計なしにプロダクトコードは書けないならって話なら納得はするが話の流れから違うよね?
965 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:09:08.72 ID:y6LF40Yk.net] >>946 俺がそう思ってるってことじゃないぞ 文脈読んで
966 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:10:38.68 ID:y6LF40Yk.net] >>946 設計なしに将棋ソフトのプロトタイプコードは書けないと思ってるぞ で、 「書けるなら書いてみて」 「書けません」 って流れ
967 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:17:16.38 ID:ppFl8ALU.net] 前スレ>>1 が張り切ってるなw
968 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:22:42.07 ID:y6LF40Yk.net] >>949 ソースなし夫はまだ粘着してんのwwww
969 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:28:17.77 ID:L/Ku0jBm.net] コーディング=設計でも詳細な設計してからコーディングにかかるでもどっちでもいいわ、問題はどっちを先に出力するかじゃない 例えばコーディング=設計ならば 頭の中に既に設計が出来ててプロトタイピングしながらその設計を随時更新してるタイプ 頭の中でまとまっていないのにコードに手をつけるタイプ、末端から手をつける習性があり終盤でスパゲティ化して炎上のリスクがある この2つに分類できる、前者は優秀だが後者は死ね 設計設計言ってる奴も同様で コーディング時に事前に書いた詳細設計通りに書いて問題なく動く、頭の中でざっくりとコーディングしてるし頭の中でプロトタイピングもされてるタイプ 実際のコードへの落とし込みや動きを想定せずに僕の考えたすごい設計を書くタイプ、多くの場合技術的な問題で設計通りに実装する事が難しかったりパフォーマンスに問題が出たりする この2つに分類できる、前者は優秀だが後者は死ね 途中でどちらを先に出力してるかは大きな問題ではなく、全体をきちんと考慮して動けてるかどうかが重要
970 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:29:37.58 ID:UI22d5e9.net] >>948 あぁ理解できた どんな場合でもプロトタイピングは設計なしに出来ないって主張かと思った >>948 は将棋のプログラム書くのにいきなりプロトタイピングはできないって事でしょ それは個人の力量だしプロトタイピングが出来ないならクラス図も書けないと思うから、もう少し大きい概念から落としていけば良いでしょ つまり設計手法のチョイスがあってない、粒度をいきなり落とし込めないって事なんだからPDCA回して粒度落とし込めば良いと思うよ >>924 で書いた通り俺ならの前提でプロトタイピングやクラス図作成の粒度まで落とせるからってところで話が噛み合わなかったんですね >>938 で能力を問うのはおかしいと自分で指摘しながら能力の差で混乱を招く結果になって申し訳ない
971 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:38:14.51 ID:y6LF40Yk.net] >>952 よく分からんけど、抽象論で議論していても生産的じゃないから ぐだぐたいい争うより実際やってみたらって意見に賛成
972 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:49:35.90 ID:L/Ku0jBm.net] >>953 実際にやっても個人の能力に依存するのでどちらの手法が優れているかの証明にはならんよ? というかどちらの手法でも出来る奴は手順を変えたところで問題なく作るだろうし、作れるという事も知ってる つまり表面的な出力順にこだわるという事は…
973 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 13:56:02.47 ID:y6LF40Yk.net] >>954 自分じゃできもしないのに「できる、できる」って騒ぐバカが消えれば このスレも少しはましになるだろ 手順には順序があることも知らんのかな? 要件定義せずにコーディングするのはバカ それと一緒
974 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 14:05:55.37 ID:C3woM6J5.net] >>955 ここで要件定義とか話がずれてるわw 出来る奴と出来ない奴を経験が違うから、賢いからで片付けられてモヤモヤなんだろ その差を工学的手法で埋めたいって思ってるんだろうけどソフトウェア工学はそこまで万能じゃない ある種のアートであると認識して自分にセンスがないと諦めるか、しがみついて経験積むかだな
975 名前:デフォルトの名無しさん [2016/06/11(土) 14:06:29.17 ID:b0eP6+U3.net] >>955 でも、できない問題を出して出来ないんだーー!て騒いでもあまり意味がないんじゃないかな できる問題をだして双方が技術を示せるようにしないと比較することもできないでしょうに 将棋は難しいと思うよ、CSVのリーダとかでもいんじゃないかな
976 名前:デフォルトの名無しさん [2016/06/11(土) 14:09:46.85 ID:y6LF40Yk.net] >>956 できない奴ほどよう吼えるw 吼えてる暇があれば>>932 をちょっとでも進めたら?
977 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 14:12:54.30 ID:C3woM6J5.net] >>958 お前の経験の無さが透けて見えるから突っ込まれてるの分かってる? 今までどんな開発してきたの?
978 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 14:16:59.48 ID:y6LF40Yk.net] >>959 うんうん お前は自称優秀なんだから将棋ソフトの設計くらい軽くできるんだろ? 「俺はすごい」って口だけで言ってても情けねえーぞーw
979 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 14:17:50.79 ID:L/Ku0jBm.net] >>955 物事には順序があるが出来る奴の中にはそれをやってるという意識なく脳内で手順を終えて「やってない」と言い放つ奴がいるんだよ まあ能無しがそれを真似ると大惨事になるんだがw 主張がぶれぶれなクライアントのために、アホなクライアントでも動きが確認出来るよう要件定義のためのプロトタイプを作る事もある その時点までに出た要件とそれを元にした脳内設計は確実に存在するが明示的なアウトプットはしていない さてこれは要件定義や設計なしにコーディングしたと言えるのか? これを要件定義も設計もしたという奴といきなりコーディングしたという奴がいる、ただそれだけの違いだろ
980 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 14:20:29.52 ID:y6LF40Yk.net] >>961 そういう抽象論はどうでもいいかなあ 「で?」って感じというか…
981 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 14:26:34.85 ID:y6LF40Yk.net] 「具体的なコーディングにさっさと移るべきだ」と主張してる奴ほどこのスレでは抽象論を振りかざし いつまで経っても具体的な設計を提示できないのが皮肉だなw
982 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 14:43:46.31 ID:aETEZ8Lc.net] 「コーディングこそ設計」と書き込んだけど、961の書き込みに賛同だね。 また、こんなところで具体的な設計の提示なんて、全然期待していないし、求めてもいない。 でも、人によってここに求めるものが色々あってもいい。
983 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 14:51:48.59 ID:/6Etr2QS.net] 前スレから今まで出てきた成果物は 将棋というゲームを説明するための図と、ウィキペディアの将棋ソフトの項目にある思考AIの説明をラフに描いただけのもの 肝心の評価関数の中身を設計するのにオブジェクト指向をどう使うの?という当然の疑問に誰か答えてくれよ
984 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 14:55:26.73 ID:y6LF40Yk.net] >>965 普通のメソッドの内部がどうなってるか知ってる?
985 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 16:05:13.13 ID:bKLKFp2p.net] クラスは役割で考える。 動きで考えるな。
986 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 17:09:06.34 ID:1hn1NZl3.net] クラスは機能で考える 役割で考えるな 常識
987 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 17:47:18.15 ID:bKLKFp2p.net] >>968 おいw そんなんだから手続き型から抜けだせ無いんだぜ?
988 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 18:00:28.79 ID:ZhHlBSFM.net] >>951 完全に同意。てか、分かりやすいわ。 >>961 > 物事には順序があるが出来る奴の中にはそれをやってるという意識なく脳内で手順を終えて「やってない」と言い放つ奴がいるんだよ ふむ。言い得て妙だな。 しかしあんた、だいぶ頭いいよな。 なかなかこのレベルの説明は出来ない。
989 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 18:05:07.64 ID:aETEZ8Lc.net] 個人的には、コーディング量が減るとか、他人の作ったクラスが再利用できて、楽してバグ無しのメンテが容易なプログラムが短期で完成できればいいだけ。 だから、クラスが役割で考えて、あるいは機能で考えて、もしくは、構造化プログラミング的(手続き的)に作られていようが、どうでもいい。 使いやすく、分かりやすいクラスであればいいし、あるいは自分で作らなくても、すでに用意されていれば、もっと嬉しいですね。 「白猫であれ黒猫であれ、鼠を捕るのが良い猫である」って気楽な考え方をしています。
990 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 18:11:41.30 ID:VRwHRVV/.net] 再利用性のためにクラスが必要だと思っちゃうのJava脳
991 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 18:13:31.35 ID:NAulAg4n.net] > 使いやすく、分かり
992 名前:やすいクラスであればいいし、 とか考えると、単一責任の原則とかでてきて、 役割で考えて、一つの役割だけをやるようにしましょう(=単一責任の原則) という話なるはずだが? お前、使いやすく、分かりやすければいいと言うだけで、 どうすれば、使いやすく、分かりやすくなるのかを 理解してないんじゃね? [] [ここ壊れてます]
993 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 18:15:44.18 ID:VRwHRVV/.net] クラス設計という単純なそれこそ教科書の1ページ目に出てくることでさえ議論になりうる これならいってみればクラスの設計思想が自分と異なるライブラリは使い物にならないってことだよな Javaだったらラッパークラスかけば自分に適したインターフェース作れるって? そうやってコードがかさましされたコードの保守なんて他人に任せられないよな さあですマーチの開幕だ
994 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 18:16:59.17 ID:NAulAg4n.net] d.hatena.ne.jp/asakichy/20090122/1232879842 ・単一責任の原則(SRP) ・オープン・クローズドの原則(OCP) ・リスコフの置換原則(LSP) ・インターフェイス分離の原則(ISP) ・依存関係逆転の原則(DIP) オブジェクト指向設計に関する原則の頭文字をとって「SOLID」とまとめられた原則集。 qiita.com/hirokidaichi/items/d6c473d8011bd9330e63 S SRP Single Responsibility Principle(単一責務の原則) 「クラスを変更する理由は1つでなければならない」 O OCP Open/closed principle(開放閉鎖の原則) 「クラスは拡張に対して開き、修正に対して閉じていなければならない」 L LSP Liskov substitution principle(リスコフの置換原則) 「派生型はその基本型と置換可能でなければならない」 I ISP Interface segregation principle(インターフェース分離の原則) 「クライアントが利用しないメソッドへの依存を強制してはならない」 D DIP Dependency inversion principle(依存性逆転の原則) 「上位のモジュールは下位のモジュールに依存してはならない。どちらのモジュールも「抽象」に依存すべきである。」
995 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 18:19:01.24 ID:NAulAg4n.net] 次スレ オブジェクト指向システムの設計 171 [無断転載禁止]©2ch.net echo.2ch.net/test/read.cgi/tech/1465636703/
996 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 18:21:55.21 ID:/6Etr2QS.net] >>966 何が聞きたいのかさっぱり分からない。メソッド内に何があればオブジェクト指向になるの? メソッド内で他のメソッド呼ぶだけでオブジェクト指向だと言いたいの? 抽象化の手段がオブジェクト指向しか無いJavaみたいな言語だと、オブジェクト指向が必要無い場面でもクラスやらメソッドが必要になるけど そういうのもオブジェクト指向だって言いたいの?
997 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 18:52:10.65 ID:y6LF40Yk.net] >>977 評価関数の中身を設計するのにオブジェクト指向をどう使うか分からないのは メソッド自体を分かったないからだと思うよ メソッドの内部がどうなっているか回答しろ それとメソッドはどうやって設計するか知ってる?
998 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:01:39.04 ID:geSprGL3.net] 例えば橋を作るというとき ある人はいきなり作業しだす ある人は設計らしきことをしだす ここで前者の中にのみ注目して その中でさらに二種類居ることを言いたい アホは橋の端から着手する 一生懸命、こちら側の対岸から伸ばしていく それはもう頑張って伸ばしていく 逆側の対岸まで伸ばせるかどうかはもはや神頼みレベル かしこはそうしない まず足場から着手する 足場組んでみてグラついてたら補強するか とっかえる そんで足場終わったら上乗っける 作業の工程間に綱渡りが無い 先にしておいてよい部分を先に着手する というお話
999 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:03:59.84 ID:aETEZ8Lc.net] >>973 どうすれば、使いやすく、分かりやすくなるのかを 理解してないんじゃね? 理解してないかもしれない。 でも使いやすく、分かりやすいか、そうでないかは分かる。 「私、使う人」の立場であれば、「どうつくればいいか」は理解してなくても、とりあえずはいい。
1000 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:04:42.35 ID:NAulAg4n.net] 例えばクラスを作るというとき ある人はいきなり関数の中身から書き出す ある人はクラスのインターフェースなどの設計から書き出す ある人は設計を鉛筆で下書きをしてから書き出す
1001 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:05:44.58 ID:NAulAg4n.net] >>980 自分で関数を作る立場の人間に成りましょう。
1002 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:06:29.23 ID:y6LF40Yk.net] >>979 いきなり作り出すのは近所の小川に架ける橋だけ 鉄骨を使う橋を作るのに設計しないで着手するのはバカ 「コードが設計」って主張してる連中は趣味グラマであってプログラマじゃないんだろうなw
1003 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:07:37.02 ID:NAulAg4n.net] そういや絵が上手い人って、下書きもせずに いきなり絵を描くことができちゃうんだよな。 あれなんでなんだろ?
1004 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:08:55.57 ID:NAulAg4n.net] >>983 鉄骨を使う橋を作るときに作る設計=今はパソコンで書く=コードってことでしょう?
1005 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:09:55.69 ID:NAulAg4n.net] 「コードが設計」って言ってる人は、設計をしないって 言ってるわけじゃないんだよ。 ソフトウェアの設計を一番書きやすいのは コードなのだから、コードを使って設計を書いているだけなんだよ。
1006 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:11:10.27 ID:y6LF40Yk.net] >>985 は?
1007 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:12:45.62 ID:y6LF40Yk.net] >>986 UML「何言ってんだこいつ?」 GoF「理解できない…」
1008 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:14:29.37 ID:NAulAg4n.net] >>998 UMLで書くのも設計ってだけでしょう? コードも設計なんだよ。
1009 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:15:29.58 ID:NAulAg4n.net] そういやUMLのLってランゲージ(言語)のLなんだよな。
1010 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:17:10.80 ID:y6LF40Yk.net] >>989 理解不能過ぎるからさっさと将棋ソフトのコードによる設計をしてくれよ できもしないものをできると妄想で語られても困る
1011 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:21:30.82 ID:NAulAg4n.net] >>991 それなら将棋ソフトのコードを見ればいいだけじゃね? そのコードが設計だって言ってるんだから。
1012 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:23:23.36 ID:y6LF40Yk.net] >>992 バカすぎる
1013 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:26:38.11 ID:y6LF40Yk.net] 客「運用チームに引き継ぐから設計書提出して」 ID:NAulAg4n「はい、コード」 客「死ね」 プログラマならこうなるw さすが趣味グラマ
1014 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:27:10.20 ID:NAulAg4n.net] 例えばロボットの設計図って書けばわかると思うけど、 ロボットの設計図があれば、材料とそれを加工する機械があれば 誰でも同じものを作れちゃう。 設計図っていうのはそのレベルのものだよ。 決して、頭、腕、胴体、足、だけ書いたようなものを 設計図とは思わないわけでw
1015 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:28:00.73 ID:NAulAg4n.net] >>994 なんで運用チームに設計図出すんだ?w お前が思ってる設計図ってやっぱり世間で 想像されてるものと別物だろw
1016 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:29:27.92 ID:y6LF40Yk.net] >>996 え?設計書のないシステムを受け入れる客なんているの?wwww
1017 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:30:30.42 ID:y6LF40Yk.net] 客「開発チームに設計書渡して」 ID:NAulAg4n「はい、コード…あれ、まだない…」 客「死ね」 プログラマならこうなるw さすが趣味グラマ
1018 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:36:28.35 ID:ZhHlBSFM.net] >>984 あれは「見えている」らしい。 彼等にとっては、そこに絵があって、それをなぞっているだけなんだと。 まあ、プログラミングにも割と当てはまると思うが。
1019 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 19:36:29.89 ID:NAulAg4n.net] >>997 > え?設計書のないシステムを受け入れる客なんているの?wwww 客にコードは提出するだろ? お前、コードなしでエクセルに書いた図だけだして これが設計図ですで納品終わらせる気かよw
1020 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。 life time: 11日 20時間 27分 48秒
1021 名前:1002 [Over 1000 Thread.net] 2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。 運営にご協力お願いいたします。 ─────────────────── 《プレミアム会員の主な特典》 ★ 2ちゃんねる専用ブラウザからの広告除去 ★ 2ちゃんねるの過去ログを取得 ★ 書き込み規制の緩和 ─────────────────── 会員登録には個人情報は一切必要ありません。 月300円から匿名でご購入いただけます。 ▼ プレミアム会員登録はこちら ▼ premium.2ch.net/ pink-chan-store.myshopify.com/
1022 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています