1 名前:デフォルトの名無しさん mailto:sage [2016/05/30(月) 23:08:42.31 ID:pIEuB3Z3.net] オブジェクト指向に限らず、理由もなく小さく細分化させるのはアホ オブジェクト指向は役割でオブジェクトに分割するものであって 処理で分割するものではない。
2 名前:デフォルトの名無しさん mailto:sage [2016/05/30(月) 23:09:37.69 ID:Usq7Wp/A.net] 要件定義を書け
3 名前:デフォルトの名無しさん [2016/05/30(月) 23:11:13.19 ID:8pkfhQuv.net] 170って何だよw Aperyがクラスに分かれていたのがよっぽど悔しかったのか?
4 名前:デフォルトの名無しさん mailto:sage [2016/05/30(月) 23:14:33.08 ID:pIEuB3Z3.net] そりゃAperyは将棋ソフトであって思考ロジックじゃないんだから 将棋ソフトの部分は複数のクラスに分かれているだろうさw
5 名前:デフォルトの名無しさん mailto:sage [2016/05/30(月) 23:15:27.06 ID:8pkfhQuv.net] >>4 え?
6 名前:デフォルトの名無しさん mailto:sage [2016/05/30(月) 23:16:07.45 ID:ILfmqIwk.net] 次スレ乙www 170!?
7 名前:デフォルトの名無しさん mailto:sage [2016/05/30(月) 23:17:30.10 ID:ILfmqIwk.net] ああなんか©ってスレタイについてて 次スレたてる専ブラの機能で170になったんね 理解した
8 名前:デフォルトの名無しさん mailto:sage [2016/05/30(月) 23:52:44.45 ID:j9NktVXe.net] 要件定義 (必須機能) 第5条 参加ソフトは、次の各号に掲げる機能を持たなければならない。 一 任意の局面・手番・残り時間からの将棋の対局の開始と継続。 二 任意の時点での対局中断。 三 対局中の現在局面の表示。テキストでも良い。 四 第 19 条の規定による、1 手毎の消費時間の計測、及び累計消費時間の画面への表示。 五 1 手毎の指し手と消費時間の記録。対局中断時も、そこま
9 名前:でのすべての指し手と消費時間を取り出せなければならない。 六 CSA サーバプロトコル ver.1.1.3 に基づく、LAN による対局。 七 相手の指し手の手入力による対局。 [] [ここ壊れてます]
10 名前:デフォルトの名無しさん mailto:sage [2016/05/30(月) 23:53:11.34 ID:j9NktVXe.net] (推奨機能) 第6条 参加ソフトは、次の各号に掲げる機能を持つことが推奨される。ただし、機能を持たないことによって不利になることはない。 一 千日手の検出。 二 LAN による通信で送受信した文字列の必要に応じた表示。 三 任意の局面・手番・残り時間からの LAN による通信での将棋の対局の開始と継続。 denou.jp/tournament2015/img/rule/denou_tournament_rule2015.pdf
11 名前:デフォルトの名無しさん mailto:sage [2016/05/30(月) 23:56:25.79 ID:8pkfhQuv.net] 将棋ソフトはオブジェクト指向設計の例として適切だと確認されたけど それを認められずに喚いてる連中がたくさんいるのが
12 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 00:26:54.61 ID:ZlkkiL++.net] 誰も説得できてないし納得してないのに勝利宣言とか恥ずかしいわ 将棋ソフトはオブジェクト指向で作る旨味も意義も薄すぎるって散々言われてるのに読んでないのか? 出てきた反論は「じゃあ他の例を出せよ」と「aperyはオブジェクト指向」だけ。 後者に対してソースがC++だからOOだと短絡的な勘違いをしてることも丁寧に説明してるのに反論しないの? まあ他人を否定したいがために要件定義しろとか誰も前提にしてなかった電王戦のルール出すのも馬鹿なんだけどな
13 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 00:30:39.71 ID:HPDljpqn.net] >>11 こいつも見苦しい 将棋ソフトをオブジェクト指向で作る意義が分からないとは…
14 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 00:36:09.45 ID:9fus3M7D.net] 前スレで出てきたFizzBuzzEnterpriseの将棋版を目指すって感じかしら? 性能度外視の練習的な意味で
15 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 01:12:39.02 ID:tMa64zwE.net] あくまで大真面目にシュールまたはシニカルな面白さを追求する設計方針
16 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 01:13:54.56 ID:yByP5MuE.net] >>12 意味ないよ そもそもオブジェクト指向の利点って何なのさ 将棋を作ることで何か見えてくんの? 駒なんか絶対クラスにしないし 駒をクラスにしないならオブジェクト指向じゃないし(笑)
17 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 01:27:56.86 ID:BenfpwXE.net] UIとネットワークまわりはとりあえず分けよう 棋譜ファイル読み書きもわけよう
18 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 03:35:29.23 ID:9wsPGZ+1.net] 駒はクラスにするだろ switch 王: 飛車: 角: など、駒の種類数だけの、分岐を書くことがなくなる if・switch が消えるから、バグが減る。 これがオブジェクト指向の利点の一つ RPGなんて、キャラクター・モンスター・魔法・アイテムなど、 オブジェクト指向の宝庫
19 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 03:55:32.81 ID:/+1mPN+r.net] >>17 激しく同意 駒はクラスにするよな
20 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 06:08:49.98 ID:Q6hYp8jt.net] 初心者は必ずそこにハマるよな
21 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 07:10:00.11 ID:pY1i4wnE.net] 将棋の思考ルーチンなんて素人のオレでも出来るぞ 全部乱数によるランダム挙動 ただコマが動くだけ、人工無知能ww >>17 たぶん、プログラムを記述する上でどの様に整理整頓するかって事ちゃう ここら辺の記述スタイルは宗教論争っぽくなっている 私は記述からの読解力が高いので短く記述させろ〜から 他人が保守することを考えろ〜で物凄いタイプ量を伴うスタイルと長い名前を要請するタイプ C++は長い方だね class 歩 bool と金=false; int 移動歩[9]={0,1,0, 0,0,0, 0,0,0}; int 移動と金[9]={1,1,1, 1,0,1, 0,1,0};
22 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 07:30:54.26 ID:DWw0UGY/.net] >>17 は?ifとswitchはてめーが隠したから見えねーだけで実際には分岐はあるだろ 単にコードから見えにくいだけでテストは思いっきり漏れてる そして設計書には絶対記述しなければならないないようなのにコードでは見つからないようにする その利点が俺には全くわからない 不具合が増えるだけちゃうの? それこそ知らん奴が見た時それが設計書のそれであることはソース中を追い回さないといけないんだろ?
23 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 08:30:44.01 ID:BenfpwXE.net] 分岐はあるけど どこに分岐を書くかが重要なんじゃないの? メソッド毎に10個の分岐をそれぞれ書くよりも 最初にサブクラスを決める分岐を1つ書いたほうが楽じゃん
24 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 08:35:46.53 ID:QN5Mj7aA.net] >>22 switchで並んでたほうが一目瞭然だよね
25 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 08:40:38.99 ID:BenfpwXE.net] >>23 抽象化とか理解できない人?
26 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 08:51:13.02 ID:QN5Mj7aA.net] >>24 抽象化のために一目瞭然でわかるコードをわざわざ改悪しない人
27 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 08:56:25.89 ID:BenfpwXE.net] >>25 どこまでが一目瞭然? 一つのswitch文にcaseが10個あったら?20個だったら?100個だったら?
28 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 09:01:48.42 ID:QN5Mj7aA.net] >>26 1000でも10000でも仕様である限り チェックは必要 だったら並んでたほうがいい 逆になんで抽象化したらそのチェックをしなくていいと思ってるのか? 頭悪いんじゃないのお前
29 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 09:08:23.90 ID:BenfpwXE.net] >>27 チェックって何を指していってるの? switch文レベルでチェックが必要な状況を知りたい サブクラスのユニットテストじゃ駄目なの?
30 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 09:11:20.37 ID:GPXTRY73.net] 俺も駒はクラスにするわ。 で、moveメソッドを定義してその中にそれぞれの動きや制限を書くわ。 その方がソースコード内で各駒に付随する情報や手続きがコンパクトにまとまると思う。
31 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 09:12:07.95 ID:QN5Mj7aA.net] >>28 設計書にこの時はこの処理をしますって書いたからそれがソースにも わかる形であったほうが 後から読む人がわかりやすいでしょ? 俺は設計書とソースを一致させることに全力を尽くす
32 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 09:14:05.76 ID:QN5Mj7aA.net] 逆に抽象化してる奴は設計書にも書いてるの?
33 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 09:18:40.51 ID:QN5Mj7aA.net] >>28 ユニットテストでいいわけねーじゃん 5種類処理が通るのに1つしかチェックしませんって言ってるんだろ? 食わせるパラメータが変わったら死ぬかもしんねーじゃん
34 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 09:21:30.75 ID:BenfpwXE.net] >>30 この「時」はこの処理をします この「サブクラス」はこの処理をします 普通に一対一の対応だけど
35 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 09:23:07.14 ID:BenfpwXE.net] >>32 食わせるパラメータっていうのはつまりサブクラスが変わったらだよね ユニットテストでカバーしてるよ
36 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 09:39:19.63 ID:aqblqKlU.net] て…テストって…目視じゃあ…ないの?
37 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 09:57:36.10 ID:GPXTRY73.net] 何となくだけど>>32 はオブジェクト指向の利点やプログラミングの仕方そのものを 理解してない気がする。 まずはオープンソースのライブラリを眺めてくれば良いんじゃないかな? たとえばGUI関連とかだと駒=Widgetの対応で分かりやすいと思うよ。
38 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 09:58:36.80 ID:HPDljpqn.net] >>15 そもそもオブジェクト指向の意義を分かってないだろ? 自分が理解していないだけなのに価値がないって言っちゃう奴
39 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 10:03:35.71 ID:HPDljpqn.net] >>20 設計なんてしないでも構築できちゃうと言っちゃう奴っぽいな 前スレで3行の疑似コード書いて設計が完了したとのたまって失笑された君w
40 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 10:04:52.49 ID:HPDljpqn.net] >>21 こいつもオブジェクト指向の意義が分かってない
41 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 10:11:20.80 ID:HPDljpqn.net] >>32 それぞれのクラスについてテストするに決まってるだろ… 自分の技術力が低いだけなのに技術が悪いって言っちゃう奴の典型だな
42 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 10:16:39.60 ID:HPDljpqn.net] 全然分かってないやつがswitchについてあれこれ語ってるのがうざいから教えてやると switchが一箇所しかないって思い込みが間違ってんだわ それとオブジェクト指向の意義について勉強してから書き込めよ デザインパターンの最初の何章か読めば分かるだろ デザインパターンは初心者が読んでも理解できないから理解できてないだけかもしれんが
43 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 11:30:30.06 ID:QN5Mj7aA.net] >>34 できてないよ タイミングもA処理とB処理とで違うじゃん 記述の仕方によるテストの数は変わらないよね? したら違いはswitchで明示的に処理の種類がわかるか否かじゃないの?
44 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 11:44:47.87 ID:BenfpwXE.net] >>42 明示的に処理の種類がわからなくても済むというのが抽象化のいいところなんだよ
45 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 11:46:26.65 ID:QN5Mj7aA.net] >>43 読み手にとってなんのメリットもないじゃん 知らん人がそこいじったときにわからないのはメリットなの?
46 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 11:55:41.59 ID:BenfpwXE.net] >>44 メリットだよ 車を運転するときにアクセル踏めばスピードあがるってのに エンジンやギアがどう動いてるかを理解する必要ないでしょ
47 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 11:57:05.52 ID:QN5Mj7aA.net] >>45 いや、バグったのお前が組んだところみたいだけど
48 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 11:57:58.21 ID:BenfpwXE.net] >>46 バグった条件教えてくれれば ユニットテスト追加して検証するよ
49 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 11:58:25.34 ID:QN5Mj7aA.net] お前にしかわかんないようにしてあるのね なんのためか知らんけど 設計書には書いてあるの?
50 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 11:59:53.24 ID:BenfpwXE.net] >>48 >>33
51 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 12:03:15.69 ID:BenfpwXE.net] デザパタの典型だから ちょっとでも勉強すれば理解できると思うよ
52 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 12:12:14.38 ID:QN5Mj7aA.net] >>50 でも理解する必要ないんでしょ? さっきそう言ったよね?
53 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 12:17:00.42 ID:BenfpwXE.net] >>51 抽象化されたのはそうだね 抽象化のデザイン自体は理解しないといけないよ switch文の使い方を学ぶようなもん
54 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 12:19:33.48 ID:NDGHRGCl.net] 駒のインスタンスを生成するときに一回だけファクトリクラス内でswitch通すだけ。駒種別による動きの違いは各クラスが持ってる。あとはインターフェイス越しに操作する 歩は歩の動きをするし桂馬は桂馬の動きをする。動きがおかしい駒が有るなら対応するクラスを直せばいいんだよ 別に隠れて無いと思うけどね
55 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 13:16:21.12 ID:QN5Mj7aA.net] >>53 最悪だよ 結局そこの処理って何種類あるの? ってクラス生成してる箇所全部探すんだよね? ヘタしたらソース全域じゃん だったらswitchでまさにそこに一覧を置いておいてもらったほうが絶対読みやすいよ
56 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 13:37:41.62 ID:BenfpwXE.net] >>54 そんなことにならないためのモジュール化だよ クラス間の依存を局所化するんだよ
57 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 13:46:17.91 ID:QN5Mj7aA.net] >>55 だからswitchでいいじゃん(笑) すべてにおいてベターな方法があるのに脳ミソ腐ってるの?
58 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 13:54:42.25 ID:BenfpwXE.net] >>56 あなたの言い方だとクラスの生成=switch文はソース全域にあるんだよね? caseが一つ増えることになったらどうするの? 全部のswitch文を探してcase一つづつ足してくの?そっちのが最悪じゃん サブクラスにしとけば>>53 のファクトリー内のswitch一つの修正でいいんだよ
59 名前:デフォルトの名無しさん [2016/05/31(火) 13:56:27.56 ID:HPDljpqn.net] ID:QN5Mj7aAのやり方じゃあちこちにswitchがあるくそコードになるのが欠点 指摘されても理解できない奴って…
60 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 14:10:04.79 ID:QN5Mj7aA.net] >>57 お前も理解が足りんな 処理やチェックが増えることも減ることも無いよね ってさっき確認したよね? 君のは俺と同じことやっててテスト項目が減るの?
61 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 14:14:19.90 ID:HPDljpqn.net] >>59 コードの話だろ コードの変更箇所が減ればテストが必要な箇所も減る よってテストも減る こんな常識も知らんとは
62 名前:デフォルトの名無しさん [2016/05/31(火) 14:28:31.17 ID:wvPr5zWv.net] 駒を分岐をvtable使うなんてしないだろ
63 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 14:28:53.26 ID:QN5Mj7aA.net] >>60 残念ながら減りません 影響範囲のテストをサボってるだけ
64 名前:デフォルトの名無しさん [2016/05/31(火) 14:31:45.60 ID:HPDljpqn.net] >>62 え?何言ってんのw オブジェクト指向について何も分かってないのに語るなよ… 間抜け過ぎてまともな会話にならない
65 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 14:33:15.42 ID:HPDljpqn.net] >>61 AIが書き込みをする時代になったのか
66 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 14:40:25.73 ID:BenfpwXE.net] >>62 サブクラスに局所化されるから影響範囲は小さくなるよ
67 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 14:40:48.35 ID:LdI3VN67.net] >>62 開放/閉鎖原則 (Open-Closed Principle(OCP))って知ってる? 知らないなら調べて見ると良いよ。 https://ja.wikipedia.org/wiki/%E9%96%8B%E6%94%BE/%E9%96%89%E9%8E%96%E5%8E%9F%E5%89%87 > 開放/閉鎖原則に従ったソフトウェアは、既存のソースコードを変更することなく、振る舞いを > 変更することができる。 > 開放/閉鎖原則に沿ったソフトウェアは、既存のソースコードを変更せずに機能修正や機能追加を > 行うことができる。そのため、品質検査を再実行する必要がない。 つまり、既存のコードに一切影響を与えることなく、新規に機能追加ができる。既存コードには 影響がないので、再テストも不要。 (自動テストがあるなら、実行するのはおおいに結構) 一方、switch-caseで処理を振り分けていたりする場合、新規に追加した機能のcaseが増え、 原理的には、その変更されたswitch-caseを含むメソッド/クラスを再テストする必要がある。
68 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 14:47:50.86 ID:QN5Mj7aA.net] >>63 は? ていうか同じ仕様のもん作っててなんでテスト項目変わるの? だから少なくなってるとしたらn種類のうちの1種類しかチェックしてない箇所が大量にあるだけ 呼ばれるタイミングや状況の変化を考慮できてない 単にコードがいっしょだからテストも同じと誤魔化してるだけ 実際は起動直後に死ぬ 1秒待つと上手く行く
69 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 14:47:52.46 ID:LdI3VN67.net] OCPの例: objectclub.jp/community/memorial/homepage3.nifty.com/masarl/article/dp-ocp-2.html class Note, Quater, Half, Staffがあり、Staff::Play()で演奏するが、ここに8分音符や16分音符 クラスを追加しても、class Staffを含め既存クラスの変更・テストは不要。
70 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 14:50:42.43 ID:NDGHRGCl.net] >>54 そこの処理ってどこのこと?
71 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 14:51:48.20 ID:HPDljpqn.net] >>67 だからさ、基礎くらい勉強してから書き込もうね お前の知識レベルが低過ぎて会話にならない テストが減る理由については他の人の書き込み含めてよく読もう それでも分からないならお手上げ
72 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 15:27:02.55 ID:QN5Mj7aA.net] >>70 お前こそいっぺんでも設計書書いたことあるの? 記述の違いでテスト項目が減るわけないだろ ちゃんとテストやれ
73 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 15:32:23.92 ID:Q6hYp8jt.net] >>30 に同意できるやつは少数派
74 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 15:36:36.68 ID:QN5Mj7aA.net] 俺コーディングの仕方でテスト項目が変わる現場いたことないわ 仕様書や設計書から起こすだろ常考
75 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 15:41:46.58 ID:LdI3VN67.net] >>73 その設計書がコードと1:1でないなら、プログラマは普通コードを元にテストを書く。 >>68 の例で言えば、8分音符を追加するという変更の時、どのコードがテスト対象になるのかを 知っているのは、実装したプログラマだけ。 設計書がコードと1:1なら設計書からテストを起こせるが、そんな現場はないだろう。
76 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 15:52:32.77 ID:rtPt6hUE.net] >>74 >プログラマは普通コードを元にテストを書く そんなマー見た事いよ。先にテスト書いちゃうじゃん。 テストに合わせて実装が現場だと普通だよ。 分るでしょう?
77 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 15:53:45.05 ID:LdI3VN67.net] >>75 > そんなマー見た事いよ。先にテスト書いちゃうじゃん。 > テストに合わせて実装が現場だと普通だよ。 sine
78 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 16:19:39.18 ID:HPDljpqn.net] ID:QN5Mj7aAは自分が知らないものは間違っていると思う性質だから始末が悪い お前がなっとくできるように説明してやるにはお前に理解させてやる必要があるという… 順番に理解させてやるからまずはオブジェクト指向の主要な目的を述べよ まともな本なら書かれていることだからちゃんと読んで書くように どうせ知らないから答えられなくてスルーするんだろ? 知識がない上に向上心がない情けない奴
79 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 17:10:12.18 ID:QN5Mj7aA.net] コードからテスト起こしたら全部○だよな(笑)
80 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 17:19:55.49 ID:GPXTRY73.net] >>77 面倒見良いなw
81 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 17:26:36.18 ID:NDGHRGCl.net] >>78 粒度でかいテストしかしないの? 関数増やせば普通に単体テスト増えるよ >コードからテスト ホワイトボックステストとかカバレッジとか聞いたこと無い?
82 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 18:00:45.49 ID:z0ZguSAo.net] オブジェクト指向言語を採用していながら 設計がオブジェクト指向を活かしてないプロジェクトは山ほどあるからなあ
83 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 18:27:58.89 ID:HPDljpqn.net] >>79 確かにw おまけにオブジェクト指向の主要な目的についてすら答えないという… 知識がないくせに自信満々で書き込みする連中って何なんだろうな
84 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 20:33:09.19 ID:+XfJxtAA.net] オブジェクト指向しか眼中にないバカは洗脳されていていくら言っても無駄だから諦めろ ソースコードを読んでもわからない仮想関数による潜在的な分岐が恐ろしいと感じるのは当たり前 それでもそうするだけのメリットがあった場合は仮想関数も使うというだけ 欠点も理解できていないようでは道具は使えないよね、まったく
85 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 20:50:11.93 ID:S7oA8kB+.net] >>80 それっぽい言葉並べただけで 全然関係無いよね?(笑) ソースからテスト起こしたとして各メソッドの入力に対する出力は何でチェックするつもりなの? 君、ソースコードからテスト起こしたんだよ チェックできないよね? っていうかまともに会社でテストしたことあるの?
86 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 20:55:39.47 ID:HPDljpqn.net] >>83 そりゃお前の設計がおかしいだけだろ メソッドの目的が明らかでないとは終わってる
87 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 21:13:59.06 ID:BenfpwXE.net] >>84 テストって入力に対して出力をチェックするものじゃん 単体テストも然りだよ
88 名前:80 mailto:sage [2016/05/31(火) 21:30:14.57 ID:tiFC9Nv1.net] >>84 議論の最中に知らない言葉が出てきたのにググらずレス出来ちゃう所は素直にスゴいと思うけどもうちょっと調べた方が良いと思うよ 関数内にIfなりswitchなりがあってどのルートを通っても想定通りの動きをしてるか確認したい場合どうやって試験するの?コード見てテストケース作るよね? 君の会社ではシステムテストしかしないみたいだけど普通はもうちょっと粒度の小さいテストもやるからね
89 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 21:50:02.34 ID:+XfJxtAA.net] このように、オブジェクト指向から抜け出せなくなります オブジェクト指向に凝るのは麻疹みたいなものっていうけど 万年麻疹では仕方がない
90 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 21:53:42.78 ID:HPDljpqn.net] >>88 いやお前の設計がアホなだけだって 体験談がアホなんだもんw
91 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 21:58:58.52 ID:tiFC9Nv1.net] >>88 内心オブジェクト指向と全然関係無い話で申し訳ないと思ってたけどお楽しみ頂けたようで何よりです
92 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 22:08:54.95 ID:BenfpwXE.net] 別にオブジェクト至上主義じゃないし、たった数十行くらいのプログラムでOOD()とか思うけど 複数のswitchにcaseが1000やら10000ぶら下がってても並んでたほうが一目瞭然とかいう>>27 の物言いに ついカッとなってしまった。今は反省している
93 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 22:40:38.43 ID:/+1mPN+r.net] switchおじさん登場 「わしのcaseは1080まであるぞ」
94 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 23:07:32.14 ID:bQbJ8LGw.net] >>87 ううん コードからテストなんて絶対作らない ってか作れない 正しい出力って何? 仕様書か設計書にしか俺には見当たらないけど? ソースコードからどうやって正しい出力なんてわかるの? そんなトンチンカンな仕事してて恥ずかしくないの?
95 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 23:16:01.35 ID:bQbJ8LGw.net] そもそもユニットテストとか出してるけど お前ユニットテストやったことあるのかよ あれさメソッド毎に 入力値とそれに対する出力値を求められるわけじゃん 入力値に対する正しい出力値ってソースコードから生成してくれんの? それともお前のやってるユニットテストってただ通して死ななきゃOKみたいな感じなの?
96 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 23:21:08.77 ID:HPDljpqn.net] >>93 コードを書いてから、あるいはコードを見ながらテストを書く場合もあると言ってるだけだろ 言葉尻をとらえたら確かにおかしいけど、普通に考えてコードだけを見てテストを作る訳ないじゃん…
97 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 23:38:05.03 ID:4qIp1aFV.net] まあコードからテストが自動生成できるならそれはそれでリファクタリングの際には 役立つけどな。 とくにレガシーコードをいじる場合。
98 名前:デフォルトの名無しさん [2016/05/31(火) 23:41:19.77 ID:KvOshn77.net] >>93 テスターなの?
99 名前:デフォルトの名無しさん [2016/05/31(火) 23:42:12.84 ID:KvOshn77.net] ソースコードみれば意図する出力はわかりそうなもんだけど わからないところならコメントで補ってあるはずだよ
100 名前:デフォルトの名無しさん [2016/05/31(火) 23:42:46.24 ID:KvOshn77.net] いまどき詳細設計書なんて書かないでしょ コードとペアでテスト作ってるはずだよ
101 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 23:49:54.85 ID:4qIp1aFV.net] >>91 そもそも 1000 や 10000 に分岐する時点で 仮想にするとか switch にするとか以前の問題があるだろうに。。 設計をしっかりするって別にオブジェクト指向がどうのこうの言う事じゃなく、 こういう分類をうまくやって、あほみたいな数の分岐をなくしたり整理することなんじゃないのかね。
102 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 23:53:29.29 ID:HPDljpqn.net] このスレってスレタイのオブジェクト指向設計について語る人は少ないよな オブジェクト指向設計は初心者には無理だからだろうか 失敗する奴は理解できていないのが原因
103 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 00:08:57.03 ID:DVl/WGs1.net] >>101 お前が言うか 人の批判に終始してるだけじゃねーかよ 知識豊富な君は何か語りたいことがあるのかよ? 以下の用語を使い100字以内でどうぞ。 オブジェクト趣向分析 オブジェクト嗜好設計 オブジェクト施工プログラミング
104 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 00:23:11.27 ID:iqAUu6wp.net] >>102 あと30字程度しかないじゃないかwww
105 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 00:31:30.60 ID:m3KkndXk.net] ↑算数も出来ない プログラミング以前だね
106 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 00:33:43.37 ID:iqAUu6wp.net] >>104 たしかに……SJISバイト数で数えてしまった
107 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 00:35:54.30 ID:XVpspPb0.net] >>26 > 一つのswitch文にcaseが10個あったら?20個だったら?100個だったら? それだったら関数テーブルに置き換えるな。 var f = { case1: func1, case2: func2, case3: func3, case4: func4, : : } switch文なんて簡単になくせるよ。
108 名前:デフォルトの名無しさん [2016/06/01(水) 02:54:32.51 ID:RDQRhO1c.net] >>103 わろたw
109 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 07:17:52.51 ID:3uAWtRHV.net] >>94 それはブラックボックステストでしょ 俺がコード見てテストケース作るって言ってるのはホワイトボックステストだよ
110 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 07:49:26.90 ID:eXE7t88x.net] >>95 なんだこいつただの馬鹿じゃん
111 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 09:09:11.45 ID:MqC7NAR1.net] 将棋の合法手については駒自体の動きと盤面の両方を考慮して決まる。 クラス構成はどうする?
112 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 09:49:07.08 ID:OaTzWyfO.net] OOにすることって事前に決めるようなナンセンスな話題にしたいなら将棋の話でいいんだけど、違うでしょ? 自動車とか鳥をクラスでとかいう入門書でよくやる例が、実際にOOで設計する例と乖離しているんじゃないかって話でしょ? どうしてOOで設計するのかをはっきりさせないと、何をどういうクラスにするかも不明瞭になるよ。 お遊びで将棋を例にするなら、自分なら駒をクラスにして階層構造を作ったりはしない。 駒はプレイヤーが動かすものであり、ルールで動かし方が決まっている、どこまでも受動的なものだから、 あたかも主体にするような勝手な解釈を作ることになる。 つまりルール上に無い階層構造を作ることになり、設計段階で指し方のアルゴリズムに制限がかかる。 駒クラスにメソッドを定義しても、現在の棋譜が必要になるから、盤面を常に引数で受け取るか状態として保持しないといけないので、旨味も少ない。 駒はsum type相当でコンパクトに表現して、ルールをクラス化する方がいい。
113 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 09:58:23.00 ID:5B+GU3AB.net] なんかよく分からんけど 盤クラス、駒クラス、ルールクラスではイカンのか?
114 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 10:00:59.02 ID:MqC7NAR1.net] >>111 駒をクラスにしろなんて言ってない。
115 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 10:10:44.41 ID:MqC7NAR1.net] >>112 明確な正解はなさそうだから、意見交換するにはいい話題だと思って。 駒の動きを駒に持たせるのは自然だけど 局面による制約はあるから盤、駒、ルールの割り振りがはっきりしない。 王手放置、二歩、打ち歩詰めの禁止は盤に紐づいてるように思える。 どちらもルールって考えもありそう。 [] [ここ壊れてます]
117 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 10:19:46.05 ID:MqC7NAR1.net] >>111 受動的なものだからクラスにならないってのは違うだろ。 MVCもMは受動的なクラスの典型。 駒をクラスにするって制約を勝手に想定して反発してる感じだから それがないと認識した上で意見を書いて欲しい。
118 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 10:20:56.38 ID:370Huk/V.net] >>84 お前それ@t_wadaに対して言えんの?
119 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 10:23:44.00 ID:5B+GU3AB.net] >>114 >王手放置、二歩、打ち歩詰めの禁止は盤に紐づいてるように思える。 個人的にはそれがルールかな 駒は動ける方向を持つ、 盤は駒の位置を保持する (存在しない位置に駒が動こうとしたらエラーを返す)、 ルールが禁じ手かどうか判定する、 って感じだろうか
120 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 10:29:02.31 ID:HJuydxx6.net] 確かにロジック面では意義が薄いかもしれんが、表示面ではクラス化が有効だと思う。 設計の仕方はいろいろあるけど、一般論として柔軟性を確保しつつ短くてシンプルなコード になることが一番大事だわな。 で、何をもってシンプルというかが知識量や技術力によって違うだけだと思う。 例えば、ある性質を伝えてもらうとして、普通のエンジニアには微分方程式で示されたほうが シンプルで使いやすいと思うけど、文系の人はExcelの計算シートで示されたほうが分かりやすい と思うのかもしれない。
121 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 10:30:10.54 ID:MqC7NAR1.net] >>117 駒の動きを表現する方法はどう考える? 金の動きは概念的には分かるけど、金クラスに問い合わせたときにどうやって返すんだろ? 配置が決まっていないならマスとして返すことはできない。 金オブジェクトは配置されたマスの情報まで持っているとするのか?
122 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 10:39:44.99 ID:KWV9l2rU.net] 駒は相対的に移動できる箇所を返して はみ出た部分とかを判定・表示するのはUIの責任かなと
123 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 10:49:52.11 ID:MqC7NAR1.net] 電王戦に参加する将棋ソフトという想定。 >>8-9
124 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 11:04:15.23 ID:3Uom60Ul.net] >>114 盤にひも付いてない 盤は駒の位置しか知らない どちらもルール
125 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 11:05:23.92 ID:RnjmzRnq.net] 将棋を知ってるやつなら飛角香と合駒まで考えが及ぶはず
126 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 12:00:09.01 ID:MqC7NAR1.net] >>122 >>123 とすると、どうなる?
127 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 12:18:23.72 ID:3Uom60Ul.net] 駒は自分がいるマス目と 動ける範囲を知っている
128 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 12:53:57.88 ID:63gTfooz.net] 駒は条件判断の材料なだけでその後の処理は駒の担当ではないから、条件判断しやすい型にする Javaならenumにしてメソッド追加するならgetDisplayName()程度 将棋盤は9*9のマトリクス情報と手数、棋譜情報( 駒、FromPos , ToPos、時間のリスト)を保持するデータクラス Playerは持ち駒と評価情報とか。この辺は思考ロジックが分からないから適当だけど打ち筋の傾向とか情報があれば保持って感じでデータクラス
129 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 13:12:22.20 ID:3Uom60Ul.net] 棋譜と時計は独自クラスを持つ 持ち駒は持ち駒台があるし 盤の一部だと考える
130 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 14:06:20.72 ID:MqC7NAR1.net] なんとなくは分かるんだが、明確には分からない。 以下のケースのそれぞれの場合に、どのクラスのメソッドを呼び出して、 そのメソッドはどのクラスのどんな情報を参照するのか説明して欲しい。 @盤上のすべての合法手を列挙する。王手放置などはしないようにする。 Aある駒が移動できるマスを列挙する。 Bあるマスに移動できる手を列挙する。大駒を取れる手があるなら優先的に考慮するとかあるだろう。
131 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 14:21:18.72 ID:MqC7NAR1.net] >>128 の例を書こうと思って書き始めたけど、文章で書くよりUMLを書いたほうが早そう…。 @合法手をどのクラスに問い合わせるのか? A盤、駒、ルールはクラスとするのか?駒には金は合計4枚とか複数枚あるけど それぞれごとにオブジェクトがあるのか?、 B盤、駒、ルールの間の参照は? といった点について考えを聞きたい。
132 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 14:28:22.36 ID:MqC7NAR1.net] 合法手のルールとして 駒ごとの動き。 縁にあれば動きが制約される。 他の駒によって動きが制約される。 二歩による制約。 王手放置は禁止。 打ち歩詰めの禁止。 とかいろいろあって、駒だけに関係するものから盤全体に関するものまで レベルがいろいろあるのをそれぞれどのクラスに担当させるんだろう? >>125 とするなら 駒ごとの動き。 縁にあれば動きが制約される。 は駒オブジェクトが返せるけど、他を考慮するには盤の情報が必要。 上の2つは駒クラスに担当させるのか、それともルールクラスが担当するのか、などなど。
133 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 16:55:28.98 ID:9b+rCIOV.net] どういう方向性で組むか次第だろうが… 実際の将棋であればルールを知っているのは棋士であって、駒台を含む盤や駒はすべて表示のためのものに過ぎないんじゃない? 目隠し将棋の例がある様に、盤や駒などは将棋というゲームを成立させる必須条件ではないよな 情報を分散して持つのは将棋の様な評価すべき選択肢が多い場合には多くのオーバーヘッドを生むため処理速度的にも好ましくないと思う
134 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 17:07:40.64 ID:3Uom60Ul.net] >>128 合法手は「手」クラスのメソッドに問い合わせる 2. は手が駒クラスのメソッドに問う 1. は2を全駒に問い合わせた後、ルールでフィルタして完了 3. も1の後、マス目でフィルタすれば完了 >大駒を取れる手があるなら優先的に考慮する のは駒でなく手や形勢判断とか上位クラスの責務
135 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 17:08:56.70 ID:3Uom60Ul.net] >>129 1. 「手」に問い合わせる。手は盤、駒、ルールに問い合わせる 2. クラスにする。1枚1つで、40枚の駒は40個のオブジェクト 3. 盤と駒は相互に参照。手はその2つとルールを参照。
136 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 17:09:22.17 ID:3Uom60Ul.net] >>130 >合法手のルールとして 前半3つは駒と盤 後半3つはルールと手が判断
137 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 17:10:02.02 ID:3Uom60Ul.net] >>131 目隠し将棋はプレイヤーへの表示を UIでカットしてるだけで 内部処理的には盤と駒(の概念)が必要 なお処理速度は考慮せず スレタイに沿って純粋にOOだけ考えている
138 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 20:47:21.69 ID:9b+rCIOV.net] >>135 >>1 にはそういうアホな事すんなって書いてあるぞ?w 駒や盤面なんかUI部分を除けばビットフラグの集合で事足りる、内部処理をリアルの構造と同じにする必要なんかないだろう だいたい>>132-134 を忠実に実行したら1手指すまでに何回の移譲が入るのよ? 内部処理に関して言えば効きテーブルや過去の棋譜データの探索等の棋士の脳内の思考の動きを分析してオブジェクト化してコンポジットした方がなんぼかまし OOP自体は否定しないが、ダメ設計は迷惑だ
139 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 20:51:02.12 ID:cinc5ABC.net] >>108 自分の意見を正当化するために必死すぎるだろ if文の条件1つとっても仕様が無いのにどうやってソースだけで判断するんだ? 死ねよ
140 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 22:33:58.92 ID:KWV9l2rU.net] >>136 委譲の数についてはそこまで気にすることはないのでは? もちろ
141 名前:デメテルの法則なんかは意識しないとだけど パフォーマンスの話をすると早すぎる最適化の議論が絡んでくるからややこしい 必要なら全部出来たあとにロファイルとってやろうねってことになる [] [ここ壊れてます]
142 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 22:44:47.80 ID:3uAWtRHV.net] >>137 正当化もなにも、もともと >>73 >コーディングの仕方でテスト項目は変わらない この発言に対する反論としてホワイトボックステストを挙げただけだよ かなり脱線してOOと関係無くなってるからこの話題はもういいよ
143 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 23:32:23.85 ID:cinc5ABC.net] >>139 でも変わらないんだぜ ちゃんと仕様に基づいた意味のある条件分岐であるなら どう組んでもチェック項目は絶対同じ数と内容になる 増えたりも減ったりもしない 記述する場所が違うだけ だから反論にはなっていない もし違うのであればそれは違う仕様のものを作っているんだよ
144 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 23:57:23.45 ID:MqC7NAR1.net] う〜ん。よく分からん。 しっかりした設計者なら自分の理解をUMLでモデリングするんだろうなと思った…。
145 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 23:58:26.59 ID:Q91V44dw.net] 同じ「駒」でもロジック部分とUI 部分じゃ持ち方が異なって当然でしょ。 てかそのためのモジュール分けだと思うんだが。 UI とは独立に最適化できるっつーのがこういうモジュール分けの良いところな訳で。
146 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:02:22.14 ID:qX3K4vQy.net] >>140 > どう組んでもチェック項目は絶対同じ数と内容になる そうでもないというか、その発想は抜けがあるよ。 たとえば数値が偶数か奇数かを文字列で返す関数があったとしよう。 function foo(value) { return (value % 2 == 0) ? 'even' : odd'; } これのチェック項目はfoo(0)とfoo(1)の2つで十分だろう。 だけどさ、関数の中身がこうなっていたらどうする? (1レスに収めるためにわざと改行せずに一行にしたけどそこは無視して) function foo(value) { var i = value % 10; if (i == 0) return 'even'; if (i == 1) return 'odd'; if (i == 2) return 'even'; if (i == 3) return 'odd'; if (i == 4) return 'even'; if (i == 5) return 'odd'; if (i == 6) return 'odd'; if (i == 7) return 'odd'; if (i == 8) return 'even'; if (i == 9) return 'odd'; } わざとバグを入れたけど、バグが無ければこの関数は仕様どおりに動くしfoo(0)とfoo(1)のテストにも通る。 だけどこの関数にはバグがあるし、だからチェック項目は2つでは十分ではないということになる。 コーディングの仕方でチェック項目数は変わらないっていうのは、半分は正しい。 もし2つあるコードのどちらも同じぐらい正しい品質であればその通り。 だけどこの例の場合は違う。2つのテストでは足りないということになっている。 この例のあるべき姿はチェック項目数を増やすのではなくて、コードをリファクタリングしてシンプルにすること。 そうすることでチェック項目は2つになるわけだが、ここまでの話で明らかなように 「コーディングの仕方でテスト項目は変わる」というか「悪いコードだとバグがないことを担保するためのテスト項目は増える」
147 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:06:33.20 ID:IPFd2Mdr.net] >>143 これはコードがアホだとテストも必要って言ってるだけのような。 一般論としてここまでアホなコードに対応することを要求するのは違う気がする。
148 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:11:25.02 ID:qX3K4vQy.net] >>144 これはわかりやすい例にしたからアホに見えるけど似たようなことはある。 もう一つの例が関数やコードのコピペ。 関数やコードがコピペされていると本来一箇所でいいテストを 何箇所でもやらないといけないはめになる。 テスト項目っていうのは無駄なコードがないという前提で仕様書から起こされている。 だから無駄なコードがあれば仕様書から起こしたテスト項目をテストしてもテスト項目が足りない。 正確に言えば理論上テスト項目は足りるはずなのだが、それでは品質を担保できないという現実に直面する。 だからテストする前にコードに無駄がないかを見ないといけない。 コードが想定通りでないとテストしても想定どおりの品質を保つことが出来ない。
149 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:15:44.44 ID:NmrKPHaw.net] >>136 盤や駒をクラスにするのは 責務の分散協調の結果だが OOの設計を知らないのは分かった まあ将棋のように仕様が固定しているなら 高速化を重視するのはいいが RPGのように仕様変更が想定できる場合 構造化で済ましてると書き直しで汚くなる
150 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:16:54.66 ID:IPFd2Mdr.net] >>145 これあるいはこのようなバグによりテストができていないことが判明した場合、 テストが漏れていると判定するか、コードがおかしいと判定するかということ。 条件の境界のテストが漏れているのはテスト漏れだと思うけど、コード固有の境界線のテストが不十分だった場合 本来の仕様とは違うことを境界線にしているコードがおかしいと判断すると思う。
151 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:22:21.92 ID:NDe+tfkH.net] >>143 > function foo(value) { > return (value % 2 == 0) ? 'even' : odd'; > } > これのチェック項目はfoo(0)とfoo(1)の2つで十分だろう。 テストは仕様を満たすかどうかを確認するのが目的だから想定される入力を出力を 出来れば全部それが無理なら適当に間引いてテスト項目を作る必要がある 仕様が良く分からないけど入力は正の整数なのか自然数なのかあるいはもっと別か きちんと仕様を確認した上でないとfoo(0)とfoo(1)の2つで十分とは言えない
152 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:23:27.91 ID:qX3K4vQy.net] >>144 逆に無駄なテストっていうのもある。 たとえば、入力画面に数値入力項目が複数ある。 たとえば「原価」「定価価格」「値引価格」みたいに。 で仕様書では、それぞれの入力項目は数字しか入力できないこと。 という仕様だったとする。 このテストに「原価」「定価価格」「値引価格」の三箇所を それぞれ数字しか入力できないことをチェックするのか?ということ。 同じ画面ならば省こうと思うかもしれないが、 これが違う画面にある「年齢」だったらどうするか? 仕様書から起こせば、それぞれの項目でチェックしようってなりそうだろう? だけど開発者がこれらを、数値入力項目用の汎用コンポーネントで実装すれば 数字しか入力できないというテストは無駄でしかない。 ・・・が、開発者が馬鹿で、一箇所だけ普通の入力項目を使って 独自で数字のみ有効なんてコードを書いていたら?
153 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:27:08.04 ID:IPFd2Mdr.net] >>149 テストスクリプトとしては数字以外が入力されたらエラー処理がなされることを確認する以外の対応がむしろないな。
154 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:27:39.75 ID:qX3K4vQy.net] >>147 > これあるいはこのようなバグによりテストができていないことが判明した場合、 いや、だからテストは通ったって書いたじゃんw テストは通るけど、バグがある場合があるんだよ。 そして、テスト仕様書自体は正しく、コードが間違っている。 だから正確に言えばコードによってチェック項目が変わるのではなくて、 そのチェック項目では、コードに問題がないことを担保できない。 チェック項目が十分かつコードにも問題がないことを担保するには あらかじめコードのチェックが必要って話。 もし「コードの方を直さない」ならば、コーディングによって 問題がないことを担保するための、チェック項目は変わってしまう。
155 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:31:00.69 ID:IPFd2Mdr.net] >>151 概念的にはテスターとコーダーは違う人。 テスターは仕様の境界でテストするのであって、コードの境界でテストすることをようきゅうするのはおかしい。 テスターとコーダーが同一人物であったとしたらコーダーがアホだとテストが漏れるのはどうしようもない。
156 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:35:08.33 ID:qX3K4vQy.net] >>152 担当範囲がおかしいかどうかは議論するべき所じゃないよ。 問題が起きた時に誰に責任があるかの話なんかするつもりはない。 今話しているのは、こういう問題をどうやって解決するか 現実の話として、コードのコピペ等によって 仕様書から起こされたテスト項目では、バグがないことを担保できない場合がある。 (逆にコードが汎用化されていたりで、無駄なテストをしている場合もある) バグがないことを担保するにはどうするか? コードのレビューを行って、コードに問題がないことを 確認するしかないだろうね。 それをしないならば(つまり開発者の書いたコードを信用するならば) コードにバグがないことを担保するためのテスト項目数は変わってしまう。 (ついでに言えば、どういうテストをすればいいかはコードを見ないとわからないので、やっぱりコードのレビューが必要)
157 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:37:15.86 ID:IPFd2Mdr.net] >>153 コードの条件がおかしい場合にテストで検知できるかって話。 要件にしたがってテストしていれば分かる。 要件にしたがってテストしたけどコードがアホ過ぎて検知できない場合もあるとしてもどうしようもない。 どうやって検知すんだ?って話。
158 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:40:13.45 ID:IPFd2Mdr.net] コードレビューで問題が見つかったらコードを直すだけ。 テスト漏れだとは思わない。 もちろんテスト項目として追加するなら追加して。 でも、テストが漏れていたとは思えない。
159 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:42:01.42 ID:9Sgsnltg.net] 後で拡張することが無い部分をswitchで書くのは全然問題無いと思うが。 どこにOOによる拡張性を持たせるかが問題になるから、要件とか設計からの要請で判断するべき。 Expression Problemで明確になることだけど、 OOPは子クラスを新たに追加するのは簡単な一方、新しいメソッドを追加するには既存のソースを変更しないといけない。 親クラスに共通の処理を書いたとしても、他と違うことをしたい子クラスの数だけ変更箇所が散らばる。 どの子クラスがオーバーライドしてるのかを把握するのに手間がかかるし、 追加するメソッドによってはクラス階層を更に分けてコピペを減らすべきかもしれない。 enumとswitchを使っている場合は逆になって、メソッドの追加や変更部分は一箇所にまとまっていて把握と追加が楽。 新しい種類のデータを追加するのは面倒。 ちなみにHaskellの型クラスやOCamlのvariant typeを使うとデータの種類も処理の種類も楽に増やせる。 Javaだとジェネリクスを使えばできないことはないけど、汚くなる。
160 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:42:37.96 ID:qX3K4vQy.net] >>154 > 要件にしたがってテストしたけどコードがアホ過ぎて検知できない場合もあるとしてもどうしようもない。 だからそのどうしようもないことが、現実として起きてるんだよ。 開発者の言う「このコードは汚い」というのはそういうこと。 コードの無駄やコピペがあって、本来十分であるはずのテスト項目では バグがないことを担保できない。 言い換えると、コードに問題がある場合のバグは、仕様書から起こしたテストでは検出できない。 バグが検出できない(問題ないと判断される)のだから、当然コードの問題もテストでは検出できない > どうやって検知すんだ?って話。 コードレビュー以外にも検知する方法はあるぞ。 コードメトリクス(複雑度)の測定や コードの重複の検出ツールなどを使えば良い。
161 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:45:18.72 ID:IPFd2Mdr.net] >>157 コーダーがアホ過ぎたらそういうことも起きるって言ってるじゃん。 そこまでアホなコーダを想定してテストしろって要求するのはおかしいって話。 コーダーが犯すあらゆる過ち対応したテストを作成するのは不可能。
162 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:46:19.41 ID:IPFd2Mdr.net] >>157 ツールがあるならコードを直そうね。 テストが漏れていると思うのはおかしい。 >コードレビュー以外にも検知する方法はあるぞ。 >コードメトリクス(複雑度)の測定や >コードの重複の検出ツールなどを使えば良い。
163 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:48:15.80 ID:55Jnw5v7.net] >>143 関係無いよね チェック項目は増えてない 仕様書から起こす入力に対する正しい出力をチェックするだけ
164 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:50:43.52 ID:qX3K4vQy.net] >>155 > コードレビューで問題が見つかったらコードを直すだけ。 > テスト漏れだとは思わない。 > もちろんテスト項目として追加するなら追加して。 > でも、テストが漏れていたとは思えない。 だからそういったじゃんw 正確にはテスト漏れじゃないが、開発者の書いたコードを素直に受け入れるならば、 コードによって問題がないことを担保するためのテスト項目は変わる。 コーディングによってテスト項目は変わるか?質問に対していうと、 「コードレビューで問題が見つかったらコードを直すだけ。」というならば 直さないならばテスト項目は変わるってことでしょう? テスト項目を変えないためにコーディングを直すっていうのは、 テスト項目が変わる原因の一つがコーディングであると言ってるのと 微妙にニュアンスは違うけど、結果として殆ど変わらないよ。
165 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:53:04.14 ID:qX3K4vQy.net] >>160 > 仕様書から起こす入力に対する正しい出力をチェックするだけ それはなんのためにやっているの? テストはバグを検出するためにやっていると思ったが、 コードに問題があると、バグを検出できないってことだよね?
166 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:53:06.73 ID:IPFd2Mdr.net] >>161 コーディングによってテスト項目は変わるか?云々は知らない。 お前が言ってることがおかしいってだけ。 テスターは要件の境界線をテストする。 コードが異常な境界線を基準としていたためにバグを見逃していたとしてもテスターの責任ではない。 どうしようもない。
167 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:58:20.11 ID:55Jnw5v7.net] >>163 それも違う 境界なんてものは存在しない 本来は取り得る値すべてをチェックしなければならない でも客とテスターの間の取引で暗黙に間引いてるってだけの話
168 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 00:59:05.09 ID:qX3K4vQy.net] >>163 だから責任問題の話なんかするつもり無いってばw どんなコードであっても、同じテストをすれば 同じ品質(バグがない)を担保できるような話をしてるから、 同じテストをしたとしても(そのテストに漏れがなかったとしても) コードにバグがないことを担保できないし、 コードの品質も同じにはならないよって話をしてるんだよ。 コードが悪ければ、品質を保つために必要なテスト項目は増えるし、 コードを直すことで、必要なテスト項目は減る。 (正確に言えば仕様書から起こした本来の最低限のテスト項目だけで済む)
169 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:01:46.10 ID:IPFd2Mdr.net] >>165 責任だけの話じゃない。対応のしようがないって話。 要件上引数は正の数でなければならないとする。 ところがコードがアホで引数が100だとバグが発生するとする。 テストではそれが分からなかった。 どうすんの?って話。
170 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:03:06.15 ID:55Jnw5v7.net] >>165 何度も言うけどソースコードからテスト項目は増えない ソースからテスト仕様書作ってる会社なんてないだろうよw
171 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:07:07.95 ID:T7FoO03Y.net] だんだん ID:qX3K4vQy ID:IPFd2Mdr の主張がこんがらがってきた……
172 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:08:17.44 ID:qX3K4vQy.net] >>166 だからテストとは別にコードレビューをテスト前に行い、 悪いコードをあらかじめ直すしかないだろ? 俺が品質ベースで考えてるから話がずれてるのか? 俺はバグがないようにすることを目標として どんなテストが必要か?を考えてる。 だからバグを無くすためには、コードによって必要なテスト項目が変わってくる。 そしてコードを良くすることで、必要なテスト項目が減るという話をしてるんだよ。 仕様書からテストを起こすっていうのは、当然コードは見てないから 必要な(最低限の)テストは何か?だけを考えてる。 テストの効果(バグを見落とすかどうか)は考えておらず、 その効果はコードによってばらばらで、テストしてもバグを検出できるとは限らない。 この場合のテストの目的は何なんだろうかねw
173 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:08:59.38 ID:IPFd2Mdr.net] >>169 うん。だからコードを直そうね。 テスト漏れじゃないね。
174 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:12:05.80 ID:qX3K4vQy.net] >>167 > 何度も言うけどソースコードからテスト項目は増えない それはテストの効果(バグがないことの担保) を無視すればそうなるよね。 ソースコードからテスト項目は増えないが ソースコードが悪ければ、その増えないテスト項目では バグを見逃す可能性が高くなる。 テストの効果を低くしていいならば、 テスト項目は増やさなくていいよ。 そしてソースコードが汚いならばソースコードの方を直すんだろう? なぜなら、ソースコードが汚ければテスト項目を 増やさなければならなくなるから(アレ?w)
175 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:12:26.96 ID:T7FoO03Y.net] 俺の理解 ID:qX3K4vQyの主張はコードからテストケース作る ID:IPFd2Mdrの主張は設計書からテストケース作る コードが設計書に書かれてることを満たしてるかどうかって コードから作ってたらわからないのでは……って疑問が…… なぜかコードだけ、設計書だけの0か100かに見えてしまってるので 勘違いしてたらごめん
176 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:13:23.53 ID:qX3K4vQy.net] >>170 > うん。だからコードを直そうね。 > テスト漏れじゃないね。 コードを直さないとどうなる? 同じ品質を保つにはテストを増やす必要があるよね? えーと、それがコーディングによってテスト項目は 変わるってことだよねw コーディングによってテスト項目が増えるから コーディングを直すんだよね?w
177 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:14:50.74 ID:55Jnw5v7.net] >>169 どうにでも好きなように組んだらいいよ チェック項目は変わらない オブジェクト指向でも関数型でも これが設計の本質だ 単にソースコードに書く場所が違うだけ それがオブジェクト指向 こんなもんにマジになっちゃってどうするの? っていうIT業界の黒歴史
178 名前:デフォルトの名無しさん [2016/06/02(木) 01:16:20.73 ID:IPFd2Mdr.net] >>173 >>166 そりゃバグがあることが判明したらテストを追加すべきだろうね。 でも、そもそもテストが不足していたということじゃないね。
179 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:18:59.63 ID:qX3K4vQy.net] >>172 俺の意見としては、テストとは別にコードレビューが必須であるということ。 仕様書からテストをおこすのは問題ないんだが、 そのテストで品質が保てるかどうかは コードで左右される。 コードが汚ければいくらまともなテスト行ったとしても それで品質を保つことは出来ない。 俺は品質を保つことを第一に考えてるので コードを直さずに品質を保つならばテスト項目
180 名前:ェ増えてしまうという話をしてる。 だからテスト項目を増やさずに品質を保つために、コードを直しましょうという話をしている。 で、最初の疑問「コーディングによってテスト項目は変わるか?」の 答えは、(品質を保つことを前提にすると)コーディングによってテスト項目は変わる。 悪いコードだと(品質を保つために)テスト項目が増えてしまう。だからコーディングを直しましょう。 [] [ここ壊れてます]
181 名前:デフォルトの名無しさん [2016/06/02(木) 01:21:24.41 ID:IPFd2Mdr.net] >>176 コードレビューで仕様の境界とは違うところで問題が見つかったらコードを直すだけ。 そんなのテスト作成とは関係ない。
182 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:23:15.23 ID:qX3K4vQy.net] >>175 > そりゃバグがあることが判明したらテストを追加すべきだろうね。 リリースした後で、バグが有りました。すいません。ですむ会社なら それでもいいけどさぁw 「ちゃんとテストしたの?」の答えに テストは不足していません!ちゃんとテストしました! ちゃんとテストしたのに、コードが悪かったんです! ですむなら、それでもいいけどさぁw 理想の世界であれば、テストが不足してないのは事実だろうが、 そのテストで十分であるためには、コードが綺麗でなければならず、 コードが汚ければ、多くのテストが必要になるから コードレビューをして綺麗なコードにしましょうや。 それができて初めて、テストする意味が生まれる。
183 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:24:18.99 ID:qX3K4vQy.net] >>177 > コードレビューで仕様の境界とは違うところで問題が見つかったらコードを直すだけ。 だから何度もそう言ってるだろうが。 人の話聞けよw
184 名前:デフォルトの名無しさん [2016/06/02(木) 01:24:53.24 ID:IPFd2Mdr.net] >>178 だからさ、要件の境界とは違うところでコードがアホ過ぎるせいでバグがあったとして見つける手段は? 見つける手段がないのに直そうと言っても意味ない。
185 名前:デフォルトの名無しさん [2016/06/02(木) 01:25:55.40 ID:IPFd2Mdr.net] >>179 ?? だったらいちいち反論すんなよ。
186 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:26:39.31 ID:qX3K4vQy.net] 俺がはテストが足りないって言ってるんじゃないんだぜ? 品質を保つことを前提にするならば、 コードが汚ければ、品質を保つために必要なテストが増えてしまうから、 まずコードレビューしてコードを綺麗にしましょうって話。 コードが綺麗な状態であって初めて、仕様書から起こしたテストで十分だと言える。
187 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:29:14.56 ID:qX3K4vQy.net] >>181 > だったらいちいち反論すんなよ。 お前が反論してるんだろw っていうかお前のは反論じゃない。 俺が言っていることと違うことをぶつけているだけ。 俺が言ってるのは、コードが汚いならば(品質を保つために) 必要なテストは増えるって話。 コードが汚くても、テストは増やさないで品質が保てるような 話をしているから、その発想は抜けがあるよってこと。
188 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:29:26.96 ID:soSMk704.net] そんなときこそユニットテスト コード改変の前後でエンバグしたかどうかがすぐわかります なおユニットテストそのものの品質を保つかが課題
189 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:30:23.03 ID:T7FoO03Y.net] >>176 了解 回答ありがとう
190 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:30:30.71 ID:qX3K4vQy.net] >>180 > 見つける手段は? それもテスト前にコードレビューするって何度も言ったはずだが? 汚いコードは直さないと、テストした所で効果は低い
191 名前:デフォルトの名無しさん [2016/06/02(木) 01:31:11.16 ID:IPFd2Mdr.net] >>183 本来的にはテストは要件にしたがって動作することを確認するためのもの。 コードがきれいか汚いかとか関係ない。
192 名前:デフォルトの名無しさん [2016/06/02(木) 01:32:06.67 ID:IPFd2Mdr.net] >>186 コードレビューで見つかったなら直せ。以上。 テストとの直接の関係はない。
193 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:33:09.51 ID:qX3K4vQy.net] >>187 > 本来的にはテストは要件にしたがって動作することを確認するためのもの。 その確認の手間がコードによって変わってしまうんだよ。 すでにコードで例示したけど?
194 名前:デフォルトの名無しさん [2016/06/02(木) 01:33:30.12 ID:dD1ozz1q.net] Haskellならテスト要らないですよ? コンパイルできた時点でバグが無いことが保証されるから。
195 名前:デフォルトの名無しさん [2016/06/02(木) 01:34:23.43 ID:IPFd2Mdr.net] >>189 コードがアホなだけ。テストではどうしようもない。 と結論が出てる。
196 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:34:39.66 ID:55Jnw5v7.net] >>189 だから変わらないって 本来は取りうる値の範囲をすべてチェックするんだから
197 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:34:52.13 ID:qX3K4vQy.net] >>188 「直接の関係はない」ってことは やっぱり間接的に関係があるって認めるんだw そりゃコードによって品質を保つための テストは変わりますからねw バグが有るかどうか知ったこっちゃない。 俺はテストをちゃんとやった。 テストしたのに漏れたのはコードが悪いんだ! ですむなら良い世界だねw
198 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:35:31.60 ID:55Jnw5v7.net] 勝手に間引いてるのはテスターの責任
199 名前:デフォルトの名無しさん [2016/06/02(木) 01:36:12.80 ID:IPFd2Mdr.net] >>193 コードレビューで問題が見つかったらテストケースを追加してもいいよねってだけ。
200 名前:デフォルトの名無しさん [2016/06/02(木) 01:36:59.90 ID:dD1ozz1q.net] これからは関数型ですよ。 Haskell以外淘汰されます。
201 名前:デフォルトの名無しさん [2016/06/02(木) 01:37:36.91 ID:IPFd2Mdr.net] >>196 Haskellとか既に淘汰されてるんだが。
202 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:38:47.83 ID:qX3K4vQy.net] >>192 > 本来は取りうる値の範囲をすべてチェックするんだから うん、ネタなのは分かってるよ(笑) 分かってて聞くけど、ある数値を二乗する関数があったとして Rubyで取りうる値の範囲はどうなるかい? なんでRubyと言ったかというと、RubyではIntの範囲を超えると 自動的にBignumに拡張されるからとても大きな整数を扱えるんだぜ!
203 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:39:44.45 ID:qX3K4vQy.net] >>195 > コードレビューで問題が見つかったらテストケースを追加してもいいよねってだけ。 誰がやんの? テスターのお仕事?
204 名前:デフォルトの名無しさん [2016/06/02(木) 01:40:36.22 ID:IPFd2Mdr.net] >>199 コードレビューって自分で言ったんだから知ってるだろ。 分かってることをいちいち聞くな。
205 名前:デフォルトの名無しさん [2016/06/02(木) 01:40:47.43 ID:dD1ozz1q.net] Haskell使えばテスト必要ないですよ?
206 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:42:30.76 ID:55Jnw5v7.net] スレの本題にくっつけると コードの記述方法でチェック項目は変わらない つまりオブジェクト指向でも関数型でも品質は上がらない 言い換えればコードの記述方法で品質は上がらない 品質を上げるにはしっかり仕様書を書いて しっかり書いた仕様書からテスト仕様書を起こすこと ソースの記述方法は品質を決定する計算式に入ってません(笑) おk?
207 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:43:13.49 ID:qX3K4vQy.net] >>200 せやね。 コードが悪ければコードレビューで テスト項目が追加される。 コードが悪ければ、テスト項目が追加される。 おや? コーディングによってテスト項目が変わるって話に戻ったか。
208 名前:デフォルトの名無しさん [2016/06/02(木) 01:44:21.91 ID:IPFd2Mdr.net] >>203 「追加してもいい」 この意味が分からんの? 日本語からやり直せ。
209 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:46:16.79 ID:55Jnw5v7.net] 今回もオブジェクト指向が幻想技術ということが決定したな
210 名前:デフォルトの名無しさん [2016/06/02(木) 01:46:33.24 ID:IPFd2Mdr.net] >>205 基地外
211 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:47:36.18 ID:3RkkmY6H.net] さて、スレが流れた所で話を戻すかw >>140 > どう組んでもチェック項目は絶対同じ数と内容になる そうでもないというか、その発想は抜けがあるよ。 たとえば数値が偶数か奇数かを文字列で返す関数があったとしよう。 function foo(value) { return (value % 2 == 0) ? 'even' : odd'; } これのチェック項目はfoo(0)とfoo(1)の2つで十分だろう。 だけどさ、関数の中身がこうなっていたらどうする? (1レスに収めるためにわざと改行せずに一行にしたけどそこは無視して) function foo(value) { var i = value % 10; if (i == 0) return 'even'; if (i == 1) return 'odd'; if (i == 2) return 'even'; if (i == 3) return 'odd'; if (i == 4) return 'even'; if (i == 5) return 'odd'; if (i == 6) return 'odd'; if (i == 7) return 'odd'; if (i == 8) return 'even'; if (i == 9) return 'odd'; } わざとバグを入れたけど、バグが無ければこの関数は仕様どおりに動くしfoo(0)とfoo(1)のテストにも通る。 だけどこの関数にはバグがあるし、だからチェック項目は2つでは十分ではないということになる。 コーディングの仕方でチェック項目数は変わらないっていうのは、半分は正しい。 もし2つあるコードのどちらも同じぐらい正しい品質であればその通り。 だけどこの例の場合は違う。2つのテストでは足りないということになっている。 この例のあるべき姿はチェック項目数を増やすのではなくて、コードをリファクタリングしてシンプルにすること。 そうすることでチェック項目は2つになるわけだが、ここまでの話で明らかなように 「コーディングの仕方でテスト項目は変わる」というか「悪いコードだとバグがないことを担保するためのテスト項目は増える」
212 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:49:05.94 ID:3RkkmY6H.net] 何だ俺、最初から一貫して同じこと言ってるやんw
213 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:50:22.82 ID:55Jnw5v7.net] >>207 だからvalの取りうる範囲チェックするだろ 中間値だけとか間引くのはテスターが勝手にやってるだけの話 チェック項目は変わらない
214 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:51:43.92 ID:3RkkmY6H.net] >>209 だから、そのvalの取りうる値ってなんだよ?w >>198 の質問にも答えてないぞお前w
215 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:53:10.76 ID:ehI/NdEG.net] >>176 完全に横だが、、、 そちらの意見自体に文句はない。つまり、コード品質最優先で同意だ。 付け加えるとしたら、>>143 の例ならカバレッジで確認できる。 つまりC1(方言かもしれんが各分岐)まで含めれば例示されたバグは落とせる。 あと、仕様から起こしたテストを一通りやらないと「実装忘れ」を検出できない。 例えば、関数電卓を作ったとして、色々ある関数の一つを実装し忘れたとか。 実装漏れをテストではなくコードレビューで落とすことは出来るが、これはポリシーの問題となる。 仕様から起こしたテストで品質が上がるかというと、多分無理だ。これは競合を落とせない。 各競合を全部コードレビュー時にテストに追加するという手もあるが、これは追加漏れが発生する。 だから品質を上げるためには結局ランダムテストしかないと俺は思っている。
216 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 01:55:40.16 ID:55Jnw5v7.net] >>210 仕様書に書いてあるだろ? ないの? そしたら不具合ですらないんじゃない?
217 名前:デフォルトの名無しさん [2016/06/02(木) 02:01:57.34 ID:IPFd2Mdr.net] >>211 カバーできてないことが判明 コードを直す テストを追加するかは任意
218 名前:デフォルトの名無しさん [2016/06/02(木) 02:03:26.51 ID:IPFd2Mdr.net] >>211 ランダムテストって謎。 ランダムテストでアホなコードが漏れたらって話だろ。 なんでランダムテストさえすればアホなコードがすべて網羅できるって前提なんだよ?
219 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 02:25:10.08 ID:ehI/NdEG.net] >>213-214 いや、複数箇所に冗長に記述があった時、それらが整合しているかだろ? 見た瞬間分かればいいけど、クラスをまたいでいたりすると単純には削除できないケースもある。 この場合はカバレッジ100%なら整合している可能性が高い事は言える。 (ただし二重に冗長な場合は無理だが) ランダムテストは動作の確認とカバレッジを稼ぐため。つまりバグの検出。 ランダムテスト自体では「品質の高い=美しいコード」は得られない。 ただ、コードの品質って大前提として「バグがないこと」だろ?(コードが美しいことではなくて) これについてはランダムテストが一番だと思っている。 すまんがもう寝る。
220 名前:デフォルトの名無しさん [2016/06/02(木) 03:00:45.20 ID:dD1ozz1q.net] あ、逃げた。
221 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 04:13:03.69 ID:soSMk704.net] マジレスするとECPで大抵のテスト分けは解決できる あとは重箱の隅をつつく価値があるかどうか
222 名前:デフォルトの名無しさん [2016/06/02(木) 04:24:49.52 ID:dD1ozz1q.net] マジレスするとHaskell使えばテストは必要ない。 テストでバグを発見できるというのは甘え。
223 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 06:09:23.71 ID:a5hqyyy7.net] そう Haskellを使っていれば交通事故を起こさない自動車だって作れた なお完成は24世紀ごろを予定しております
224 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 06:54:53.87 ID:ehI/NdEG.net] すまぬ。「ランダムテスト」は方言で、標準語ではどうやら「自動テスト」と呼ばれるようだ。 (モデルを作成し、ランダムな入力を食わせて出力をチェックする) 混乱させてすまん。
225 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 08:36:32.58 ID:jj0I32l4.net] >>207 >たとえば数値が偶数か奇数かを文字列で返す関数があったとしよう。 >これのチェック項目はfoo(0)とfoo(1)の2つで十分だろう。 充分じゃない、テスト仕様書がそうなってたらテスト仕様書書いた奴氏ねって言っていい、コードがどうなっているかはこの時点では関係ない
226 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 09:21:14.08 ID:qVro3+K+.net] >>218 あんたHaskell信者に見せかけたアンチだろw HaskellにはHaskellの良さがあるけど、俺は結局C++に戻ってきた。 最近はCまで戻ろうかと検討してる。 もしくはLispを試してみようかなと。
227 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 09:59:19.16 ID:9Sgsnltg.net] 設計=仕様書から書けるテストはブラックボックステストで、 コードから書けるテストはホワイトボックステスト。 ブラックボックステストで全ての取りうる値を入力するなんて非現実的だから、境界条件を考慮してテストセットを作る。 ホワイトボックステストはどれだけ網羅するかにもよるけど、条件分岐があったらその全てを通るテストセットを作る。 テストで得られる保証の度合いで言うならホワイトボックス>ブラックボックスなのは確かだけど、 中身まで見れる状態になっていないとホワイトボックステストは書けない。 開発プロセスがトップダウン方式だったりテスト駆動開発だと、書けるテストはブラックボックステストにならざるを得ない、という現実的な話。 そこで満足するか、更なる品質保証のためのホワイトボックステストを書くかはコストと相談しましょう。 Haskellでも同じ。テストを書く必要が無いのは依存型やRefinment typesを使える言語だけ。
228 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 10:42:12.02 ID:x8NBN55x.net] >>182 > コードが綺麗な状態であって初めて、仕様書から起こしたテストで十分だと言える。 その仕様書とやらが、コードをC0カバレッジできるレベルで書かれてるならそうだろうな。
229 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 10:43:30.50 ID:x8NBN55x.net] >>220 > すまぬ。「ランダムテスト」は方言で、標準語ではどうやら「自動テスト」と呼ばれるようだ。 いや、呼ばれない。自動テストとはマニュアルテストの反語。
230 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 10:58:37.56 ID:HMnON+Ay.net] >>220 QuickCheckって呼んでるわ
231 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 10:59:58.45 ID:qVro3+K+.net] 俺もそれのことかなと思った。 data-driven testing toolと呼ぶらしい。
232 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 11:24:00.72 ID:tJT0ttjQ.net] >>223 ある条件判定がfalseになったんだけど それが正しいか間違ってるかってどうやって判定すんの? ソースコードだけにその答えがあるの?
233 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 11:30:53.69 ID:x8NBN55x.net] >>228 > ある条件判定がfalseになったんだけど > それが正しいか間違ってるかってどうやって判定すんの? もっと具体的に。
234 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 12:11:08.77 ID:tJT0ttjQ.net] >>229 if(val==false)
235 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 12:34:31.31 ID:j1kGed0y.net] 朝。 さんさんと照り付ける太陽がS2715Hに映り込む。 純度100%のグレアモニター、S2715Hに自分の影がシャープに映り込むと、一日が始まる。 見ているものが正確で、映っているものは色が正確で、光量も正確。 よい生活はよい製品から得られる。
236 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 12:46:55.06 ID:x8NBN55x.net] >>230 それは一体どこの話なんだ? そもそも、(単体/unit)テストが何なのか理解してるか?
237 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 12:48:55.39 ID:tJT0ttjQ.net] >>232 unkoクラスのgetPPメソッド
238 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 12:50:25.29 ID:soSMk704.net] ifの中で真偽値と比較するコードなんて捨ててしまえ
239 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 12:54:33.11 ID:x8NBN55x.net] >>233 ということであれば、単体/unitテストでは、正しいも間違っているも判定しない。
240 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 14:26:28.50 ID:fuTkOmr9.net] このように意味のないことを堂々巡りに考えるのがOOP脳患者 無駄なことに時間を費やしたくない人は OOPが得意な部分だけを上手に利用することだけを考えておけばよい ほとんどの実用的な言語がマルチパラダイムを選択していることからもわかる通り 当たり前に得手不得手があるし 一つの考え方だけでうまくいくほど世の中単純ではないことは子供以外は誰でも知っている
241 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 16:51:41.22 ID:9Sgsnltg.net] >>228 コードだけ見て判断できるものもあるし、仕様書読まないと判断できないものもあるとしか言えない。 どっちを参照しても分からないなら作った人に聞くべきだけど、それはテストじゃなくてレビューになる。 それとも仕様書無しでソースあり、さあテストを書けって場合を考えている? そんな苦役を振られたら、仕様書を作って欲しいのか確実に動かないバグを潰して欲しいのか確認するところから始めましょう。
242 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 18:22:00.20 ID:55Jnw5v7.net] >>237 いや、オブジェクト指向だとテストが減るとか言ってるアホがいたから
243 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 19:13:46.82 ID:IPFd2Mdr.net] >>238 オブジェクト指向の目的聞かれて回答しないままトンずらした奴だろ。
244 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 22:51:27.39 ID:3RkkmY6H.net] >>212 > 仕様書に書いてあるだろ? 仕様書には「整数」って書いてあるけど、 そしたら、無限にある整数を全部テストしろって話でしょう?w
245 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 23:08:39.30 ID:soSMk704.net] そんなときこそFormal methods 複雑になるとUndecidableなのが玉に瑕
246 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 23:26:10.98 ID:55Jnw5v7.net] >>240 駄目な仕様書だな 上限も下限も定義されてないでモノなんて作れっかよ 全く仕事やってない証拠 オブジェクト指向なんかどうでもいいから 設計書きっちり書けよって話
247 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 23:37:42.96 ID:3RkkmY6H.net] >>242 > 駄目な仕様書だな > 上限も下限も定義されてないでモノなんて作れっかよ 作れるだろ?Pythonは無限リストを作れるのが特徴だ。 無限リストには上限も下限もない。
248 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 23:40:01.75 ID:3RkkmY6H.net] RubyのBigNumも上限も下限もないな。 docs.ruby-lang.org/ja/2.2.0/class/Bignum.html あえて言えばメモリサイズによる制限は受けるが、 じゃあメモリサイズいっぱいの桁数の数値(何桁だと思う?w)を 全部テストするのかとw
249 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 23:58:48.20 ID:fuTkOmr9.net] ほら頭悪いでしょ
250 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 00:01:57.95 ID:57ESL53T.net] >>245 仕方ないんじゃないかな? 馬鹿なんだからそういういちゃもんを付けるしかないんだと思うよ。
251 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 00:04:49.79 ID:fpUAqgyP.net] そもそもテストを行う実時間の問題だから 組合せ爆発でも起こしたら、本当に何万年とか かかってしまうのがテストなんだよね。 仕様書に上限や下限をつけた所でなんの対策にもなっていない。
252 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 00:08:30.87 ID:LbxBbQld.net] 下限や上限が決まっていたら、閾値界隈のテストできるでしょ 下限も上限も決まってなかったら本当にテストできない 下限も上限も決めないのは馬鹿
253 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 00:24:19.96 ID:4VbjelCP.net] 今話をしてるのはテストを行う実時間の話。 上限や下限が出てきたのは「整数」ではだめって文脈からだろ。 整数に上限や下限をつけた所でその範囲のすべての整数の 数は膨大なのだからテストに何万年もかかる。 そういう話をしてるのよ?わかる?
254 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 00:34:26.00 ID:LbxBbQld.net] 閾値近辺だけテストすりゃよいだろ そりゃ君はクライアントに無限大を約束するらしいから無限のテストが必要なのかもしれないが それは君だけの話であって 我々は上限を設けて、その範囲内でだけ動くことを約束するって言ってるんだから 閾値のチェックだけで済むわけだ
255 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 00:42:42.22 ID:xWVfr+QL.net] ちょっとレベルが低過ぎる。 まったく意味がない話になってるからテストの話はいい加減にしろ。 オブジェクト指向設計と関係ないし。
256 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 00:55:16.41 ID:4VbjelCP.net] >>250 上限下限がないならば、閾値の内側だけを調べればいいんだよ。
257 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 00:57:20.52 ID:4VbjelCP.net] もう少し丁寧に書くわ 上限下限があるから、閾値近辺をテストしなければならないのであって、 上限下限がないならば、閾値近辺というのがそもそも存在しないので 任意の値でテストすれば十分
258 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 01:06:46.65 ID:LbxBbQld.net] そんで、メモリが足りなくて動かなかった時のクライアントへの説明はどうなるの? 休日出勤するの? 入力の段階で「数値が大きすぎます、100未満にしてください」って弾いとけば クライアントからしても何がダメだったか明確だろ
259 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 01:09:56.34 ID:4VbjelCP.net] > そんで、メモリが足りなくて動かなかった時のクライアントへの説明はどうなるの? なんでメモリの話が関係してくるんだ? いみわからんwww
260 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 01:10:26.17 ID:4VbjelCP.net] > 入力の段階で「数値が大きすぎます、100未満にしてください」って弾いとけば ある数値を二乗する関数があったとして 「数値が大きすぎます、100未満にしてください」wwwww
261 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 01:11:03.14 ID:V5ojovFM.net] >>253 整数という条件だったら 0 とその前後、それから SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, SHRT_MIN, SHRT_MAX, USHRT_MAX INT_MIN, INT_MAX, UINT_MAX, LONG_MIN, LONG_MAX, ULONG_MAX LLONG_MIN, LLONG_MAX, ULLONG_MAX とその前後の48パターンくらいはテストしとけ
262 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 01:13:46.42 ID:4VbjelCP.net] >>257 上限下限なくてもそれだけやればOKですよねwww
263 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 01:42:13.61 ID:V5ojovFM.net] >>258 > 任意の値でテストすれば十分 こんな事言うより100倍マシ
264 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 01:56:10.56 ID:4VbjelCP.net] >>259 上限や下限がある場合は、その限界値で 動作を変えないといけないからテストする必要があるんだよ。 数学的に考えろ。nとn+1で何も違いがないならば、 そこはテストする必要ないんだよ。
265 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 02:08:57.65 ID:V5ojovFM.net] もういいよ
266 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 02:20:08.63 ID:4VbjelCP.net] いいならレスするなよw
267 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 02:53:40.31 ID:aDP5A1Yp.net] 結局>>217 のECPと>>241 のFormal methodsで済むところを 何レスも消費するんだから君たちはw
268 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 07:25:35.73 ID:G3tCMEbl.net] オブジェクト指向はなんの品質も上げないカス技術って現実を直視しろよ
269 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 10:24:41.45 ID:OvJcIN1K.net] >>264 じゃあ、どの技術が良いの?
270 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 12:36:11.91 ID:PZUaPR2n.net] c++のオブジェクト機構をカス技術と言うのなら微妙にYes. 品質の向上≒自由度の制限って関係が成り立つので c++は自由度が大きすぎて使用者が意識して制限しないと 容易に巨大なウンコが出来上がる
271 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 13:01:13.49 ID:c8+13QXR.net] > オブジェクト指向はなんの品質も上げないカス技術って現実を直視しろよ >>264 みたいなバカが使うとね w
272 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 13:17:35.90 ID:LK0McYVX.net] >>264 煽るのもいい加減にしろ 己のキンタマでもかいて、糞して寝ろ
273 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 13:37:19.72 ID:TPst5vg3.net] >>265 プログラムを組める設計書や仕様書を書く技術 設計書や仕様書通りにプログラムを組む技術 雑誌やインターネットには載ってないけど 一番大事な技術です
274 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 13:39:23.11 ID:xWVfr+QL.net] 具体的な例で意見交換しようとしてもさぼってUMLすら書かない。 抽象的な話をすると言葉尻と曲解に基づいて無意味な言い争いをする。 なかなか意味のある会話にならないなあ。 少し前提に帰ると設計のときはUMLあるいはなんらかのモデリングをしてるよな? モデリングすらしてないで書き込んでる中学生がちらほら見受けられるのは生暖かく見守るとして しっかりモデリングしてる印象を受けないんだが。
275 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 13:41:55.04 ID:xWVfr+QL.net] >>269 >>264-265 のやり取りに対する回答になってない。 まともなコミュニケーションすらできない中学生がいきがってるのはかっこ悪いぞ。
276 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 14:01:30.68 ID:3R6cnOzA.net] >>254 なぜテストする側の都合で制限かけるんだ?休日出勤したくないから機能制約かけます? 話題にあった整数だってint全件でも2^32だぞ drawText(String str) str : ラテン語小文字(a - z)10文字まで お望み通りすごい制限つけたぞ、10文字しか入力できない、しかもラテン小文字のみw でテストケースは26^10 どっちが多いか分かりますか? 取りうる範囲の広さなんて関係ないんだよ 現実的に全件網羅テストできる場合の方が少ないんだから 限定的な組み合わせで最大限の効果があるものは何か?ってのを考えるのが筋だろ
277 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 15:08:06.73 ID:OvJcIN1K.net] >>269 どゆこと? オブジェクト指向の設計をしないとして、どういう手法の設計が 良いのか聞いたんだけど。 それと一番なのは人間を上手に使う技術でしょ。 雑誌やインターネットには載ってないけど、皆知ってることだよ。
278 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 15:40:36.20 ID:xWVfr+QL.net] >>273 人間を上手に使う技術が設計で一番大事って…。 無能を何人管理しても無駄でしかないのが設計というもの。
279 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 15:45:
] [ここ壊れてます]
280 名前:03.44 ID:xWVfr+QL.net mailto: いい設計は芸術。 人月管理で考えてるようじゃお話にならない。 [] [ここ壊れてます]
281 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 15:52:47.06 ID:TPst5vg3.net] >>273 なんて言うんかな? オブジェクト指向設計をしないでってのが正確かも こいつはソフトウェア開発の歴史の中でもゴミ中のゴミ 普通に仕様書(こう動きます)書いて データフロー図書いて 処理の入力、出力書いて データのフォーマット(DB含む)書いて シーケンス図とか状態遷移図書いて って昔ながらのソフトウェア開発だけでいいよ クラス設計するな もしくは最後に回せ それだけでうまく行くと思う
282 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 15:53:19.52 ID:TPst5vg3.net] >>275 それじゃ金出す人いないよ(笑)
283 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 15:56:54.09 ID:xWVfr+QL.net] >>276 それじゃ複雑な機能の整理が難しいんだよ。 ちょっと前に出てた>>129-130 に対する設計案を作ってごらん。
284 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 15:57:42.23
] [ここ壊れてます]
285 名前: ID:xWVfr+QL.net mailto: クラスじゃなくてモジュールなりなんなり好きな単位に区切っていいから。 [] [ここ壊れてます]
286 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 16:55:55.15 ID:iJVPPkrY.net] 作ってごらんとか
287 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 17:23:11.56 ID:OvJcIN1K.net] >>274 有能だろうが無能だろうが面従腹背されたら何の成果も出せない。 部下の能力・特性に合わせて仕事を振って上手に使うことこそが 一番大事な技術。設計書とか仕様書の書き方はその次。 >>276 ゴミ中のゴミが世の中の主流になれるわけがないだろw もしかして自分がオブジェクト指向設計ができないからって ディスってるだけじゃないだろうな?
288 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 18:20:54.89 ID:G3tCMEbl.net] >>281 少なくともオブジェクト指向でテスト項目が減るとか品質が上がるとか言ってたクズよりは理解はしてると思ってまつよ
289 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 18:37:03.25 ID:xWVfr+QL.net] >>281 無能な奴を従わせても無意味なんだよ。 それにその口調だとお前自身は設計能力がないだろ。 能力がない奴ほど人の管理と言うよね。
290 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 18:39:05.80 ID:xWVfr+QL.net] >>282 で、>>278 の回答は? 口だけかよw
291 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 18:57:10.17 ID:OvJcIN1K.net] >>282 だったら、全否定の具体的な根拠を言ってみ。 理解してるなら当然、得意・不得意を理解してるだろうから簡単だよね。 >>283 どんな分野だろうと組織で仕事をするなら人間の制御が一番難しくて 重要なのは言うまでもない。 あんた設計以前に働いたことないのか? それとも部下をもったことないのか?
292 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 19:02:51.57 ID:xWVfr+QL.net] >>285 あのさー、もともと>>264-265 の流れだろ。 設計技術について話してるのにどうして「組織で仕事」とかって出てくるの? お前さあ、コミュニケーション能力が弱いよ。 そんなんでよく「組織で仕事」とか偉そうに言えると呆れる。
293 名前:デフォルトの名無しさん [2016/06/03(金) 19:14:10.84 ID:eHY6P3Rv.net] 設計てクラス構成まで考えないなぁ 業界によるんだろう
294 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 19:17:02.92 ID:xWVfr+QL.net] >>287 クラス構成を考えないオブジェクト指向設計プロセスなんて聞いたことないけど 誰が提唱してんだ?
295 名前:デフォルトの名無しさん [2016/06/03(金) 19:28:25.70 ID:eHY6P3Rv.net] >>288 誰も提唱してないと思うけど Webだからかapiの仕様決めたら実装に入っちゃうな ドワンゴやtwitterの活用事例なんかを聞いてもクラス構成まで設計するとはあんま聞かないからwebは緩いんだと思う
296 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 19:36:08.48 ID:xWVfr+QL.net] >>289 単純なWebシステム限定では。
297 名前:デフォルトの名無しさん [2016/06/03(金) 19:44:25.76 ID:eHY6P3Rv.net] >>290 権限周りは割りと複雑だなー 仕様自体はしっかり詰めといてるし Scalaの表現力と型安全性のおかげで割りと綺麗になってるしdocとテストは書いてる 関数型の設計てのは聞かないし
298 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 19:48:21.01 ID:xWVfr+QL.net] >>291 権限周りが複雑だと思ってるだけで客観的に見たら大したことないんだろ。 複数のクラスが絡み合うような状況ならクラス設計が必要にならない訳がない。
299 名前:デフォルトの名無しさん [2016/06/03(金) 19:52:01.46 ID:eHY6P3Rv.net] >>292 ニコニコ動画の権限周り書き直した人もクラス図書いたとは聞いてないな 継続モナドを使って実装したって言ってた
300 名前:デフォルトの名無しさん [2016/06/03(金) 19:52:37.00 ID:eHY6P3Rv.net] 認証だった
301 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 19:53:32.24 ID:aDP5A1Yp.net] TDD・BDDでやってるからか最初にわざわざクラス図書いても結局かけ離れたものになる
302 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 19:54:00.85 ID:xWVfr+QL.net] >>293 設計書は文章だけってこと? 図は?
303 名前:デフォルトの名無しさん [2016/06/03(金) 19:57:21.13 ID:eHY6P3Rv.net] 表は書いたけど図は書いてない(うちの場合) インフラ周りの構成は図を書いてる
304 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 19:57:58.75 ID:xWVfr+QL.net] >>295 複数人が関わる場合、何かなけりゃ協業は不可能だと思うんだけど…。 どうしてるの?
305 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 20:02:05.59 ID:aDP5A1Yp.net] 強いて言うならコンポーネントレベルでパッケージ階層化かな ここに関してはドキュメントあるし更新もされる
306 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 20:02:18.65 ID:OvJcIN1K.net] >>286 >>269 ,>>283 の流れだけど? 元々皮肉のつもりだったんだけどねw てかお前のほうこそコミュ症じゃね?w
307 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 20:07:09.66 ID:xWVfr+QL.net] >>299 公開されてるメソッドも分からないのにどうすんだ?
308 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 20:09:46.25 ID:xWVfr+QL.net] >>300 意味不明。 皮肉だかなんだか知らないけど、そもそもスレタイを関係ない会話をするのは ほめられたことじゃないからやめようね。
309 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 20:13:31.79 ID:xWVfr+QL.net] >>297 そんな会社もあるのか…。 多少なりとも複雑なプロセスがあるなら文章だけで正確に表現するように工夫するより モデリングしちゃったほうがむしろ簡単じゃないかな。
310 名前:デフォルトの名無しさん [2016/06/03(金) 20:13:43.10 ID:eHY6P3Rv.net] guiプログラミングならクラス図欲しいかも でもサーバーって状態が少ないからね コントローラーがサービスをサービスがdaoを呼ぶみたいに関数を呼び感じになりやすいし 状態扱いたいならactorとか使うかな
311 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 20:17:06.64 ID:aDP5A1Yp.net] >>301 公開されてるメソッドには全部ユニットテストあるし 結合テストにもユーザーシナリオを網羅するようにはしてる
312 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 20:19:12.10 ID:xWVfr+QL.net] >>305 メソッドの一覧は?って話だぞ。 他の人が担当しているクラスを呼び出したいこともあるだろ。 メソッドが決まってなけりゃ作れないだろ。 クラスを作る側だって何を用意すりゃいいのか分からないし。
313 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 20:26:19.40 ID:aDP5A1Yp.net] >>306 コンポーネント間のAPIはわかりやすくするようには努力してる その下のクラスは基本単一責任だからそのクラスにどんなメソッドがあるかは何となくわかる そもそもクラスやメソッドなんてリファクタリングでどんどん変化してくものだし
314 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 20:31:12.76 ID:xWVfr+QL.net] >>307 プログラムって何となくでどうにかなるものじゃないだろ。バグ量産だと思うぞ。 どんどん変わってちゃ工数が増えるし。 開発チームは何人くらいで期間はどのくらい? 開発者が多いプロジェクトでリファクタリングでどんどん変化するというのは不可能だと思うんだけど。
315 名前:デフォルトの名無しさん [2016/06/03(金) 20:35:06.28 ID:7emugrZg.net] そのためのテスト 後そのためのレビュー?
316 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 20:42:25.76 ID:aDP5A1Yp.net] 一つのコンポーネントにつき5、6人のチームだけど2つのチームに入ってるメンバーもいる アクティブに開発されてるコンポーネントは今は3つくらいかな スクラムなんで2週間のイテレーションをぐるぐる回す もちろんレビューもあるけど、そもそもテスト全部通らないとコミット&デプロイできないようになってるから バグ量産ということはないかな
317 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 20:42:40.50 ID:xWVfr+QL.net] >>309 テストが自動化されていてもコーディングを変更する手間はかかるし メソッドが変わればテストも変更必要になるんだが。
318 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 20:45:59.26 ID:xWVfr+QL.net] >>310 コンポーネントの単位は? クラス、コンポーネントをまたがる場合、クラスが事前に明確になってないのに どうやって開発するんだ? テストは何を見て開発するのか?
319 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 20:49:30.78 ID:OvJcIN1K.net] >>302 話膨らませてきたのおまえだろw ほんとコミュ症だなw 今後は無駄に突っかかってくるの辞めようねw
320 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 20:51:52.67 ID:xWVfr+QL.net] >>313 「人の管理」だの「組織の仕事」だのお前以外の誰が言ってんだよ? 読み直してから書き込めよ。 頭おかしい奴みたいだから相手するのやめる。 レスつけられても無視するから。
321 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 20:55:39.30 ID:c8+13QXR.net] 外部に公開してるメソッドがころころ変わるとか どうみてもニートが妄想全開で書いてるだけ そもそも TDD やってたらテストから書き直しになるしな
322 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 20:59:39.13 ID:aDP5A1Yp.net] >>312 コンポーネント化の判断基準は他のプロジェクトでも再利用できるんじゃね?(するとは言っていない) 最初にわかればいいんだけど後々分割することもあった。多分これが一番労力かかる 一つのユーザーストーリーがそのままテストになる。 >>315 もちろんテストもリファクタリングするけど それが負担になるような現場はテストの書き方がなってないと思うよ xUnit test patternsを読むべし
323 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 21:05:16.92 ID:PB6+Z1HI.net] >>284 >>282 じゃないが将棋は手の評価ロジック自体が本体であり全てみたいな感じだからOOPに向いてないと思うよ OOPL前提で書くにしても駒に合法手の問い合わせなんかしない、盤面も移動範囲も整数配列でいい 以前遊びで組んだのはこんな感じだった 思考モジュール ※ルールと棋譜DB盤面テーブルなどをコンポジットしたクラス ・盤面テーブル =11×11の整数2次元配列+手駒リスト →※駒の種別や盤外、効きの有無、成り、どちらの駒か等全てここにビットフラグで持つ →9×9でないのは外周を外周を示す駒で埋める事で外周かどうかの判定を省くため ・ルール判定各種 →※局面によってルールの適用の要不要があるのでそれぞれ独立して持つ →・駒の移動範囲テーブル →・各種禁じ手判定など ・棋譜DB →・定石を抽出して探索の枝切りや手抜きに使う ・評価関数 →※思考の本体であり盤面テーブルから次の手を探索する →・ルール、DB、盤面テーブルは全てここで使う ・探索ツリー →評価関数が吐き出した結果の保持用 →手番ごとに1から探すのは無駄なので探索結果はツリーの状態で保持 UI(表示)モジュール ※こいつらは表示専用でルールや思考ロジックには感知しない ・駒クラス ・盤クラス ・駒台クラス など UI側はともかく思考側は細かくクラス分けするメリットは殆ど感じられない、OOPの例題としては向いてないと思うんだ これが実装中にルールに仕様変更の入るボードゲームなら話は多少違うだろうが…
324 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 21:10:57.00 ID:G3tCMEbl.net] リファクタリングなんて勝手にやって既存処理ぶっ壊したら いいわけでけへんで?
325 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 21:12:54.17 ID:xWVfr+QL.net] >>316 Addison-Wesleyから出てる奴? 読んでみるかな。そこそこ高いから立ち読みしたいけど日本語版はあんの? クラスのメソッドが変わった場合に対応したテストの書き方ってまったくイメージできないけど どんなことを意識しろって書かれてるんだ?
326 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 21:19:18.40 ID:xWVfr+QL.net] >>317 クラスにしたくなけりゃしなくていいと何度も書かれているけど…。 クラスにしたくないならモジュールでも何でもいいって書いたし。 モジュール?の関連性と処理フローは? こんな機能があるよってことは分かるけど、全体としてどう動作しているか見えない。
327 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 21:26:41.22 ID:LbxBbQld.net] ここまで詳細に書いてもらったらもう十分でしょう いったい何を期待しているのかしらないが お前の期待に応える義務は誰にもないしな
328 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 21:31:23.42 ID:xWVfr+QL.net] >>321 いや分かんねえよw むしろ構成要素間の関係を考えるのが設計の本番といっていい。 機能列挙は簡単。
329 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 21:32:00.28 ID:xWVfr+QL.net] >>321 ってか、機能列挙はすでにされてるよ。
330 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 21:34:40.38 ID:4VbjelCP.net] >>318 > リファクタリングなんて勝手にやって既存処理ぶっ壊したら > いいわけでけへんで? それはリファクタリングに限ったことか? 例えば、バグ修正を勝手にやって既存処理ぶっ壊して 言い訳できるか? お前が問題にしているのは「リファクタリング」じゃないよな?
331 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 21:43:36.54 ID:LbxBbQld.net] >いや分かんねえよw 自分で考えれば? 自分が理解できるまで説明を受けれて当然という考えがバカ そんな義務は誰にもない >むしろ構成要素間の関係を考えるのが設計の本番といっていい。 将棋AIでそれを言い出すお前の頭が心配だ
332 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 21:47:24.06 ID:G3tCMEbl.net] >>324 バグ修正は説明が付くじゃん リファクタリングはやってぶっ壊したら「は?」って言われる
333 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 21:48:12.67 ID:fYfYnZgZ.net] >>316 リファクタリングの意味すら理解してないのかよ w リファクタリングとは、ソフトウェアの外部的振る舞いを保ちつつ、理解や修正が簡単になるように、内部構造を改善することです。 objectclub.jp/technicaldoc/refactoring/refact-what 外部に公開するメソッド変えたらテストの振る舞いも変わるからそれはリファクタリングじゃねーよ どうせ TDD とかも用語だけ知ってるってパターンだろ
334 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 21:48:52.50 ID:xWVfr+QL.net] >>325 うんうん。お前には設計できないことは分かった。 答えられないなら答えなきゃいいじゃん。無理やり回答を求めようとは思ってないし、そもそもスレのやり取りなんだからそれが常識。
335 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 21:51:36.54 ID:fYfYnZgZ.net] >>326 さすがに勝手にバグ修正してデグレードしたら言い訳じゃすまんよ... マジでやらかした奴がいて客に説明するのに往生したわ
336 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 21:52:03.28 ID:4VbjelCP.net] >>326 > バグ修正は説明が付くじゃん 大したバグじゃないけど、バグがあったから、これはいけないと 思い勝手に修正しました。その結果、既存処理を壊しました。 で、お前責任取れるの?
337 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 21:52:53.57 ID:G3tCMEbl.net] >>327 いやピンポイントでリファクタリングって無理やろ 構造変えるために本来触らんでいいとこまで手を伸ばすじゃん? そこでバグらんはずのとこまでバグるのが怖いのよ
338 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 21:53:51.96 ID:G3tCMEbl.net] >>330 エヘ、やっちゃった(笑) でだいたいおk
339 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 21:57:41.98 ID:G3tCMEbl.net] リファクタリング→破壊は説明つかんな 既存処理破壊は客も何信じていいかわからんなるし 既存処理破壊の可能性があるぐらいならコピーコード作れって客のが多いぐらい
340 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 22:00:50.66 ID:4VbjelCP.net] >>331 いらん所まで手をのばすなよ。 バグを修正したり、機能追加するときに (当然だが許可を得て、これらの作業をしている) そのときにリファクタリングするんだよ。 どうせテストしてちゃんと動くことを確かめるんだから。
341 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 22:02:11.77 ID:4VbjelCP.net] >>333 バグ修正→破壊なら、説明つくのか? 例えば病気を治すために手術をしたら 医療ミスして死にました。 エヘ、殺っちゃったよで許されるとでも?
342 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 22:03:56.40 ID:4VbjelCP.net] >>331 > そこでバグらんはずのとこまでバグるのが怖いのよ そこでバグらんはずのとこまでバグる原因を 取り除くのもリファクタリングの目的の一つなんだよ?
343 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 22:09:56.36 ID:fYfYnZgZ.net] >>331 > そこでバグらんはずのとこまでバグるのが怖いのよ リファクタリングするにはほぼ自動テストが必須 でないと俺も怖くて触れないよ >>316 はそのテストを変更するとか言ってるからバカにされてるってだけのこと
344 名前:デフォルトの名無しさん [2016/06/03(金) 22:12:30.18 ID:xWVfr+QL.net] >>337 単体テストは内部もテストするだろ? そこはどうするんだ?
345 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 22:13:29.06 ID:LbxBbQld.net] 将棋AIで設計といえば >→9×9でないのは外周を外周を示す駒で埋める事で外周かどうかの判定を省くため こういうものとかに代表される、アルゴリズムとデータ構造に興味を持つのが普通 各要素の関連性などどうでもよく、強いて言
346 名前:ヲば すべての要素がすべて関連性を持っていたとして、だから何?って話 モノリシックな方が速く動くなら、そうするし、そうしないかもしれないし、どちらにせよ本題ではない 前々から言われているとおり、題材が悪い [] [ここ壊れてます]
347 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 22:13:41.97 ID:G3tCMEbl.net] さわらぬ神に祟りなし!
348 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 22:14:35.21 ID:xWVfr+QL.net] ところで、質問への回答がほしいけどどうなの? クラスのメソッドが変わった場合に対応したテストの書き方ってまったくイメージできないけど どんなことを意識しろって書かれてるんだ? 本に書かれているなら読んでみるけど、あやしいように感じ始めてもいる…。
349 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 22:16:55.20 ID:xWVfr+QL.net] >>339 構成要素間の関係を示すための図はUMLにもあるんだが…。 知ったかぶりは恥ずかしいからやめとけ。
350 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 22:18:54.91 ID:LbxBbQld.net] 将棋AIにおいては重要でない 題材が悪い と、言っているわけだが
351 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 22:20:09.56 ID:xWVfr+QL.net] >>343 Apery
352 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 22:21:37.94 ID:4VbjelCP.net] >>337 テストのリファクタリングはするぞ? というか、テストコードが正しく動くかどうやって確かめると思ってるんだ? テストコードのテストを書く?そんなことを言い出す馬鹿が本当に居るから困りものだがw テストコードはテストコードでテストしない。その代わりにテストコードは人間が目視で読む。 テストコードというのは基本的に、○○をしたら××になる。というシンプルな 形式になるので、ちゃんとしたテストコードであれば可読性は高く目視で読んでも 負担にならない。というか負担にならないようすることが必須。 最初からシンプルにかけていればテストコードもこれ以上リファクタリングすることもないが、 そうでなければ、テストコードであってもリファクタリングする。 通常のコードは仕様変更によって設計変更がありえるから、リファクタリングすることで 実装を変化させることが有るのだが、テストコードではシンプルにする以外のリファクタリングは必要ない。 仕様変更があれば消すだけ。ここに通常のリファクタリングとテストコードのリファクタリングの違いが有る。
353 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 22:38:20.56 ID:hDVrd4N5.net] 思考アルゴリズムが書けないなら、口を出さないor邪魔にならないところだけ設計するんやで みんなそれが分かってるからお前の欲しいレスが返ってこないんやで ワイは将棋の思考AIなんて書けんが 1. ゲームサーバと思考AI/人間のクライアント間で通信を確立 2. 最初の盤面(持ち駒含む)をクライアントに送信 3. ゲーム開始。手番になったクライアントに指し手を要求 4. クライアントから指し手を受け取ってルール違反でないかチェック 5. もう一方のクライアントに指し手を教え、3に戻る 6. 指し手の代わりに投了メッセージが来たら終了 大まかな流れがこんな感じになるから後は任せるわ、で終わる話やで 誰も「ぼくのかんがえた最高の将棋モデル」なんていらんのやで。そんなの参考にする人に思考AI書くのなんて任せられんわ 思考AIの中身も書けんのにこのクラス使えとか階層構造はこうとか指図するような真似はしたらあかん みんなそれが分かってるからお前の欲しいレスが返ってこないんやで
354 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 22:41:38.88 ID:xWVfr+QL.net] >>346 電王戦を知ってればそんな内容は書かないんだが…。 前半部でお前が言ってるとおり、分からないことには口を出さないor邪魔にならないにしような。
355 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 22:45:37.80 ID:hDVrd4N5.net] >>344 aperyのソース読んでどこがOOなのか説明してみ? ちなみにaperyがOOじゃないと前スレの951が指摘してんのに何の反応もしてへんなお前 ttp://echo.2ch.net/test/read.cgi/tech/1463663267/951 まさかクラスを定義してるからOOだなんて言わへんよな?OO界隈から殴られるもんな?
356 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 22:49:56.25 ID:xWVfr+QL.net] >>348 だからさ、全然分かってないことについて語んな。 俺がお前に言いたいことを>>346 の前半にお前自身が書いてくれているからよく
357 名前:ヌみ直せ。 [] [ここ壊れてます]
358 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 22:56:41.85 ID:fYfYnZgZ.net] >>338 ひょっとして TDD のテストコードと単体テストのコードの区別もついてないの? >>345 テストコードのリファクタリング? テストコード書いたこと無いだろ w
359 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 22:59:59.68 ID:xWVfr+QL.net] >>350 ん?単体テストはどうやってるんだ?
360 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:05:59.10 ID:fYfYnZgZ.net] >>351 普通にホワイトボックステストもやってますがなにか?
361 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:06:31.08 ID:4VbjelCP.net] >>350 お前が、和田卓人(t_wada)さんより優秀だと認めることが 可能な証拠があるなら信じてやるよw d.hatena.ne.jp/t-wada/20100228/p1 テストのリファクタリング 第20回 テストコードの重複はアリかナシか gihyo.jp/dev/serial/01/tdd/0020
362 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:10:48.99 ID:xWVfr+QL.net] >>352 自動テストなのだとしたらコードを修正したらテストスクリプトの変更が必要になるだろ。
363 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:11:56.40 ID:xWVfr+QL.net] >>353 誰だよそいつって思ってる人がほとんどだと思う。 自演?
364 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:17:00.62 ID:z+8MoLFP.net] 消費税引き上げ先送りも決まり,日銀とECBがしっかり資金供給を拡大してくるのでFRBの利上げは多分成功する 基調はリスクオンの株式暴騰、金暴落だね 今度の黒田砲は緩慢に効いてくる 海馬がくる,海馬がくる
365 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:19:02.08 ID:4VbjelCP.net] >>355 誰だよって言った時点で、 お前がモグリだって確定だわw TDDとかテスト関連を真面目にやってる人なら 知らないわけ無いだろ。
366 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:20:02.00 ID:4VbjelCP.net] 「TDD 第一人者」で検索したら一番目に出てきたわw
367 名前:デフォルトの名無しさん [2016/06/03(金) 23:20:57.70 ID:7emugrZg.net] 抽象データ型プログラミング捨ててもc++はオブジェクト指向なのだろうか >>355 >誰だよそいつって思ってる人がほとんどだと思う。 えぇ...(困惑)
368 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 23:34:34.83 ID:hDVrd4N5.net] 和田卓人について今必死に調べてる最中なんろうだなあ OOについて知ってて適用して嬉しい範囲が分かってれば将棋ソフトが不適切だって分かるし、 aperyのソース読んでOOじゃないってのも分かるんだけどなあ 言葉尻しか捉えることができない人間だもんなあ。文章よりUMLの方が分かりやすいとか言っちゃうもんな
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 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています