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


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

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



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

756 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 12:07:55.61 ID:Xc1/bPBx.net]
>>742
具体的にどこにどうやって適用しようとしているのか明示してもらわないことにはなんとも…。
電王戦に出場している人はあの要件で理解しているんだから要件は十分明確になってるだろ。

757 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 12:17:50.31 ID:GCo9DDJM.net]
>>743
コレクションはオブジェクトだし
オブジェクト指向言語なら配列も大抵オブジェクト
と思ったがc++は配列がオブジェクトじゃないのか

758 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 12:26:17.14 ID:c+TCNzeK.net]
素人のオレが適当に書いて混乱させてやろかww
脳ミソ爆発だぜww

759 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 12:34:34.63 ID:GCo9DDJM.net]
>c++は配列がオブジェクトじゃないのか
自レス
最近だとstd::arrayがあるな

760 名前:デフォルトの名無しさん [2016/05/26(木) 12:38:37.91 ID:GCo9DDJM.net]
>>744
評価関数の中身のアルゴリズムは具体的には全くわからんからこれ以上はなんとも(パターンマッチ便利だよくらい)
指摘している人がいるが将棋はオブジェクト指向の設計練習として適してないだろ
難しいのは評価関数でオブジェクト指向の良さが生かされないし 例ならオセロでいいし
オブジェクト指向の良さが現れてるのは言語はcだけどLinuxのVFSとかだな
c++やjavaで設計しなおしてみればおもろいかも

761 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 12:45:03.84 ID:2tD7owQ3.net]
単に次の手を求めていくだけのAIならOOPは悪手
盤面データを評価するのにオブジェクトアクセスはオーバーヘッドが大きすぎる
駒オブジェクトなどもってのほか
そもそも評価するだけなら将棋のルールモデルを再現する必要もない

対戦型のゲームならViewの制御などが絡みだすからOOPを検討し始めても良い
しかし将棋モデルそのものは依然としてシンプルな構造と処理になるためOOPの恩恵は小さい
実装にオブジェクトライブラリを使ういわゆるベターC的なものになる

762 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 12:50:39.24 ID:2tD7owQ3.net]
後は将棋にオレオレ要素を付けたしまくったジャパニーズテレビゲーム的な将棋なら話は別だね
仕様が未確定だから無限に規模が大きくなる可能性がある
OOPを採用するメリットは大きい

763 名前:デフォルトの名無しさん [2016/05/26(木) 12:54:10.09 ID:Xc1/bPBx.net]
オブジェクト指向じゃない場合の設計は?
繰り返すと「クラスを使わない」と「設計いらない」は違うから。
>>515

ロジックをどんなモジュールに分割して盤面や手の情報をどう持たせるかは興味ある。
オブジェクトを使わない場合でもちゃんと設計していれば機能単位が明確になっているはずだから見せて欲しい。

>>745
盤面オブジェクトというものがあるかって話。

764 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 13:05:46.65 ID:GCo9DDJM.net]
>>751
なんで将棋にそこまでこだわるのか分からないけど
設計はほぼ評価関数のアルゴリズムでそしてそれはここで設計するものでもない
設計の例として不適でしょって事
例としてはコレクション、VFSとかゲームとか色々あるのに
なんで将棋なんだ



765 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 13:07:08.63 ID:GCo9DDJM.net]
後 webアプリとかでもいいし

766 名前:デフォルトの名無しさん [2016/05/26(木) 13:09:24.57 ID:Xc1/bPBx.net]
オセロとかVFSとかの設計案を作ってここに貼り付けてもらうのは歓迎だ。
興味ある人は会話してもらっていいし。
俺も「オセロ」がいい」とか「VFSがいい」ってだけじゃご自由にどうぞとしか思わないけど
実際の設計案とかが出てくれば意見交換したい。

767 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 13:16:43.54 ID:UN7L7nZy.net]
OOP設計について語りたいなら「あっち向いてホイ」で良いと思う。
「じゃんけん」だけだと単純だと思って

768 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 13:22:24.03 ID:FhkcWQBY.net]
OOPで表すとこんな感じか?
それぞれのモジュールの内部実装は、専門の担当者が頭をひねって、責務を全うするよう頑張れば良い

『状態』
盤面、持ち駒▲△、時計、を表現
内部状態の変化時にイベントを投げる

『プレイヤー』
ゲーム中に▲△の2インスタンス
それぞれ独立したプロセスで動く
『状態』を監視する
『状態』のmoveとresignを呼んで良い
責務ではないが、ゲームの勝利を目指す

『審判』
独立したプロセスで動く
『状態』を監視する
状態変化を元に、反則/適正や勝敗/続行を判定し、必要なら終局処理する

『記録係』
独立したプロセスで動く
『状態』お監視する
DBなりファイルなり、好きなように棋譜や時間を書き込む

769 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 14:24:38.83 ID:bwhpCAq0.net]
将棋を指すプログラムを作成しろってお題と、将棋というゲームをモデル化しろってお題を一緒くたにしてないか。

前者は「次の一手を決めるアルゴリズム」が主眼で、その他のコードはアルゴリズムの実装を邪魔してはいけない。
肝心の中身を議論しないまま設計しろって話なら、「盤面を如何にコンパクトに表現するか」くらいしか設計できない。
POJOでも無い限り、メソッドやらvtableやらの保持にスペース使うんだから駒オブジェクトなんて論外だってすぐ分かる。
だから将棋の例は不適。

後者は実務じゃなくてお遊びの話、「自動車をJavaで表してみよう」というレベルなんだから、>>1の求める議論にならない。
だから将棋の例は不適。

同様の話でオセロも不適。

770 名前:デフォルトの名無しさん [2016/05/26(木) 15:01:47.14 ID:Xc1/bPBx.net]
>>756
考慮時間の消費とかは業務系だと見落としそうな点だね。

状態、プレイヤー、審判、記録係やらがクラスなのか属性なのか抽象的なのか
分からないんだけど、クラスとのマッピングをでき

771 名前:黷ホ頼む。
ゲームの設計だと当たり前なのかもしれんけど疎いもんで。
[]
[ここ壊れてます]

772 名前:デフォルトの名無しさん [2016/05/26(木) 15:11:16.14 ID:Xc1/bPBx.net]
>>756
思考部の設計についてはもう少し具体化して考えたい。

@合法手生成
盤上の駒のリストから
駒が動けるマスを洗い出す。
A動かした局面を点数化
盤上の駒の価値とか配置によって局面を点数化する。
評価の内部ロジックはブラックボックスにするしかないけど、盤面情報をもとに
なんらかの基準で点数化して点数を返すという入出力情報のやり取りは設計の範囲とする。
B自分の手、相手の手と読みを進める。
手と盤面が増えるなり変更するなりして進むのをどのように保持するかも設計の範囲とする。
C読む手の選択
すべての手を同じ深さまで読むんじゃなくて、良さそうな手を選んで深く読んで
最終的に指す手を選んでいるらしい。
既に読んだ手の点数とかを元に候補手を絞る処理。

内部ロジックが分からないとはっきりしないところは出てくると思うけど、
駒、ルール、盤面、手の関連性をどのように保持するかがイメージできるレベルまではやりたい。

773 名前:デフォルトの名無しさん [2016/05/26(木) 15:12:45.82 ID:Xc1/bPBx.net]
BとCの内部実装もブラックボックスだな。
入力、出力はある程度想定できるのでそこは設計する。

774 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 17:51:52.03 ID:VUxKytQY.net]
イベントソーシングの実装方法を教えてください



775 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 19:52:32.19 ID:y/d2Tqn1.net]
>>685
は完璧だろ?

776 名前:デフォルトの名無しさん [2016/05/26(木) 23:01:03.81 ID:Xc1/bPBx.net]
過去の棋譜情報のDBを設計してみた。
https://drive.google.com/file/d/0B2NKffVh2tpqZ2pPcEg3VGVxYWc/view?usp=sharing

Moveは実際に指された手。
Boardはそのときの局面。初形も格納する想定。
Komaは駒の配置。

手ごとの局面を格納しないでも再現できるんだけど、棋譜の分析とかするときは
局面データも格納しておいたほうがよさそうだから格納してみた。
Bonanzaは過去の棋譜の局面を見て、駒同士の位置関係の点数を設定したとどこかで聞いたから
なんとなく意識してみた。

777 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 23:16:46.39 ID:OguWhub7.net]
>>763
そのツールもうちょっとでかい図
というかでかいフォントにならんもんかね
ブラウザーでズームしてもズームしてくれんし

778 名前:デフォルトの名無しさん [2016/05/26(木) 23:21:56.50 ID:Xc1/bPBx.net]
>>764
俺も初めて使ったから分からんなあ。
手間だけどダウンロードしてちょ。

779 名前:デフォルトの名無しさん [2016/05/26(木) 23:26:45.04 ID:Xc1/bPBx.net]
と思ったらダウンロードできないのか?
画像の大きさを大きくできるのかなあ。

780 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 23:28:48.84 ID:HSSLi9RU.net]
将棋ってぶっ殺すフィールド構築合戦だからな
ぶっ殺すフィールドの形が似てたら大体思考ルーチンも似たようなもん
ただ、飛車と角が絡むとこの前提が覆るムズイので考えない

ぶっ殺すフィールド
金の移動範囲に歩置くじゃん、したらその歩をとったら
金に取られるからふには手を出せない
金を殺さないと歩は取れない
金の範囲に銀置いて銀の範囲に馬置いて馬の範囲に飛車置いて
これがぶっ殺すフィールド
この範囲に相手の王を誘いこんだら勝ち

ってのが将棋aiの基本知識

781 名前:デフォルトの名無しさん [2016/05/26(木) 23:30:05.02 ID:Xc1/bPBx.net]
画像に出力できた。
https://drive.google.com/file/d/0B2NKffVh2tpqd0ZOQ2RQWm9fdlU/view?usp=sharing
どうだろ?

782 名前:デフォルトの名無しさん mailto:sage [2016/05/27(金) 00:13:38.01 ID:3vZSRhu5.net]
何でオブジェクト指向のスレなのにDBの設計したいと思ったの?

783 名前:デフォルトの名無しさん mailto:sage [2016/05/27(金) 00:17:00.75 ID:miERtZSj.net]
オブジェクト指向の設計というか将棋を業務系システム風に設計してみたら
っていうifになってる

784 名前:デフォルトの名無しさん mailto:sage [2016/05/27(金) 00:19:22.93 ID:/D1WPrTe.net]
>>769
>>703近辺



785 名前:デフォルトの名無しさん mailto:sage [2016/05/27(金) 00:20:44.77 ID:/D1WPrTe.net]
>>770
>>634

786 名前:デフォルトの名無しさん mailto:sage [2016/05/27(金) 00:42:25.57 ID:miERtZSj.net]
>>772
>>757

787 名前:デフォルトの名無しさん [2016/05/27(金) 00:51:50.14 ID:/D1WPrTe.net]
>>773
また同じ奴か…。
>>754
話したい話題とか例があるなら歓迎だから自由にやって。

788 名前:デフォルトの名無しさん mailto:sage [2016/05/27(金) 00:57:05.93 ID:miERtZSj.net]
>>773
「また」って誰の事を指してるか知らんが
>>757じゃないぞ

789 名前:デフォルトの名無しさん mailto:sage [2016/05/27(金) 03:16:41.27 ID:o12ObYVU.net]
>>760
ブラックボックスって誰に対して?

>>763
なぜ棋譜って言う標準フォーマットがあるのにそれを崩すんだ?
棋譜データベースが世にあるんだからそれをそのまま使えないのはありえない

790 名前:デフォルトの名無しさん mailto:sage [2016/05/27(金) 06:17:55.52 ID:/J9GvUBV.net]
>>776
局面があれば、もちろん棋譜は生成できるけど
棋譜だけじゃ、局面を自由に行き来(ランダムアクセス)できないからだろ?

791 名前:デフォルトの名無しさん mailto:sage [2016/05/27(金) 11:40:24.39 ID:o12ObYVU.net]
ER図なんだからDBに保存する情報は棋譜だけでしょって話
そこから局面をメモリ上に展開すればいいでしょ

792 名前:デフォルトの名無しさん mailto:sage [2016/05/27(金) 12:15:00.09 ID:kDtxcipC.net]
理研の税金無駄使い、954万円高級家具カッシーナ・イクスシーの指定購入も大問題 : 千日ブログ 〜雑学とニュース〜
1000nichi.blog73.fc2.com/blog-entry-7696.html
税金の無駄遣い?STAP細胞関連経費1億4500万円 小保方晴子氏の検証実験参加は不要だったで書いた理研の税金の無駄使い。
実は小保方晴子さんらのSTAP細胞関連だけでなく、別の問題にも触れられていました。扱いが小さかったんですけど、こちらもすごく問題だと思います。
(中略)
●本来なら大問題である税金の無駄遣い
 この高級家具の件は、小保方晴子さんが買ったのでは?と、STAP細胞疑惑のときにいっしょに話題になったものです。しかし、すぐに東大教授になった別の方のところで購入したものだと、断定されていました。
違っていたら困りますし、名前を出しちゃうとあれかな?と思うので書きませんが、「カッシーナ・イクスシー 東大教授」あたりで検索すると簡単に出ます。もうあだ名が「カッシーナ」という感じになっていました。
「計288個の穴があること」など、実質的に特定のブランド以外を排除した購入など認められるはずがないものであり、本来なら非常に問題です。これは小保方さん問題以上に返金を求めやすくないですかね?
マスコミはこっちの問題ももっと追求すべきだと思います。

793 名前:デフォルトの名無しさん mailto:sage [2016/05/27(金) 12:23:58.24 ID:IdMbq2Qb.net]
そろそろ将棋ソフト開発スレにforkしたら?
ここはOOP全般の議論をするスレだよ

794 名前:デフォルトの名無しさん [2016/05/27(金) 12:25:03.87 ID:/D1WPrTe.net]
>>776
>ブラックボックスって誰に対して?
局面の点数化、深く読むべき手の選択を行うクラスないしモジュールの
内部実装を設計する必要はないって意味。

>>777
>>778
そうだよね。



795 名前:デフォルトの名無しさん mailto:sage [2016/05/27(金) 12:35:36.26 ID:/D1WPrTe.net]
>>778
あれ、>>778>>776と同じ人か。
テキストファイルはプログラムにとって操作しやすいものじゃないから。
例えば、5手まで進んだ局面で、過去にまったく同じ進行だった棋譜を抽出する
って処理をどう実装するにはどうする?
棋譜のデータも大量にあるからメモリも意識した設計にする必要がある。

796 名前:デフォルトの名無しさん mailto:sage [2016/05/27(金) 12:55:12.02 ID:/D1WPrTe.net]
>>780
OOPについての議論を開始してくれよ。
ただ、話をするきっかけがなかったときのスレの状態は>>490だったからさあ。

797 名前:デフォルトの名無しさん mailto:sage [2016/05/27(金) 16:07:05.35 ID:QLoNZNQy.net]
>>782

なぜテキストを操作する話になってるの?
棋譜の情報をtsv形式とかで事前にbulk insertしとくんじゃないの?
ER図の話だったよね?

798 名前:デフォルトの名無しさん mailto:sage [2016/05/27(金) 16:23:50.72 ID:mSvZp4nB.net]
実は、皆プログラミングのレベルがたいしたことない件

799 名前:デフォルトの名無しさん [2016/05/27(金) 18:23:43.80 ID:/D1WPrTe.net]
>>784
>>776が言い出したことだが…。
>>776なら想定している構成をまず提示してくれ。
>>776じゃないなら俺に聞かれても分からない。

800 名前:デフォルトの名無しさん [2016/05/27(金) 18:32:09.95 ID:/D1WPrTe.net]
>>785
天才プログラマのお前だったらどう構築するのか教えてくれるかな。
DBを知らないからDBが複雑だと思い込んでるだけの素人の違いを見せて欲しいなあ〜。

801 名前:デフォルトの名無しさん mailto:sage [2016/05/27(金) 19:38:50.01 ID:pLLsnEId.net]
意味がわからない

802 名前:デフォルトの名無しさん mailto:sage [2016/05/27(金) 20:35:36.67 ID:A2TIou2n.net]
棋譜データが何なのかご存じない?

803 名前:デフォルトの名無しさん [2016/05/27(金) 20:54:42.73 ID:/D1WPrTe.net]
>>789
ご存じない?
じゃねえよw

804 名前:デフォルトの名無しさん [2016/05/27(金) 20:57:31.88 ID:X8GqPxic.net]
なにこいつ



805 名前:デフォルトの名無しさん mailto:sage [2016/05/27(金) 21:08:24.02 ID:YEqMRFcI.net]
とっくにご存知なんだろ?

806 名前:デフォルトの名無しさん mailto:sage [2016/05/27(金) 21:29:12.31 ID:JwxL0I3t.net]
スーパーコーダー人

807 名前:デフォルトの名無しさん mailto:sage [2016/05/27(金) 23:55:27.14 ID:go2H7GGI.net]
設計を教えてくれと言ってるやつが
リーダーやるようなプロジェクトはこんなもんだろ

808 名前:デフォルトの名無しさん mailto:sage [2016/05/28(土) 06:04:52.94 ID:DfweNo3j.net]
>>786
>>784
>>776が言い出したことだが…。
>>776なら想定している構成をまず提示してくれ。
>>776じゃないなら俺に聞かれても分からない。
結局バカなんだな
将棋なんてやめでTODO管理アプリでも作ったらいいんじゃね

809 名前:デフォルトの名無しさん mailto:sage [2016/05/28(土) 10:01:09.70 ID:lKk9NsIN.net]
オブジェクト指向ってのは、将棋や囲碁などのAI機能を駆使した、最先端のソフトを開発しやすくする面もあるかもしれない。
でも、そういうアルゴリズムを重視する世界においては、オブジェクト指向なんてドーデもいいレベルの話ではないかと思う。

オブジェクト指向は、「既存のパーツとか、フレームワークの利用をいかに楽にするか?」つまりは、DRY(Don't repeat yourself)を推進する目的が第一ではないかと思う。
継承機能などを使って、「ロジックなどの開発が楽になる」というよりも、「フレームワークとか○○を使えば、自分では、それを考えなくても、作らなくてもいい」ってほうが望ましいスタイルではないかと思う。
そして、それを推進する手法としては、たぶんオブジェクト指向も必要だけど、それだけでは、無理ってことだと思っている。

MITの先生が、「プログラミングは、新規開発の時代じゃあない。既存のものをいかに素早く組み合わせるかを教えたい」と言っているらしいけど、その方向性は、間違ってないという気がする。

810 名前:デフォルトの名無しさん mailto:sage [2016/05/28(土) 10:09:21.59 ID:O5lAFAJB.net]
前に出てた勤怠管理やTODO管理のテーブル設計を議論したほうが有益だろうな
プロジェクトのほとんどはそこで決まるし

811 名前:デフォルトの名無しさん mailto:sage [2016/05/28(土) 11:38:35.56 ID:qmjd/mej.net]
>>796
長文書くならもう少し推敲しろよ
小学生の読書感想文みたいだぞ

812 名前:デフォルトの名無しさん mailto:sage [2016/05/28(土) 12:59:02.84 ID: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 名前:デフォルトの名無しさん mailto:sage [2016/05/28(土) 13:59:25.89 ID:fP0wQpWJ.net]
BarzかBazrを作る
インスタンスっていうんだから
紙に書いて実体を書けないとおかしい
強引にFooの実体を書こうとするとそれってBarzかBazrじゃね?ってなった



815 名前:デフォルトの名無しさん [2016/05/28(土) 17:33:38.76 ID:R1JSthfd.net]
将棋にオブジェクト指向設計を適用できないって主張してるバカは恥ずかしいから
いい加減やめたほうがいいぞw
コンポーネント、モジュールの設計を提示しろって言ってんのに何も提示しないし。
今夜か明日にコンポーネントをUMLで記述したものをアップする予定だから今のうちに考えておけよ。
>>652並みに恥ずかしい書き込みをしてることにいい加減気付けよwwww
バカどもの反応が今から楽しみ!

816 名前:デフォルトの名無しさん [2016/05/28(土) 17:38:29.41 ID:R1JSthfd.net]
>>797
お前が始めりゃいいじゃん。
「○○のほうがいい」って言いうだけで具体的な話を何も進めないから会話が成立しないんだろ。

817 名前:デフォルトの名無しさん [2016/05/28(土) 17:45:14.88 ID:R1JSthfd.net]
>>799
BarはFooを知ってるのにBaz(IFoo , IBar) で再度Fooを渡さないといけない理由が分からない。
どういうケースなのかイメージできるように具体的にならないんだろうか?
一般的にはBaz(IBar)にすると思う。

818 名前:デフォルトの名無しさん mailto:sage [2016/05/28(土) 18:24:36.48 ID:fP0wQpWJ.net]
>>802
勤怠管理を出したのは俺だけど
将棋が題材としてクソ過ぎたので出しただけ
設計書書かないでプログラム組む奴は雑魚なので
この話は発展させるつもりはない

819 名前:デフォルトの名無しさん mailto:sage [2016/05/28(土) 18:48:04.70 ID:R1JSthfd.net]
>>804
将棋はクソって思うのは勝手だけど、話題は何も出さないって無能だなあ。
将棋ソフトから発展した会話をしてる人はいるんだからいちいちじゃまする必要ないだろ。

設計をやっているのに「設計書書かないプログラム組む奴は雑魚なので」って言ってるのも意味不明だし。
何度も言ってるけどオブジェクト指向設計関連で語りたい話題があるなら好きに語ればいいだけ。
他人のじゃまする暇があったらもっと生産的なことしようぜ。

820 名前:デフォルトの名無しさん mailto:sage [2016/05/28(土) 19:50:56.91 ID:hH79WOSS.net]
まだやってたんかw。

素性の知らないもの同士が、成果物や開発対象、開発体制の情報開示をせずに
喧嘩腰でレスする時点でこういうオチになると思った。

821 名前:デフォルトの名無しさん mailto:sage [2016/05/28(土) 20:12:20.38 ID:dyQMlzBT.net]
設計書書かないでプログラム組むっていうのと対比させるなら
設計の前にすることすっ飛ばして良い設計も糞もないってことだよな

822 名前:デフォルトの名無しさん mailto:sage [2016/05/28(土) 20:47:19.10 ID: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 名前:デフォルトの名無しさん mailto:sage [2016/05/28(土) 21:15:12.20 ID:fP0wQpWJ.net]
>>808
クソ設計じゃね?
IDBゴミ箱に捨てちゃったらどうなるの?

824 名前:デフォルトの名無しさん mailto:sage [2016/05/28(土) 22:55:45.34 ID:vuHucEnZ.net]
IDBを捨てられたRAとRBは挙動不審になる感じ?
IDBの生存期間が永久だったらどうでもいいんじゃね?
でも、いつでも死ぬぜRAとRBとは別のところでひっそりと息をひきとりましたとさ
ってなるような構造なら参照保持やめろって思うわ



825 名前:デフォルトの名無しさん mailto:sage [2016/05/28(土) 23:07:57.42 ID:iUyRPTRl.net]
>>810
各インスタンスの寿命はUと同期させたいです

826 名前:デフォルトの名無しさん mailto:sage [2016/05/28(土) 23:17:24.57 ID:lKk9NsIN.net]
複数DBのトランザクション処理って、分散トランザクションってことですね。
この方面から検討することが必要では?

827 名前:デフォルトの名無しさん mailto:sage [2016/05/28(土) 23:24:47.99 ID:z5GhiIYg.net]
やっぱ具体的かつ現実的な質問があると捗るな

828 名前:デフォルトの名無しさん mailto:sage [2016/05/28(土) 23:41:45.93 ID:vuHucEnZ.net]
なんでコンストラクタで渡すん?
IDB太死んだら残されたRA子とRB子はどうしたらいいん?

829 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 01:00:47.21 ID:f/sZpflr.net]
UnitOfWorkパターンやリポジトリ、厳密に適用されたオブジェクト指向がどんなものかわかってなくて申し訳ないんだけど・・・
今通じるかわからなくて申し訳ないけど、少し前のJavaのSpring+Hibernateのように
メタデータ利用して、フレームワークにトランザクション管理任せたらあかんの?

830 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 08:15:01.43 ID:2I7bmxM6.net]
うまい例えになるかどうかわからないけど、オブジェクト指向を、お風呂場のいろんなパーツ、蛇口、浴槽、シャワー、ライトなどの構成パーツとしたら、JavaのSpring+Hibernateは、それらが組み合わせられたメーカー品のユニットバスってことではないかと思う。
パーツからユニットバスを完成させるには、それなりの設計が必要になるけど、それらが組み込み済みのユニットバスなら不要。
既製品が気に入らず、オリジナルのユニットバスが欲しい人は、パーツをうまく組み合わせる設計の知識と能力が要求される。
それが「各インスタンスの寿命はUと同期させたいです」なんて要望実現の部分に相当する。
そこは、オブジェクト指向とは別の知識・技術も必要。
それが無理な人は、JavaのSpring+Hibernate、あるいは同等品を探すほうが楽できるってことかな。

831 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 09:57:03.09 ID:f/sZpflr.net]
なるほど、確かに既製品で間に合うならそうするよな
その要件が他に出てこないシステムの特異点なら、コメントにしっかり残した上で、規約ぶっちぎって実現できる方法で実現すれば良いと思う

832 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 12:14:52.10 ID:1ogDAOAr.net]
つまりDobon.netコピペが最強
こういうことだな

833 名前:デフォルトの名無しさん [2016/05/29(日) 13:18:42.71 ID:Cf71caC3.net]
将棋ソフトを構成するコンポーネントを整理した。
https://drive.google.com/file/d/0B2NKffVh2tpqUWNmbTl6MVBRVXc/view?usp=sharing

KifuAnalyzerは過去の棋譜を分析して、駒の価値や駒の配置を点数化するためのパラメータを生成する。
MoveGeneratorは局面からルール上指すことが可能なすべての手を生成する。
MovePickerは合法手から深く読むべき手を選択する。
Evaluatorは局面を評価して点数化する。

MovePickerはEvaluatorが生成する点数を考慮するだろうし、
何手か先まで読むのにMoveGenerator→MovePicker→Evaluatorの処理をループするんだろうけど
その辺りの整理は不十分かもしれない。
改善の余地はあると思うので、知見がある人の意見を聞きたい。

834 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 13:20:31.00 ID:uH1/jPAH.net]
>>819
オブジェクト指向ではなくて手続き型の設計になってるなw



835 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 13:21:59.15 ID:1ogDAOAr.net]
オブジェクト指向なんてゴミ
みんなわかったね

836 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 13:22:24.27 ID:Cf71caC3.net]
>>820
もっとオブジェクト指向な設計とは具体的には?

837 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 13:23:04.73 ID:Cf71caC3.net]
ちなみにクラス設計はこれからだから。

838 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 13:25:54.19 ID:Cf71caC3.net]
>>821
手続き型だとコンポーネント構成はどう設計するのかいい加減提示してくれよ。
提示してくれるなら比較できて参考になるから見たい。
提示できるならね。

839 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 13:30:29.53 ID:1ogDAOAr.net]
普通に上から下に流れる処理なのにオブジェクト単位に表現される悪夢

840 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 13:31:05.98 ID:GCrD5Cq5.net]
煽り耐性0やな
いちいち反応するなってw

841 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 13:41:23.22 ID:Cf71caC3.net]
>>826
???
もっとオブジェクト指向な設計も手続き型の設計も見てみたいが。
口だけで何もない奴が書き込んでいると決め付けるのは良くない。

842 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 14:07:17.65 ID:uH1/jPAH.net]
>>822
> もっとオブジェクト指向な設計とは具体的には?
オブジェクト(データ)をメインに考えること

843 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 14:09:35.72 ID:GCrD5Cq5.net]
棋譜データはどこから持ってくるの?
最近、日本将棋連盟は棋譜の著作権を主張してるようだけど
その辺はどうクリアするの?

844 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 14:10:21.15 ID:ks+EActS.net]
OOPはむしろデータの実体を切り離せるところがメリットなのでは



845 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 14:13:34.46 ID:1ogDAOAr.net]
>>830
オブジェクト指向じゃなくね?

846 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 14:16:05.87 ID:2I7bmxM6.net]
>>819
たぶん、オブジェクト指向の前に、手続き型プログラミング、構造化プログラミング的な考え方によって大雑把にプログラムの全体構造を把握する設計ステップが入るのだと思う。
それが、この段階。

この段階から、しばらくは構造化プログラミングで設計とコーディングを進めてもいいし、オブジェクト指向をちょっと意識して進めてもいいのだと思う。
で、実際にコードを記述して、ちょくちょくテスト(=詳細設計)を進めていると、「これはオブジェクト指向の例題にあったような、あのパターンを使うとよさげかも?」なんてのに気づく。
そこで、今まで記述したコードを捨てて新規に作り直したり、あるいは作りかけのソースを修正する、もしくは、どっかから使えそうなフレームワークをコピペして活用するって流れになるのでは?

そうしたとき、最初からオブジェクト指向を意識して作っていたほうが(経験上)修正量が少なくなる気がするし、そのとき、オブジェクト指向のメリットを実感することになるんだろうね。

また、オブジェクト指向でプログラムを作ろうとも、多くの場合、上から下に流れるような構成になると思う。

847 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 14:21:04.75 ID:ks+EActS.net]
>>831
カプセル化すれば内部状態の物理的な実装は自由になる
OOPの基本理念の1つ

848 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 14:46:06.53 ID:uH1/jPAH.net]
>>819が手続き型になってるというのは、
その図の四角が処理になっていて、図全体が情報の流れを
表しているからだよ。

オブジェクトっていうのは役目を四角にするので
情報の流れとは無関係。

849 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 14:58:27.22 ID:Cf71caC3.net]
>>828
具体的に。

850 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 15:02:50.83 ID:Cf71caC3.net]
>>832
だいたいの方向性は同意なんだけど
>この段階から、しばらくは構造化プログラミングで設計とコーディングを進めてもいい
は違和感があるなあ。
コーディングに行くのは方針が決まってからじゃないか?
構造化プログラミングでコーディングまで始まってるのにそこからブジェクト指向プログラムに切り替えるのは
工数がだいぶ無駄になるような。
その辺はどう考えているんだろ?

851 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 15:08:30.13 ID:uH1/jPAH.net]
>>835
図の罫線に矢印を付けた時、
それが継承ではなくて情報の流れだなって
思ったらアウト。

852 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 15:08:35.66 ID:Cf71caC3.net]
>>834
抽象的な言葉としては分かるんだが具体的にどうしたいのか分からないなあ。
www.dataio.comで図を書けるからできれば書いて欲しい。
無理ならコンポーネントとインタフェースだけでも列挙してもらえればだいたい分かるかと。

853 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 15:14:36.29 ID:uH1/jPAH.net]
>>838
まず最初は全部一つにまとめろ。

その後に「何のために分離するのか」を書きながら
分離するといい。

分離する理由がないならば、それは分離しなくていい

854 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 15:33:37.25 ID:2I7bmxM6.net]
>>836
>この段階から、しばらくは構造化プログラミングで設計とコーディングを進めてもいい
は違和感があるなあ。
コーディングに行くのは方針が決まってからじゃないか?

まあ、あのレベルの設計で、コーディングの方針が決まればいいけど、初めて作るたぐいのプログラムって、どう作ればいいか、よく分からないことが私の場合は、ちょくちょくある。

だから、イメージとしては、作りたいものの漠然としたイメージはあるけど、またはっきりしない状態で、材料となる粘土の塊をいじって、できた粘土の形を見て、そこから先を考えるって感じでプログラミングやっている。
たとえば、足だけ作ってみるとか、バストだけ作って、それを見て、次に作る部分を決めるみたいな・・・。

本来は、全体の方針を決めてからコーディングってのが正しいと思う。
でも、方針がなかなか決まらないときは、手を動かして、なにかしら動くものを作ると、「今日の成果はこれ!」って感じで気分が良くなる。
で、残りを頑張ろうって気力が沸いてくる。そして、オブジェクト指向で作っていると、各パーツの再利用が容易になる。
まあ、すべての人にこの方式を薦めるわけではない。



855 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 16:00:47.90 ID:uH1/jPAH.net]
>>819でおかしい所の一つはMoveGeneratorとかいうコンポーネントがある所
(MovePickerは存在自体が意味不明)

なぜならば、移動できる場所は複数存在するが、思考ロジックによって
その移動できる場所を解析する順番が違うからだ。

前提条件として、総当りでやると時間が足りない。
だから駒一つ一つすべての移動できる場所を解析するわけじゃない。
解析しない場所(後回しにする場所)などが存在する。

だから、思考ロジック自身が動く場所を知っているし、
解析する順番(評価関数で評価する順番)も知っている。

そして解析する順番というのは、過去の棋譜データから決まる(こともある)
ディープラーニングなんかはそれ。

だからそれらを分離した所で、それらのコンポーネントを再利用することは出来ない。

もっとも過去の棋譜データを解析する処理は「思考」とは別のタイミング(対局前)に
行うことだから思考ロジックと分離するのは当たり前
(もちろん思考時には計算結果のみを利用し対局中に過去の棋譜データを解析するわけじゃない)

856 名前:デフォルトの名無しさん mailto:sage [2016/05/29(日) 16:35:38.18 ID:vZz5+wdA.net]
結局、将棋の思考ロジックのような、時間もメモリも切り詰めなきゃダメなようなものに
オブジェクト指向を持ち出すのが誤りってことだな
前々から言われていたことだが、不適切な題材だな

やったとしても、「思考ロジック」っていう巨大な一つのクラスがほとんどのことを受け持つ
いわゆるGodクラスになってしまうだろう
それが一番早く動くなら、将棋にとってはそれが正義
しかも将棋のルールはほぼ固定されていると考えてよいから
変に柔軟性を与えて仕様変更に強くする意味もないしな
パラメーターで対応すれば十分

動画のエンコーダーとかといっしょで、規格ものなんだよ
規格が決まっていて、速さや効率が求めらえるなら
ハードコーディングも辞さない






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

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

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