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使うなんてもったいない世界だよなぁ
859:デフォルトの名無しさん
16/05/29 17:18:08.73 nD7S98HF.net
工数気にするならボナンザ使えば?
品質も良いと思うよ
860:デフォルトの名無しさん
16/05/29 17:48:41.04 Cf71caC3.net
>>840
>あのレベルの設計で、コーディングの方針が決まればいいけど
これについてはまだ設計の途中だからさ。現段階では決まってないけど設計が終わる頃には明確になってる。
まあ、設計段階ですべての問題を洗い出すことが難しいのは同意する。
861:デフォルトの名無しさん
16/05/29 17:54:21.52 Cf71caC3.net
>>841
MoveGeneratorとMovePickerの役割はちゃんと説明してあるんだが…。
あと、どういう設計を想定しているのか分からない。
言ってる内容がエンドユーザの要件みたいで、設計者の設計じゃないように感じる。
考えてることを明確にするために設計者はモデリングを利用する訳で、設計者同士の会話は
モデリングあるいはコンポーネント・クラスなどを明確にして記述して欲しい。
862:デフォルトの名無しさん
16/05/29 17:59:16.14 Cf71caC3.net
>>842
何度も繰り返してるけど、時間もメモリも切り詰めた設計はどうなるか提示してくれ。
863:デフォルトの名無しさん
16/05/29 18:00:53.32 Cf71caC3.net
>>845
将棋ソフトを作る気はないから。
864:デフォルトの名無しさん
16/05/29 18:09:36.48 uH1/jPAH.net
>>847
> MoveGeneratorとMovePickerの役割はちゃんと説明してあるんだが…。
だからそれが意味不明だって。
お前のは、単に分けているだけで
分ける理由が存在していない。
865:デフォルトの名無しさん
16/05/29 18:10:53.57 uH1/jPAH.net
>>848
> 何度も繰り返してるけど、時間もメモリも切り詰めた設計はどうなるか提示してくれ。
[ 思考ロジック ]
866:デフォルトの名無しさん
16/05/29 18:16:58.80 uH1/jPAH.net
思考ロジック以外の部分まで書いていいなら
これでもいいがw
[ 思考ロジック ] - [将棋UI]
もう少し細かく言うのなら将棋の駒の配置は、
思考ロジックでも使うが将棋UIでも使う共通情報だから
という理由で分離して
[ 思考ロジック ] - [ 駒の配置データ ] - [将棋UI]
思考ロジックは、駒の配置データを参照して、駒の配置データを書き換えるという役目。
将棋UIは駒の配置データを参照して、それをUIとしてレンダリングする
将棋UI は更にその内部で、将棋盤オブジェクトや駒オブジェクトとして
2Dや3Dでレンダリングされるが、これは完全にUIの話で思考ロジックとは切り離すべき話だよねw
オブジェクト指向で設計するならばこれぐらいの話だな。
867:デフォルトの名無しさん
16/05/29 18:21:29.72 uH1/jPAH.net
時間もメモリも切り詰めた設計っていうのもちょっと質問の意図が不明で
時間を切り詰めた実装でも、メモリを切り詰めた実装でも、
一台のマシンを使う実装でも、多数のマシンを使う実装でも
「どんな実装にも変更可能な設計」というのなら、これは設計なわけで正しい。
つまり
× 時間もメモリも切り詰めた設計
○ 時間もメモリも切り詰めた実装
時間やメモリを切り詰め ”られる" のは、それが可能なように設計で考慮するべきことだが
時間やメモリを切り詰め "る" のは設計で決めることじゃない。
868:デフォルトの名無しさん
16/05/29 18:27:50.97 hqWpcQ8C.net
>>848
>何度も繰り返してるけど、時間もメモリも切り詰めた設計はどうなるか提示してくれ。
何度も言われてる気はするがほぼ思考ロジックの話になるからオブジェクト指向でやる意味なくね
具体的にどのアルゴリズムを選ぶか?
それが「時間もメモリも切り詰めた設計」となる
振る舞いと実装の分離とかしないわけよ
>>852が言ってるようにオブジェクト指向でやる意味あるUIくらいだよ
869:デフォルトの名無しさん
16/05/29 19:05:09.06 Cf71caC3.net
>>850
正しいと思う設計を具体的に示してくれ。
面倒くさくなってきたから明示できないならもういいよ…。
870:デフォルトの名無しさん
16/05/29 19:06:07.22 uH1/jPAH.net
>>855
[ 思考ロジック ]
書いてあるよね?
なんで見えてないの?
871:デフォルトの名無しさん
16/05/29 19:07:21.11 uH1/jPAH.net
[ 思考ロジック ]
↑ 思考ロジックの正しい設計
[ 思考ロジック ] - [ 駒の配置データ ] - [将棋UI]
↑ UIまで含めた、将棋ソフトの正しい設計
872:デフォルトの名無しさん
16/05/29 19:08:04.03 Cf71caC3.net
>>85
で、設計は?って聞かれると>>652とか答えちゃう訳?w
873:デフォルトの名無しさん
16/05/29 19:10:04.28 Cf71caC3.net
>>857
おっけ、おっけ。
設計に対する前提がかけ離れ過ぎてるから話しても無意味だと分かった。
874:デフォルトの名無しさん
16/05/29 19:12:52.55 uH1/jPAH.net
>>652はコード(実装)書けって書いてあるから
実装書いてあるだけだろw
875:デフォルトの名無しさん
16/05/29 19:13:21.23 uH1/jPAH.net
>>859
結局、設計の話してもこうやって無視するわけだ?
逃げるな卑怯者
876:デフォルトの名無しさん
16/05/29 19:20:13.35 Cf71caC3.net
>>861
率直に言うと、レベルが低過ぎてお話にならないと判断した。
将棋ソフトを設計しろって言われて
[ 思考ロジック ] - [ 駒の配置データ ] - [将棋UI]
だけ書いて完成したと思うのは>>652並みのお粗末さだぞ…。
思考部分のコンポーネント図が間違っているというなら訂正したコンポーネント図を書けよ。
[ 思考ロジック ] - [ 駒の配置データ ] - [将棋UI] って何じゃそりゃ?
877:デフォルトの名無しさん
16/05/29 19:22:38.20 uH1/jPAH.net
>>862
お粗末ってなんだ?
設計というのはシンプルにするものだ。
たくさん書けばいいってわけじゃねーぞw
878:デフォルトの名無しさん
16/05/29 19:23:38.63 uH1/jPAH.net
だいたい、間違っていると思うならば、
お前こそ、間違ってる理由を言えよ。
お前が考えるさいきょうのせっけい(笑)の紹介じゃなくて、
何が間違っているのかを言えって。
879:デフォルトの名無しさん
16/05/29 19:25:48.76 uH1/jPAH.net
思考部分のコンポーネント図が間違っているというなら訂正したコンポーネント図を書けよ。
[ 思考ロジック ]
↑ 思考ロジックの正しい設計
何度も言ってる
880:デフォルトの名無しさん
16/05/29 19:31:51.54 nCNZLCDh.net
ID:Cf71caC3
もうほとんどあらしだな
881:デフォルトの名無しさん
16/05/29 19:45:13.81 hqWpcQ8C.net
>>862
レベルが低い以前に話聞いてないじゃん
将棋の思考ロジックの設計なんかはもうアルゴリズムの設計とほぼ同じ
計算機科学の分野でしょ
882:デフォルトの名無しさん
16/05/29 20:19:13.03 vZz5+wdA.net
ざっくりいうとさ、将棋の盤のデータは
char ban[9][9];
こんなんで十分なわけでしょ
これに相手と自分の持ち駒の配列を付け加えて
あと少々何かあればそれで充分な世界
人によってはcharですらデカすぎるというかもしれない
この時点でオブジェクト指向らしさは全然ないよね
どちらかといえば画像処理とかに近いデータ構造
将来将棋が仕様変更して、いきなり金の振る舞いが変わるとか
そういうことはあり得ないから、駒をオブジェクトにするとか意味不明なことはする必要ないし
オブジェクト指向でよく言うような、仕様変更に強くするとか
継承とオーバーライドで差分プログラミングとか、全く関係ないよね
だって、将棋のルール(仕様)は決まっているわけだからさ、仕様変更とか考えなくてよい
むしろ実行時間や効率が問われているのだから
意味のない柔軟性を持たせる分のオーバーヘッドがもったいないし、必要もない
883:デフォルトの名無しさん
16/05/29 20:30:30.60 Cf71caC3.net
>>868
モジュール構成は?
相互の関係は?
コンポーネント図を見ればどういう領域を整理しようとしているかくらい分かるだろ?
884:デフォルトの名無しさん
16/05/29 20:32:05.69 Cf71caC3.net
あと>>608もな。
885:デフォルトの名無しさん
16/05/29 20:42:21.72 f/sZpflr.net
察して欲しかったら察してもらえるように言葉考えて伝えなよ。
業務プログラマなんだろ?
886:デフォルトの名無しさん
16/05/29 20:44:29.81 uH1/jPAH.net
[ 思考ロジック ]
↑ 思考ロジックの正しい設計
[ 思考ロジック ] - [ 駒の配置データ ] - [将棋UI]
↑ UIまで含めた、将棋ソフトの正しい設計
> コンポーネント図を見ればどういう領域を整理しようとしているかくらい分かるだろ?
これみて、どういう領域を整理しよとしているかわからないの?w
887:デフォルトの名無しさん
16/05/29 20:59:39.40 1omdCt5G.net
外とのインタフェースだけきめて内部はTDDすれば勝手に決まっていく派
最初から全部決めようなんて無理無理
888:デフォルトの名無しさん
16/05/29 21:03:08.22 1mIQzqS0.net
AIモジュールはハードウェアも絡むからOOPはない
将棋ソフト全体をOOPで作ったとしてもAIモジュールとはだいぶ隔たりがあるよ
ユーザーの入力した結果から低レベルな盤面データを生成して丸ごと渡すだけとかそんなレベル
889:デフォルトの名無しさん
16/05/29 21:13:37.84 vZz5+wdA.net
いやだからさ、将棋ってのはルールが決まっているんだよ
歴史のあるゲームであって、いきなりルールが変わって金の動きが変わるとか
そういったことは今の時点では全く考慮する必要がないわけだよ
で、オブジェクト指向のメリットは、大体において仕様変更に強くすることなんだよ
仕様変更が全くないのであれば、どんな方法でどんな汚い書き方をしたって
プログラマだってプロなんだから、書き上げることはできるんだよ
ただ、突然の仕様変更は怖いよねって話で、そのためにオブジェクト指向にコストを掛けているわけじゃないですか
その点、将棋はルールが決まっていて、仕様変更など気にする必要ないし
むしろ実行速度が強さに直結していて、一手でも先を読んだ方が有利なわけだから
仮想関数なんかを使うオーバーヘッドがもったいないし
その二つの面からオブジェクト指向である必要性が薄い題材
仮にオブジェクト指向で作ったとしても、仕様変更がないことが分かっているわけだから
オブジェクト指向設計の腕の見せ所が全くないし、題材として不適切なんだよ
将来にわたって必要の無いであろう拡張性や柔軟性を持たせても、無駄が多いと言われるだけ
将棋のAIのアルゴリズムには大変興味深いものがあるとおもうが
オブジェクト指向としては見るべき点が「全く」ない
890:デフォルトの名無しさん
16/05/29 21:32:59.51 vZz5+wdA.net
つまりは、将棋AIをオブジェクト指向で作るにあたって、どんなに不味い設計をしたとしても
仕様変更が発生しない題材なわけだから、オブジェクト指向的に良いも悪いもなく、動けばOKだよねっていう話になる
どんなに不味いオブジェクト指向の設計であっても、仕様変更さえなければ大体は問題にならない
当初の予定通り動く
ついでに、将棋AIである以上は強くなくてはならない
この強くなければならないという案件は、通常ではない
業務システムが他のシステムと喧嘩して勝っただの負けただの言わない
普通は仕様変更に強いように、拡張性があるように、プログラムを設計するし
オブジェクト指向の設計の良し悪しもそこに集約されるわけだが
将棋AIは強さが求められているわけで、オブジェクト指向設計でいうところの
良し悪しとは違ったものが求められている
しかも仕様変更がない、とくればハードコーディングも止む無しだろう
891:デフォルトの名無しさん
16/05/29 21:36:48.37 JprInoKj.net
暗黙のうちに拡張将棋が題材になってるんでしょうね
ワープ駒とか二回倒さないと死なないとか
範囲攻撃とか装備とかアイテムとか擬人化とかイケメン武将とかキャラアドオンとかガチャとか課金とか
マルチプラットフォーム対応もするしサービスとして長くメンテナンスし拡張を加えていく前提
当然AIもそれに対応しなければならないからゲームやアプリは良くモデル化されていなければならない
892:デフォルトの名無しさん
16/05/29 21:38:49.46 uH1/jPAH.net
>>877
で、そんなことを言い出すと。
YAGNIだってとどめを刺すわけだw
だからそうする目的を聞いている。目的がないのにわざわざ分割するのは、
必要だからやるのではなく、設計(?)をすること自体が目的になっている。
893:デフォルトの名無しさん
16/05/29 21:47:24.89 Cf71caC3.net
>>877
現実のプロジェクトなら設計者が設計書に記述するであろう内容についての前提が違うんだと思う。
「将棋ソフトを設計してくれ」って客に言われたら、オブジェクト指向だろうが、他の設計手法だろうが
構成を記述しないってことはあり得ないからさあ。
そこを分からない人に説明してもしょうがないことは分かったから流すようにする。
毎日IDが変わるから新しい人かもと思って対応していたけど、どうも同じ人みたいだし、
対応してもスレが汚れるだけだからスルーすべきだったと反省。
894:デフォルトの名無しさん
16/05/29 21:50:11.02 uH1/jPAH.net
> 構成を記述しないってことはあり得ないからさあ。
構成は記述されてありますが?
そもそも将棋ソフトを設計してくれって言われたら
思考ロジック部分だけを設計しませんよwww
[ 思考ロジック ] - [ 駒の配置データ ] - [将棋UI]
こんな感じで設計します。
当然、思考ロジック部分は一つです。
シンプルイズベスト。理由がなければ分割しない。
895:デフォルトの名無しさん
16/05/29 21:52:08.59 uH1/jPAH.net
「将棋ソフトを設計してくれ」って客に言われたら、
どんな仕様か詳しく聞きますね。
その上で必要なら、それを満たすように設計しますが、
あんたのように何も言ってないのに過剰な分割なんかしませんよwww
896:デフォルトの名無しさん
16/05/29 21:53:29.31 1omdCt5G.net
客の定義による
ただ将棋ソフトで遊びたい人にとって内部設計なんてなんの意味もない
外部の人間が自分たちのソース引き継いでメンテするのが前提ってこと?
897:デフォルトの名無しさん
16/05/29 22:04:37.03 qPPHNZFg.net
898:ogg vorbis形式のファイルを自前でデコードして再生するソフトを「設計」しろとか、 円周率を出すソフトを「設計」しろとか、 そういう類の無意味な題材だってことが理解できているのか心配になる。 動物とか自動車とかモデル化するだけの人なのかもしれんが。
899:デフォルトの名無しさん
16/05/29 22:05:37.63 uH1/jPAH.net
>>882
何を言ってるんだ?
たとえばネット対戦をしたいって言えば
それが出来るような設計にするだろ?
客の要求を聞いた上で、それを実現できるように設計する。
客がネット対戦をしたいって言ってもいないのに
あらかじめ先手(笑)を打ってネット対戦機能をつけましたとか
それは過剰な設計であり無駄なコストを発生させたに過ぎない。
だからいきなり設計すんなって言ってるんだよ。
客の要望を聞いて、必要であるという理由があれば
それが可能なように設計すればいい。
だから、そうした理由を聞いてるのに、明確な理由もなくて、
そうするのがいいと思いましたーでやってるから馬鹿にされてるんだよ。
900:デフォルトの名無しさん
16/05/29 22:06:35.28 1ogDAOAr.net
別に思考ルーチンも学習機能なんて要件に上がってないしね
ここで話せるのはここまでじゃん
だから題材が悪いって俺が最初に言ったじゃん
基本的にオブジェクト指向ってz80で作れるものに威力を発揮しないんだよ
将棋ソフトなんて作ったこともないのに題材に選んだ奴責任とって腹切れ
どうせ設計に必要な項目も他人に説明できないしできなかっただろ
それは将棋ソフトの全容が他人に聞くまでもなく
みんなある程度わかっちゃってるからなのさ
901:デフォルトの名無しさん
16/05/29 22:07:18.13 +DJ914Ec.net
>>883
できるだけ抽象的に作ればいいと思ってる抽象馬鹿だと思われ。
902:デフォルトの名無しさん
16/05/29 22:09:35.02 uH1/jPAH.net
>>883
ogg vorbis形式のファイルというのは、正確には音声ファイルフォーマットで
Oggがコンテナ、Vorbisがコーデックという設計で、
元々内部の役割が分割されてるからちょっと違うけどねw
903:デフォルトの名無しさん
16/05/29 22:11:26.67 uH1/jPAH.net
>>885
> 将棋ソフトなんて作ったこともないのに題材に選んだ奴責任とって腹切れ
↓こいつかな?w
346 名前:デフォルトの名無しさん[] 投稿日:2016/05/22(日) 16:27:04.89 ID:sxeEi6BC [38/89]
ちょうど今電王戦見てるから将棋ソフトで考えてみるとさ。
駒クラスがあって王・飛車とかは駒のサブクラスにしようかって感じだろ。
盤面情報と思考ロジックはどんな感じのクラスにするのがいいだろう?
354 返信:デフォルトの名無しさん[] 投稿日:2016/05/22(日) 16:44:19.40 ID:sxeEi6BC [43/89]
>>351
具体例があったほうが分かりやすいから将棋ソフトの例で考えてみてよ。
904:デフォルトの名無しさん
16/05/29 22:14:11.15 auBo7N3K.net
スーパーエヴァンジェリストの僕がこのスレの混乱の原因を教えてあげよう
ここには顧客ロールの担当者がいないのさ
905:デフォルトの名無しさん
16/05/29 22:17:37.23 1ogDAOAr.net
要件定義が曖昧なのに求めてる設計書のレベルが見合わないんだよね
はじめの話で思考ルーチンが
ディープラーニング当然でしょみたいな話になんて絶対ならないわけで
906:デフォルトの名無しさん
16/05/29 22:19:59.67 +DJ914Ec.net
んでは OS の設計でもしてみるかい?
Linux あたりと比較できるしいいんじゃないの?
よりよいオブジェクト指向で設計してもらいたいですな。
907:デフォルトの名無しさん
16/05/29 22:24:35.04 hqWpcQ8C.net
>要件定義が曖昧
これ 「将棋ソフト」を設計しろだと
いきなり実装の話に入らざるを得ない
908:デフォルトの名無しさん
16/05/29 22:26:13.01 uH1/jPAH.net
>>890
> 要件定義が曖昧なのに求めてる設計書のレベルが見合わないんだよね
それもあるけど「何のためにそうしているか?」が存在しないんだよ。
いえばいいだけなのに、言わない。
そうするのが当然だって思い込んでる。
909:デフォルトの名無しさん
16/05/29 22:27:58.83 uH1/jPAH.net
>>892
お題だから、いきなり実装の話に入ってもいいんだけどさ、
それならそれで、どういう「要件を想定した」っていうのを
明確に言わないといけない。
それを言わずに、なんかわけのわからん分割の仕方をしてるから
突っ込み入れられまくってるわけ。
910:デフォルトの名無しさん
16/05/29 22:33:44.93 RrRCCmyQ.net
スレタイに沿ったオブジェクト指向の設計なら
将棋の駒はクラスで正解
しかし設計のきれいさではなく
処理速度を求めるなら構造化で書く
前提が違うのにみな上から目線で書きこむから
ただ混乱するだけ
やっぱ2ちゃんは雑談はともかく
ちゃんとした議論に向かないな
911:デフォルトの名無しさん
16/05/29 22:35:40.39 1ogDAOAr.net
要件定義がグチャグチャだとダメだね
得に将棋ソフトなんて疑問が無いもん
勝手に作っちゃうでしょ
そこは要件を出した方も悪いし聞かないまま進めちゃう方も悪いし
912:デフォルトの名無しさん
16/05/29 22:36:26.79 uH1/jPAH.net
> 将棋の駒はクラスで正解
それはゲームとかで駒を
2Dや3Dでレンダリングする時の話だよw
思考ロジックの中でクラスにする理由はない
charなりintなりの二次元配列に
defineで定義した定数を入れれば十分
913:デフォルトの名無しさん
16/05/29 22:40:50.33 RrRCCmyQ.net
>>897
処理速度を考慮しない前提で言うと
それはオブジェクト指向じゃなくて
構造化の考えから抜け出せてない
914:デフォルトの名無しさん
16/05/29 22:45:42.31 1ogDAOAr.net
ところで将棋ソフトにオブジェクト指向を適用するとダメだね
駒なんかクラスにされたらどう作ってもクソになっちまう
915:デフォルトの名無しさん
16/05/29 22:47:10.49 1ogDAOAr.net
でもオブジェクト指向的に将棋の駒をクラスにするのは間違ってないと思うな
つまりオブジェクト指向ってもしかして(笑)
916:デフォルトの名無しさん
16/05/29 22:49:05.67 uH1/jPAH.net
>>898
それで理由は?
917:デフォルトの名無しさん
16/05/29 22:51:44.59 uH1/jPAH.net
>>900
> でもオブジェクト指向的に将棋の駒をクラスにするのは間違ってないと思うな
> つまりオブジェクト指向ってもしかして(笑)
最後まで書きなよw
つまりオブジェクト指向ってもしかして、(思考ロジックの)将棋の駒を
クラスにすることには役に立たない。
だろ?
だから俺は最初から何のためにそれをクラスにするのかと聞いてるわけ。
する理由がある、つまり適切な場所をオブジェクト指向にして、
こんな関数レベルの思考ロジックをわざわざ無意味に分割するんじゃないって言ってるんソア。
918:デフォルトの名無しさん
16/05/29 22:52:01.50 +DJ914Ec.net
>>898
抜け出す必要がない場面で無理に抜け出そうとする事がそもそもおかしい。
オブジェクト指向は万能ではない、処理フローがほとんど決まってるものに対しては不向き。
919:デフォルトの名無しさん
16/05/29 22:54:48.91 vZz5+wdA.net
構造体どころかintかcharの配列で良いって話
charでも何か勿体ないという人もいるかもしれない
画像なら、画像全体が何らかのオブジェクトでラップしてあるならわかるが
画像の1ピクセル1ピクセルを全てオブジェクトにする人はいない
こんなものはデータで十分
構造体的発想を抜け出せないというのも意味不明
データで十分なものをオブジェクトにする方が
何も理解していないと言いたい
920:デフォルトの名無しさん
16/05/29 22:58:31.03 1ogDAOAr.net
>>902
でもさ
全員の共通認識を一致しやすいって手法だろ?
でもこの方法は将棋ソフトに関してははっきり言ってクソ
どう作ってもクソにしかならない
オブジェクト指向ってダメなのかもしれんね
921:デフォルトの名無しさん
16/05/29 22:59:10.96 1omdCt5G.net
オブジェクト指向は万能じゃないよ
922:デフォルトの名無しさん
16/05/29 23:01:49.14 vlcsE4Oa.net
>>904
うんうん。将棋のコマって
王将・玉将
金将
銀将 → 成銀
桂馬 → 成桂
香車 → 成香
飛車 → 竜王
角行 → 竜馬
歩兵 → と金
うまい具合に15種類なんだよねぇ。
4bitでじゅーぶんですよね。空白含めても。
923:デフォルトの名無しさん
16/05/29 23:02:20.91 Cf71caC3.net
実力を示したいなら
「設計は>>652」
「設計は思考ロジック!」
とか言ってないで、設計を提示すりゃいいじゃん。
設計書を書いたことなくて、書き方知らないんだからおとなしくしてりゃいいのに。
あと、要件についは十分説明したから読み直せ。
参加者はあれで読み取ってるんだから読み取れない自分が問題だといい加減気付けよ。
924:デフォルトの名無しさん
16/05/29 23:06:00.21 RrRCCmyQ.net
>>901
仕様の変更や追加に強くなるから
>>903
ある程度の規模になると必要がある
>>904
>構造体的発想
構造化ね
そりゃ速度が重要ならOOにはしないが
逆に複雑なもので多少のオーバヘッドを
犠牲にできるならOOの方が楽に組める
925:デフォルトの名無しさん
16/05/29 23:08:23.54 hqWpcQ8C.net
>>908
実力を示すってのが意味不明だけど
アルゴリズムの設計をすればいいのか?
>MoveGenerator→MovePicker→Evaluator
こんなの設計しても将棋には意味ないぞ
926:デフォルトの名無しさん
16/05/29 23:10:51.26 Cf71caC3.net
簡単な部分だけをみて簡単だって言ってる奴が多いけど
ソフト全体の構成がどうなるかを聞いている。
手が進むと局面が増えるのはどうやって管理する?
手と局面の関連付けは?
手の分岐もおそらく管理する必要がある。
手の生成、局面の評価、手の選択の機能の連携は?
マルチスレッド対応もある。
などなど含めた全体の設計はどうなるんだろう?って話だ。
927:デフォルトの名無しさん
16/05/29 23:14:39.98 Cf71caC3.net
「構造化で十分」って言うなら構造化による構成を提示して欲しいよな。
設計手法って問題を整理して、考えを明示して関係者と共有することが大きな目的であって
構造化だろうが、オブジェクト指向だろうが基本は一緒。
機能的な固まりをきれいに整理して、疎結合を実現するというのはどの手法でも目的になっているし。
928:デフォルトの名無しさん
16/05/29 23:14:43.33 1ogDAOAr.net
>>911
あーまず要件を定義してからな
929:デフォルトの名無しさん
16/05/29 23:14:44.37 hqWpcQ8C.net
>仕様の変更や追加に強くなるから
空気を読まずに言うと データ型(クラス)がどういうインターフェースを実装するのかってのを
データ型の定義時に決めなきゃいけない静的型付けのOOPより
データ型が実装しているインターフェースを後つけで拡張できる型クラスのほうが仕様の変更や追加に強いのではなかろうか
つまり手続き型でオブジェクト指向で関数型なRust最強という事だ
930:デフォルトの名無しさん
16/05/29 23:17:54.53 1omdCt5G.net
mixinか
931:デフォルトの名無しさん
16/05/29 23:17:56.58 RrRCCmyQ.net
まあ将棋のルールは固定されてるから
やはり処理速度がどうとか抜きにすれば
OOより関数型が向いてるかもしれないね
932:デフォルトの名無しさん
16/05/29 23:18:07.91 Cf71caC3.net
>>914
言語的にそれを許されたからって楽になるものじゃない。
変更する前には設計して、変更して、テストしてってやるのはどんな言語でも一緒。
変更を楽にするのは正しい設計。
933:デフォルトの名無しさん
16/05/29 23:20:12.27 1omdCt5G.net
今回どんな変更があるのかが要件に入ってないんだよね
934:デフォルトの名無しさん
16/05/29 23:20:17.48 hqWpcQ8C.net
>>911
簡単だと思わないしむしろ難しいと思うが
しかし
>手が進むと局面が増えるのはどうやって管理する?
>手と局面の関連付けは?
>手の分岐もおそらく管理する必要がある。
>手の生成、局面の評価、手の選択の機能の連携は?
>マルチスレッド対応もある。
これももうアルゴリズムのお話でoopプログラミングの手法で解決するものではなないでしょう
935:デフォルトの名無しさん
16/05/29 23:23:30.65 hqWpcQ8C.net
追記
将棋みたいに計算機をガリガリ使う計算って
並列化にはcpuよりGPGPUを使うものだと思うんだけど
そうするとますますオブジェクト指向の付け入る隙はなくなるなぁ
936:デフォルトの名無しさん
16/05/29 23:27:16.56 hqWpcQ8C.net
ググってみるとクラスタリングか
PC1台に限定する意味ないから当たり前だった
937:デフォルトの名無しさん
16/05/29 23:29:06.15 1omdCt5G.net
規模の話がでてたけど
別な視点で考えるとプログラマが10人いたとして
全員が一つのソースファイルを同時にプログラムすることはできないから
どのように分割するか、という話になるのだろうか
938:デフォルトの名無しさん
16/05/29 23:29:20.83 RrRCCmyQ.net
計算速度と戦うタイプのソフトを作るのにOOは向いてない
ターン制のRPGやカードゲームみたいなのの方が向いてる
ゲームルールがすごい複雑でしかも仕様変更されうるもの
939:デフォルトの名無しさん
16/05/29 23:32:07.51 E1aQWpks.net
将棋ダメ
オセロだめ
トランプだめ
テトリスだめ
シューティングゲームもだめ
PRGも作れません
シミュレーションも無理です
OS?無理ですね
ドライバ?向いてません
ミドルウェア?処理速度がー
Web系?用途が違うんで
組み込み?ありえないでしょ
940:デフォルトの名無しさん
16/05/29 23:36:17.35 1omdCt5G.net
Web系なんてほぼ全部MVCやん
941:デフォルトの名無しさん
16/05/29 23:38:45.16 RrRCCmyQ.net
いやRPGやシミュレーションは作れるでしょ
なぜ作れないと思い込んでいるのか?
942:デフォルトの名無しさん
16/05/30 00:09:08.89 8pkfhQuv.net
例にするRPGのルールを誰が決めるんだ?
非現実的なので却下。
943:デフォルトの名無しさん
16/05/30 00:09:39.22 Fopy0H2h.net
>>926
ゲームは向いてない
944:デフォルトの名無しさん
16/05/30 00:25:30.42 j9NktVXe.net
3Dゲームで使われてるUnrealエンジンのAPIとかもろオブジェクト指向前提だが
945:デフォルトの名無しさん
16/05/30 00:25:41.59 MwTEJuIp.net
ゲームは向いてないってのは、確かにそうかもしれない
特にアクションゲームは普通のアプリと比較しても
オブジェクト同士の相互作用がとても多いし、プレイヤーもそれを求めてプレーしている以上
ゲームの面白さに直結しているので減らすわけにはいかない
これをまともにオブジェクト指向の流儀にのっとって設計すると
メッセージの投げ合いだらけになって、だれがどこで何をしているのかわからなくなって
バギーになる可能性がある
ところがオブジェクト指向が便利な場面もあるから、そのサジ加減が難しい題材という意味では
非常に良いかもしれないが、将棋以上に荒れるのは必須
荒れない範囲で書くなら、大きく分けて
・描画エンジン
・サウンドエンジン
・物理エンジン
・入力処理
・ロジック処理
ここまでは問題ないだろうが、ここから先の細かいことを言い出すと荒れる
描画エンジンとサウンドエンジンと物理エンジンと入力処理に関しては、わりと決まりきったことを機械的にするだけなので
問題ないだろうが、ロジック処理はかなり個性が出るというか荒れる
946:デフォルトの名無しさん
16/05/30 00:30:09.97 AVs/GCxh.net
夢は語るが
現実を逃避する
オブジェクト指向?
947:デフォルトの名無しさん
16/05/30 00:34:19.68 j9NktVXe.net
でもゲームエンジンなんて根底は
ダブルディスパッチというかVisitorパターンでしょ
948:デフォルトの名無しさん
16/05/30 00:37:55.36 ND1XxSGp.net
>>928
むしろゲームにこそ向いている
949:デフォルトの名無しさん
16/05/30 00:57:53.90 RhU6P4T4.net
規模というより粒度の問題。
荒い粒度でならオブジェクト指向するのは当然だろうけれど、細かい粒度でも同じ事やったら
明らかにオーバヘッドで性能がでない。
で、「粒度による」ってのが人それぞれというか経験的なものでしかないので
共有が難しいってこと。
950:デフォルトの名無しさん
16/05/30 02:24:41.28 ewV/OC7O.net
>>905
> どう作ってもクソにしかならない
> オブジェクト指向ってダメなのかもしれんね
そういう結論に持っていこうとする
意図があからさま過ぎたが、正体ばらしたかw
951:デフォルトの名無しさん
16/05/30 02:25:30.03 ewV/OC7O.net
>>909
> 仕様の変更や追加に強くなるから
どういった理由で?
特定の場合にしか当てはまらない設計をすることは
仕様の変更や追加に弱くなる。
952:デフォルトの名無しさん
16/05/30 02:30:01.13 ewV/OC7O.net
例の奴の設計がクソだっていうのは、
役割の分担じゃなくて、
処理の分担になっているって所。
こいつは恐らく検索処理はどんなものであっても
検索処理コンポーネントにまとめるに違いない。
953:デフォルトの名無しさん
16/05/30 03:08:47.31 MwTEJuIp.net
俺的には処理の分担で良いと思うがな
もっと言えば機能の分担で良いと思う
954:デフォルトの名無しさん
16/05/30 03:12:13.65 ewV/OC7O.net
それでいいよ。オブジェクト指向的に言えば
一つのクラスの中で処理(メソッド)を2つに分ける。
どうせ思考ロジックなんてデータ構造も必要な処理も
そのロジックに最適化された形で決まるんだから、
それらは「思考ロジック」という役割にまとめるしかない。
955:デフォルトの名無しさん
16/05/30 03:14:00.77 ewV/OC7O.net
ちょっと訂正
それでいいよ。オブジェクト指向的に言えば
一つのクラスの中で処理(メソッド)を 幾つかに分ける。
別に2つに限定する必要はなかったねw
956:デフォルトの名無しさん
16/05/30 03:14:49.89 MwTEJuIp.net
いやだから、思考ロジックという機能にまとめればよいのでは?
957:デフォルトの名無しさん
16/05/30 03:19:59.83 ewV/OC7O.net
>>941
だから最初からそう言っている。
オブジェクト指向的に~とかいう話をしてるから、
一つのクラスにするって話になるってだけ。
思考ロジック部分をインターフェースだけ決めて
そのインターフェースを実装する形にすれば
思考ロジックを切り替えやすくなるからね。
と言っても「思考ロジックを切り替えられるようにする」という
要件は明確には出てない。これはこっちのギリギリの譲歩で
無理やりオブジェクト指向の枠内に入れただけ。
ゲームでは難易度調整で思考ロジックの切り替えは当然あるだろうし、
強いAIを作るための研究であっても、別々の思考ロジック同士を
戦わせるってことはあるだろうしさ。
958:デフォルトの名無しさん
16/05/30 08:11:02.74 ekC4cwoE.net
荒れるので要件の定義をせずに設計するの禁止
959:デフォルトの名無しさん
16/05/30 10:28:51.98 rIAW5ZZo.net
>>819
これは流石にお粗末だと思うし、設計が未熟な新人ならもう少し謙虚になるべきだと思う
960:デフォルトの名無しさん
16/05/30 11:47:28.04 8pkfhQuv.net
>>939
OCPに違反した劣悪な設計
961:デフォルトの名無しさん
16/05/30 11:58:04.55 PEEN5NGh.net
OCPって広く長くリリースされてる有名ライブラリなら意味あるのかも知れないけど
規模も小さくプログラマの質も低いそこらのプロジェクトじゃ意味無いよな
きっちり動くのだけ残すべきだし、継承なんて安易にするもんじゃない
962:デフォルトの名無しさん
16/05/30 12:04:11.10 8pkfhQuv.net
将棋ソフトにはオブジェクト指向が向かいない厨はAperyがオブジェクトを使っていることを知ったら
小便漏らして泣き出しちゃうの?
963:デフォルトの名無しさん
16/05/30 12:32:24.29 ND1XxSGp.net
>>927
これはよく分からん
スレで例にする話なら
ドラクエとか既存のRPGでいんじゃね
964:デフォルトの名無しさん
16/05/30 12:59:01.99 g392/VKX.net
向かないのは、将棋ソフトじゃなく思考ロジックな
すきあらば話をすり替えようとしてるの、
バレバレだw
965:デフォルトの名無しさん
16/05/30 13:17:27.81 8pkfhQuv.net
>>949
間違いを明確に指摘されても分からない突き抜けたバカ
Aperyを確認したら
966:デフォルトの名無しさん
16/05/30 14:31:40.52 23kor2oM.net
>>947 aperyのソース読んでねえなお前。
aperyのソースのうち、classは18個ある。ちなみにenumは22個。
classのうち継承を使っているのは4個で、親は全て標準ライブラリからのもの。
このうちメソッドを追加し
967:ただけのものが3個。 virtualを使っているクラスはThreadのみで、実装も1つだけ。 メンバ変数として他のクラスを保持しているクラスはMovePickerのPositionのみ。 Positionクラスも含めその他の全ては構造体+メソッド。他のクラスも同様。 aperyはC++をbetter Cとして使っている。オブジェクト指向で設計したものではない。 具体的にはテンプレート、演算子のオーバーロード、クラスの使い方も構造体に付随する関数をまとめるというもの。 オブジェクト間の相互作用も無いしクラスの階層構造を使ったコードの再利用も外側のごく一部だけ。 ますます例として不適切だと分かるわな。
968:デフォルトの名無しさん
16/05/30 14:44:44.86 eYr/WPsF.net
apery読んでも手続きだなぁとしか思えん
969:デフォルトの名無しさん
16/05/30 14:57:17.60 eYr/WPsF.net
URLリンク(github.com)
ここらへんなんてオブジェクト指向としてみたら糞だよね
enumをswitchで判定してreturnで値を返すってのは
パターンマッチって感じでむしろ関数型プログラミングに近い
970:デフォルトの名無しさん
16/05/30 15:26:25.89 W9xaEvpV.net
いるよね。
switchをオブジェクトにしたがるやつ。
971:デフォルトの名無しさん
16/05/30 15:28:07.91 3FEoI+9e.net
classを使えばOOP!
ん~学生さんは気楽でいいなぁ~
972:デフォルトの名無しさん
16/05/30 15:30:09.07 ekC4cwoE.net
ああ邪魔だな
switchで書かれていれば一覧になっていて一目瞭然なのにワザとか馬鹿なのか知らないけど
抽象化されてて全部で何種類処理が分かれてるのか分からないの
973:デフォルトの名無しさん
16/05/30 15:39:10.62 ILfmqIwk.net
このスレ面白いなw
次スレたつのかね
974:デフォルトの名無しさん
16/05/30 15:49:54.27 cLUfCSU4.net
何種類あるか意識する必要があるなら負け
975:デフォルトの名無しさん
16/05/30 16:48:44.47 ekC4cwoE.net
>>958
どうやってテストしたのか言ってごらんよ
976:デフォルトの名無しさん
16/05/30 17:36:35.20 8pkfhQuv.net
クラスは1つ、分けるのはおかしい!そもそもクラスじゃない!オブジェクト指向で設計するのは不可能!
ってバカな主張はさすがにやめたんだw
977:デフォルトの名無しさん
16/05/30 17:40:07.46 8pkfhQuv.net
>>951
オブジェクト指向で設計するのは無理って言ってた奴がオブジェクト指向のあるべき設計を語っちゃうって頭おかしんじゃね
978:デフォルトの名無しさん
16/05/30 17:51:47.74 eYr/WPsF.net
「オブジェクト指向とは何か」から認識合わせしなきゃならない感じ?
後 評価関数や定跡はバイナリで配布されてるからそこらへんがなんともいえない
979:デフォルトの名無しさん
16/05/30 17:54:05.34 eYr/WPsF.net
>>961
>オブジェクト指向で設計するのは無理って言ってた奴がオブジェクト指向のあるべき設計
aperyはオブジェクト指向で書かれてないのでオブジェクト指向で設計したものではないって事ではないの?
980:デフォルトの名無しさん
16/05/30 18:02:17.22 8pkfhQuv.net
>>963
モジュールにもクラスにも分ける必要はない、1つにまとめるのが最高の構成!!!
だとさ
981:デフォルトの名無しさん
16/05/30 18:13:18.75 ixAozmxi.net
apery見ろって言った自分のレスが的外れと分かって発狂したのか
まるでアホの子供だな
982:デフォルトの名無しさん
16/05/30 18:25:45.94 cZLZyxJT.net
で、結局OOPは必要なんだろう?
983:デフォルトの名無しさん
16/05/30 19:25:11.10 +7J42eKt.net
結局要件次第だから要件をキッチリ決めよう
でもこのスレじゃ先走るバカがいるから決められない
だから将棋ソフト開発スレを立ててじっくりやろうってところに落ち着いた感じかな
984:デフォルトの名無しさん
16/05/30 19:27:28.87 8pkfhQuv.net
>>967
要件が分からないバカ
985:デフォルトの名無しさん
16/05/30 19:35:00.08 +7J42eKt.net
>>968
お?aperyのソースは読み終わった?宿題だからはやくやっとけよ
986:デフォルトの名無しさん
16/05/30 19:38:36.35 8pkfhQuv.net
>>969
電王戦の参加者はニコニコが書いた要件を理解して参加してるのにいまだに理解できない奴w
987:デフォルトの名無しさん
16/05/30 19:39:44.40 eYr/WPsF.net
>>964
うーん会話がいまいち通じない
988:デフォルトの名無しさん
16/05/30 19:49:06.41 eYr/WPsF.net
>電王戦の参加者
電王戦の参加者は機械学習や計算機科学についての知識がある人達だけど
ここのスレにいる人たちは必ずしもそうじゃない
989:デフォルトの名無しさん
16/05/30 19:50:50.18 ND1XxSGp.net
さすがにAperyが
2ちゃんのレベルで
クラス1個とかやらないよな
990:デフォルトの名無しさん
16/05/30 19:52:15.30 8pkfhQuv.net
>>972
理解力のなさが異常
ニコニコのルール・条件のどこが機械学習や計算機科学特有だと思ったのか?
991:デフォルトの名無しさん
16/05/30 19:58:45.90 eYr/WPsF.net
>>974
人間に勝てる将棋AIを作るってのは普通に機械学習の知識がないと無理だと思うんだけど
992:デフォルトの名無しさん
16/05/30 20:00:14.80 8pkfhQuv.net
>>975
コイツは理解力が異常なまでに欠如しているせいでいろいろ勘違いしてそう
993:デフォルトの名無しさん
16/05/30 20:03:26.56 eYr/WPsF.net
>>976
将棋AIを作るんじゃなかった?
994:デフォルトの名無しさん
16/05/30 20:07:26.50 8pkfhQuv.net
>>977
やっぱりw
995:デフォルトの名無しさん
16/05/30 20:09:51.65 eYr/WPsF.net
>思考部分がメイン
っていうのは共通認識だと思ってたんだけどな
996:デフォルトの名無しさん
16/05/30 20:12:45.47 8pkfhQuv.net
>>979
要件を理解してるのに「結局要件次第だから要件をキッチリ決めよう」ってしつこく言ってたならバカ
電王戦の参加者は理解した要件を理解できないなら理解力の欠如
997:デフォルトの名無しさん
16/05/30 20:38:00.16 eYr/WPsF.net
>>980
つまり将棋AIを作るって事では?
998:デフォルトの名無しさん
16/05/30 20:50:04.74 ILfmqIwk.net
暗黙的に「まともにプレイするに足る強さ」の思考ルーチン考える
→ID:8pkfhQuv
どういう思考ルーチンにするか明示されてないから決めよう
→ID:eYr/WPsF
なのかな?
999:デフォルトの名無しさん
16/05/30 20:51:12.69 ILfmqIwk.net
バカCPUでいいならそれこそ合法手からランダムで選ぶのでもいいってことになるからねえ
1000:デフォルトの名無しさん
16/05/30 21:07:47.33 j9NktVXe.net
要件ってこれ?
(必須機能)
第5条 参加ソフトは、次の各号に掲げる機能を持たなければならない。
一 任意の局面・手番・残り時間からの将棋の対局の開始と継続。
二 任意の時点での対局中断。
三 対局中の現在局面の表示。テキストでも良い。
四 第 19 条の規定による、1 手毎の消費時間の計測、及び累計消費時間の画面への表示。
五 1 手毎の指し手と消費時間の記録。対局中断時も、そこまでのすべての指し手と消費時間を取り出せなければならない。 六 CSA サーバプロトコル ver.1.1.3 に基づく、LAN による対局。
七 相手の指し手の手入力による対局。
1001:デフォルトの名無しさん
16/05/30 21:08:43.43 j9NktVXe.net
(推奨機能)
第6条 参加ソフトは、次の各号に掲げる機能を持つことが推奨される。ただし、機能を持たないことによって不利になることはない。
一 千日手の検出。
二 LAN による通信で送受信した文字列の必要に応じた表示。
三 任意の局面・手番・残り時間からの LAN による通信での将棋の対局の開始と継続。
URLリンク(denou.jp)
1002:デフォルトの名無しさん
16/05/30 21:12:10.48 ILfmqIwk.net
ID:j9NktVXe
有能
1003:デフォルトの名無しさん
16/05/30 21:17:26.56 eYr/WPsF.net
>>982
いや俺は要件をきっちり決めようとは言ってないよ
機械学習とかAIについての知がない人達で将棋AIの設計なんて無理でしょって思ってるだけで
>合法手からランダム
ならいいけど
1004:デフォルトの名無しさん
16/05/30 21:19:03.79 ILfmqIwk.net
>>987
勘違いごめん
回答ありがとう
理解した(つもりかもしれんけど)
1005:デフォルトの名無しさん
16/05/30 21:27:46.75 8pkfhQuv.net
>>987
だったら>>970に対するレスのつけ方がおかしい
要件が不明瞭って言ってると受け止めるのが普通
1006:デフォルトの名無しさん
16/05/30 21:51:53.77 ZWFY3jHL.net
>>985
誰が書いたか知らんが幼稚な表現が多い文章だなw
誰も校正しなかったんやろか
1007:デフォルトの名無しさん
16/05/30 22:22:43.38 Usq7Wp/A.net
>>990
甲だの乙だの書いてあるのがお好き?
1008:デフォルトの名無しさん
16/05/30 22:47:26.31 ZWFY3jHL.net
>>991
論文では使わない表現が多いやろ
というか無理してる感がにじみ出てさむいわw
きちんと書けないならもっとカジュアルに表現すれば
全体の統一感が出て少しはマシになると思うんやけどな
1009:デフォルトの名無しさん
16/05/30 22:53:57.20 ewV/OC7O.net
aperyは将棋ソフトであり、今ここで話しているのは思考ロジック部分だけの話
aperyでも思考ロジックは1クラスだろw
1010:デフォルトの名無しさん
16/05/30 22:55:20.39 8pkfhQuv.net
>>993
え?
1011:デフォルトの名無しさん
16/05/30 22:57:44.15 j9NktVXe.net
思考ロジックの話してるのは一人だけみたいだな
1012:デフォルトの名無しさん
16/05/30 22:58:42.79 ewV/OC7O.net
思考ロジックの話って最初から書いてあるけどなw
なんか、わざとらしく話をすり替えようとしている臭がするなwww
1013:デフォルトの名無しさん
16/05/30 22:59:24.96 8pkfhQuv.net
>>996
>>993をごまかすなwww
1014:デフォルトの名無しさん
16/05/30 22:59:41.16 miEVgFPq.net
思考ロジック部分なんてクラス一つで十分
1015:デフォルトの名無しさん
16/05/30 23:00:22.80 V8MlYic6.net
思考ロジック部分なんてクラス一つで十分だし、
たとえば二分探索のロジックをクラスにして
分割するとか意味不明だろw
1016:デフォルトの名無しさん
16/05/30 23:00:45.60 pXhtjcNw.net
>>997
必死すぎwwwwwwwwwwwwwwwwwwwwww
1017:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 11日 0時間 52分 58秒
1018:1002
Over 1000 Thread.net
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
──────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
──────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
URLリンク(premium.2ch.net)
URLリンク(pink-chan-store.myshopify.com)
1019:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています