[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 09/06 09:50 / Filesize : 348 KB / Number-of Response : 1020
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

オブジェクト指向システムの設計



1 名前:デフォルトの名無しさん [2016/05/19(木) 22:07:47.87 ID:9fCVrsOw.net]
手順とかノウハウとか語りたい

357 名前:デフォルトの名無しさん [2016/05/22(日) 16:40:12.95 ID:MeU4g4+w.net]
sexじゃなくてsxeやん

358 名前:デフォルトの名無しさん [2016/05/22(日) 16:41:15.97 ID:sxeEi6BC.net]
>>351
ややこしい業務ロジックが色々あるときはどうしてる?

359 名前:デフォルトの名無しさん [2016/05/22(日) 16:44:19.40 ID:sxeEi6BC.net]
>>351
具体例があったほうが分かりやすいから将棋ソフトの例で考えてみてよ。
思考ルーチンは定跡+何らかのロジックがあるし、思考ルーチンのどんどん改修されるとして。
ロジックの細かい部分は俺も知らないし、大まかな構成で十分。

360 名前:デフォルトの名無しさん [2016/05/22(日) 16:47:39.90 ID:WF/9GeMl.net]
まあそんな熱くなるなってw

361 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 16:51:47.45 ID:EaQ4G/f7.net]
俺は要件定義で
対象のシステムの構成図
ユースケース図
機能一覧
画面一覧
説明書
まで書く
設計書は頭に構成図貼り付けて
機能一覧に基づいて機能毎に
概要、機能詳細、画面詳細、データフロー、シーケンス図、ログ、メッセージ、ファイルフォーマット、テーブルetc
を書く
基本的にはログやメッセージみたいな共通部分以外で
機能より細分化したクラスは作らない

362 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 16:53:43.65 ID:WwOYSBmy.net]
>>353
> ややこしい業務ロジックが色々あるときはどうしてる?

ややこしい業務ロジックなどない。っていうのが答え。
処理が多くて面倒くさいだけだろう?

もしくは設計が必要な部分(フレームワーク)と
設計が必要ないような些細な部分が、ごちゃまぜになってる。
フレームワークを使ってなさそうだし、綺麗に分離できてないんだろう。

ちなみに「設計が必要ないような些細な部分」といったが
この部分が重要ではないという意味じゃないぞ。
むしろ顧客にとっては(当然だが汎用的なフレームワークより)
この部分の方にこそ価値があって重要な部分。

重要だからこそ、出来る限り汎用的な部分をそぎ落として
改修が入るコードのみにする。そこまで削ぎ落とすから設計なんぞ不要。
フレームワークを使うことで設計はどこかの誰かがやってくれるから
通常の開発で設計なんぞ、終わってることだから、やらない。

あんたは、この改修が入る部分と設計が必要な部分をあわせたままやってるから、
ロジックの改修時に設計をどうするかって話がでてくる。

363 名前:デフォルトの名無しさん [2016/05/22(日) 16:54:30.16 ID:sxeEi6BC.net]
具体例を出したら途端に書き込みが減ったけど考えてくれてるかな?
盤面をクラスとして作るべきか、思考ルーチンの中で使われる情報に過ぎないのか?
って疑問がまず出てくるけどどう判断する?

364 名前:デフォルトの名無しさん [2016/05/22(日) 16:56:03.51 ID:sxeEi6BC.net]
>>357
将棋ソフトの例で一緒に考えよう。
実際にきれいな考え方を示してくれたら素直に認めるから。

365 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 16:59:15.28 ID:WwOYSBmy.net]
>>354
> 具体例があったほうが分かりやすいから将棋ソフトの例で考えてみてよ。

将棋ソフトで設計が必要なのは、まずインターフェース部分。
コマの配置データから、盤面の画像を配置すればいいだけ。
ここは思考ルーチンの改修とは全く別の話だから、
思考ルーチンの改修時に触らなくていいように分離する。

ということで、インターフェース部分の設計は終わり。
思考ルーチンの改修時に考えなくていい。

他に何を設計するんだ?
あとは単なるアルゴリズムだけだろう。

やるとしてもデータを所持して、思考ルーチンを呼び出すだけの
単純なインターフェースを考えればおしまい。



366 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 16:59:59.08 ID:WENufHUB.net]
rails含めてMVCフレームワークで事足りる案件なら
すでに構成が確定してるから
クラス設計とかクラス図とか全く必要ないよな
俺は未だにクラス図が必要になるケースがわからん
科学計算とか人工知能とかそちら方面かな?

367 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:02:51.37 ID:WENufHUB.net]
プロセスの成果物については考え方違うが>>351は同意だわ

368 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:03:39.39 ID:WwOYSBmy.net]
>>358
> 盤面をクラスとして作るべきか、思考ルーチンの中で使われる情報に過ぎないのか?
> って疑問がまず出てくるけどどう判断する?

何度も同じような指摘をしてる気がするけど、
お前は役割の分離ができていない。

それらをの、改修が入る部分と設計が必要ない部分を合わせたままやってるから
ロジック(思考ルーチン)の改修時に設計をどうするかって話が出てきてる。

盤面なんて、コマの配置データさえあれば、再現できるだろ。
最悪文字だけのアスキーアートでもいい。
もしこれをアニメーションバリバリの3Dで表現しようと思ったら
設計が必要になるだろうけど、それはあくまでUIレベルの話。

思考ルーチンのことなんか考慮する話じゃない。

369 名前:デフォルトの名無しさん [2016/05/22(日) 17:04:12.31 ID:sxeEi6BC.net]
>>360
電王戦は見てない人か?
こっちの説明不足だったけど棋譜をやり取りするインタフェースがあれば
UIはなくてもいいとする。
棋士の指した定跡とか駒の配置とかを元に手を決める思考ロジックがメイン。
基本はありえる手をたくさん読んで、なんらかの基準で点数をつけて、
最適な手を選択する。

370 名前:デフォルトの名無しさん [2016/05/22(日) 17:06:42.51 ID:sxeEi6BC.net]
>>363
反応がないから話のきっかけとして書いた。
お前が違う考え方をするならお前の考える設計を出してよ。

371 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:06:55.21 ID:WENufHUB.net]
将棋ソフトってコア部分のアルゴリズムを一人か数人の天才が作ってそうで
チーム開発とか設計の議論には向いてなさそう

372 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:07:48.31 ID:WwOYSBmy.net]
>>364
盤面をクラスとして作るべきかなんていい出したのはお前だろ?

思考ロジックに必要な盤面のデータなんて
単なる2次元配列で十分だろ。

あえてクラスを持ち出すならば、
2次元配列クラスを作ればおしまい。

こんなの考えるまでもない。設計なんて呼べるほどのものじゃない。
片手間で簡単に書ける程度。

373 名前:デフォルトの名無しさん [2016/05/22(日) 17:08:33.88 ID:sxeEi6BC.net]
>>366
設計って言い方が曖昧だったな。
きれいなクラス構成を考えて欲しい。
ステップとかの話じゃない。

374 名前:デフォルトの名無しさん [2016/05/22(日) 17:10:20.90 ID:sxeEi6BC.net]
>>367
俺の考えと違うならお前の考えを出してって言ったろ。
将棋ソフトを構成するクラスは何?

スレでやり取りする内容だから厳密に詳細まで落とせないのは分かってるけど
ある程度のイメージがつかめるレベルで頼む。

375 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:12:08.26 ID:WwOYSBmy.net]
つーか、なんで思考ロジックって言ってるのに
クラスとか設計が出てくるのか?

システムっていうのは設計が必要な部分と
設計が必要ない部分に分けろよ。
そして普段は設計が必要ないようにしろよ。

そうやってるから俺は普段設計なんてしなくていいって言ってるわけで、
それはフレームワークがすでにやってくれてるからって話なんだが。

将棋ソフトで必要になる設計は、思考ロジック部分の外側だ。
仮に思考ロジックを入れ替えることが可能な "設計" の
将棋ソフトがあれば、各自が将棋ソフトを作ること無く、
ロジック部分に専念できるだろ。

フレームワーク導入っていうのはそういうこと。



376 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:12:10.64 ID:EaQ4G/f7.net]
俺だったら将棋クラス1つかな

377 名前:デフォルトの名無しさん [2016/05/22(日) 17:13:27.05 ID:sxeEi6BC.net]
>>367
別の人と勘違いした。

盤面情報ってのは現在の盤面、何手か先の盤面の話。
どうやって持つかは設計によるけど情報としては必要だろ。

378 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:14:36.63 ID:WwOYSBmy.net]
>>369
> 将棋ソフトを構成するクラスは何?

将棋ソフトをどうするかで変わる。
作りたい機能によって設計は変わるからだ。

今は、思考ロジックを改修するって話しか出てないから、
思考ロジッククラスと、それ以外のクラス(UI担当クラス)しか言うべきことはない。

ちなみにUI担当クラスは、アスキーアートでやるなら
1クラスで十分だからな。

379 名前:デフォルトの名無しさん [2016/05/22(日) 17:16:25.55 ID:sxeEi6BC.net]
>>370
画面と簡単なロジックしかないシステムばかりじゃないぞ。

設計もなしに開発できるほど将棋ソフトが簡単だとは思えないけどどうやって開発すんの?

380 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:17:48.33 ID:WwOYSBmy.net]
>>372
> 盤面情報ってのは現在の盤面、何手か先の盤面の話。

何手か先って未来の情報なんてわかるかよw

先を読んだ結果(つまりキャッシュ)の話でもしてるのか?
そんなの思考ロジックによって違うのだから、
思考ロジックとは別のクラスにすることはできん。

盤面情報をもった汎用的なキャッシュクラスというのであれば
2次元配列で十分だろ。
あえてクラスにするならば、2次元配列クラスだw

381 名前:デフォルトの名無しさん [2016/05/22(日) 17:19:25.70 ID:sxeEi6BC.net]
>>373
思考ロジックの構成なんて俺も知らないから考えてってお題を出してる。
説明がないって言われても困るわ。
業務システムだって担当したことない業界のシステムを設計することだってあるんだから
将棋ソフトなんてむしろイメージしやすいだろ。
細かい点で揚げ足取るつもりはないから設計の腕を見せてくれ。

382 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:19:25.93 ID:WwOYSBmy.net]
>>374
お前、将棋のAIのアルゴリズムが難しい話と
ソフトウェア設計の難しさをごっちゃにしてるだろw

業務ロジックでも同じ間違いしてたよな?
業務ロジックがややこしくても、
設計自体は単純。

殆どが汎用的なフレームワークで終る程度。

383 名前:デフォルトの名無しさん [2016/05/22(日) 17:20:29.91 ID:sxeEi6BC.net]
>>377
え?アルゴリズムクラス1つの設計にしちゃうの?w

384 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:20:38.57 ID:WwOYSBmy.net]
>>376
まだ理解してないのか?

思考ロジックに必要なのはアルゴリズムであって
設計じゃない。

思考ロジックの中に設計はないって言ってるのに、
その設計を聞かれても、設計はないって答えるしかないだろw

385 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:20:58.83 ID:WENufHUB.net]
>>370
半分同意なんだけど
MVCフレームワーク使ったらクラスまわりの設計不要はそのとおり、
しかしだとするとこのスレは何を語るスレなのか
>>1の真意を知りたいわ



386 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:23:11.96 ID:EaQ4G/f7.net]
将棋は例が悪いよ
もっと万人が完成形を一致できるものじゃないと
将棋は何もやらないとテトリスみたいに詰め込むと短く終わるタイプじゃん

387 名前:デフォルトの名無しさん [2016/05/22(日) 17:23:20.30 ID:sxeEi6BC.net]
>>375
あのさあ…、将棋ゲームはやったことないの?
相手がこうさしたら、こっちはこう指して、こうなると悪くなるから、こっちの手を選ぼう
ってロジックの話よ。

電王戦の将棋ソフトって言っても全然伝わらないもんなの??

388 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:25:13.14 ID:WwOYSBmy.net]
>>378
むしろ、なんで1つのクラスにしないのかわからんのだが?
(2次元配列クラスぐらいなら言ったよ?)

お前、設計をしなくていい部分を無理やり設計しようとしてるから
わけわからんことになってるんだろw

アルゴリズムをクラスにするのは、
上で書いた思考ロジックを切り替えやすくする
将棋ソフトウェアのフレームワークを俺が設計したから。

思考ロジックの "中" には設計は不要で、
思考ロジックの "外" に設計を行うことで
簡単に思考ロジックを切り替えられるようにする。

業務システムも、通常は業務ロジック部分を作るのだから設計は不要。
設計とはこういうこと。

389 名前:デフォルトの名無しさん [2016/05/22(日) 17:25:50.40 ID:sxeEi6BC.net]
>>381
他にいい例があるなら出してよ。
抽象的な議論だとくだらない言い争いになって不毛だから具体例で語りたい。

将棋ソフトはプログラマならイメージできると思って出したんだけど。

390 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:26:08.32 ID:WwOYSBmy.net]
>>382
> 相手がこうさしたら、こっちはこう指して、こうなると悪くなるから、こっちの手を選ぼう
> ってロジックの話よ。

だから、何度も言うように設計はいらねーよな?

391 名前:デフォルトの名無しさん [2016/05/22(日) 17:27:28.13 ID:sxeEi6BC.net]
>>383
「将棋ソフトウェアのフレームワークを俺が設計したから」
!???
何言ってんだろ。

392 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:27:50.06 ID:WENufHUB.net]
>>376
あ、なるほど、ようやく意図を理解した
しかしやはり例が難しすぎるね
桂オブジェクト、銀オブジェクト、飛車オブジェクト、角オブジェクトなどに
今後どう動けばより有利になるかの計算メソッドが書いてあり、
それを自分と相手の持ち駒分を
アルゴリズムが入ったロジッククラスに食わせて、、、
あー、俺には無理だわw

393 名前:デフォルトの名無しさん [2016/05/22(日) 17:29:57.58 ID:sxeEi6BC.net]
>>385
で、完成したコードはどういうクラス構成になってんの?

394 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:30:55.61 ID:WwOYSBmy.net]
>>386
日本語もわからんのかw

思考ロジックを切り替えなくていいなら、
わざわざ「思考ロジックを切り替えやすくする
将棋ソフトウェアのフレームワーク」を設計する必要はない。

そこまで来るとアルゴリズムクラスすら必要ない。
一枚岩に埋め込んじゃえばいい。

でも俺だったら(俺の設計の話を聞いたんだろ?)
思考ロジックを切り替えられるようにするから、
その部分(思考ロジックの外)は設計するって言ったんだが。

お前、やらなくてい仕事をやってるだけじゃねーの?w
設計がいらないものを、むりやり設計しようとしているようにしか見えない。

395 名前:デフォルトの名無しさん [2016/05/22(日) 17:31:47.21 ID:sxeEi6BC.net]
>>385
>>388は完成させろってことじゃないから。
現時点でどんなクラス構成になりそうだと考えてるの?って質問な。
頭の中に方向性がなきゃコーディングを開始すんのは無理だろ?



396 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:31:59.74 ID:EaQ4G/f7.net]
業務フローも含めた勤怠管理システムとかお題として優秀だと思う

397 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:33:26.59 ID:WENufHUB.net]
>>391
言い争いが終わらないからお題変えたほうが有益だね
勤怠管理程度だと逆にMVCの一言で設計終わっちゃうがw

398 名前:デフォルトの名無しさん [2016/05/22(日) 17:34:07.26 ID:sxeEi6BC.net]
>>389
思考ロジックを切り替えられるようにするから、
その部分(思考ロジックの外)は設計する

ってのはどんな感じになるのか教えてくれ。
「俺はすごいんだー」って主張してるだけで何も出てこないんじゃさあ。
出てくれば素直にお前を評価するから。
出て来なきゃ口だけだなとw

399 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:34:29.93 ID:WwOYSBmy.net]
>>388
クラス構成だろ?
クラスの実装じゃなくて。

今まで出てる要件の将棋ソフトのクラス構成なら、
UIクラスと思考ロジッククラス程度で終わりだろ。

UIを3Dにして商用ゲームっぽくするならば、
UIを作り

400 名前:竄キいように、将棋盤クラス、
コマクラスとか作るけどな。

あと思考ロジックをネットワークを使って複数台で分散処理させるならば、
(汎用の)計算処理分散のための設計も入れるだろうな。

それ以外に必要な設計なんか思いつかん。
[]
[ここ壊れてます]

401 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:35:36.39 ID:WwOYSBmy.net]
>>393
> 思考ロジックを切り替えられるようにするから、
> その部分(思考ロジックの外)は設計する
> ってのはどんな感じになるのか教えてくれ。

ストラテジーパターンでいいやん。
こんなん数秒で思いつくレベルやでw

402 名前:デフォルトの名無しさん [2016/05/22(日) 17:37:06.43 ID:sxeEi6BC.net]
>>392
勤怠管理はまあそうだけど、もっとややこしい業務システムもある。
株売買とかも分析があってややこしいとか。
でも、それより将棋のほうがみんな分かっていいだろ。
複雑なロジックを含むシステムなのは共通してる。

403 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:38:09.35 ID:WwOYSBmy.net]
数秒もいらんか?

前提知識として、将棋を知ってるから、
ソフトウェア化って聞いただけで
思考ロジックを切り替えられる設計は思いついてる。

仮に将棋を知らなかったとしたら、
将棋のルールを聞いてる途中で思いつく。

考えてください → 数秒後 → 考えつく。じゃなくて
将棋のルールを聞いてる途中で答えが出てる。

404 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:38:45.08 ID:8h3SPrnH.net]
いや〜勉強になります
アルゴリズムのデザインにシステムの設計なんて関係ない
アルゴリズムが確定したあと初めてオブジェクト指向を待つ言語でどう詳細な設計に落とすかってことなんだ
アルゴリズムを実装するのに適した処理系があればそっちでやれって

405 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:39:44.42 ID:WwOYSBmy.net]
>>398
今の将棋の話で、アルゴリズムを確定させたか?w

アルゴリズムを確定させない状態で、
アルゴリズムを切り替えやすくするための
設計の話をしていたはずなんだがwww



406 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:39:53.11 ID:WENufHUB.net]
>>396
将棋は難しすぎると思うけどなあ
じゃあ叩き台としてどんなクラスが必要か出してみてよ
俺は>>387で適当に考えたけど挫折したよ

407 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:40:47.45 ID:EaQ4G/f7.net]
>>392
もちろん月次の勤怠報告書も各PCから出力できる
休日や休み時間、有給半休設定も設定可能
予定表機能もあって受付のねーちゃんがそれ見て在籍確認ができる
って程度ならあまり溢れず
設計書が必要なレベルではないだろか?

408 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:40:51.87 ID:6l64NX2q.net]
>>360
>他に何を設計するんだ?
将棋のルールを表現するモジュールが欲しいな。
これは変わらないものだし、ユーザ入力も思考ルーチンでもチェックに
利用できるようになっていると嬉しい。

あとソフトウェア内部での盤面や指し手についてのデータ構造だな。
プレイの間だけデータを持ってればいいのかセーブ・ロードが必要なのか
Redo/Undoが欲しいかなどの要求が考えられるから、それらに対応できるような
構造になってると嬉しい。

で、それらをモジュールとして分割するかレイヤとして分割するかだな。

で、そこまで決まると将棋のAIのロジックはデータ構造上のデータの変更のロジックに
容易に変換できるようになる。つまり>>377とかで言ってるフレームワークってことだね。

で、こういったことをコードを書きながら頭の中でやるかメモ書きでやるか、
それとも設計書に書いてからやるかって話だけど、いずれにしても仕事としてやる以上は
やったことを評価と保守ができる形で残さないといけない。

409 名前:デフォルトの名無しさん [2016/05/22(日) 17:45:25.74 ID:sxeEi6BC.net]
>>394
ロジックが1つのクラスってのは違うだろうな。

局面:駒の位置、指せる手、駒の当たり、など
局面の点数化:持ち駒、駒の働き、囲い、駒の位置、など
手を考えるロジック:定跡との比較、候補手の選択、分岐の選択、捨てる手の選択、など

とかいくつかの機能に分かれているのに全部1つのクラスってだめだろ。
局面を管理してる部分は局面の点数化と手を考えるロジックが変わっても変更する必要はない
とかあるだろうし。

設計ってそういうことを考える作業なのに全然できてないなあ。

410 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:45:51.18 ID:WwOYSBmy.net]
× 将棋のルールを表現するモジュールが欲しいな。
○ 将棋のルールを表現したデータが欲しいな。


411 名前:
> これは変わらないものだし、ユーザ入力も思考ルーチンでもチェックに
> 利用できるようになっていると嬉しい。
関係ないものを混ぜるな。
役割は分離させろ

> あとソフトウェア内部での盤面や指し手についてのデータ構造だな。
> プレイの間だけデータを持ってればいいのかセーブ・ロードが必要なのか
> Redo/Undoが欲しいかなどの要求が考えられるから、それらに対応できるような
> 構造になってると嬉しい。

そんなの一瞬で思いつちゃったw 棋譜データを記録すれば再現できる。
['7六歩', '8四歩', '6六歩', '6二銀', ・・・] こんな感じだな。
[]
[ここ壊れてます]

412 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:46:53.68 ID:EaQ4G/f7.net]
将棋の思考ルーチンなんて

rand()% 動かせる駒の数
rand()% 置ける場所の数

の2行で十分

413 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:47:15.33 ID:WwOYSBmy.net]
>>403
お前センス無いんじゃね?

1つのクラスでいいよ。
共通化するにしても、2つだな。

1つのベースクラスに、それらのデータを入れておき、
継承したクラスで、ロジックだけを実装する。

こんなの設計と呼べるレベルじゃない。一瞬で思いつく。

414 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:48:23.90 ID:vKoFE7Z9.net]
棋譜と手・盤面の評価値の読み書きとかリプレイとか必要だな
評価値のパラメータやアルゴリズムを差し替えて比較・統計する機能もほしいな

415 名前:デフォルトの名無しさん [2016/05/22(日) 17:48:31.84 ID:sxeEi6BC.net]
>>401
簡単なパターンを考えてみるのも有益かもな。
そっちもやってみる?
同時並行でやるとごちゃごちゃになるかなあ?



416 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:49:31.44 ID:WwOYSBmy.net]
よく読んだら、>>403って1機能=1クラスにしようとしてるのか?
あほだなぁw

関数で済むものを、デザインパターンに当てはめて
複数のクラスにしようとしてるから
わけわからんことになってるんだろうな。

417 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:49:38.59 ID:WENufHUB.net]
>>401
もちろん業務に関する設計書はひととおり必要
要件定義から画面設計、テーブル設計などいるだろうね

でもこのスレって「オブジェクト指向システムの設計」だから
業務の設計よりももっと技術寄りのクラス設計などを語る目的なのかなと

418 名前:デフォルトの名無しさん [2016/05/22(日) 17:49:49.83 ID:sxeEi6BC.net]
>>406
あー、そういうレベルね。
了解w

具体例を出して正解だった。

419 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:51:02.87 ID:WwOYSBmy.net]
>>407
機能はたくさん欲しいのはわかったw

設計は、機能の多さとは比例しない。
棋譜データクラス(さっきから2次元配列クラスと読んでるもの)を
作ってそれらのメソッドを実装しろ。

420 名前:デフォルトの名無しさん [2016/05/22(日) 17:52:51.72 ID:sxeEi6BC.net]
>>409
1機能1クラスなんて言ってないからちゃんと読もうね。

で、俺を批判するのに頑張るよりお前の考えるクラス構成を出したほうがよっぽど評価されるぞ。
頑張れ!

