16/05/24 01:04:03.54 KRMd4EzS.net
取り立てて機能のない将棋ソフトに
設計なんか必要だと思うほうが間違ってるよね
こんなのz80でだって動くんやで
豪勢なのは思考ルーチンだとしても将棋ソフト本体への入出力が決まってる以上複雑にはならんね
555:デフォルトの名無しさん
16/05/24 01:06:59.17 6RFz1ZJQ.net
>>546
いつもの人だねw
煽り抜きで質問なんだが、モジュールに分けない一枚岩の巨大単一ソースコードにするつもりなの?
556:デフォルトの名無しさん
16/05/24 01:19:38.22 KRMd4EzS.net
>>547
今出てる内容ならそれでも十分なんですよ
ちなみに俺は設計書書けよ派だけどね
将棋とかゲームのプログラムって大事なのは状態遷移の方だからね
ビジネスアプリでよく使うものは尽く役に立たない
557:デフォルトの名無しさん
16/05/24 01:23:01.35 6RFz1ZJQ.net
>>548
ボナンザのソースは何行くらいなのかぐ
558:ぐってみたら2~3万行だとさ。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1448320344 これを1ファイルにぶち込むのは普通じゃあない。
559:デフォルトの名無しさん
16/05/24 01:40:19.17 24rCrc9d.net
>それらの情報の関係とか何がクラスで何が属性なのか
クラスって言葉の時点で代数的データ型と同じくらいには実装よりな気がするが。。
後 例が将棋って言っても駒の動きなのかAIなのか
AIだと範囲が広すぎ&専門的すぎて例になりにくいし
UIにしても話の焦点がずれる気がするから
将棋のロジックの論点にしようか?
webアプリなのか顧客がいる業務系なのかで設計やドキュメントの意味合いも変わると思うが
560:デフォルトの名無しさん
16/05/24 01:45:49.17 TKpsNxtt.net
>>535
> クラスが不要だと思うならクラスを使わない設計をしてくれって何回言えば分かるんだ?
自分は何も出さずに人には出せと言う
出せばここダメあれダメと得意気にダメ出し
561:デフォルトの名無しさん
16/05/24 01:46:42.61 TKpsNxtt.net
>>535
> クラスが不要だと思うならクラスを使わない設計をしてくれって何回言えば分かるんだ?
クラスが不要なんじゃなくて設計が不要。
何回言えばわかるんだ?
562:デフォルトの名無しさん
16/05/24 01:50:13.69 TKpsNxtt.net
>>549
> ボナンザのソースは何行くらいなのかぐぐってみたら2~3万行だとさ。
> URLリンク(detail.chiebukuro.yahoo.co.jp)
> これを1ファイルにぶち込むのは普通じゃあない。
1ファイルって言ってるのは、思考ロジックだけの話だっただろ?
すり替えんなよw
563:デフォルトの名無しさん
16/05/24 01:58:43.29 TKpsNxtt.net
Bonanza のソースによると
readme.txt に思考部ってのが書いてあって、
> sikou.dll Bonanza 思考部 DLL ファイル
このdllを作るのが、sikou.c (とそのヘッダファイル)の
1ファイルからなってるじゃねーかwww
564:デフォルトの名無しさん
16/05/24 02:14:51.13 DBnZJSfL.net
そもそもクラスにすんなよ
インターフェースにしろよ
565:デフォルトの名無しさん
16/05/24 09:18:09.69 kp/L/pO1.net
まあ1ファイルでも複数クラスが定義されてることもあるし…
566:デフォルトの名無しさん
16/05/24 09:33:17.14 TKpsNxtt.net
それを言ったらCの時点でクラスは無いんだけどなw
それに思考ロジックなんて速度が重要なんだから、
一々内部でメソッド呼び出すとかやりたくないな。
やりたいやつはやってもいいけど、やりたくないやつは
内部で最適化する。
コマの配置や動きのデータも最適化するだろうから、
汎用化にこだわる所じゃない。
よって思考ロジック内部は自由。
設計を作れと言うのなら、設計がない(自由)が
この場合の優れた設計だろうw
567:デフォルトの名無しさん
16/05/24 11:26:21.90 6RFz1ZJQ.net
>>553
将棋ソフトを構成するクラスを提示してくれって言ってるが。
>>482とか、モジュールとかしつこいほど繰り返しても分からないお前って…。
設計について何も分かってないんだからアホな書き込みはすんな。
書き込みたいなら「分からないから質問させて:ってトーンで書き込め。
568:デフォルトの名無しさん
16/05/24 11:29:58.50 6RFz1ZJQ.net
>>555
そういう議論はいいね。
駒の種類が変わらないのにインタフェースにすべき理由はあるかな?
569:デフォルトの名無しさん
16/05/24 11:31:37.26 6RFz1ZJQ.net
>>556
システムのすべてのクラスを1つのファイルに書き込みのが望ましいとでも?
570:デフォルトの名無しさん
16/05/24 11:39:57.64 6RFz1ZJQ.net
>>557
客に設計を依頼されて、開発チームに「自由に作って」ってさあ…。
設計者と開発者が別れている実プロジェクトを想定しような。
>>535で言ったし、実際のプロジェクトなら当たり前のことだから
普通の経験を想定して考えろ。
>>514も読めないのか?
自分が知ってる業務システムの設計を提示してくれもいいぞ。
×設計いらない
○設計できません
なのは分かってるから、書き込まないでいいよ。
何度も同じことを繰り返すのが面倒だから設計いらないって書き込みは今後はすべてスルーするから。
571:デフォルトの名無しさん
16/05/24 11:46:53.22 6RFz1ZJQ.net
念のため、>>515もな。
クラスを使わない→設計いらないにはならないから。
常識すら知らない素人の相手はこれでおしまい。
572:デフォルトの名無しさん
16/05/24 13:45:02.78 rb+ApEGm.net
なんか、将棋AIで盛り上がっているようだけど、
Bonanzaでいえば、手筋を決めるのは全幅探索だよ。
でも、本当に全幅したら、制限時間収まらないから、
探索木を刈り込んで、選択の範囲を限定してやる。
その限定方法に、王を含む要の3駒の位置関係関係から導きさされる値をしきい値にしているということだよ。
Bonanzaって思考ルーチンが公開されているハズだから、落として読んでみればw
573:デフォルトの名無しさん
16/05/24 13:58:42.06 iG1UUWT4.net
将棋AIで盛り上がってるんじゃないと思うよたぶん
俺の見た感じだと
(1)
public class ShikouA implements IShikou {
public Object tsugi_no_itte(Object param) {
// 次の一手を考えるアルゴリズム書く
}
}
の1クラスでいい派と
(2)
public class Rule {
}
public class Kouho {
}
public class TensuHyoka {
}
public class Banmen {
}
みたいにできるんじゃねーのという>>1
の構図なだけでAIの中身は話してないと思う
574:デフォルトの名無しさん
16/05/24 14:06:07.08 uyx/y43g.net
いい加減お題が悪いんだから引っ込めろよ
ゲームPGが設計書なんて書かないのはゲームが状態遷移のお化けだから
状態遷移がメインになる時は資料が役に立ちにくい
575:デフォルトの名無しさん
16/05/24 18:58:04.32 6RFz1ZJQ.net
>>565
>>514
576:デフォルトの名無しさん
16/05/24 19:03:58.90 6RFz1ZJQ.net
>>564
違うだろ。
クラスを分けないにしても設計はないと構築できないって言ってる。
実際のプロジェクトだったら設計書ができて時点で客が確認する。
それを構築チームが読む。
ってやるだろ。
なんで分からないのか不思議。
真剣に疑問なんだが、実際のプロジェクトがそうなってることを知らないのか?
それと、俺は実装する設計が(2)になるなんて言ってない。
最終的な構成がすぐに出ないならまずは論理設計からするのが基本って言った。
577:デフォルトの名無しさん
16/05/24 19:18:16.62 6RFz1ZJQ.net
質問なんだけど、実際のプロジェクトで設計書を作って客に提出したことが
ある奴で将棋ソフトの構成案を書き込んだって奴いるの?
いたらレス番を教えてくれ。
578:デフォルトの名無しさん
16/05/24 20:14:51.18 TKpsNxtt.net
>>561
> 客に設計を依頼されて、開発チームに「自由に作って」ってさあ…。
だから質問したよね?
なんで答えないの?
模範例として二分探索の設計とはどういうものかを答えろって。
579:デフォルトの名無しさん
16/05/24 20:19:38.66 TKpsNxtt.net
>>568
二種類の人間しかいないよw
一つは、(将棋ソフトの中の一部分の)思考ロジックには設計と呼べるようなもの必要ない。
あえて言うならば、思考ロジック内部では、クラスなど何も作らないという設計。
もし追加でなんか要望があるのなら、それに合わせて何か作るかもしれないが、
現時点では要望無いから一番シンプルな設計=クラスなし。
これが俺が言ってること。
そしてもう一つは、思考ロジックにも設計がいるんだ。
駒が何種類かあるのをクラス化して、
動きのルールをクラス化して
盤面に配置をクラス化して
配置された駒が動けるマスをクラス化して
駒の配置とかを見て点数をつけるクラスを作って
そうやって、思考ロジックを作るべきなんだ。
でも俺にはそれをどうすればいいかわからない。
誰かおしえてくれ!
って言ってる無意味に複雑にして何も出来ない、お前w
580:デフォルトの名無しさん
16/05/24 20:21:59.63 6RFz1ZJQ.net
>>569
>>538
>>544
現時点で具体的になってないのはすでに書いた通り。
だから、迷う点について意見交換しながら進めようとしている。
反応が全然ない。
一人で考えて設計案を出すことはできること、それならスレでやる意味ないじゃん。
設計案を何も出さないことについてはバカにしてるけど、設計のアイデアに対しては肯定的な
レスを返してるつもりだけど。
581:デフォルトの名無しさん
16/05/24 20:22:53.94 TKpsNxtt.net
>>571
> 設計案を何も出さないことについてはバカにしてるけど
そうか。じゃあお前の設計案は?
ムダに複雑にすることかい?w
582:デフォルトの名無しさん
16/05/24 20:24:47.16 TKpsNxtt.net
模範例として二分探索のお前の設計をいえって
言ってるのに、逃げてばっかりなんだよなw
583:デフォルトの名無しさん
16/05/24 20:25:08.60 6RFz1ZJQ.net
>>569
あと、二分探索自体の設計なんて求めていない。
思考ロジックの処理フローとかはいらないって書いたじゃん。
駒の配置を読み込んで、内部の実装(書く必要のない)で点数化して、
最適な手を選ぶって大きな流れを構成するクラスないしモジュールの構成。
584:デフォルトの名無しさん
16/05/24 20:25:28.59 ya5FB131.net
こんなところでグダグダ言ってないで
早く社会に出て仕事すればスキルは身に付くと思うよ
いきなり実装レイヤの話から入らないで
まずは概要と仕様を決めないとね
585:デフォルトの名無しさん
16/05/24 20:26:34.82 TKpsNxtt.net
>>574
> あと、二分探索自体の設計なんて求めていない。
だから俺が求めてるんだよってw
二分探索アルゴリズムも
将棋の思考アルゴリズムも一緒。
俺の答えは、二分探索アルゴリズムも将棋の思考アルゴリズムも
設計と呼べるものは(現時点では)いらない。
586:デフォルトの名無しさん
16/05/24 20:28:04.81 TKpsNxtt.net
> 駒の配置を読み込んで、内部の実装(書く必要のない)で点数化して、
> 最適な手を選ぶって大きな流れを構成するクラスないしモジュールの構成。
駒の配置・・・2次元配列
点数化・・・計算関数
最適な手を選ぶ・・・戻り値
ほっほっほwww
なんでこんなのをクラスにしないといかんのやwwww
587:デフォルトの名無しさん
16/05/24 20:28:27.44 6RFz1ZJQ.net
>>572
オブジェクト指向システムの設計について話そうってスレなんだから
>>544に対する見解を聞かせてくれ。
例を出したのもそれが目的。
588:デフォルトの名無しさん
16/05/24 20:29:17.01 6RFz1ZJQ.net
>>577
>>562
589:デフォルトの名無しさん
16/05/24 20:31:17.27 TKpsNxtt.net
>>578
オブジェクト指向とは関数(思考ロジック)をオブジェクト指向に変えるものではなくて、
関数を取り巻く世界を扱うものだ。ドアホw
将棋ソフトで言えば、思考ロジック・・・を取り巻く世界、
つまり複数あるかもしれない思考ロジックを入れ替えやすくしたり、
配置データを3Dオブジェクトで表現したり、
そういう、関数(思考ロジック)と関数(その他の処理)を
分類して扱いやすくするものだ。
たとえばフレームワークと呼べる部分がオブジェクト指向だ。
ま、お前、経験足りないってことだなw
590:デフォルトの名無しさん
16/05/24 20:32:20.22 TKpsNxtt.net
>>579
だから2次元配列の設計というのがどういうものかを言えって。
逃げるな卑怯者。
逃げるな卑怯者。
それに合わせて思考ロジックの設計を答えてやんよwww
591:デフォルトの名無しさん
16/05/24 20:33:33.14 TKpsNxtt.net
まーちーがーえーたーwww
>>579
だから二分探索の設計というのがどういうものかを言えって。
逃げるな卑怯者。
逃げるな卑怯者。
それに合わせて思考ロジックの設計を答えてやんよwww
592:デフォルトの名無しさん
16/05/24 20:53:10.15 6RFz1ZJQ.net
ID:TKpsNxttは専門学校の学生?
593:デフォルトの名無しさん
16/05/24 21:02:34.83 i9YaiJfL.net
だめだこりゃ
この>>1議論する能力がない
594:デフォルトの名無しさん
16/05/24 21:08:39.75 i9YaiJfL.net
>>567
>実際のプロジェクトだったら設計書ができて時点で客が確認する。
この子、客にクラス図みせるのか
まあ下請なら仕方ないか
595:デフォルトの名無しさん
16/05/24 21:11:09.24 TKpsNxtt.net
>>583
違うけど俺が専門学校の学生かどうかと、
お前が二分探索の設計を答えないことに
どう関係があるんだ?w
俺が何者であろうと、お前は二分探索の設計を
答えることが出来るはずだ。
答えない代わりに、そういうレスをすることで
反論(?)した気になろうとしてるんだろうが、無駄無駄w
596:デフォルトの名無しさん
16/05/24 21:17:39.14 i9YaiJfL.net
>>586
あんまりいじめてやるなよ
597:デフォルトの名無しさん
16/05/24 21:18:27.86 KRMd4EzS.net
>>582
題材が悪すぎるよ
どう考えても関数1つで十分
入力は盤の情報と自分と相手の持ち駒ぐらいだし
出力は次の一手オンリー
こんなんじゃ設計書いんないね
のいい例みたいになってる
こういう時に挙げる題材が悪いってのは要は経験が足りないんだろ
少なくとも通信やDBを絡ませるようなもんを出せば資料作んなきゃねって
話になったじゃん
バーカ
598:デフォルトの名無しさん
16/05/24 21:27:49.83 6RFz1ZJQ.net
>>585
どんな構成になるか説明を求められたとき、お前は何を見せるんだ?
599:デフォルトの名無しさん
16/05/24 21:29:47.19 i9YaiJfL.net
>>588
582に言うことか?
600:デフォルトの名無しさん
16/05/24 21:31:31.83 i9YaiJfL.net
>>589
この子、人に物を尋ねる基本的なマナーももちあわせてないのか
まあ仕方ないか
601:デフォルトの名無しさん
16/05/24 21:32:03.67 6RFz1ZJQ.net
>>586
>>571で回答したとおり、そもそも意見交換しようってスレなんだから意見交換しようぜ。
設計について会話する気がないならスレにいる意味ねえだろ。
設計について会話が成立しないのは学生っぽいなあって思って。
あんまり必死気に書き込んでたから雑談でもしてやるかと思ったけどスルーしたほうが良かったな。
602:デフォルトの名無しさん
16/05/24 21:33:32.81 6RFz1ZJQ.net
>>591
質問じゃねえからw
「何言ってんだこいつ?」ってのをやんわり言ったんだよ。
603:デフォルトの名無しさん
16/05/24 21:37:36.56 6RFz1ZJQ.net
>>588
適切な題材があるなら出せばいいじゃん。
他の例ある?あるならその設計について語ってくれ。って何度か書き込んでる。
604:デフォルトの名無しさん
16/05/24 21:41:00.13 6RFz1ZJQ.net
「俺のほうがスキルある」って主張したい奴がたくさんいるみたいだけど
設計を書けばみんな認めてくれるよ!
俺は最初の取っ掛かりは考えて会話の糸口は出した。
何も出していないお前ら。
どっちが無能かは明らかじゃん。
批判してる暇があったら少しは建設的なことやってくれ。
俺が反論できないくらいの設計指針なり、なんかのシステムの設計なりを見せてくれよ。
605:デフォルトの名無しさん
16/05/24 21:56:38.92 DBnZJSfL.net
お前が消えればいいんやで
どうみても適当でない例を引っ張なくてもいいし
606:デフォルトの名無しさん
16/05/24 21:59:45.35 TKpsNxtt.net
>>592
そんなのはいいからさ、
二分探索の設計はどうしたの?
会話が成立してないのは、俺の投げたボールを
お前が投げ返さないからじゃん。
607:デフォルトの名無しさん
16/05/24 22:01:11.19 TKpsNxtt.net
>>595
恥ずかしいセリフだな
> 「俺のほうがスキルある」って主張したい奴がたくさんいるみたいだけど
> 設計を書けばみんな認めてくれるよ!
>
> (そういったら、言い出しっぺの俺に設計を答えろって言われるだろ?
> それは困るから)
>
> 俺は最初の取っ掛かりは考えて会話の糸口は出した。
>
608:デフォルトの名無しさん
16/05/24 22:07:20.85 ya5FB131.net
>>595
君のその「高圧的な態度」が問題なんだと思うよ
そんな調子じゃ建設的な話なんてできるわけないでしょw
609:デフォルトの名無しさん
16/05/24 22:12:13.61 iG1UUWT4.net
これはさすがに香ばしい
将棋のクラス構成クレクレ(>>368,388,390,413,454など)
↓
思考ルーチンなんて1クラスになるしクラス図とか不要だろ(複数)
↓
Bonanzaみろよ。1クラスとか普通じゃないだろ(>>549)
↓
実際1ファイルになってました
やはりまず>>1が考えたクラス構成を出して
こんなんだけどどう思うよってやらんと
議論は絶対進まないと思うぞ
610:デフォルトの名無しさん
16/05/24 22:40:15.63 B8/5s3nv.net
「エリック・エヴァンスのドメイン駆動設計」
みたいに貨物システム考えてみるか?
あれなんかよくわからんのだけれど。。
611:デフォルトの名無しさん
16/05/24 23:31:04.66 6RFz1ZJQ.net
>>600
>実際1ファイルになってました
Bonanzaは50ファイルくらいあるらしいけどw
612:デフォルトの名無しさん
16/05/24 23:36:24.44 6RFz1ZJQ.net
オブジェクト指向システムの設計について語る気ないのにしつこく書き込む連中の気が知れない。
「スキルがあるんだー」って主張してるみたいだからオブジェクト指向について少しは語れよ。
613:デフォルトの名無しさん
16/05/24 23:37:48.35 6RFz1ZJQ.net
>>601
それでもいいぞ。
どんなシステムなのか概要とか要件とか説明頼む。
614:デフォルトの名無しさん
16/05/24 23:58:18.37 24rCrc9d.net
>>604
なんでお前が割り込んでくるの
615:デフォルトの名無しさん
16/05/24 23:58:32.22 iG1UUWT4.net
>>602
思考ルーチンのことな
総ファイルじゃなくて
616:デフォルトの名無しさん
16/05/25 00:00:48.81 9xysTXwv.net
>>603
いやだからまず>>1が始めろってば
> 「スキルがあるんだー」って主張してるみたい
みんながそうなんだーということにしたいのだろうが
こんな主張してるの
>>522,595
だけじゃね?
少なくとも俺はそう思ってない
617:デフォルトの名無しさん
16/05/25 00:14:42.01 FG6PmAiu.net
>>606
今どきのソフトはちゃんと分離されているようだから読んでおいて。
URLリンク(yaneuraou.yaneu.com)
URLリンク(github.com)
事前に知っていた訳じゃないけど普通に考えてそうだわな。
618:デフォルトの名無しさん
16/05/25 00:22:11.48 FG6PmAiu.net
>>607
そっかそっか。それなら一緒に考えようぜ。
>>544についてコメント欲しい。
あるいは別の進め方とか別の疑問とかでもいいし。
619:デフォルトの名無しさん
16/05/25 00:36:52.35 9xysTXwv.net
>>609
これで何回目になるかわからんが別の進め方
>>1がまず書いて
これどうよって進めないとだめだって
620:デフォルトの名無しさん
16/05/25 00:37:39.73 5QI4GMUE.net
設計の段階で悩むのは要求仕様が将棋ソフトっていう超ザックリだから
仕様をもっと詰めなきゃ設計に着手すべきじゃない
621:デフォルトの名無しさん
16/05/25 01:00:24.20 kC1gn4Wj.net
>>611
将棋ソフトじゃねーぞw
思考ロジックだけの話だ。
これを設計しろとかのたまう。
じゃあ同じような例で二分探索の設計を言ってみろと聞くと
話題のきっかけを与えた俺は答えなくていいとか言うようなことを言って
逃げる逃げるw
622:デフォルトの名無しさん
16/05/25 01:21:13.25 favsXrk5.net
手 getNextMove(現棋譜, 対局時計);
みたいなインターフェースを用意して、好きなように内部を実装すれば良いのでは?
・・・と思った俺は話についていけてない?
623:デフォルトの名無しさん
16/05/25 01:21:30.67 FG6PmAiu.net
>>610
質問してるのはまじめな質問だからレスがないなら進める意味がないと感じてる。
とは言え何か欲しいんだろうからざっと考えたER図を。
ちょっと考えただけなので漏れや間違いもあるだろうから改善点の指摘は歓迎だ。
URLリンク(drive.google.com)
KomaTypeは駒の種類。駒の動きの情報も含めている。
Komaは盤面上にある駒。
Banmenは局面。
Moveはその局面で指すことができる手。
実際は手によって盤面が進むんだけど、そこをどうするかは決めてない。
あと、盤面で指せる手×指した盤面で指せる手×…というように盤面が増えるんだけど
その関係をどう持つかは決めてない。
なんとなく整理を始めようってくらいなので進めながらいろいろ修正する。
最初のたたき台ってことで。
反応があれば次はモデルクラスを考えてみる。
ちなみにオンラインでチャートが書けるサイトを見つけて書いてるけど
URLリンク(www.draw.io)
操作方法は良く分からない。
リレーションの1:Mとか必須かどうかとかはおかしいかもしれないけど
細かい部分は気にしないでくれ。
624:デフォルトの名無しさん
16/05/25 01:29:02.28 FG6PmAiu.net
>>611
電王戦に出るソフトって以上のことはイメージないぞ。
要件はここにPDFがあった。
URLリンク(denou.jp)
625:デフォルトの名無しさん
16/05/25 01:36:24.48 9xysTXwv.net
>>614
とりあえず乙
反応なくても恨んでくれるなよwww
主張的にFuとかKeimaとかのクラス作るのだろうと予想してたけど外れた
KomaTypeやKomaは内部でめっちゃif文分岐しそうだな
626:デフォルトの名無しさん
16/05/25 01:39:41.54 FG6PmAiu.net
>>616
保持すべきデータの整理だからクラスの手前。
クラスは最初は分けた設計にすると思うよ。
途中でまとめたり、そもそもクラスじゃないってなるかもしれないけど
設計の最初はきっちりクラスを作ったほうが機能漏れが減ると思う。
627:デフォルトの名無しさん
16/05/25 01:39:45.11 9xysTXwv.net
あとそのツールは知らんが
クラス図描くならcacooとかどうよ
628:デフォルトの名無しさん
16/05/25 01:41:53.66 FG6PmAiu.net
>>618
ほー、そんなのもあるんだ。
クラス図を書くことになったら両方試して使いやすいほうを選ぶ。
629:デフォルトの名無しさん
16/05/25 02:26:37.41 favsXrk5.net
>>614
おー乙
俺は・・・盤面の評価の仕方はおろか将棋のルールさえ良く知らない、という現実に気づいたから不貞寝する
630:デフォルトの名無しさん
16/05/25 09:00:39.59 nXtYFHtE.net
将棋だとルール複雑or知らない人もいるから
まだオセロの方がいいだろ
なんで将棋を例に出したん
631:デフォルトの名無しさん
16/05/25 09:20:06.31 FG6PmAiu.net
>>621
この前の週末に電王戦をやってたから。
632:デフォルトの名無しさん
16/05/25 09:23:00.16 FG6PmAiu.net
>>621
あとは業務システムよりは知ってる奴が多くて分かりやすいから。
ちなみにオセロだと派生クラスとかの話は出なそうだな。
633:デフォルトの名無しさん
16/05/25 09:31:16.83 kC1gn4Wj.net
>>621
将棋のルール複雑か?
手数が膨大で処理がかかることと、
複雑さは別問題。
駒の動き+手駒 = 再帰処理する上での枝の数と考えれば
後は再帰と評価関数じゃん?
634:デフォルトの名無しさん
16/05/25 09:31:22.01 FG6PmAiu.net
ERを修正。
盤面上にある駒には成ってる駒と成ってない駒があるのと
駒ごとに成れる成れないがあるので、それを追加。
URLリンク(drive.google.com)
635:デフォルトの名無しさん
16/05/25 09:35:18.26 kC1gn4Wj.net
>>625
KomaType(苦笑)
データベースでもいるんだわ。
データが増減するわけでもないのに、値と名前の
対応表テーブルを作り出してデータベースに入れるやつ。
データベースアクセス無いと名前が取り出せないw
えとな、こういうのは定数としてコード上に
defineでもしてればいいのよ。
636:デフォルトの名無しさん
16/05/25 09:39:04.05 FG6PmAiu.net
>>626
あ、また来たw
ちがう設計の仕方があるならそれでやって見せてくれ。
お前「それは間違ってる」
俺「それだけじゃ無意味だから正しいやり方とかアイデアは?単にケチつけたいだけじゃんw」
お前「…」
何回同じこと言われれば分かるんだろ。
637:デフォルトの名無しさん
16/05/25 09:41:09.56 FG6PmAiu.net
あと、データベース作るってことじゃないから。
データを整理するって書いたじゃん。
データを整理する別の手法があるなら教えてね。
設計しないで構築できちゃうって主張したいみたいだからdefineを書いてくれてもいいよ。
638:デフォルトの名無しさん
16/05/25 10:08:40.60 r8UScIDo.net
お題「1から100までの数のうち、3の倍
639:数ならFizzを、5の倍数ならBuzzを、15の倍数ならFizzBuzzを、それ以外ならその数を出力するシステムを作りなさい」 よーしまずは設計からだ!与えられた数に対して何かするクラスConsumerと、1から100の数を出力するGeneratorが要るな! Fizzを出力するクラスはConsumerを継承させよう!同じ方法でBuzzもFizzBuzzも作ろう! どれにも共通する振る舞いは「それ以外の数ならその数を」という部分だな!これはConsumerに書こう! 1. Fizz => Buzz => FizzBuzzと継承させたらロジックを複雑にしなくて済むしコピペコードも無い!OOPは最高や! 2. 問題になるのはGeneratorから与えられた数をどのConsumerに渡すか、だな!じゃあConsumerManagerを作って、こいつに管理させよう! 見通しが良くなったし後から拡張も簡単にできるな!OOPは最高や! 末路→https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
640:デフォルトの名無しさん
16/05/25 10:58:41.63 OQdKu81q.net
>>626
DBアクセスはキャッシュの仕方で軽減できるな
どうぶつ将棋や摩訶大将棋に拡張したり、I18n対応を考えるなら、ラベルをDBに持っとくのは悪くないと思う
641:デフォルトの名無しさん
16/05/25 11:09:06.28 FG6PmAiu.net
そう言や定跡データは必要だな。
BonanzaとかAperyとかはたぶんフラットファイルで持ってるんだろうけど
俺だったらDBに格納しちゃうな。
業務システム系やってるとデータはDBに格納して操作したほうが楽ってなっちゃうわ。
ってことで、定跡DBの設計って観点から考える必要が出てきた。
642:デフォルトの名無しさん
16/05/25 11:10:17.24 FG6PmAiu.net
定跡ってか、過去の棋譜データだな。
643:デフォルトの名無しさん
16/05/25 13:45:46.81 Rwgeje6L.net
よいよ、将棋AIを作るスレになってきたのw
644:デフォルトの名無しさん
16/05/25 15:24:30.40 FG6PmAiu.net
まあね。
>>358とか、>>431とかについて話すのが目的だから将棋ソフトはそのきっかけってだけなんだけどさ。
将棋ソフトについても設計の手順はどうするのがいいとか、
俺は業務システムの開発経験しかないからゲームやってる人達のプロセスを聞きたいとか
設計がらみの話題について語れる人が来てくれるといいけど。
645:デフォルトの名無しさん
16/05/25 18:54:37.16 5WrCkf94.net
クラスの中のプライベートメソッドってどういう時に使うの?
クラスが肥大化したとき?
646:デフォルトの名無しさん
16/05/25 19:14:40.11 driOGhFD.net
肥大したコードの整理
何度も呼ばれる処理を切り出して再利用
特異な事をしているという表明
お好きにどうぞ
647:デフォルトの名無しさん
16/05/25 19:25:19.33 5WrCkf94.net
なるほどサンクス
648:デフォルトの名無しさん
16/05/25 19:56:03.70 OXIFfwZq.net
エ口巨乳とパコリwwwwwwwwwwwwwwww
URLリンク(ccdotcc.altiusinc.com)
649:デフォルトの名無しさん
16/05/25 20:03:23.09 VNiDmyVP.net
>>629
面白いw
Star 5,292 なのは、同感する奴も多いんだろう。
Fork 288 ってのは意味不明だが。(さすがにForkする必要はない)
Javaなのはやはりというべきか。>>1もJava屋だし。
650:デフォルトの名無しさん
16/05/25 20:16:03.29 kC1gn4Wj.net
>>627
> ちがう設計の仕方があるならそれでやって見せてくれ。
だから定数としてdefineすればいいって言ってるじゃん?
なんで読めないのかな?
自分が望む答えじゃないと無視するタイプ?w
651:デフォルトの名無しさん
16/05/25 20:18:32.97 kC1gn4Wj.net
>>634
> I18n対応を考えるなら
なんで世の中のi18nの対応がデータベースに保存するんじゃなくて
gettextやymlを使った翻訳の仕組みがデフォルトだと思ってるんだよw
オレオレで仕組みを作るんじゃなくてフレームワークなどの
ごく当たり前のやり方を使えばいいんやで?
652:デフォルトの名無しさん
16/05/25 20:18:56.00 FG6PmAiu.net
>>640
それじゃ要件をまったく満たせていないからやり直し。
ER図を読めれば足りないことくらい分かるんだけどなあ。
653:デフォルトの名無しさん
16/05/25 20:21:03.58 6PTcoeR/.net
棋譜再現プレイヤーとしても機能するようにするならどう設計する?
654:デフォルトの名無しさん
16/05/25 20:22:55.79 kC1gn4Wj.net
>>631
> 業務システム系やってるとデータはDBに格納して操作したほうが楽ってなっちゃうわ。
楽?
変数のほうが楽だろ?
「楽」っていうのは意味が二通りあって、
「実装するのが楽」と「学習するのが楽」がある。
後者はようするに、新しいこと覚えたくないーとか、
連想配列を知った人が、適当な場合でもないのに、なんでも連想配列使って実装する。
学習するのが面倒で、やっとのことで覚えたら、そればっかり使おうとする人。
「DBに格納して操作したほうが楽」っていうのは、もちろん後者だろうな。
実装が楽じゃなくて、覚えなくていいから楽という意味で使っている。
思えばお前のやり方もそうなんだよ。
クラスを知ってしまった。これ以上新しいことを知りたくない。
だから適当な場合でもないのに、クラスばっかり使おうとしている。
655:デフォルトの名無しさん
16/05/25 20:23:34.56 kC1gn4Wj.net
>>642
> それじゃ要件をまったく満たせていないからやり直し。
満たしていない部分がどこかを答えてみ。
お前の考えなんてわからんよw
656:デフォルトの名無しさん
16/05/25 20:24:57.76 kC1gn4Wj.net
>>641は>>630あて。
何で間違えたんだろ?
657:デフォルトの名無しさん
16/05/25 20:26:33.41 FG6PmAiu.net
>>645
盤面・手の情報をどうやって保持すんのよ?
ERに明示されているのに分からないって…。
658:デフォルトの名無しさん
16/05/25 20:29:19.24 kC1gn4Wj.net
>>647
盤面の情報なら、二次元配列で持てるだろ?
手の情報ってなんだ? 駒の動きか?
そんなのswichで種類を分岐して、動かせる場所を列挙すればいいだけだろう?
659:デフォルトの名無しさん
16/05/25 20:30:35.43 kC1gn4Wj.net
>>647
あ、今気づいたけど、お前、連想配列(ハッシュ)を知らんだろ?
660:デフォルトの名無しさん
16/05/25 20:31:04.99 FG6PmAiu.net
>>648
他の人が分かるように明確に書こうね。
お前は設計書の書き方をしらないみたいだからコードで書いてくれる。
661:デフォルトの名無しさん
16/05/25 20:36:21.84 FG6PmAiu.net
ちなみにコードで書けってのは全部は求めてないから。
Cで言うところのヘッダファイルの内容でいいぞ。
どうやって保持しようとしてるのか第三者にもちゃんと伝わる形で書けってこと。
設計を書けるなら設計でもいいぞー。
662:デフォルトの名無しさん
16/05/25 20:37:04.26 kC1gn4Wj.net
>>650
switch(koma) {
case KEIMA:
次に動ける箇所(複数)にコマを動かして評価関数呼び出し
}
663:デフォルトの名無しさん
16/05/25 20:38:47.79 FG6PmAiu.net
>>652
しょぼっw
まさかこれで終わりじゃないよな??
664:デフォルトの名無しさん
16/05/25 20:39:47.00 kC1gn4Wj.net
>>6
665:53 ムダに複雑にするなよw. お前、手段が目的にすり替わってるぞ。 沢山コードかくことが、ちゃんと仕事した証拠なんだって 思ってるだろw
666:デフォルトの名無しさん
16/05/25 20:40:58.77 kC1gn4Wj.net
いつも通りだけど、レスの内容がおかしんだよなw
正しいか間違っていからじゃなくて、
しょぼいかどうかw
667:デフォルトの名無しさん
16/05/25 20:42:29.45 FG6PmAiu.net
>>654
これで第三者がお前の考えを理解して構築できるようになると考えているならとんでもなくおめでたい。
客にこんなの出したら呆れられて「もう来ないでいいよ」って言われる。
668:デフォルトの名無しさん
16/05/25 20:43:25.03 FG6PmAiu.net
>>655
どういう構成を想定してるのか全然伝わらない。
669:デフォルトの名無しさん
16/05/25 20:44:08.66 kC1gn4Wj.net
>>630
> どうぶつ将棋や摩訶大将棋に拡張したり、
YAGNI
URLリンク(ja.wikipedia.org)
"You ain't gonna need it"[1]、縮めて YAGNI とは、機能は実際に必要となるまでは追加しないのがよいとする、エクストリーム・プログラミングにおける原則である。
理由
YAGNI原則を提唱する人々は、その理由として以下を挙げている。
・後で使うだろうという予測の元に作ったものは、実際には10%程度しか使われない。したがって、それに費やした時間の90%は無駄になる[2]。
・余計な機能があると、仕事が遅くなり、リソースを浪費する[2]。
・予期しない変更に対しては、設計を単純にすることが備えとなる。そして、必要以上の機能を追加すると、設計が複雑になってしまう[2]。
・人生の時間は、貴重である。したがって、人間の能力は、ただコードを書くためではなく、現実の問題に集中するために使うべきである[3]。
・結局は、その機能は必要ないかもしれない。もしそうなったら、あなたがその機能を実装するのに費やした時間も、他のみんながそれを読むのに費やした時間も、その機能が占めていたスペースも、すべて無駄になってしまうだろう[3]。
・コードをすばやく実装するために最も良い方法は、あまりコードを書かないことである。そして、バグを減らすために最も良い方法も、あまりコードを書かないことである[3]。
670:デフォルトの名無しさん
16/05/25 20:44:55.61 kC1gn4Wj.net
>>657
> どういう構成を想定してるのか全然伝わらない。
それはお前のER図の話だw
何を想定しているかわからないから、
そんなのいらんだろって言ってる。
671:デフォルトの名無しさん
16/05/25 20:45:40.89 kC1gn4Wj.net
>>656
え?なんで?w
いつもながら理由が書いてないなw
672:デフォルトの名無しさん
16/05/25 20:46:43.66 FG6PmAiu.net
>>659
ER図を理解できない奴発見wwww
ERが分からないって言って出してきたのが、これ??
switch(koma) {
case KEIMA:
次に動ける箇所(複数)にコマを動かして評価関数呼び出し
}
笑わせよるわ~www
673:デフォルトの名無しさん
16/05/25 20:49:13.86 kC1gn4Wj.net
将棋のルールを知っていれば当然わかると思うけど、
動ける場所はデータとして持たせることは難しいんだよな。
歩とか金とかならまだいいけど、
飛車とか角とか縦横または斜めのどこにでも動けるから
この動きをデータとして持たせるのは不可能じゃないけど、
結局コードが必要になるので冗長
674:デフォルトの名無しさん
16/05/25 20:49:27.02 FG6PmAiu.net
>>660
お前が設計を分かってないとは感じていたけどここまで分かってないとは思ってなかったwww
もう休んでいいぞ。
設計について語ろうってスレに書き込んじゃだめなレベルだから。
675:デフォルトの名無しさん
16/05/25 20:50:28.37 kC1gn4Wj.net
>>661
お前、何一つ言い返していない。
俺がやったことを、単にお前が語ってるだけ。
それでお前はどうしたいんだ?
676:デフォルトの名無しさん
16/05/25 20:51:09.26 kC1gn4Wj.net
>>663
> 設計について語ろうってスレに書き込んじゃだめなレベルだから。
って、それお前が沢山の人に言われたセリフだよなw
677:デフォルトの名無しさん
16/05/25 20:57:18.51 FG6PmAiu.net
switch(koma) {
case KEIMA:
次に動ける箇所(複数)にコマを動かして評価関数呼び出し
}
を構築チームに渡せばお前の考えている構成が伝わると思ってる相手と
技術的な会話を成立させるのは無理だわ。
あー、ちなみにERはほんの最初だから。
設計の5%くらいは進んだかなあってレベル。
それも分かってなかったみたいだね。
678:デフォルトの名無しさん
16/05/25 20:57:36.43 9xysTXwv.net
>>639
面白いよなwww
さすがにソース全部見る気にはならんが
インターフェースのなかの
ストラテジーやらファクトリーやらビジターやら見てみて
ようやるわ!
って感じでうけたwww
679:デフォルトの名無しさん
16/05/25 20:59:24.44 la8ZiYsl.net
>>652はさすがにないわ
将棋を知らないのかもしれんがあまりにお粗末
680:デフォルトの名無しさん
16/05/25 22:06:55.68 60iV75hD.net
DFSの再帰だってことぐらいはパッとわかるが
681:デフォルトの名無しさん
16/05/25 22:12:02.90 FG6PmAiu.net
>>669
ID:kC1gn4Wjかなw
682:デフォルトの名無しさん
16/05/25 22:13:41.56 60iV75hD.net
違うよ
683:デフォルトの名無しさん
16/05/25 22:17:42.15 FG6PmAiu.net
>>671
どこから再帰を見出したのが謎過ぎるw
684:デフォルトの名無しさん
16/05/25 22:19:58.55 60iV75hD.net
ゲーム木の処理だったらDFSかBFSでしょ
キューに入れないで関数呼び出してるから再帰かと
685:デフォルトの名無しさん
16/05/25 22:25:15.21 FG6PmAiu.net
>>673
そうかそうか。
突っ込みどころ満載のなんちゃってコードについてもっと語り合って楽しみたいんだけど
他の人の迷惑になるから心残りだけどおしまいにするよ。
まじで楽しませてもらったw
686:デフォルトの名無しさん
16/05/25 22:25:22.62 7yHwSTAr.net
URLリンク(www.geocities.jp)
とりあえずここから bonanza のソース取ってきて、
src/client/evaluate.c でも読んでみたらいい。
687:デフォルトの名無しさん
16/05/25 22:29:11.19 FG6PmAiu.net
>>675
Bonanzaの設計はひどいって聞いたから読むならAperyだな。
でも、将棋ソフトを作りたいんじゃないから。
将棋ソフトを例に、システムを設計するにあたって抱く疑問点に対する一般的な指針を語りたいんだ。
688:デフォルトの名無しさん
16/05/25 22:37:37.91 60iV75hD.net
普通にMVCでCにゲームループでMに盤面持ってればいいじゃん
689:デフォルトの名無しさん
16/05/25 22:38:35.12 fBBvLnfI.net
そういう考え方がすでに駄目なんだよきっと
だってそもそもいい設計って何?
どうなれば満足なの?
690:デフォルトの名無しさん
16/05/25 22:39:36.05 60iV75hD.net
要求仕様によってはMVCすら必要ないな
691:デフォルトの名無しさん
16/05/25 22:41:35.38 fBBvLnfI.net
将棋なんて
俺が刺した瞬間にCPU側が指し終わってるぐらいで丁度いい
つまりクリックイベントと開始ボタンの処理だけで十分
692:デフォルトの名無しさん
16/05/25 22:42:53.48 7yHwSTAr.net
>>676
だったら上記のソースの駄目なところと
それをどのように改善すべきなのか言ってみたらいいだろう。
てかこのくらいのコードも読めないならそもそも話にならんと思うんだが。。
693:デフォルトの名無しさん
16/05/25 22:44:20.19 FG6PmAiu.net
>>681
そこまで言うならどういう構成になってるのか読んで理解してアップすればいいじゃん。
694:デフォルトの名無しさん
16/05/25 22:46:51.60 7yHwSTAr.net
話にならん。。
ここまで手取り足取り要求されるのはかなわんわ。。
695:デフォルトの名無しさん
16/05/25 22:50:20.97 FG6PmAiu.net
>>683
は?俺からは一度も要求してないが。
お前は簡単に読めちゃうって言ったんだからだったら読めばってだけ。
俺はそもそも仕様書書くべきって考えだから。
696:デフォルトの名無しさん
16/05/25 22:53:53.99 fBBvLnfI.net
将棋.exe起動→駒配置→俺のターン!→駒選択(クリックイベント処理)
→駒移動(クリックイベント処理)
勝利判定→敵のターン!→敵思考ルーチン処理
→敵駒選択→敵駒移動→勝利判定→俺のターン!→以下ループ
勝利判定したら→結果表示→もう一度やる?→Yes:駒配置に戻る→No:将棋.exe終了
できた!
697:デフォルトの名無しさん
16/05/25 23:00:09.81 FG6PmAiu.net
>>685
ほうほう。多少違ってるけどまずまず。
後手のケースもある。
人のターンの最中もソフトは思考を続ける。
698:デフォルトの名無しさん
16/05/25 23:04:17.28 fBBvLnfI.net
>>686
後手のケースは敵のターンから始めるだけだ
exeの起動パラメータに「うんこ」っていれると後手になる
699:
700:デフォルトの名無しさん
16/05/25 23:05:30.70 FG6PmAiu.net
>>685
勝利判定の位置も思考して初めて勝利判定できるからちょっとおかしいな。
701:デフォルトの名無しさん
16/05/25 23:06:08.87 60iV75hD.net
設計いらんかったなw
702:デフォルトの名無しさん
16/05/25 23:06:16.40 VNiDmyVP.net
とりあえずC/C++派は傍観でいいんじゃないか?
一流()のJava屋の設計()を見せてもらおう。
ShogiEnterpriseEdition()ができそうだし。
あと俺もC++派でJavaはやったこと無いんだが、
取り急ぎ確認した結果、お前らが空回りしている理由は分かるから、それは言っておく。
それは、JavaがC--だからだ。用語の対比は以下。
C++: グローバル = Java: クラスにしてシングルトン
C++: enum = Java: クラスにしてfinal指定(継承禁止のconst static)
C++: define = 同上。
つまりC++の方がより詳細に記述できる。(C++の記述力の方が完全に上)
だからお前らがdefineとかenumだーとか言っても、それはJava屋にとっては全部「クラス」になっちゃうわけ。
つまり、Java屋でしかない奴(>>1)は、C++の精度では議論不可能なんだよ。だから空回りする。
まあそれ以上に>>1が無知かつ無能なのは事実だが。
俺個人の意見はポロポロ出ている意見と同じ物も多々あるけど、
>>1はそれを全否定しているのだから、ここはとりあえず放置しかないだろ。
703:デフォルトの名無しさん
16/05/25 23:08:11.77 FG6PmAiu.net
>>690
論理設計を知らないんだね…。
704:デフォルトの名無しさん
16/05/25 23:08:59.99 fBBvLnfI.net
>>688
いいや合ってるはずだ
705:デフォルトの名無しさん
16/05/25 23:09:26.74 60iV75hD.net
>>690
プリミティブ型(int, long, etc)のvectorは羨ましい
あとpairとかつまりstd最高
706:デフォルトの名無しさん
16/05/25 23:10:00.78 60iV75hD.net
>>693
stlねw
707:デフォルトの名無しさん
16/05/25 23:11:58.52 FG6PmAiu.net
>>692
そうか?
それなら勝利判定と思考ルーチンの関係がはっきりしないからかもしれん。
ロジック部分の設計はまったく未着手だからこれからか。
708:デフォルトの名無しさん
16/05/25 23:13:00.88 uKYFBn7C.net
>>614
Moveってのは自分の手番でさせる手を洗い出して格納するって事?
それって必要?
709:デフォルトの名無しさん
16/05/25 23:15:28.62 fBBvLnfI.net
>>695
勝利判定って王をとったかどうかですよ
710:デフォルトの名無しさん
16/05/25 23:16:24.59 FG6PmAiu.net
>>696
データを整理するためにER図を使っただけ。
>>628で「データを整理する別の手法があるなら教えて」って書いたのはそういうのもある。
ただ、>>631があるから過去の棋譜はDBに格納する方針にした。
711:デフォルトの名無しさん
16/05/25 23:19:38.28 FG6PmAiu.net
>>697
あー、そういうこと。
電王戦見てたら棋士は勝つ見込みがなくなったら投了するんだと。
ソフトは逃げる手がなくなるくらいまで続けるけど、王を取られるとこまではやらない。
まあ、そこは単なる将棋のルールなんでどういう意図で設計したかは了解した。
712:デフォルトの名無しさん
16/05/25 23:26:27.98 uKYFBn7C.net
>>698
いやいやいや
ER図なんだからDBに保存されるデータ構造だよね
多分やりたい事はクラス図なんじゃないの
713:デフォルトの名無しさん
16/05/25 23:28:05.15 VNiDmyVP.net
>>693
あるように見えるけど、
これは<T>ではなく<E>となっているのは、プリミティブは駄目でオブジェクトだけって事?
それもよく分からん仕様だな。しかも今まで改修されていないのも謎。
ArrayListも<E>だね。
URLリンク(docs.oracle.com)
URLリンク(docs.oracle.com)
URLリンク(docs.oracle.com)
標準に入るかどうかは別として、C++の場合は勝手ライブラリが対応したりするものだけど、
Javaはそういうの禁止なんだっけ?
なお完全にスレチなので、続きはJavaスレでということならこちらも移る。
714:デフォルトの名無しさん
16/05/25 23:29:15.28 driOGhFD.net
プレイヤーどものresignイベントや盤面のmovedイベント、時計のtimeupイベントを監視して、必要に応じて終局処理するとかじゃ駄目?
715:デフォルトの名無しさん
16/05/25 23:29:50.65 FG6PmAiu.net
>>700
やりたいことは保持すべきデータの整理。
UMLではクラス図を使うのは知ってるんだけど、データ構成の明確な指針が書かれた本とかある?
データベースの表設計は正規化のルールがかなりきっちりあるからそれを守れば
誰が設計してもほぼ同じ形になる。
業務システムならどうせ表に格納するってこともあるからERからやっちゃうんだよねえ。
実際どうなんだろうと思ってはいるんだけど。
716:デフォルトの名無しさん
16/05/25 23:34:56.63 FG6PmAiu.net
>>702
実際の終了条件はいくつかあるからそうだろうね。
二歩とかもあるもんな。
717:デフォルトの名無しさん
16/05/25 23:37:00.20 uKYFBn7C.net
>>701
EやTは総称型(ジェネリック)を表してるだけで別に意味はなくてXでもAでもなんでもいい
プリミティブ型は指定できないけどAutoBoxingされるから利用上はプリミティブが使える
718:デフォルトの名無しさん
16/05/25 23:44:52.07 9xysTXwv.net
お、なんか活発になってるな
719:デフォルトの名無しさん
16/05/25 23:45:42.01 VNiDmyVP.net
>>705
> AutoBoxing
サンクス。まあ普通はそうだよな。それで大して問題にならないだろうし。
720:デフォルトの名無しさん
16/05/25 23:47:32.64 QzZ3vWh9.net
オブジェクト指向をまともにやると、頭が悪くなるよ
データの整合性の管理はうまくいくんだけど・・・
複数のオブジェクトにまたがる処理をどのクラスに書こうかと悩んで
どれか一つのクラスに押し込んだり
または、元は一連の一つながりの処理だったものを分断して彼方此方にちりばめたり
もともとの発想がね、オブジェクト中心ってのが、なんか、バカっぽいでしょ
オブジェクトは何か物体感があるから、それ中心で考えるのは子供でも理解できてわかりやすいけど
世の中大人の世界はそんな発想で動いてないからねぇ
目に見えない何かのほうが重要だったり
721:デフォルトの名無しさん
16/05/25 23:49:10.47 FG6PmAiu.net
>>708
オブジェクトをちゃんと理解していないからオブジェクト指向をバカにするのはやめましょう。
「使いたくない」ってだけなら個人のご自由にどうぞ。
722:デフォルトの名無しさん
16/05/25 23:58:14.27 FhH1DHd+.net
>>703
だから保持ってのがアプリが終わっても保持なのか実行中だけ必要なのかが考えられてないんじゃないの?
アプリが終わっても必要なのって棋譜データだけなんじゃない
アプリ実行中に必要なデータはクラス図で書いて、処理間の受け渡しはデータフロー図で書いて、受け渡しの情報として足りてるかを判断しながら設計サイクル回せばええんでないの
正規化とか落とし込み以前の考察を吹っ飛ばしてら感が否めない
723:デフォルトの名無しさん
16/05/26 00:00:24.78 0AsVpwBA.net
盛り上がってまいりました。
724:デフォルトの名無しさん
16/05/26 00:01:34.72 Xc1/bPBx.net
>>710
いや俺のなかじゃ区別できてるよ。
まあ、そこは言い争ってもしょうがないので話題を少し変えると、
①将棋ソフトの設計をオブジェクト指向でやるとしてどういうステップでやる?
②クラスに分けるときの方針は?明確な指針を探しているんだけど見つけられていない。
725:デフォルトの名無しさん
16/05/26 00:10:48.99 Xc1/bPBx.net
>>710
もっと具体的に言うと例えば駒クラスを作ってそのサブクラスとして王クラス、飛車クラス、…と作ることも可能だし、
駒は情報として使うだけでクラスは必要ないって考え方もある。
手についても同じようにクラスにするかしないかどっちもあり得る。
そういうときにどのような構成にするかどうやって判断すべきだろう?
726:デフォルトの名無しさん
16/05/26 00:12:03.37 Xc1/bPBx.net
そういう意味じゃ盤面もそうだな。
727:デフォルトの名無しさん
16/05/26 00:15:25.90 y/d2Tqn1.net
いい設計の基準がないんだよな
だからいくら議論しても無駄なんだよな
自分の発言を正当化するためにいろんな基準をその時々で変えるんだよな
俺は資料とソースを一致させるための設計であると思ってる
別に構造がクソでも資料と一致していれさえすればいい
だから設計書のないソースは評価できない
いいも悪いもよくわからない
何を基準に何のために設計したのかわからない
資料に表現しやすいソースであるべきだし
ソースを追える資料であるべきだと思う
俺はね
728:デフォルトの名無しさん
16/05/26 00:16:44.44 Xc1/bPBx.net
>>715
ID:FhH1DHd+じゃないよな?
729:デフォルトの名無しさん
16/05/26 00:17:46.75 y/d2Tqn1.net
>>716
idなんか見てる奴は素人
730:デフォルトの名無しさん
16/05/26 00:18:46.69 Xc1/bPBx.net
>>717
プロは何で確認すんだよw
分かりにくいからはっきり答えろ。
731:デフォルトの名無しさん
16/05/26 00:25:44.91 J6SaR2wI.net
いい加減順序がおかしいことに気付け
⑴要件を定義する → ⑵設計の方針を決める → ⑶設計する
いきなり設計しろ設計しろとか言ってるわりに方針が見つからないとか馬鹿げてるし
将棋ソフトも要件決めてない(もしくは提案者の頭の中にしかない)から
思考ルーチン単体なのか将棋ソフト全体なのかすらも話題が定まってない
グダグダでどうにもならない悪い見本にしかなってない
732:デフォルトの名無しさん
16/05/26 00:28:15.06 Xc1/bPBx.net
>>719
要件>>615
将棋ソフト全体
733:デフォルトの名無しさん
16/05/26 00:45:23.61 UZPGQYZs.net
>>712
結局は以下の繰り返しでしょ
1. 自分の手番でさせる駒と位置のリストを出す
2. リストから1つ選んでさす
3. 相手の手番でさせる駒と位置のリストを出す
4. 相手がさす
5. 相手の指し手がリストにあるか判断
っで、最初は2の実装はリストの先頭の手を返すように作り、後で勝てる指し手を判断するロジックに変える
5も同じで、相手の指し手の評価をするロジック後で追加する
そん次は2手3手先読みして勝てる判断の制度を上げるために4の処理を3で出したリストで片っ端に当てはめて2手3手先の組み合わせを評価する
なんて事してると組み合わせが多すぎるので悪手の組み合わせは評価しないとかふるいをかけるって感じで精度を上げていくけど、1から5のインターフェースは一貫して変わらない様にするならどーする?って考えるのが設計なんじやないかな
734:デフォルトの名無しさん
16/05/26 00:48:45.72 UZPGQYZs.net
id見てるみたいだけど俺はFhH1DHd+なw
735:デフォルトの名無しさん
16/05/26 00:49:43.97 Xc1/bPBx.net
>>721
ID:FhH1DHd+だったら明記してくれ。
話が続いていない気がするんだけどよく分からん。
736:デフォルトの名無しさん
16/05/26 00:53:34.08 Xc1/bPBx.net
>>721
同じ人なのか?
②クラスに分けるときの方針は?
について話したいから戻っていい?
>>713と>>714についてはどう思う。
かっちりした明確な基準はないならないでいいんだけど回答欲しい。
探しても見つけられていないから知ってたら知りたい。
737:デフォルトの名無しさん
16/05/26 00:58:55.60 Xc1/bPBx.net
ちなみに>>721はそうだとは思うけど緩いじゃん。
設計中に出てくる個々の疑問を決定する際の明確に指針になるかというと
ならないと思う。
俺自身もそれとそんなに変わらない程度の指針に基づいて決定してるんだけど
誰が設計してもある程度同じものができる指針ってないもんかねえって思ってる。
738:デフォルトの名無しさん
16/05/26 02:26:59.05 mpyGJ1z1.net
>>713, 724
クラスを作る作らないの判断基準、将棋の駒は良くわからんが・・・
「通貨オブジェクト」とか参考にならないかな?
【実装】
通貨記号Enumと価格BigDecimalで別々に扱っていたのを一つのイミュータブルなクラスにまとめる。
加減算と乗除算メソッドがあり、加減算は同通貨とのみ可能、乗除算は数値とのみ可能とする。
【効果】
不用意なデータ破壊(JPYとUSDを足した等)の危険が減る。
通貨の振る舞いを通じて、プロジェクトメンバーの業務知識が向上する。
もちろん、採用するかの判断は別。
「並の人間がこんなアホな加算などするはずがない。面倒くさい事すんなよ。」とは俺も思う。
739:デフォルトの名無しさん
16/05/26 05:27:22.00 bwhpCAq0.net
将棋ソフトという例が悪いのは、CPUの思考ルーチンが将棋ソフトのキモで、それ以外の処理は瑣末なことだと理解しているのかな。
現在の盤面(持ち駒含む)を入力を盤面として、指し手を出力として返す関数以外に力を入れる必要性は無い。
「どうぶつ将棋や軍人将棋などのルール変更に対応できるようにしたい」とか「過去の棋譜データを表示できるようにしたい」とかいう要請を入れない限り、
上にあったようなER図とか過去の棋譜データをDBに格納するとかの設計は思考ルーチンの足かせになるし、無駄になる。
「思考ルーチンは書けないけど些末事は任せろ!」と本質の邪魔しかしない設計をしてる奴を何と呼ぶか、俺は知ってるぞ。
740:デフォルトの名無しさん
16/05/26 06:11:02.88 UjMbTLsx.net
将棋ソフトの内容は、ほぼ評価関数のロジックだけ。
オブジェクト指向とは、あまり関係がない
741:デフォルトの名無しさん
16/05/26 07:24:48.28 c+TCNzeK.net
>>658
YAGNI原則のプログラミングスタイルが取りやすい言語もしくはToolはなに?
C++のクラスを書く前のクラスの要件定義と必要なメンバ関数、メンバ変数を書き出して
少しずつ実装すると頭がスッキリした感じでコードが書けるのだけど
>>662
コマのデータを全部持つのじゃなく抽象化して、取り出した後、次の動作で移動可能な座標の
配列を作ってそれを評価するの
歩ー>成金?->一歩前or金と同じ範囲
みたいに
これを一盤面分作って、一手先を計算評価する
それを繰り返し~n手先の評価点も元に次の挙動を決める
恐ろしい計算量だね
742:デフォルトの名無しさん
16/05/26 07:29:56.12 c+TCNzeK.net
>>690
うすうす気がついていたけど、そうなんだ(ギャーーーー悲鳴
743:デフォルトの名無しさん
16/05/26 07:35:50.77 c+TCNzeK.net
昔、読み下しの困難なスパゲティプログラムって揶揄があったんだけど
C++のクラスって表現できる内容に厳しい縛りとか制限がないから
アホが作ったプログラムー>スパゲティ
同class->収拾の付かない理解不能な何かになる
744:デフォルトの名無しさん
16/05/26 08:29:42.66 6psiGDvx.net
良スレと思ったら将棋糞スレだった
745:デフォルトの名無しさん
16/05/26 10:21:56.92 mpyGJ1z1.net
ごちゃごちゃした要素があれば、オブジェクト指向の意味が出てくるかもしれん
課金スタイル考えよーぜ
謝罪文の掲載、アイテムの無効化、購入者抽出、アイテムの使用された対局の抽出、お詫びメールの送信、補填処理、省庁/監査対応etc...
いろんなオペレーションに対応できる、そんな設計が必要になるぞ
746:デフォルトの名無しさん
16/05/26 10:57:47.33 GCo9DDJM.net
将棋プロジェクト
オブジェクト指向より関数型のほうが絶対綺麗になりそう
747:デフォルトの名無しさん
16/05/26 11:12:52.45 Xc1/bPBx.net
>>726
なるほど!
確かに複数の属性が不可分一体となってある要素を構成しているような場合は
それらの値をオブジェクトにまとめるべきなんだろう。
となると、手は動かす駒、動かす先、成るかならないか、がまとまって初めて手になるんだから
オブジェクトとするのが自然だな。
盤面も同じようにすべての駒が配置された状態を表すんだからやっぱりオブジェクトにすべきだろう。
さらに言えばマスも縦と横の両方が合わさっているからオブジェクトにするのがよいのかなあ。
748:デフォルトの名無しさん
16/05/26 11:17:52.52 Xc1/bPBx.net
盤面をオブジェクトにするのはパフォーマンス的にどうなんだろうと
思って多少抵抗があったんだけど、まずは本来オブジェクトにすべきものは
オブジェクトにした設計を完成させるのが良い気がしてきた。
パフォーマンスなどの考慮した加工は後の段階からすればいいこと。
749:デフォルトの名無しさん
16/05/26 11:22:11.08 Xc1/bPBx.net
>>734
実際の構成がイメージできるように、もうちょっと具体的にならんだろうか?
750:デフォルトの名無しさん
16/05/26 11:29:07.18 Xc1/bPBx.net
>>733
将棋は十分ごちゃごちゃしてると思うが。
実際考え出したら思ってた以上に複雑だった。
簡単っていうなら設計を提示してみ。
>>652を見てからは、設計が単純って言ってる奴は設計のことを分かってないだけ
じゃないかと思ってしまう。
751:デフォルトの名無しさん
16/05/26 11:36:16.69 Xc1/bPBx.net
>>729
駒がうごけるマスのデータをどう持つかはまだ決まってない。
駒によって動けるマスが違うってことをERに忘れることがないように明記しておいた。
データ的に言えば駒に依存して動きが決まるんだからまさに駒の属性情報。
設計の最初は実装をあまり気にせずに業務(将棋?)的に求められる要件を整理するのが基本だ。
752:デフォルトの名無しさん
16/05/26 11:36:51.89 Xc1/bPBx.net
駒によって動けるマスが違うってことを忘れることがないようにERに明記しておいた。
753:デフォルトの名無しさん
16/05/26 11:56:46.07 EltQ4sqz.net
>>736
オブジェクトじゃなかったらなんなの?
754:デフォルトの名無しさん
16/05/26 11:59:47.73 GCo9DDJM.net
>>693
同じJVM言語のscalaでもプリミティブがオブジェクトでタプルもあるべ
javaさんがちょっとアレなだけ
>>737
要件があんま定まってないので明確な事はいえないが
オブジェクト同士のメッセージパッシングを使うオブジェクト指向よりも
パーサーコンビネーターなんかもそうだけど
データを定義して 参照透過な関数にそれを食わせるっていう関数型の方が将棋にあってるんじゃないか
755:デフォルトの名無しさん
16/05/26 12:05:05.28 Xc1/bPBx.net
>>741
コレクションとか、配列とか。
電王戦に出場しているソフトは配列に格納してるソフトが多いんじゃないかと
勝手に予想ていたけど。
756:デフォルトの名無しさん
16/05/26 12:07:55.61 Xc1/bPBx.net
>>742
具体的にどこにどうやって適用しようとしているのか明示してもらわないことにはなんとも…。
電王戦に出場している人はあの要件で理解しているんだから要件は十分明確になってるだろ。
757:デフォルトの名無しさん
16/05/26 12:17:50.31 GCo9DDJM.net
>>743
コレクションはオブジェクトだし
オブジェクト指向言語なら配列も大抵オブジェクト
と思ったがc++は配列がオブジェクトじゃないのか
758:デフォルトの名無しさん
16/05/26 12:26:17.14 c+TCNzeK.net
素人のオレが適当に書いて混乱させてやろかww
脳ミソ爆発だぜww
759:デフォルトの名無しさん
16/05/26 12:34:34.63 GCo9DDJM.net
>c++は配列がオブジェクトじゃないのか
自レス
最近だとstd::arrayがあるな
760:デフォルトの名無しさん
16/05/26 12:38:37.91 GCo9DDJM.net
>>744
評価関数の中身のアルゴリズムは具体的には全くわからんからこれ以上はなんとも(パターンマッチ便利だよくらい)
指摘している人がいるが将棋はオブジェクト指向の設計練習として適してないだろ
難しいのは評価関数でオブジェクト指向の良さが生かされないし 例ならオセロでいいし
オブジェクト指向の良さが現れてるのは言語はcだけどLinuxのVFSとかだな
c++やjavaで設計しなおしてみればおもろいかも
761:デフォルトの名無しさん
16/05/26 12:45:03.84 2tD7owQ3.net
単に次の手を求めていくだけのAIならOOPは悪手
盤面データを評価するのにオブジェクトアクセスはオーバーヘッドが大きすぎる
駒オブジェクトなどもってのほか
そもそも評価するだけなら将棋のルールモデルを再現する必要もない
対戦型のゲームならViewの制御などが絡みだすからOOPを検討し始めても良い
しかし将棋モデルそのものは依然としてシンプルな構造と処理になるためOOPの恩恵は小さい
実装にオブジェクトライブラリを使ういわゆるベターC的なものになる
762:デフォルトの名無しさん
16/05/26 12:50:39.24 2tD7owQ3.net
後は将棋にオレオレ要素を付けたしまくったジャパニーズテレビゲーム的な将棋なら話は別だね
仕様が未確定だから無限に規模が大きくなる可能性がある
OOPを採用するメリットは大きい
763:デフォルトの名無しさん
16/05/26 12:54:10.09 Xc1/bPBx.net
オブジェクト指向じゃない場合の設計は?
繰り返すと「クラスを使わない」と「設計いらない」は違うから。
>>515
ロジックをどんなモジュールに分割して盤面や手の情報をどう持たせるかは興味ある。
オブジェクトを使わない場合でもちゃんと設計していれば機能単位が明確になっているはずだから見せて欲しい。
>>745
盤面オブジェクトというものがあるかって話。
764:デフォルトの名無しさん
16/05/26 13:05:46.65 GCo9DDJM.net
>>751
なんで将棋にそこまでこだわるのか分からないけど
設計はほぼ評価関数のアルゴリズムでそしてそれはここで設計するものでもない
設計の例として不適でしょって事
例としてはコレクション、VFSとかゲームとか色々あるのに
なんで将棋なんだ
765:デフォルトの名無しさん
16/05/26 13:07:08.63 GCo9DDJM.net
後 webアプリとかでもいいし
766:デフォルトの名無しさん
16/05/26 13:09:24.57 Xc1/bPBx.net
オセロとかVFSとかの設計案を作ってここに貼り付けてもらうのは歓迎だ。
興味ある人は会話してもらっていいし。
俺も「オセロ」がいい」とか「VFSがいい」ってだけじゃご自由にどうぞとしか思わないけど
実際の設計案とかが出てくれば意見交換したい。
767:デフォルトの名無しさん
16/05/26 13:16:43.54 UN7L7nZy.net
OOP設計について語りたいなら「あっち向いてホイ」で良いと思う。
「じゃんけん」だけだと単純だと思って
768:デフォルトの名無しさん
16/05/26 13:22:24.03 FhkcWQBY.net
OOPで表すとこんな感じか?
それぞれのモジュールの内部実装は、専門の担当者が頭をひねって、責務を全うするよう頑張れば良い
『状態』
盤面、持ち駒▲△、時計、を表現
内部状態の変化時にイベントを投げる
『プレイヤー』
ゲーム中に▲△の2インスタンス
それぞれ独立したプロセスで動く
『状態』を監視する
『状態』のmoveとresignを呼んで良い
責務ではないが、ゲームの勝利を目指す
『審判』
独立したプロセスで動く
『状態』を監視する
状態変化を元に、反則/適正や勝敗/続行を判定し、必要なら終局処理する
『記録係』
独立したプロセスで動く
『状態』お監視する
DBなりファイルなり、好きなように棋譜や時間を書き込む
769:デフォルトの名無しさん
16/05/26 14:24:38.83 bwhpCAq0.net
将棋を指すプログラムを作成しろってお題と、将棋というゲームをモデル化しろってお題を一緒くたにしてないか。
前者は「次の一手を決めるアルゴリズム」が主眼で、その他のコードはアルゴリズムの実装を邪魔してはいけない。
肝心の中身を議論しないまま設計しろって話なら、「盤面を如何にコンパクトに表現するか」くらいしか設計できない。
POJOでも無い限り、メソッドやらvtableやらの保持にスペース使うんだから駒オブジェクトなんて論外だってすぐ分かる。
だから将棋の例は不適。
後者は実務じゃなくてお遊びの話、「自動車をJavaで表してみよう」というレベルなんだから、>>1の求める議論にならない。
だから将棋の例は不適。
同様の話でオセロも不適。
770:デフォルトの名無しさん
16/05/26 15:01:47.14 Xc1/bPBx.net
>>756
考慮時間の消費とかは業務系だと見落としそうな点だね。
状態、プレイヤー、審判、記録係やらがクラスなのか属性なのか抽象的なのか
分からないんだけど、クラスとのマッピングをでき�
771:黷ホ頼む。 ゲームの設計だと当たり前なのかもしれんけど疎いもんで。
772:デフォルトの名無しさん
16/05/26 15:11:16.14 Xc1/bPBx.net
>>756
思考部の設計についてはもう少し具体化して考えたい。
①合法手生成
盤上の駒のリストから
駒が動けるマスを洗い出す。
②動かした局面を点数化
盤上の駒の価値とか配置によって局面を点数化する。
評価の内部ロジックはブラックボックスにするしかないけど、盤面情報をもとに
なんらかの基準で点数化して点数を返すという入出力情報のやり取りは設計の範囲とする。
③自分の手、相手の手と読みを進める。
手と盤面が増えるなり変更するなりして進むのをどのように保持するかも設計の範囲とする。
④読む手の選択
すべての手を同じ深さまで読むんじゃなくて、良さそうな手を選んで深く読んで
最終的に指す手を選んでいるらしい。
既に読んだ手の点数とかを元に候補手を絞る処理。
内部ロジックが分からないとはっきりしないところは出てくると思うけど、
駒、ルール、盤面、手の関連性をどのように保持するかがイメージできるレベルまではやりたい。
773:デフォルトの名無しさん
16/05/26 15:12:45.82 Xc1/bPBx.net
③と④の内部実装もブラックボックスだな。
入力、出力はある程度想定できるのでそこは設計する。
774:デフォルトの名無しさん
16/05/26 17:51:52.03 VUxKytQY.net
イベントソーシングの実装方法を教えてください
775:デフォルトの名無しさん
16/05/26 19:52:32.19 y/d2Tqn1.net
>>685
は完璧だろ?
776:デフォルトの名無しさん
16/05/26 23:01:03.81 Xc1/bPBx.net
過去の棋譜情報のDBを設計してみた。
URLリンク(drive.google.com)
Moveは実際に指された手。
Boardはそのときの局面。初形も格納する想定。
Komaは駒の配置。
手ごとの局面を格納しないでも再現できるんだけど、棋譜の分析とかするときは
局面データも格納しておいたほうがよさそうだから格納してみた。
Bonanzaは過去の棋譜の局面を見て、駒同士の位置関係の点数を設定したとどこかで聞いたから
なんとなく意識してみた。
777:デフォルトの名無しさん
16/05/26 23:16:46.39 OguWhub7.net
>>763
そのツールもうちょっとでかい図
というかでかいフォントにならんもんかね
ブラウザーでズームしてもズームしてくれんし
778:デフォルトの名無しさん
16/05/26 23:21:56.50 Xc1/bPBx.net
>>764
俺も初めて使ったから分からんなあ。
手間だけどダウンロードしてちょ。
779:デフォルトの名無しさん
16/05/26 23:26:45.04 Xc1/bPBx.net
と思ったらダウンロードできないのか?
画像の大きさを大きくできるのかなあ。
780:デフォルトの名無しさん
16/05/26 23:28:48.84 HSSLi9RU.net
将棋ってぶっ殺すフィールド構築合戦だからな
ぶっ殺すフィールドの形が似てたら大体思考ルーチンも似たようなもん
ただ、飛車と角が絡むとこの前提が覆るムズイので考えない
ぶっ殺すフィールド
金の移動範囲に歩置くじゃん、したらその歩をとったら
金に取られるからふには手を出せない
金を殺さないと歩は取れない
金の範囲に銀置いて銀の範囲に馬置いて馬の範囲に飛車置いて
これがぶっ殺すフィールド
この範囲に相手の王を誘いこんだら勝ち
ってのが将棋aiの基本知識
781:デフォルトの名無しさん
16/05/26 23:30:05.02 Xc1/bPBx.net
画像に出力できた。
URLリンク(drive.google.com)
どうだろ?
782:デフォルトの名無しさん
16/05/27 00:13:38.01 3vZSRhu5.net
何でオブジェクト指向のスレなのにDBの設計したいと思ったの?
783:デフォルトの名無しさん
16/05/27 00:17:00.75 miERtZSj.net
オブジェクト指向の設計というか将棋を業務系システム風に設計してみたら
っていうifになってる
784:デフォルトの名無しさん
16/05/27 00:19:22.93 /D1WPrTe.net
>>769
>>703近辺
785:デフォルトの名無しさん
16/05/27 00:20:44.77 /D1WPrTe.net
>>770
>>634
786:デフォルトの名無しさん
16/05/27 00:42:25.57 miERtZSj.net
>>772
>>757
787:デフォルトの名無しさん
16/05/27 00:51:50.14 /D1WPrTe.net
>>773
また同じ奴か…。
>>754
話したい話題とか例があるなら歓迎だから自由にやって。
788:デフォルトの名無しさん
16/05/27 00:57:05.93 miERtZSj.net
>>773
「また」って誰の事を指してるか知らんが
>>757じゃないぞ
789:デフォルトの名無しさん
16/05/27 03:16:41.27 o12ObYVU.net
>>760
ブラックボックスって誰に対して?
>>763
なぜ棋譜って言う標準フォーマットがあるのにそれを崩すんだ?
棋譜データベースが世にあるんだからそれをそのまま使えないのはありえない
790:デフォルトの名無しさん
16/05/27 06:17:55.52 /J9GvUBV.net
>>776
局面があれば、もちろん棋譜は生成できるけど
棋譜だけじゃ、局面を自由に行き来(ランダムアクセス)できないからだろ?
791:デフォルトの名無しさん
16/05/27 11:40:24.39 o12ObYVU.net
ER図なんだからDBに保存する情報は棋譜だけでしょって話
そこから局面をメモリ上に展開すればいいでしょ
792:デフォルトの名無しさん
16/05/27 12:15:00.09 kDtxcipC.net
理研の税金無駄使い、954万円高級家具カッシーナ・イクスシーの指定購入も大問題 : 千日ブログ ~雑学とニュース~
URLリンク(1000nichi.blog73.fc2.com)
税金の無駄遣い?STAP細胞関連経費1億4500万円 小保方晴子氏の検証実験参加は不要だったで書いた理研の税金の無駄使い。
実は小保方晴子さんらのSTAP細胞関連だけでなく、別の問題にも触れられていました。扱いが小さかったんですけど、こちらもすごく問題だと思います。
(中略)
●本来なら大問題である税金の無駄遣い
この高級家具の件は、小保方晴子さんが買ったのでは?と、STAP細胞疑惑のときにいっしょに話題になったものです。しかし、すぐに東大教授になった別の方のところで購入したものだと、断定されていました。
違っていたら困りますし、名前を出しちゃうとあれかな?と思うので書きませんが、「カッシーナ・イクスシー 東大教授」あたりで検索すると簡単に出ます。もうあだ名が「カッシーナ」という感じになっていました。
「計288個の穴があること」など、実質的に特定のブランド以外を排除した購入など認められるはずがないものであり、本来なら非常に問題です。これは小保方さん問題以上に返金を求めやすくないですかね?
マスコミはこっちの問題ももっと追求すべきだと思います。
793:デフォルトの名無しさん
16/05/27 12:23:58.24 IdMbq2Qb.net
そろそろ将棋ソフト開発スレにforkしたら?
ここはOOP全般の議論をするスレだよ
794:デフォルトの名無しさん
16/05/27 12:25:03.87 /D1WPrTe.net
>>776
>ブラックボックスって誰に対して?
局面の点数化、深く読むべき手の選択を行うクラスないしモジュールの
内部実装を設計する必要はないって意味。
>>777
>>778
そうだよね。
795:デフォルトの名無しさん
16/05/27 12:35:36.26 /D1WPrTe.net
>>778
あれ、>>778は>>776と同じ人か。
テキストファイルはプログラムにとって操作しやすいものじゃないから。
例えば、5手まで進んだ局面で、過去にまったく同じ進行だった棋譜を抽出する
って処理をどう実装するにはどうする?
棋譜のデータも大量にあるからメモリも意識した設計にする必要がある。
796:デフォルトの名無しさん
16/05/27 12:55:12.02 /D1WPrTe.net
>>780
OOPについての議論を開始してくれよ。
ただ、話をするきっかけがなかったときのスレの状態は>>490だったからさあ。
797:デフォルトの名無しさん
16/05/27 16:07:05.35 QLoNZNQy.net
>>782
?
なぜテキストを操作する話になってるの?
棋譜の情報をtsv形式とかで事前にbulk insertしとくんじゃないの?
ER図の話だったよね?
798:デフォルトの名無しさん
16/05/27 16:23:50.72 mSvZp4nB.net
実は、皆プログラミングのレベルがたいしたことない件
799:デフォルトの名無しさん
16/05/27 18:23:43.80 /D1WPrTe.net
>>784
>>776が言い出したことだが…。
>>776なら想定している構成をまず提示してくれ。
>>776じゃないなら俺に聞かれても分からない。
800:デフォルトの名無しさん
16/05/27 18:32:09.95 /D1WPrTe.net
>>785
天才プログラマのお前だったらどう構築するのか教えてくれるかな。
DBを知らないからDBが複雑だと思い込んでるだけの素人の違いを見せて欲しいなあ~。
801:デフォルトの名無しさん
16/05/27 19:38:50.01 pLLsnEId.net
意味がわからない
802:デフォルトの名無しさん
16/05/27 20:35:36.67 A2TIou2n.net
棋譜データが何なのかご存じない?
803:デフォルトの名無しさん
16/05/27 20:54:42.73 /D1WPrTe.net
>>789
ご存じない?
じゃねえよw
804:デフォルトの名無しさん
16/05/27 20:57:31.88 X8GqPxic.net
なにこいつ
805:デフォルトの名無しさん
16/05/27 21:08:24.02 YEqMRFcI.net
とっくにご存知なんだろ?
806:デフォルトの名無しさん
16/05/27 21:29:12.31 JwxL0I3t.net
スーパーコーダー人
807:デフォルトの名無しさん
16/05/27 23:55:27.14 go2H7GGI.net
設計を教えてくれと言ってるやつが
リーダーやるようなプロジェクトはこんなもんだろ
808:デフォルトの名無しさん
16/05/28 06:04:52.94 DfweNo3j.net
>>786
>>>784
>>>776が言い出したことだが…。
>>>776なら想定している構成をまず提示してくれ。
>>>776じゃないなら俺に聞かれても分からない。
結局バカなんだな
将棋なんてやめでTODO管理アプリでも作ったらいいんじゃね
809:デフォルトの名無しさん
16/05/28 10:01:09.70 lKk9NsIN.net
オブジェクト指向ってのは、将棋や囲碁などのAI機能を駆使した、最先端のソフトを開発しやすくする面もあるかもしれない。
でも、そういうアルゴリズムを重視する世界においては、オブジェクト指向なんてドーデもいいレベルの話ではないかと思う。
オブジェクト指向は、「既存のパーツとか、フレームワークの利用をいかに楽にするか?」つまりは、DRY(Don't repeat yourself)を推進する目的が第一ではないかと思う。
継承機能などを使って、「ロジックなどの開発が楽になる」というよりも、「フレームワークとか○○を使えば、自分では、それを考えなくても、作らなくてもいい」ってほうが望ましいスタイルではないかと思う。
そして、それを推進する手法としては、たぶんオブジェクト指向も必要だけど、それだけでは、無理ってことだと思っている。
MITの先生が、「プログラミングは、新規開発の時代じゃあない。既存のものをいかに素早く組み合わせるかを教えたい」と言っているらしいけど、その方向性は、間違ってないという気がする。
810:デフォルトの名無しさん
16/05/28 10:09:21.59 O5lAFAJB.net
前に出てた勤怠管理やTODO管理のテーブル設計を議論したほうが有益だろうな
プロジェクトのほとんどはそこで決まるし
811:デフォルトの名無しさん
16/05/28 11:38:35.56 qmjd/mej.net
>>796
長文書くならもう少し推敲しろよ
小学生の読書感想文みたいだぞ
812:デフォルトの名無しさん
16/05/28 12:59:02.84 A5TNreIh.net
Foo : IFoo
Bar : IBar
Baz : IBaz
Foo()
Bar(IFoo)
Baz(IFoo , IBar)
上のようなクラスとコントラクターがあります
IFooはFooにIBarはBarにIBazはBazに解決されます
何も考えずにコンストラクタインジェクションツールを使うとBarに渡されるFooのインスタンスとBazに渡されるFooは別のインスタンスになります
同一のFooインスタンスを使ってBazをインスタンス化したい場合、一般的にはどういった手法を使うのでしょうか?
Fooをシングルトンにする方法とBazの精製方法をコードで明示
813:的に記述する方法は要件上使えません 使用しているツールはUnityContainerですができればより一般的な手法を知りたいです
814:デフォルトの名無しさん
16/05/28 13:59:25.89 fP0wQpWJ.net
BarzかBazrを作る
インスタンスっていうんだから
紙に書いて実体を書けないとおかしい
強引にFooの実体を書こうとするとそれってBarzかBazrじゃね?ってなった
815:デフォルトの名無しさん
16/05/28 17:33:38.76 R1JSthfd.net
将棋にオブジェクト指向設計を適用できないって主張してるバカは恥ずかしいから
いい加減やめたほうがいいぞw
コンポーネント、モジュールの設計を提示しろって言ってんのに何も提示しないし。
今夜か明日にコンポーネントをUMLで記述したものをアップする予定だから今のうちに考えておけよ。
>>652並みに恥ずかしい書き込みをしてることにいい加減気付けよwwww
バカどもの反応が今から楽しみ!
816:デフォルトの名無しさん
16/05/28 17:38:29.41 R1JSthfd.net
>>797
お前が始めりゃいいじゃん。
「○○のほうがいい」って言いうだけで具体的な話を何も進めないから会話が成立しないんだろ。
817:デフォルトの名無しさん
16/05/28 17:45:14.88 R1JSthfd.net
>>799
BarはFooを知ってるのにBaz(IFoo , IBar) で再度Fooを渡さないといけない理由が分からない。
どういうケースなのかイメージできるように具体的にならないんだろうか?
一般的にはBaz(IBar)にすると思う。
818:デフォルトの名無しさん
16/05/28 18:24:36.48 fP0wQpWJ.net
>>802
勤怠管理を出したのは俺だけど
将棋が題材としてクソ過ぎたので出しただけ
設計書書かないでプログラム組む奴は雑魚なので
この話は発展させるつもりはない
819:デフォルトの名無しさん
16/05/28 18:48:04.70 R1JSthfd.net
>>804
将棋はクソって思うのは勝手だけど、話題は何も出さないって無能だなあ。
将棋ソフトから発展した会話をしてる人はいるんだからいちいちじゃまする必要ないだろ。
設計をやっているのに「設計書書かないプログラム組む奴は雑魚なので」って言ってるのも意味不明だし。
何度も言ってるけどオブジェクト指向設計関連で語りたい話題があるなら好きに語ればいいだけ。
他人のじゃまする暇があったらもっと生産的なことしようぜ。
820:デフォルトの名無しさん
16/05/28 19:50:56.91 hH79WOSS.net
まだやってたんかw。
素性の知らないもの同士が、成果物や開発対象、開発体制の情報開示をせずに
喧嘩腰でレスする時点でこういうオチになると思った。
821:デフォルトの名無しさん
16/05/28 20:12:20.38 dyQMlzBT.net
設計書書かないでプログラム組むっていうのと対比させるなら
設計の前にすることすっ飛ばして良い設計も糞もないってことだよな
822:デフォルトの名無しさん
16/05/28 20:47:19.10 b4Z/BPeQ.net
>>800
すみませんよくわかりませんでした
>>803
具体的にはUnitOfWorkパターンです
スマホなのでタイピングを端折ってしまったのですが本当はクラスは4つ(業務ではもっと多い)あります
DBセッション/トランザクション管理 DB : IDB
Aリポジトリ RA : IRA
Bリポジトリ RB : IRB
UnitOfWork U : IU
コンストラクタはそれぞれ
U(IRA , IRB)
RA(IDB)
RB(IDB)
DB()
こうなってます
ここでRAとRBは同じトランザクションで処理したいので同じDBインスタンスを注入したくなります
823:デフォルトの名無しさん
16/05/28 21:15:12.20 fP0wQpWJ.net
>>808
クソ設計じゃね?
IDBゴミ箱に捨てちゃったらどうなるの?
824:デフォルトの名無しさん
16/05/28 22:55:45.34 vuHucEnZ.net
IDBを捨てられたRAとRBは挙動不審になる感じ?
IDBの生存期間が永久だったらどうでもいいんじゃね?
でも、いつでも死ぬぜRAとRBとは別のところでひっそりと息をひきとりましたとさ
ってなるような構造なら参照保持やめろって思うわ
825:デフォルトの名無しさん
16/05/28 23:07:57.42 iUyRPTRl.net
>>810
各インスタンスの寿命はUと同期させたいです
826:デフォルトの名無しさん
16/05/28 23:17:24.57 lKk9NsIN.net
複数DBのトランザクション処理って、分散トランザクションってことですね。
この方面から検討することが必要では?
827:デフォルトの名無しさん
16/05/28 23:24:47.99 z5GhiIYg.net
やっぱ具体的かつ現実的な質問があると捗るな
828:デフォルトの名無しさん
16/05/28 23:41:45.93 vuHucEnZ.net
なんでコンストラクタで渡すん?
IDB太死んだら残されたRA子とRB子はどうしたらいいん?
829:デフォルトの名無しさん
16/05/29 01:00:47.21 f/sZpflr.net
UnitOfWorkパターンやリポジトリ、厳密に適用されたオブジェクト指向がどんなものかわかってなくて申し訳ないんだけど・・・
今通じるかわからなくて申し訳ないけど、少し前のJavaのSpring+Hibernateのように
メタデータ利用して、フレームワークにトランザクション管理任せたらあかんの?
830:デフォルトの名無しさん
16/05/29 08:15:01.43 2I7bmxM6.net
うまい例えになるかどうかわからないけど、オブジェクト指向を、お風呂場のいろんなパーツ、蛇口、浴槽、シャワー、ライトなどの構成パーツとしたら、JavaのSpring+Hibernateは、それらが組み合わせられたメーカー品のユニットバスってことではないかと思う。
パーツからユニットバスを完成させるには、それなりの設計が必要になるけど、それらが組み込み済みのユニットバスなら不要。
既製品が気に入らず、オリジナルのユニットバスが欲しい人は、パーツをうまく組み合わせる設計の知識と能力が要求される。
それが「各インスタンスの寿命はUと同期させたいです」なんて要望実現の部分に相当する。
そこは、オブジェクト指向とは別の知識・技術も必要。
それが無理な人は、JavaのSpring+Hibernate、あるいは同等品を探すほうが楽できるってことかな。
831:デフォルトの名無しさん
16/05/29 09:57:03.09 f/sZpflr.net
なるほど、確かに既製品で間に合うならそうするよな
その要件が他に出てこないシステムの特異点なら、コメントにしっかり残した上で、規約ぶっちぎって実現できる方法で実現すれば良いと思う
832:デフォルトの名無しさん
16/05/29 12:14:52.10 1ogDAOAr.net
つまりDobon.netコピペが最強
こういうことだな
833:デフォルトの名無しさん
16/05/29 13:18:42.71 Cf71caC3.net
将棋ソフトを構成するコンポーネントを整理した。
URLリンク(drive.google.com)
KifuAnalyzerは過去の棋譜を分析して、駒の価値や駒の配置を点数化するためのパラメータを生成する。
MoveGeneratorは局面からルール上指すことが可能なすべての手を生成する。
MovePickerは合法手から深く読むべき手を選択する。
Evaluatorは局面を評価して点数化する。
MovePickerはEvaluatorが生成する点数を考慮するだろうし、
何手か先まで読むのにMoveGenerator→MovePicker→Evaluatorの処理をループするんだろうけど
その辺りの整理は不十分かもしれない。
改善の余地はあると思うので、知見がある人の意見を聞きたい。
834:デフォルトの名無しさん
16/05/29 13:20:31.00 uH1/jPAH.net
>>819
オブジェクト指向ではなくて手続き型の設計になってるなw
835:デフォルトの名無しさん
16/05/29 13:21:59.15 1ogDAOAr.net
オブジェクト指向なんてゴミ
みんなわかったね
836:デフォルトの名無しさん
16/05/29 13:22:24.27 Cf71caC3.net
>>820
もっとオブジェクト指向な設計とは具体的には?
837:デフォルトの名無しさん
16/05/29 13:23:04.73 Cf71caC3.net
ちなみにクラス設計はこれからだから。
838:デフォルトの名無しさん
16/05/29 13:25:54.19 Cf71caC3.net
>>821
手続き型だとコンポーネント構成はどう設計するのかいい加減提示してくれよ。
提示してくれるなら比較できて参考になるから見たい。
提示できるならね。
839:デフォルトの名無しさん
16/05/29 13:30:29.53 1ogDAOAr.net
普通に上から下に流れる処理なのにオブジェクト単位に表現される悪夢
840:デフォルトの名無しさん
16/05/29 13:31:05.98 GCrD5Cq5.net
煽り耐性0やな
いちいち反応するなってw
841:デフォルトの名無しさん
16/05/29 13:41:23.22 Cf71caC3.net
>>826
???
もっとオブジェクト指向な設計も手続き型の設計も見てみたいが。
口だけで何もない奴が書き込んでいると決め付けるのは良くない。
842:デフォルトの名無しさん
16/05/29 14:07:17.65 uH1/jPAH.net
>>822
> もっとオブジェクト指向な設計とは具体的には?
オブジェクト(データ)をメインに考えること
843:デフォルトの名無しさん
16/05/29 14:09:35.72 GCrD5Cq5.net
棋譜データはどこから持ってくるの?
最近、日本将棋連盟は棋譜の著作権を主張してるようだけど
その辺はどうクリアするの?
844:デフォルトの名無しさん
16/05/29 14:10:21.15 ks+EActS.net
OOPはむしろデータの実体を切り離せるところがメリットなのでは
845:デフォルトの名無しさん
16/05/29 14:13:34.46 1ogDAOAr.net
>>830
オブジェクト指向じゃなくね?
846:デフォルトの名無しさん
16/05/29 14:16:05.87 2I7bmxM6.net
>>819
たぶん、オブジェクト指向の前に、手続き型プログラミング、構造化プログラミング的な考え方によって大雑把にプログラムの全体構造を把握する設計ステップが入るのだと思う。
それが、この段階。
この段階から、しばらくは構造化プログラミングで設計とコーディングを進めてもいいし、オブジェクト指向をちょっと意識して進めてもいいのだと思う。
で、実際にコードを記述して、ちょくちょくテスト(=詳細設計)を進めていると、「これはオブジェクト指向の例題にあったような、あのパターンを使うとよさげかも?」なんてのに気づく。
そこで、今まで記述したコードを捨てて新規に作り直したり、あるいは作りかけのソースを修正する、もしくは、どっかから使えそうなフレームワークをコピペして活用するって流れになるのでは?
そうしたとき、最初からオブジェクト指向を意識して作っていたほうが(経験上)修正量が少なくなる気がするし、そのとき、オブジェクト指向のメリットを実感することになるんだろうね。
また、オブジェクト指向でプログラムを作ろうとも、多くの場合、上から下に流れるような構成になると思う。
847:デフォルトの名無しさん
16/05/29 14:21:04.75 ks+EActS.net
>>831
カプセル化すれば内部状態の物理的な実装は自由になる
OOPの基本理念の1つ
848:デフォルトの名無しさん
16/05/29 14:46:06.53 uH1/jPAH.net
>>819が手続き型になってるというのは、
その図の四角が処理になっていて、図全体が情報の流れを
表しているからだよ。
オブジェクトっていうのは役目を四角にするので
情報の流れとは無関係。
849:デフォルトの名無しさん
16/05/29 14:58:27.22 Cf71caC3.net
>>828
具体的に。
850:デフォルトの名無しさん
16/05/29 15:02:50.83 Cf71caC3.net
>>832
だいたいの方向性は同意なんだけど
>この段階から、しばらくは構造化プログラミングで設計とコーディングを進めてもいい
は違和感があるなあ。
コーディングに行くのは方針が決まってからじゃないか?
構造化プログラミングでコーディングまで始まってるのにそこからブジェクト指向プログラムに切り替えるのは
工数がだいぶ無駄になるような。
その辺はどう考えているんだろ?
851:デフォルトの名無しさん
16/05/29 15:08:30.13 uH1/jPAH.net
>>835
図の罫線に矢印を付けた時、
それが継承ではなくて情報の流れだなって
思ったらアウト。
852:デフォルトの名無しさん
16/05/29 15:08:35.66 Cf71caC3.net
>>834
抽象的な言葉としては分かるんだが具体的にどうしたいのか分からないなあ。
www.dataio.comで図を書けるからできれば書いて欲しい。
無理ならコンポーネントとインタフェースだけでも列挙してもらえればだいたい分かるかと。
853:デフォルトの名無しさん
16/05/29 15:14:36.29 uH1/jPAH.net
>>838
まず最初は全部一つにまとめろ。
その後に「何のために分離するのか」を書きながら
分離するといい。
分離する理由がないならば、それは分離しなくていい
854:デフォルトの名無しさん
16/05/29 15:33:37.25 2I7bmxM6.net
>>836
>この段階から、しばらくは構造化プログラミングで設計とコーディングを進めてもいい
は違和感があるなあ。
コーディングに行くのは方針が決まってからじゃないか?
まあ、あのレベルの設計で、コーディングの方針が決まればいいけど、初めて作るたぐいのプログラムって、どう作ればいいか、よく分からないことが私の場合は、ちょくちょくある。
だから、イメージとしては、作りたいものの漠然としたイメージはあるけど、またはっきりしない状態で、材料となる粘土の塊をいじって、できた粘土の形を見て、そこから先を考えるって感じでプログラミングやっている。
たとえば、足だけ作ってみるとか、バストだけ作って、それを見て、次に作る部分を決めるみたいな・・・。
本来は、全体の方針を決めてからコーディングってのが正しいと思う。
でも、方針がなかなか決まらないときは、手を動かして、なにかしら動くものを作ると、「今日の成果はこれ!」って感じで気分が良くなる。
で、残りを頑張ろうって気力が沸いてくる。そして、オブジェクト指向で作っていると、各パーツの再利用が容易になる。
まあ、すべての人にこの方式を薦めるわけではない。
855:デフォルトの名無しさん
16/05/29 16:00:47.90 uH1/jPAH.net
>>819でおかしい所の一つはMoveGeneratorとかいうコンポーネントがある所
(MovePickerは存在自体が意味不明)
なぜならば、移動できる場所は複数存在するが、思考ロジックによって
その移動できる場所を解析する順番が違うからだ。
前提条件として、総当りでやると時間が足りない。
だから駒一つ一つすべての移動できる場所を解析するわけじゃない。
解析しない場所(後回しにする場所)などが存在する。
だから、思考ロジック自身が動く場所を知っているし、
解析する順番(評価関数で評価する順番)も知っている。
そして解析する順番というのは、過去の棋譜データから決まる(こともある)
ディープラーニングなんかはそれ。
だからそれらを分離した所で、それらのコンポーネントを再利用することは出来ない。
もっとも過去の棋譜データを解析する処理は「思考」とは別のタイミング(対局前)に
行うことだから思考ロジックと分離するのは当たり前
(もちろん思考時には計算結果のみを利用し対局中に過去の棋譜データを解析するわけじゃない)
856:デフォルトの名無しさん
16/05/29 16:35:38.18 vZz5+wdA.net
結局、将棋の思考ロジックのような、時間もメモリも切り詰めなきゃダメなようなものに
オブジェクト指向を持ち出すのが誤りってことだな
前々から言われていたことだが、不適切な題材だな
やったとしても、「思考ロジック」っていう巨大な一つのクラスがほとんどのことを受け持つ
いわゆるGodクラスになってしまうだろう
それが一番早く動くなら、将棋にとってはそれが正義
しかも将棋のルールはほぼ固定されていると考えてよいから
変に柔軟性を与えて仕様変更に強くする意味もないしな
パラメーターで対応すれば十分
動画のエンコーダーとかといっしょで、規格ものなんだよ
規格が決まっていて、速さや効率が求めらえるなら
ハードコーディングも辞さない
857:デフォルトの名無しさん
16/05/29 16:38:53.32 uH1/jPAH.net
こういう実時間が足りないタイプのアルゴリズムは
データ構造まで工夫する必要があるからね。
いちいちメソッド呼んでデータを取ってきたりしない。
取ってくるにしても駒の動きなんて変わらないんだから
最初に一括して読み込めばいいしそれはファイルから読み込めばいい。
(その後内部で工夫されたデータ構造にして、あとは内部で完結させる)
858:デフォルトの名無しさん
16/05/29 16:58:54.31 hqWpcQ8C.net
vtable使うなんてもったいない世界だよなぁ