トップページ⇒tech
1002コメント443KB

オブジェクト指向システムの設計 [無断転載禁止]©5ch.io

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん2016/05/19(木) 22:07:47.87ID:9fCVrsOw
手順とかノウハウとか語りたい
0809デフォルトの名無しさん2016/05/28(土) 21:15:12.20ID:fP0wQpWJ
>>808
クソ設計じゃね?
IDBゴミ箱に捨てちゃったらどうなるの?
0810デフォルトの名無しさん2016/05/28(土) 22:55:45.34ID:vuHucEnZ
IDBを捨てられたRAとRBは挙動不審になる感じ?
IDBの生存期間が永久だったらどうでもいいんじゃね?
でも、いつでも死ぬぜRAとRBとは別のところでひっそりと息をひきとりましたとさ
ってなるような構造なら参照保持やめろって思うわ
0811デフォルトの名無しさん2016/05/28(土) 23:07:57.42ID:iUyRPTRl
>>810
各インスタンスの寿命はUと同期させたいです
0812デフォルトの名無しさん2016/05/28(土) 23:17:24.57ID:lKk9NsIN
複数DBのトランザクション処理って、分散トランザクションってことですね。
この方面から検討することが必要では?
0813デフォルトの名無しさん2016/05/28(土) 23:24:47.99ID:z5GhiIYg
やっぱ具体的かつ現実的な質問があると捗るな
0814デフォルトの名無しさん2016/05/28(土) 23:41:45.93ID:vuHucEnZ
なんでコンストラクタで渡すん?
IDB太死んだら残されたRA子とRB子はどうしたらいいん?
0815デフォルトの名無しさん2016/05/29(日) 01:00:47.21ID:f/sZpflr
UnitOfWorkパターンやリポジトリ、厳密に適用されたオブジェクト指向がどんなものかわかってなくて申し訳ないんだけど・・・
今通じるかわからなくて申し訳ないけど、少し前のJavaのSpring+Hibernateのように
メタデータ利用して、フレームワークにトランザクション管理任せたらあかんの?
0816デフォルトの名無しさん2016/05/29(日) 08:15:01.43ID:2I7bmxM6
うまい例えになるかどうかわからないけど、オブジェクト指向を、お風呂場のいろんなパーツ、蛇口、浴槽、シャワー、ライトなどの構成パーツとしたら、JavaのSpring+Hibernateは、それらが組み合わせられたメーカー品のユニットバスってことではないかと思う。
パーツからユニットバスを完成させるには、それなりの設計が必要になるけど、それらが組み込み済みのユニットバスなら不要。
既製品が気に入らず、オリジナルのユニットバスが欲しい人は、パーツをうまく組み合わせる設計の知識と能力が要求される。
それが「各インスタンスの寿命はUと同期させたいです」なんて要望実現の部分に相当する。
そこは、オブジェクト指向とは別の知識・技術も必要。
それが無理な人は、JavaのSpring+Hibernate、あるいは同等品を探すほうが楽できるってことかな。
0817デフォルトの名無しさん2016/05/29(日) 09:57:03.09ID:f/sZpflr
なるほど、確かに既製品で間に合うならそうするよな
その要件が他に出てこないシステムの特異点なら、コメントにしっかり残した上で、規約ぶっちぎって実現できる方法で実現すれば良いと思う
0818デフォルトの名無しさん2016/05/29(日) 12:14:52.10ID:1ogDAOAr
つまりDobon.netコピペが最強
こういうことだな
0819デフォルトの名無しさん2016/05/29(日) 13:18:42.71ID:Cf71caC3
将棋ソフトを構成するコンポーネントを整理した。
https://drive.google.com/file/d/0B2NKffVh2tpqUWNmbTl6MVBRVXc/view?usp=sharing

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

MovePickerはEvaluatorが生成する点数を考慮するだろうし、
何手か先まで読むのにMoveGenerator→MovePicker→Evaluatorの処理をループするんだろうけど
その辺りの整理は不十分かもしれない。
改善の余地はあると思うので、知見がある人の意見を聞きたい。
0820デフォルトの名無しさん2016/05/29(日) 13:20:31.00ID:uH1/jPAH
>>819
オブジェクト指向ではなくて手続き型の設計になってるなw
0821デフォルトの名無しさん2016/05/29(日) 13:21:59.15ID:1ogDAOAr
オブジェクト指向なんてゴミ
みんなわかったね
0822デフォルトの名無しさん2016/05/29(日) 13:22:24.27ID:Cf71caC3
>>820
もっとオブジェクト指向な設計とは具体的には?
0823デフォルトの名無しさん2016/05/29(日) 13:23:04.73ID:Cf71caC3
ちなみにクラス設計はこれからだから。
0824デフォルトの名無しさん2016/05/29(日) 13:25:54.19ID:Cf71caC3
>>821
手続き型だとコンポーネント構成はどう設計するのかいい加減提示してくれよ。
提示してくれるなら比較できて参考になるから見たい。
提示できるならね。
0825デフォルトの名無しさん2016/05/29(日) 13:30:29.53ID:1ogDAOAr
普通に上から下に流れる処理なのにオブジェクト単位に表現される悪夢
0826デフォルトの名無しさん2016/05/29(日) 13:31:05.98ID:GCrD5Cq5
煽り耐性0やな
いちいち反応するなってw
0827デフォルトの名無しさん2016/05/29(日) 13:41:23.22ID:Cf71caC3
>>826
???
もっとオブジェクト指向な設計も手続き型の設計も見てみたいが。
口だけで何もない奴が書き込んでいると決め付けるのは良くない。
0828デフォルトの名無しさん2016/05/29(日) 14:07:17.65ID:uH1/jPAH
>>822
> もっとオブジェクト指向な設計とは具体的には?
オブジェクト(データ)をメインに考えること
0829デフォルトの名無しさん2016/05/29(日) 14:09:35.72ID:GCrD5Cq5
棋譜データはどこから持ってくるの?
最近、日本将棋連盟は棋譜の著作権を主張してるようだけど
その辺はどうクリアするの?
0830デフォルトの名無しさん2016/05/29(日) 14:10:21.15ID:ks+EActS
OOPはむしろデータの実体を切り離せるところがメリットなのでは
0831デフォルトの名無しさん2016/05/29(日) 14:13:34.46ID:1ogDAOAr
>>830
オブジェクト指向じゃなくね?
0832デフォルトの名無しさん2016/05/29(日) 14:16:05.87ID:2I7bmxM6
>>819
たぶん、オブジェクト指向の前に、手続き型プログラミング、構造化プログラミング的な考え方によって大雑把にプログラムの全体構造を把握する設計ステップが入るのだと思う。
それが、この段階。

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

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

また、オブジェクト指向でプログラムを作ろうとも、多くの場合、上から下に流れるような構成になると思う。
0833デフォルトの名無しさん2016/05/29(日) 14:21:04.75ID:ks+EActS
>>831
カプセル化すれば内部状態の物理的な実装は自由になる
OOPの基本理念の1つ
0834デフォルトの名無しさん2016/05/29(日) 14:46:06.53ID:uH1/jPAH
>>819が手続き型になってるというのは、
その図の四角が処理になっていて、図全体が情報の流れを
表しているからだよ。

オブジェクトっていうのは役目を四角にするので
情報の流れとは無関係。
0835デフォルトの名無しさん2016/05/29(日) 14:58:27.22ID:Cf71caC3
>>828
具体的に。
0836デフォルトの名無しさん2016/05/29(日) 15:02:50.83ID:Cf71caC3
>>832
だいたいの方向性は同意なんだけど
>この段階から、しばらくは構造化プログラミングで設計とコーディングを進めてもいい
は違和感があるなあ。
コーディングに行くのは方針が決まってからじゃないか?
構造化プログラミングでコーディングまで始まってるのにそこからブジェクト指向プログラムに切り替えるのは
工数がだいぶ無駄になるような。
その辺はどう考えているんだろ?
0837デフォルトの名無しさん2016/05/29(日) 15:08:30.13ID:uH1/jPAH
>>835
図の罫線に矢印を付けた時、
それが継承ではなくて情報の流れだなって
思ったらアウト。
0838デフォルトの名無しさん2016/05/29(日) 15:08:35.66ID:Cf71caC3
>>834
抽象的な言葉としては分かるんだが具体的にどうしたいのか分からないなあ。
www.dataio.comで図を書けるからできれば書いて欲しい。
無理ならコンポーネントとインタフェースだけでも列挙してもらえればだいたい分かるかと。
0839デフォルトの名無しさん2016/05/29(日) 15:14:36.29ID:uH1/jPAH
>>838
まず最初は全部一つにまとめろ。

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

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

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

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

本来は、全体の方針を決めてからコーディングってのが正しいと思う。
でも、方針がなかなか決まらないときは、手を動かして、なにかしら動くものを作ると、「今日の成果はこれ!」って感じで気分が良くなる。
で、残りを頑張ろうって気力が沸いてくる。そして、オブジェクト指向で作っていると、各パーツの再利用が容易になる。
まあ、すべての人にこの方式を薦めるわけではない。
0841デフォルトの名無しさん2016/05/29(日) 16:00:47.90ID:uH1/jPAH
>>819でおかしい所の一つはMoveGeneratorとかいうコンポーネントがある所
(MovePickerは存在自体が意味不明)

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

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

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

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

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

もっとも過去の棋譜データを解析する処理は「思考」とは別のタイミング(対局前)に
行うことだから思考ロジックと分離するのは当たり前
(もちろん思考時には計算結果のみを利用し対局中に過去の棋譜データを解析するわけじゃない)
0842デフォルトの名無しさん2016/05/29(日) 16:35:38.18ID:vZz5+wdA
結局、将棋の思考ロジックのような、時間もメモリも切り詰めなきゃダメなようなものに
オブジェクト指向を持ち出すのが誤りってことだな
前々から言われていたことだが、不適切な題材だな

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

動画のエンコーダーとかといっしょで、規格ものなんだよ
規格が決まっていて、速さや効率が求めらえるなら
ハードコーディングも辞さない
0843デフォルトの名無しさん2016/05/29(日) 16:38:53.32ID:uH1/jPAH
こういう実時間が足りないタイプのアルゴリズムは
データ構造まで工夫する必要があるからね。
いちいちメソッド呼んでデータを取ってきたりしない。

取ってくるにしても駒の動きなんて変わらないんだから
最初に一括して読み込めばいいしそれはファイルから読み込めばいい。
(その後内部で工夫されたデータ構造にして、あとは内部で完結させる)
0844デフォルトの名無しさん2016/05/29(日) 16:58:54.31ID:hqWpcQ8C
vtable使うなんてもったいない世界だよなぁ
0845デフォルトの名無しさん2016/05/29(日) 17:18:08.73ID:nD7S98HF
工数気にするならボナンザ使えば?
品質も良いと思うよ
0846デフォルトの名無しさん2016/05/29(日) 17:48:41.04ID:Cf71caC3
>>840
>あのレベルの設計で、コーディングの方針が決まればいいけど
これについてはまだ設計の途中だからさ。現段階では決まってないけど設計が終わる頃には明確になってる。
まあ、設計段階ですべての問題を洗い出すことが難しいのは同意する。
0847デフォルトの名無しさん2016/05/29(日) 17:54:21.52ID:Cf71caC3
>>841
MoveGeneratorとMovePickerの役割はちゃんと説明してあるんだが…。

あと、どういう設計を想定しているのか分からない。
言ってる内容がエンドユーザの要件みたいで、設計者の設計じゃないように感じる。
考えてることを明確にするために設計者はモデリングを利用する訳で、設計者同士の会話は
モデリングあるいはコンポーネント・クラスなどを明確にして記述して欲しい。
0848デフォルトの名無しさん2016/05/29(日) 17:59:16.14ID:Cf71caC3
>>842
何度も繰り返してるけど、時間もメモリも切り詰めた設計はどうなるか提示してくれ。
0849デフォルトの名無しさん2016/05/29(日) 18:00:53.32ID:Cf71caC3
>>845
将棋ソフトを作る気はないから。
0850デフォルトの名無しさん2016/05/29(日) 18:09:36.48ID:uH1/jPAH
>>847
> MoveGeneratorとMovePickerの役割はちゃんと説明してあるんだが…。

だからそれが意味不明だって。

お前のは、単に分けているだけで
分ける理由が存在していない。
0851デフォルトの名無しさん2016/05/29(日) 18:10:53.57ID:uH1/jPAH
>>848
> 何度も繰り返してるけど、時間もメモリも切り詰めた設計はどうなるか提示してくれ。

[ 思考ロジック ]
0852デフォルトの名無しさん2016/05/29(日) 18:16:58.80ID:uH1/jPAH
思考ロジック以外の部分まで書いていいなら
これでもいいがw

[ 思考ロジック ] - [将棋UI]

もう少し細かく言うのなら将棋の駒の配置は、
思考ロジックでも使うが将棋UIでも使う共通情報だから
という理由で分離して

[ 思考ロジック ] - [ 駒の配置データ ] - [将棋UI]

思考ロジックは、駒の配置データを参照して、駒の配置データを書き換えるという役目。
将棋UIは駒の配置データを参照して、それをUIとしてレンダリングする

将棋UI は更にその内部で、将棋盤オブジェクトや駒オブジェクトとして
2Dや3Dでレンダリングされるが、これは完全にUIの話で思考ロジックとは切り離すべき話だよねw

オブジェクト指向で設計するならばこれぐらいの話だな。
0853デフォルトの名無しさん2016/05/29(日) 18:21:29.72ID:uH1/jPAH
時間もメモリも切り詰めた設計っていうのもちょっと質問の意図が不明で

時間を切り詰めた実装でも、メモリを切り詰めた実装でも、
一台のマシンを使う実装でも、多数のマシンを使う実装でも
「どんな実装にも変更可能な設計」というのなら、これは設計なわけで正しい。

つまり
× 時間もメモリも切り詰めた設計
○ 時間もメモリも切り詰めた実装

時間やメモリを切り詰め ”られる" のは、それが可能なように設計で考慮するべきことだが
時間やメモリを切り詰め "る" のは設計で決めることじゃない。
0854デフォルトの名無しさん2016/05/29(日) 18:27:50.97ID:hqWpcQ8C
>>848
>何度も繰り返してるけど、時間もメモリも切り詰めた設計はどうなるか提示してくれ。
何度も言われてる気はするがほぼ思考ロジックの話になるからオブジェクト指向でやる意味なくね
具体的にどのアルゴリズムを選ぶか?
それが「時間もメモリも切り詰めた設計」となる
振る舞いと実装の分離とかしないわけよ

>>852が言ってるようにオブジェクト指向でやる意味あるUIくらいだよ
0855デフォルトの名無しさん2016/05/29(日) 19:05:09.06ID:Cf71caC3
>>850
正しいと思う設計を具体的に示してくれ。
面倒くさくなってきたから明示できないならもういいよ…。
0856デフォルトの名無しさん2016/05/29(日) 19:06:07.22ID:uH1/jPAH
>>855

[ 思考ロジック ]


書いてあるよね?

なんで見えてないの?
0857デフォルトの名無しさん2016/05/29(日) 19:07:21.11ID:uH1/jPAH
[ 思考ロジック ]

↑ 思考ロジックの正しい設計



[ 思考ロジック ] - [ 駒の配置データ ] - [将棋UI]

↑ UIまで含めた、将棋ソフトの正しい設計
0858デフォルトの名無しさん2016/05/29(日) 19:08:04.03ID:Cf71caC3
>>85
で、設計は?って聞かれると>>652とか答えちゃう訳?w
0859デフォルトの名無しさん2016/05/29(日) 19:10:04.28ID:Cf71caC3
>>857
おっけ、おっけ。
設計に対する前提がかけ離れ過ぎてるから話しても無意味だと分かった。
0860デフォルトの名無しさん2016/05/29(日) 19:12:52.55ID:uH1/jPAH
>>652はコード(実装)書けって書いてあるから
実装書いてあるだけだろw
0861デフォルトの名無しさん2016/05/29(日) 19:13:21.23ID:uH1/jPAH
>>859
結局、設計の話してもこうやって無視するわけだ?
逃げるな卑怯者
0862デフォルトの名無しさん2016/05/29(日) 19:20:13.35ID:Cf71caC3
>>861
率直に言うと、レベルが低過ぎてお話にならないと判断した。
将棋ソフトを設計しろって言われて
[ 思考ロジック ] - [ 駒の配置データ ] - [将棋UI]
だけ書いて完成したと思うのは>>652並みのお粗末さだぞ…。

思考部分のコンポーネント図が間違っているというなら訂正したコンポーネント図を書けよ。
[ 思考ロジック ] - [ 駒の配置データ ] - [将棋UI] って何じゃそりゃ?
0863デフォルトの名無しさん2016/05/29(日) 19:22:38.20ID:uH1/jPAH
>>862
お粗末ってなんだ?

設計というのはシンプルにするものだ。
たくさん書けばいいってわけじゃねーぞw
0864デフォルトの名無しさん2016/05/29(日) 19:23:38.63ID:uH1/jPAH
だいたい、間違っていると思うならば、
お前こそ、間違ってる理由を言えよ。

お前が考えるさいきょうのせっけい(笑)の紹介じゃなくて、
何が間違っているのかを言えって。
0865デフォルトの名無しさん2016/05/29(日) 19:25:48.76ID:uH1/jPAH
思考部分のコンポーネント図が間違っているというなら訂正したコンポーネント図を書けよ。

[ 思考ロジック ]

↑ 思考ロジックの正しい設計


何度も言ってる
0866デフォルトの名無しさん2016/05/29(日) 19:31:51.54ID:nCNZLCDh
ID:Cf71caC3
もうほとんどあらしだな
0867デフォルトの名無しさん2016/05/29(日) 19:45:13.81ID:hqWpcQ8C
>>862
レベルが低い以前に話聞いてないじゃん
将棋の思考ロジックの設計なんかはもうアルゴリズムの設計とほぼ同じ
計算機科学の分野でしょ
0868デフォルトの名無しさん2016/05/29(日) 20:19:13.03ID:vZz5+wdA
ざっくりいうとさ、将棋の盤のデータは
char ban[9][9];
こんなんで十分なわけでしょ
これに相手と自分の持ち駒の配列を付け加えて
あと少々何かあればそれで充分な世界
人によってはcharですらデカすぎるというかもしれない
この時点でオブジェクト指向らしさは全然ないよね
どちらかといえば画像処理とかに近いデータ構造

将来将棋が仕様変更して、いきなり金の振る舞いが変わるとか
そういうことはあり得ないから、駒をオブジェクトにするとか意味不明なことはする必要ないし
オブジェクト指向でよく言うような、仕様変更に強くするとか
継承とオーバーライドで差分プログラミングとか、全く関係ないよね
だって、将棋のルール(仕様)は決まっているわけだからさ、仕様変更とか考えなくてよい
むしろ実行時間や効率が問われているのだから
意味のない柔軟性を持たせる分のオーバーヘッドがもったいないし、必要もない
0869デフォルトの名無しさん2016/05/29(日) 20:30:30.60ID:Cf71caC3
>>868
モジュール構成は?
相互の関係は?
コンポーネント図を見ればどういう領域を整理しようとしているかくらい分かるだろ?
0870デフォルトの名無しさん2016/05/29(日) 20:32:05.69ID:Cf71caC3
あと>>608もな。
0871デフォルトの名無しさん2016/05/29(日) 20:42:21.72ID:f/sZpflr
察して欲しかったら察してもらえるように言葉考えて伝えなよ。
業務プログラマなんだろ?
0872デフォルトの名無しさん2016/05/29(日) 20:44:29.81ID:uH1/jPAH
[ 思考ロジック ]

↑ 思考ロジックの正しい設計



[ 思考ロジック ] - [ 駒の配置データ ] - [将棋UI]

↑ UIまで含めた、将棋ソフトの正しい設計


> コンポーネント図を見ればどういう領域を整理しようとしているかくらい分かるだろ?

これみて、どういう領域を整理しよとしているかわからないの?w
0873デフォルトの名無しさん2016/05/29(日) 20:59:39.40ID:1omdCt5G
外とのインタフェースだけきめて内部はTDDすれば勝手に決まっていく派
最初から全部決めようなんて無理無理
0874デフォルトの名無しさん2016/05/29(日) 21:03:08.22ID:1mIQzqS0
AIモジュールはハードウェアも絡むからOOPはない
将棋ソフト全体をOOPで作ったとしてもAIモジュールとはだいぶ隔たりがあるよ
ユーザーの入力した結果から低レベルな盤面データを生成して丸ごと渡すだけとかそんなレベル
0875デフォルトの名無しさん2016/05/29(日) 21:13:37.84ID:vZz5+wdA
いやだからさ、将棋ってのはルールが決まっているんだよ
歴史のあるゲームであって、いきなりルールが変わって金の動きが変わるとか
そういったことは今の時点では全く考慮する必要がないわけだよ

で、オブジェクト指向のメリットは、大体において仕様変更に強くすることなんだよ
仕様変更が全くないのであれば、どんな方法でどんな汚い書き方をしたって
プログラマだってプロなんだから、書き上げることはできるんだよ
ただ、突然の仕様変更は怖いよねって話で、そのためにオブジェクト指向にコストを掛けているわけじゃないですか

その点、将棋はルールが決まっていて、仕様変更など気にする必要ないし
むしろ実行速度が強さに直結していて、一手でも先を読んだ方が有利なわけだから
仮想関数なんかを使うオーバーヘッドがもったいないし
その二つの面からオブジェクト指向である必要性が薄い題材

仮にオブジェクト指向で作ったとしても、仕様変更がないことが分かっているわけだから
オブジェクト指向設計の腕の見せ所が全くないし、題材として不適切なんだよ
将来にわたって必要の無いであろう拡張性や柔軟性を持たせても、無駄が多いと言われるだけ

将棋のAIのアルゴリズムには大変興味深いものがあるとおもうが
オブジェクト指向としては見るべき点が「全く」ない
0876デフォルトの名無しさん2016/05/29(日) 21:32:59.51ID:vZz5+wdA
つまりは、将棋AIをオブジェクト指向で作るにあたって、どんなに不味い設計をしたとしても
仕様変更が発生しない題材なわけだから、オブジェクト指向的に良いも悪いもなく、動けばOKだよねっていう話になる
どんなに不味いオブジェクト指向の設計であっても、仕様変更さえなければ大体は問題にならない
当初の予定通り動く

ついでに、将棋AIである以上は強くなくてはならない
この強くなければならないという案件は、通常ではない
業務システムが他のシステムと喧嘩して勝っただの負けただの言わない

普通は仕様変更に強いように、拡張性があるように、プログラムを設計するし
オブジェクト指向の設計の良し悪しもそこに集約されるわけだが
将棋AIは強さが求められているわけで、オブジェクト指向設計でいうところの
良し悪しとは違ったものが求められている
しかも仕様変更がない、とくればハードコーディングも止む無しだろう
0877デフォルトの名無しさん2016/05/29(日) 21:36:48.37ID:JprInoKj
暗黙のうちに拡張将棋が題材になってるんでしょうね
ワープ駒とか二回倒さないと死なないとか
範囲攻撃とか装備とかアイテムとか擬人化とかイケメン武将とかキャラアドオンとかガチャとか課金とか
マルチプラットフォーム対応もするしサービスとして長くメンテナンスし拡張を加えていく前提
当然AIもそれに対応しなければならないからゲームやアプリは良くモデル化されていなければならない
0878デフォルトの名無しさん2016/05/29(日) 21:38:49.46ID:uH1/jPAH
>>877
で、そんなことを言い出すと。
YAGNIだってとどめを刺すわけだw

だからそうする目的を聞いている。目的がないのにわざわざ分割するのは、
必要だからやるのではなく、設計(?)をすること自体が目的になっている。
0879デフォルトの名無しさん2016/05/29(日) 21:47:24.89ID:Cf71caC3
>>877
現実のプロジェクトなら設計者が設計書に記述するであろう内容についての前提が違うんだと思う。
「将棋ソフトを設計してくれ」って客に言われたら、オブジェクト指向だろうが、他の設計手法だろうが
構成を記述しないってことはあり得ないからさあ。
そこを分からない人に説明してもしょうがないことは分かったから流すようにする。
毎日IDが変わるから新しい人かもと思って対応していたけど、どうも同じ人みたいだし、
対応してもスレが汚れるだけだからスルーすべきだったと反省。
0880デフォルトの名無しさん2016/05/29(日) 21:50:11.02ID:uH1/jPAH
> 構成を記述しないってことはあり得ないからさあ。

構成は記述されてありますが?
そもそも将棋ソフトを設計してくれって言われたら

思考ロジック部分だけを設計しませんよwww

[ 思考ロジック ] - [ 駒の配置データ ] - [将棋UI]

こんな感じで設計します。
当然、思考ロジック部分は一つです。
シンプルイズベスト。理由がなければ分割しない。
0881デフォルトの名無しさん2016/05/29(日) 21:52:08.59ID:uH1/jPAH
「将棋ソフトを設計してくれ」って客に言われたら、
どんな仕様か詳しく聞きますね。

その上で必要なら、それを満たすように設計しますが、

あんたのように何も言ってないのに過剰な分割なんかしませんよwww
0882デフォルトの名無しさん2016/05/29(日) 21:53:29.31ID:1omdCt5G
客の定義による
ただ将棋ソフトで遊びたい人にとって内部設計なんてなんの意味もない
外部の人間が自分たちのソース引き継いでメンテするのが前提ってこと?
0883デフォルトの名無しさん2016/05/29(日) 22:04:37.03ID:qPPHNZFg
ogg vorbis形式のファイルを自前でデコードして再生するソフトを「設計」しろとか、
円周率を出すソフトを「設計」しろとか、
そういう類の無意味な題材だってことが理解できているのか心配になる。
動物とか自動車とかモデル化するだけの人なのかもしれんが。
0884デフォルトの名無しさん2016/05/29(日) 22:05:37.63ID:uH1/jPAH
>>882
何を言ってるんだ?

たとえばネット対戦をしたいって言えば
それが出来るような設計にするだろ?

客の要求を聞いた上で、それを実現できるように設計する。

客がネット対戦をしたいって言ってもいないのに
あらかじめ先手(笑)を打ってネット対戦機能をつけましたとか
それは過剰な設計であり無駄なコストを発生させたに過ぎない。

だからいきなり設計すんなって言ってるんだよ。
客の要望を聞いて、必要であるという理由があれば
それが可能なように設計すればいい。

だから、そうした理由を聞いてるのに、明確な理由もなくて、
そうするのがいいと思いましたーでやってるから馬鹿にされてるんだよ。
0885デフォルトの名無しさん2016/05/29(日) 22:06:35.28ID:1ogDAOAr
別に思考ルーチンも学習機能なんて要件に上がってないしね
ここで話せるのはここまでじゃん

だから題材が悪いって俺が最初に言ったじゃん
基本的にオブジェクト指向ってz80で作れるものに威力を発揮しないんだよ

将棋ソフトなんて作ったこともないのに題材に選んだ奴責任とって腹切れ

どうせ設計に必要な項目も他人に説明できないしできなかっただろ
それは将棋ソフトの全容が他人に聞くまでもなく
みんなある程度わかっちゃってるからなのさ
0886デフォルトの名無しさん2016/05/29(日) 22:07:18.13ID:+DJ914Ec
>>883
できるだけ抽象的に作ればいいと思ってる抽象馬鹿だと思われ。
0887デフォルトの名無しさん2016/05/29(日) 22:09:35.02ID:uH1/jPAH
>>883
ogg vorbis形式のファイルというのは、正確には音声ファイルフォーマットで
Oggがコンテナ、Vorbisがコーデックという設計で、
元々内部の役割が分割されてるからちょっと違うけどねw
0888デフォルトの名無しさん2016/05/29(日) 22:11:26.67ID:uH1/jPAH
>>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
具体例があったほうが分かりやすいから将棋ソフトの例で考えてみてよ。
0889デフォルトの名無しさん2016/05/29(日) 22:14:11.15ID:auBo7N3K
スーパーエヴァンジェリストの僕がこのスレの混乱の原因を教えてあげよう
ここには顧客ロールの担当者がいないのさ
0890デフォルトの名無しさん2016/05/29(日) 22:17:37.23ID:1ogDAOAr
要件定義が曖昧なのに求めてる設計書のレベルが見合わないんだよね

はじめの話で思考ルーチンが
ディープラーニング当然でしょみたいな話になんて絶対ならないわけで
0891デフォルトの名無しさん2016/05/29(日) 22:19:59.67ID:+DJ914Ec
んでは OS の設計でもしてみるかい?
Linux あたりと比較できるしいいんじゃないの?
よりよいオブジェクト指向で設計してもらいたいですな。
0892デフォルトの名無しさん2016/05/29(日) 22:24:35.04ID:hqWpcQ8C
>要件定義が曖昧
これ 「将棋ソフト」を設計しろだと
いきなり実装の話に入らざるを得ない
0893デフォルトの名無しさん2016/05/29(日) 22:26:13.01ID:uH1/jPAH
>>890
> 要件定義が曖昧なのに求めてる設計書のレベルが見合わないんだよね
それもあるけど「何のためにそうしているか?」が存在しないんだよ。
いえばいいだけなのに、言わない。
そうするのが当然だって思い込んでる。
0894デフォルトの名無しさん2016/05/29(日) 22:27:58.83ID:uH1/jPAH
>>892
お題だから、いきなり実装の話に入ってもいいんだけどさ、
それならそれで、どういう「要件を想定した」っていうのを
明確に言わないといけない。

それを言わずに、なんかわけのわからん分割の仕方をしてるから
突っ込み入れられまくってるわけ。
0895デフォルトの名無しさん2016/05/29(日) 22:33:44.93ID:RrRCCmyQ
スレタイに沿ったオブジェクト指向の設計なら
将棋の駒はクラスで正解

しかし設計のきれいさではなく
処理速度を求めるなら構造化で書く

前提が違うのにみな上から目線で書きこむから
ただ混乱するだけ

やっぱ2ちゃんは雑談はともかく
ちゃんとした議論に向かないな
0896デフォルトの名無しさん2016/05/29(日) 22:35:40.39ID:1ogDAOAr
要件定義がグチャグチャだとダメだね
得に将棋ソフトなんて疑問が無いもん
勝手に作っちゃうでしょ
そこは要件を出した方も悪いし聞かないまま進めちゃう方も悪いし
0897デフォルトの名無しさん2016/05/29(日) 22:36:26.79ID:uH1/jPAH
> 将棋の駒はクラスで正解

それはゲームとかで駒を
2Dや3Dでレンダリングする時の話だよw

思考ロジックの中でクラスにする理由はない
charなりintなりの二次元配列に
defineで定義した定数を入れれば十分
0898デフォルトの名無しさん2016/05/29(日) 22:40:50.33ID:RrRCCmyQ
>>897
処理速度を考慮しない前提で言うと
それはオブジェクト指向じゃなくて
構造化の考えから抜け出せてない
0899デフォルトの名無しさん2016/05/29(日) 22:45:42.31ID:1ogDAOAr
ところで将棋ソフトにオブジェクト指向を適用するとダメだね
駒なんかクラスにされたらどう作ってもクソになっちまう
0900デフォルトの名無しさん2016/05/29(日) 22:47:10.49ID:1ogDAOAr
でもオブジェクト指向的に将棋の駒をクラスにするのは間違ってないと思うな
つまりオブジェクト指向ってもしかして(笑)
0901デフォルトの名無しさん2016/05/29(日) 22:49:05.67ID:uH1/jPAH
>>898
それで理由は?
0902デフォルトの名無しさん2016/05/29(日) 22:51:44.59ID:uH1/jPAH
>>900
> でもオブジェクト指向的に将棋の駒をクラスにするのは間違ってないと思うな
> つまりオブジェクト指向ってもしかして(笑)

最後まで書きなよw

つまりオブジェクト指向ってもしかして、(思考ロジックの)将棋の駒を
クラスにすることには役に立たない。

だろ?
だから俺は最初から何のためにそれをクラスにするのかと聞いてるわけ。
する理由がある、つまり適切な場所をオブジェクト指向にして、
こんな関数レベルの思考ロジックをわざわざ無意味に分割するんじゃないって言ってるんソア。
0903デフォルトの名無しさん2016/05/29(日) 22:52:01.50ID:+DJ914Ec
>>898
抜け出す必要がない場面で無理に抜け出そうとする事がそもそもおかしい。
オブジェクト指向は万能ではない、処理フローがほとんど決まってるものに対しては不向き。
0904デフォルトの名無しさん2016/05/29(日) 22:54:48.91ID:vZz5+wdA
構造体どころかintかcharの配列で良いって話
charでも何か勿体ないという人もいるかもしれない

画像なら、画像全体が何らかのオブジェクトでラップしてあるならわかるが
画像の1ピクセル1ピクセルを全てオブジェクトにする人はいない
こんなものはデータで十分
構造体的発想を抜け出せないというのも意味不明
データで十分なものをオブジェクトにする方が
何も理解していないと言いたい
0905デフォルトの名無しさん2016/05/29(日) 22:58:31.03ID:1ogDAOAr
>>902
でもさ
全員の共通認識を一致しやすいって手法だろ?
でもこの方法は将棋ソフトに関してははっきり言ってクソ
どう作ってもクソにしかならない
オブジェクト指向ってダメなのかもしれんね
0906デフォルトの名無しさん2016/05/29(日) 22:59:10.96ID:1omdCt5G
オブジェクト指向は万能じゃないよ
0907デフォルトの名無しさん2016/05/29(日) 23:01:49.14ID:vlcsE4Oa
>>904
うんうん。将棋のコマって

王将・玉将
金将
銀将 → 成銀
桂馬 → 成桂
香車 → 成香
飛車 → 竜王
角行 → 竜馬
歩兵 → と金

うまい具合に15種類なんだよねぇ。
4bitでじゅーぶんですよね。空白含めても。
0908デフォルトの名無しさん2016/05/29(日) 23:02:20.91ID:Cf71caC3
実力を示したいなら
「設計は>>652」
「設計は思考ロジック!」
とか言ってないで、設計を提示すりゃいいじゃん。
設計書を書いたことなくて、書き方知らないんだからおとなしくしてりゃいいのに。

あと、要件についは十分説明したから読み直せ。
参加者はあれで読み取ってるんだから読み取れない自分が問題だといい加減気付けよ。
レス数が900を超えています。1000を超えると表示できなくなるよ。