421 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:53:50.83 ID:WwOYSBmy.net]
>>411
そうしない理由を聞きたいんだが?w

お前は理由もなく、設計と評して、
過剰なモジュール分割をしようとしているに過ぎない。

目的が設計になってる。
だから設計が必要だって結論になってる。


俺はこんな部分に設計はいらないと最初から言ってる。
だから設計が出ないのは当たり前。

設計というのはフレームワーク部分に使うものなんだよ。
通常の開発はフレームワークを使うから、設計はほぼ不要になる。

一体俺からなにを聞こうとしてるんだ? 最初から無いと言ってるだろ。
無いと言ってるのに、無いに等しい物を言ったら、そのレベルとか心外だわw

422 名前:デフォルトの名無しさん [2016/05/22(日) 17:54:20.75 ID:sxeEi6BC.net]
機能が拡張しそうな箇所を意識して設計するのも設計上の大切な指針だね。

423 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:56:04.18 ID:WwOYSBmy.net]
>>413
> で、俺を批判するのに頑張るよりお前の考えるクラス構成を出したほうがよっぽど評価されるぞ。

すでに出しただろ?

将棋のAIのアルゴリズムが難しいからと言って
ソフトウェアの設計も難しくなるわけじゃない。

将棋の設計は簡単。ほんの少ししか無い。
だからほんの少ししか言えることはない。
お前は、むやみに複雑にしているようだがなw

自分で機能をあれこれ言って、
それを自分で設計できないでいるんだろ?
お前が、自分で出した機能を設計できない時点で
そこに設計はないという証拠になってるんだがw

424 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:56:41.71 ID:WwOYSBmy.net]
>>415
> 機能が拡張しそうな箇所を意識して設計するのも設計上の大切な指針だね。

だから思考ロジック部分を分離しただろw

425 名前:デフォルトの名無しさん [2016/05/22(日) 17:57:12.46 ID:sxeEi6BC.net]
>>414
> そうしない理由を聞きたい
ストラテジーパターンとか適用できそうだね。

> 設計はいらない
>>390



426 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:57:57.65 ID:WwOYSBmy.net]
>>418
> ストラテジーパターンとか適用できそうだね。

それ俺が言ったセリフだwww
パクるなよwww

427 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:58:01.83 ID:6l64NX2q.net]
>>404
変わらないもの共用化できるものは分離して共通化した方がいいだろ

>そんなの一瞬で思いつちゃったw 棋譜データを記録すれば再現できる。
それをどこにどう持たせるの?
あとそれをどう決めてもいいけど、どう決めたかを自分にも他人にもわかる形で
残さないといけないね。単純でコード見ればわかるってんならそれでもいいけど。

428 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 17:59:25.73 ID:WwOYSBmy.net]
あ、もしかして

> 1つのベースクラスに、それらのデータを入れておき、
> 継承したクラスで、ロジックだけを実装する。

これがストラテジーパターンになってるの気づいてないの?

429 名前:デフォルトの名無しさん [2016/05/22(日) 17:59:46.97 ID:sxeEi6BC.net]
>>417
>>407はどう考慮したんだ?
そもそも機能拡張がありそうな点を意識するって知ってた?

実力を証明するには設計案を提示するしかないぞ。

430 名前:デフォルトの名無しさん [2016/05/22(日) 18:01:00.43 ID:sxeEi6BC.net]
>>421
>>403
局面を管理してる部分は局面の点数化と手を考えるロジックが変わっても変更する必要はない
とかあるだろうし。
って書いてあげたのに…。

431 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 18:04:19.72 ID:WwOYSBmy.net]
>>420
> 変わらないもの共用化できるものは分離して共通化した方がいいだろ
そのための設計って単純だよな?

> それをどこにどう持たせるの?

少なくとも思考ロジック部分じゃないな。
どの将棋ソフトウェアでも共通で使えるものなんだから。

だから今の話、思考ロジック部分の設計(?)には登場しない。

将棋ソフトフレームワークと呼べるものを作って、
対局データを記録できる機能があるならば、
対局クラスとかの中だろう。

で、やっぱり思考ロジックの "外" の話なんだよ。

432 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 18:06:05.23 ID:WwOYSBmy.net]
>>423
> 局面を管理してる部分は局面の点数化と手を考えるロジックが変わっても変更する必要はない

局面を管理してる部分は2次元配列クラスだと言ったんだがw

局面をもっと便利に管理したいならば、
この2次元配列クラスを拡張してメソッドでも追加しろよw

この程度の話、設計と呼べるレベルじゃないよ。
え?普通そうするよね? レベルの話だ。

433 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 18:06:17.27 ID:6l64NX2q.net]
>>424
ああ、思考ロジックの中の話なんか
思考ロジックを外と分離するための話かと思ってた

434 名前:デフォルトの名無しさん [2016/05/22(日) 18:11:47.45 ID:sxeEi6BC.net]
>>425
将棋のルール的なロジック
駒がどこに効いてるか?
駒が移動できる場所は?
駒の位置は?



点数化
手の選択

を一緒くたにしちゃうのは汚いクラス設計だとしか思わん。
お前は機能の違いについてセンスがまったくないから
これ以上話しても無駄だからもういいや。
少しはましな設計を思いついたら書き込んでくれ。

435 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 18:14:56.13 ID:WwOYSBmy.net]
>>427
だから、ベースクラスを継承すればいいっていっただろ。

なんでこの程度のことを大げさに考えてるんだ?



436 名前:デフォルトの名無しさん [2016/05/22(日) 18:18:27.84 ID:sxeEi6BC.net]
>>428
ベースクラス??
そんなのどこにあんの?

クラス構成聞いてるのに出てないのに突然持ち出されてもさあ…。

ごちゃごちゃ言い訳してる暇があるならまともなクラス構成を提示しろ。
提示できないのに「俺はすごいぞお」って言い張っても滑稽。

437 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 18:21:40.13 ID:WwOYSBmy.net]
> ベースクラス??
> そんなのどこにあんの?

>>406にあるけど・・・?

438 名前:デフォルトの名無しさん [2016/05/22(日) 18:23:12.23 ID:sxeEi6BC.net]
話は戻るけど

ちょうど今電王戦見てるから将棋ソフトで考えてみるとさ。
駒クラスがあって王・飛車とかは駒のサブクラスにしようかって感じだろ。
盤面情報と思考ロジックはどんな感じのクラスにするのがいいだろう?

ってどうなんだろう?

こんな感じのところと将棋ソフトで言えば手の思考ロジックの分割みたいな
領域で悩むことが多い。

439 名前:デフォルトの名無しさん [2016/05/22(日) 18:26:05.60 ID:sxeEi6BC.net]
>>430
???
だから>>427の機能が全部ぶちこまれたクラスがあんでしょ?
違うなら違うで何を考えているのか明示しないとお前の考えてることなんて分かるかよ。

実際のプロジェクトでもドキュメントがなきゃこんな感じになって
ぐだぐだになるから設計書が必要だと実感できてよかったな。

440 名前:デフォルトの名無しさん [2016/05/22(日) 18:28:39.50 ID:sxeEi6BC.net]
>>431
間違った。
具体的な質問はこっちだった。

盤面をクラスとして作るべきか、思考ルーチンの中で使われる情報に過ぎないのか?
って疑問がまず出てくるけどどう判断する?

違うクラス構成でもいいけど。

441 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 18:29:02.46 ID:WwOYSBmy.net]
うーん、こういうのも経験の違いってことなのかな。
どうも ID:sxeEi6BC って
最初から、完全なものを作らないとだめって思ってるみたい。
要求に対して変化させる能力(仕様変更能力)がないんじゃないか?

一番プレーンな状態からやって、○○したくなったら
それにあわせて変化させれば良いんだよ。
最初から必要になるかわからないものまで作る必要はない。
(ただし考慮は必要。考えるだけでやらなくていい)

思考ロジックの話でも、最初はクラス一つでいいだろ。
で、あとから共通化がどうとか言ってきたから、
俺は、ベースクラスにまとめれば?って答えた。

それだけのことだよ。後から何か言われたら、それに対応させて変化さえればいい。

それができないのはいろんなものを一緒くたにしてやろうとしてるからで
俺は役割に応じて分ける(最初から分けるのではなくて、分けていく)って
考え方をしてるので、大幅な設計変更は発生しない。

ただ単に実現したいことを実現するシンプルな方法(これを正しく判断できるのが経験なのだろう)を
選んでいくだけのことなのに。さっきから「そうするだけじゃん」の連続だよw

442 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 18:30:13.36 ID:WwOYSBmy.net]
>>432
> だから>>427の機能が全部ぶちこまれたクラスがあんでしょ?

だからなんの理由で分けるんだよw

「役割」考えれば、一つにするのが正しいだろ。

まったく最初から複雑にしてるんじゃねーよ。

443 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 18:30:39.58 ID:JaLdteXY.net]
少し目を離してるうちにレス番進みすぎだろ
この短い間にもこれだけの応酬があったってことか
やっぱりシステム開発には対話が必要なんだな
横着してドキュメントで済ませようとすると破綻する事がよくわかった

444 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 18:32:15.49 ID:EaQ4G/f7.net]
まあ、ドキュメントを書かないと意思の疎通はできんよね
複数のクラスがあるとしてソースを見る人間と
いやいやこんなもんクラス1つで十分ですよって人間と
混ざって開発することもあんだしね

445 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 18:32:23.86 ID:WwOYSBmy.net]
>>433
どっちでも良い。最初はシンプルに作れ。

後で機能が欲しくなったことを想定してるのなら、その機能を言え。
その機能を実現するように変えるだけだからさ。

クラス設計なんて条件で変わるものなのに、
後出しで条件加えんなよ。

仕様としては単に将棋出来ればいいだけだろ?



446 名前:デフォルトの名無しさん [2016/05/22(日) 18:34:07.77 ID:sxeEi6BC.net]
>>434
>>390
同じことを何度も言わせるな。
どうしようもない設計からスタートさせてくれって言う設計者はいらない。

>>435
こりゃだめだw

447 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 18:34:18.62 ID:EaQ4G/f7.net]
>>438
ちなみに実際の開発で後出しかどうかなんてドキュメントも書いてないのに
主張できんの?

448 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 18:36:52.59 ID:8h3SPrnH.net]
よく判らんけど将棋のコマに主体性があればクラスなりオブジェクトなり構成できると思うけど
将棋のコマって全体を表現するときの1要素、データに過ぎないじゃないの
コマの状態や全体を評価して処理するのは別のプログラムーアルゴリズム
コマが主体性をもって勝手に無双するなら関係があるかも知れないけど
コマの種類ー行動範囲ー状態(手ゴマ、版面での位置、成金など)の一覧で表現できる単純な1要素
肝は、それら要素を含む版面全体を評価処理する部分じゃないか
版面のリストデータを評価する関数部分かな

449 名前:デフォルトの名無しさん [2016/05/22(日) 18:38:05.06 ID:sxeEi6BC.net]
>>438
これが後出しってさあ…。
まず、>>358
で将棋ソフトって言われたら簡単に予測できる。
実際の客なんてこっちが聞かなきゃ説明しないことなんて山ほどあるぞ。

もう語れば語るほど経験のなさが露呈するだけだからやめとけ。

450 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 18:39:04.38 ID:WwOYSBmy.net]
>.437
> 複数のクラスがあるとしてソースを見る人間と
> いやいやこんなもんクラス1つで十分ですよって人間と

そんなふうに考えてるやついないぞw
実際には複数のクラスに分かれているのを見て、
拡張性を考えた設計だなって読み取れる人と

なんでそうなってるのかわからない。
分ける理由もわからない。っていう技術力の低いやつだけだ。

451 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 18:40:13.61 ID:WwOYSBmy.net]
>>439
> どうしようもない設計からスタートさせてくれって言う設計者はいらない。

シンプルな設計からスタートさせてくれって話なんだが?

なんでシンプル=どうしようもない設計なんだ?

根本的にお前おかしい。
世の中のありとあらゆるソフト見てみろよ。
最初はどれもシンプルだろ。

452 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 18:41:15.88 ID:WwOYSBmy.net]
>>442
> で将棋ソフトって言われたら簡単に予測できる。

じゃあ、将棋ソフトっていうからさ、
予測してみ。

もちろん実際の客(俺)が考えてるものの予測だ。
余計なもの作るなよw

453 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 18:42:12.34 ID:WwOYSBmy.net]
>>441
> 将棋のコマって全体を表現するときの1要素、データに過ぎないじゃないの

普通はその通り。

俺からすれば、普通そうするよね?の当たり前の連続でしか無い。
これを設計なんて感じたこともねーわw

454 名前:デフォルトの名無しさん [2016/05/22(日) 18:42:22.89 ID:sxeEi6BC.net]
>>441
駒の動けるマスとか成りルールとかはクラスに持たせてもいい気がするなあ。
たいした情報じゃないからクラスにするまでもないけど。

ルールをどうやってクラスに割り当てるかも悩ましいな。
実装方法の候補はいくつか簡単に思いつくけど、どれを選択するかの基準は難しい。

455 名前:デフォルトの名無しさん [2016/05/22(日) 18:42:52.06 ID:sxeEi6BC.net]
たいした情報じゃないからクラスにするまでもないのかもしれないけど。



456 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 18:45:23.45 ID:WwOYSBmy.net]
>>447
だからそんなの将棋ソフトの機能に合わせて
ごく普通に作ればいいだけだろw

今は超シンプルな将棋ソフトの話なんだから
複雑なクラスにする必要はない。

機能が増えたらそれを実現するように変えればいいだけ。
最初っからいろいろやろうとするから
お前は混乱して、何も手を付けられなくなってるんだよ。

457 名前:デフォルトの名無しさん mailto:sage [2016/05/22(日) 18:48:50.87 ID:WENufHUB.net]
勝つまで言い争いをやめないID:sxeEi6BCもどうかと思うけど
ID:WwOYSBmyが逃げ回ってるようにしか見えないね

将棋ソフトって考慮時間が必要なくらい中身が複雑なものだから
ベースクラスと継承クラスの2つのシンプル実装で済むはずがない
将棋に勝つソフトではなくて
ルール通りにコマを進めるソフトぐらいならそれでもできるかもしれんが…






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<348KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef