トップページ⇒tech
1001コメント292KB

オブジェクト指向は戦場では必要なし9

■ このスレッドは過去ログ倉庫に格納されています
0001プロの逝って良しの1NGNG
オブジェクト指向はより自然なモデルに即したものではあるが、
クラスを理解する労力が大きく、目的まで達成するのに時間がかか
る。他人のソースを見るにも複雑でときほぐしにくい。ちゃんと
整備されたドキュメントがなければ粗大ゴミソース。またオブジェ
クト指向が○○に優れているとかいう話も、あくまでちゃんと設計
され、ちゃんと実装されたクラスがあるという前提での話。実際は
世の中にはそれほど有能なSEやPGなどいません。
 よってオブジェクト指向は戦場では使いものになりません。
(byあいたたたた)

パート1 http://pc.2ch.net/test/read.cgi/tech/1011997945/
パート2 http://pc.2ch.net/test/read.cgi/tech/1013266554/
パート3 http://pc.2ch.net/test/read.cgi/tech/1013875413/
パート4 http://pc3.2ch.net/test/read.cgi/tech/1021468476/
パート5 http://pc3.2ch.net/test/read.cgi/tech/1027983898/
パート6 http://pc3.2ch.net/test/read.cgi/tech/1029297075/
パート7 http://pc3.2ch.net/test/read.cgi/tech/1030029357/
パート8 http://pc3.2ch.net/test/read.cgi/tech/1031028125/

宣伝に笑う者は宣伝に泣く

日経バイト 2002年10月号特集1
Javaの知られざる欠陥
http://itpro.nikkeibp.co.jp/NBY/toc/
(タイトルのみ)
0153デフォルトの名無しさんNGNG
>>152
>それからスペルはOthelloかReversiだってば。
そうか。
指摘、ありがと。

>Display()はゲームシステムが持つべきメソッドだよ。
効率悪い理由がよくわからないんだけど、
もしよければ具体的に教えてください。
0154デフォルトの名無しさんNGNG
>>153
まずBoardやPlayerなどのデータ構造・ロジッククラスは
描画機能を別オブジェクトに委譲すべき(描画コードが一箇所に集まるので実装が楽)。

それから状態を描画するタイミングはシステム・審判クラスが決めることが多いので
Board, Move, Playerオブジェクトは何も考える必要がない。
(思考中の情報を表示するなら各オブジェクトが描画のトリガをひくようになるんだけど)

昔書いたCUI/GUI両対応のコードは大体こんな感じだった。
思考中のアニメーションとかのない地味なアプリだけど。

Application.Run(){
for(;;){
 Move move();
 Show();
 players[turn].GetMove(move);
 board.MakeMove(move);
 if(board.Finish()) break;
 turn.SetNext();
}
}
0155デフォルトの名無しさんNGNG
>描画機能を別オブジェクトに委譲すべき(描画コードが一箇所に集まるので実装が楽)。
だからDisplayクラスを継承だって・・・・
JavaでいうならJPanel#paintComponent()だね。

Boardに実装すれば、駒の配置が変わると
repaint()が呼ばれるので、外側からshow()を呼ぶ必要がない。

逆に画面表示しない物を作る時、
Application2を作らなきゃならないね。
0156デフォルトの名無しさんNGNG
言語派から設計の話がまったく出てこないのですが…
0157デフォルトの名無しさんNGNG
>>155
Java知らないんだけどDisplayって描画を直接担当するクラスでしょ?
それを継承してロジッククラス作るって変な気がするんだけど。
たとえばGUI, CUI, Debug(ファイルへ出力)の三種類作る場合、
どういうクラス構成になるの?
こっちのはApplication.Show()をoverrideするだけ
(ApplicationをObserbable, Screenに読み替えてもいいけど)。

それからウィンドウの再描画が必要なとき
(最小化から復帰したときやファイルからロードしたとき)、
すべてのオブジェクトのrepaint()を呼ばないといけないんだから
結局Application.Show()などから描画するのは避けられないよ。
0158デフォルトの名無しさんNGNG
>>156
プロ言語派は全員別板に遠征しているようです (フ
0159プロの逝って良しの1NGNG
アップしたよー
動くかどうかわからんが
http://megami.s1.x-beat.com/upload/upload.cgi
[megami0131.lzh] Othelloソース(Javaファイル) 5 2002年09/30(月)05:17
0160デフォルトの名無しさんNGNG
オセロで多態性を使いうる部分。

1.Viewの表示方法(SwingをつかうかSWTをつかうか、単純な四角形にするかクォータービューにするか、
 置石の形や表示変更のアニメーションの種類など)
2.Modelの持ち方(単一JVM上で動くものか、ネットワーク通信によって複数のJVM上で同期されるものなのか)
3.コンピュータープレイヤーのロジック(初級、中級、上級とかあるよね?)
・・・

いくらでもあるな(藁
0161デフォルトの名無しさんNGNG
動いたよ。終了する時に NullPointerException でお亡くなりになるが…(藁。
ちなみに678行目(WindowAdapter#windowActivateを呼び出したところ)。
0162デフォルトの名無しさんNGNG
COM vs COM だと絶対白が勝つな…。オセロって必勝パターンあるんだっけ?
0163デフォルトの名無しさんNGNG
>>160
2.は3.のネットワークプレイヤーで吸収できますよ。
0164デフォルトの名無しさんNGNG
>>141
戻ってきてるよ(萎
0165デフォルトの名無しさんNGNG
>>157
>それを継承してロジッククラス作るって変な気がするんだけど。
盤面のデータ(配列)を常に表示してるだけ。

>たとえばGUI, CUI, Debug(ファイルへ出力)の三種類作る場合、
GUIは先に書いたとおり。
CUIは盤面クラスのアクセサメソッドが呼ばれた瞬間出力
ファイルへの出力は、インターフェースInputStreamがあるので
CUIと何もかわらない。
デバッグ出力は別の問題。
ただし、これは第三者から見た視点。

プレイヤーから見た視点を再現するには
プレイヤーに渡される盤面情報を元に再現するのが
一般的だと思うよ。

>それからウィンドウの再描画が必要なとき
GUIのライブラリーは何使ってるの?
ずいぶん原始的な物を使ってるみたいだねw
0166デフォルトの名無しさんNGNG
Java厨はObject->Display->Boardという階層のDisplayを直接書き換えるのか?
すごい発想だな(藁
0167デフォルトの名無しさんNGNG
>>166

class Osero extends JPanel{
private Board board=new Board(8,8);

public paintComponent(Graphics g){
boardに基づいた処理;
}

private void Board変更(){
....
repaint();
}
}
0168デフォルトの名無しさんNGNG
Osero→Otheroだった。

class Board extends JPanel{
private int[][] array;
public set(int x,int y,int value){
array[x][y]=value;
repaint();
}
0169デフォルトの名無しさんNGNG
すごいバカがいるな
オーバーライドを知らないとは(w

こいつがOO派だったら、
それはそれでまた面白いな。

もしかしてこのスレには、
真性無知アンチOO
勘違いOO
努力の足りないアンチOO
天才OO使い
の4カテゴリーの人間がいたりして。
0170デフォルトの名無しさんNGNG
>>168

Model と View 分けなよ。(Java に特化したことを言うと、Swing 使うまでもないんでない? AWT でいいよ)
0171デフォルトの名無しさんNGNG
Java厨はデザパタを知らないっとφ(..)メモメモ
0172デフォルトの名無しさんNGNG
>>171 やはり時代は Ruby ということですか。
0173デフォルトの名無しさんNGNG
>>169
おい。秘密をばらしたら、
機密漏洩罪で処罰するぞ。
0174デフォルトの名無しさんNGNG
時代はVB.NET!!!!
0175デフォルトの名無しさんNGNG
>>171

けどなー、こういう経過を経てオブジェクト指向っていうのは学ぶもんだと思うよ。
知ったかしてりゃ何れは本質を知ることができる。(OOを嫌う奴は多分、永久にまともなプログラム組めない)
0176プロの逝って良しの1NGNG
能書きばかりで動くモノのソースも上げられないOO厨の集うスレはここですか?
0177デフォルトの名無しさんNGNG
>>176
じゃあお前から上げてみろよ。ヴォケが!
0178プロの逝って良しの1NGNG
>>162
完全情報有限ゲームでは先手必勝か後手必勝かどっちか。
0179プロの逝って良しの1NGNG
>>177
>>159
http://megami.s1.x-beat.com/upload/upload.cgi
[megami0131.lzh] Othelloソース(Javaファイル) 5 2002年09/30(月)05:17
0180デフォルトの名無しさんNGNG
                     マチクタビレタ
☆ チン                   マチクタビレター            
        ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ヽ ___\(\・∀・)< OO版のソースまだー?
             \_/⊂ ⊂_)_ \____________
          / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
        l ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| .|
        |   み か ん   |/
0181デフォルトの名無しさんNGNG
>>178
引き分けがあるだろ。
0182デフォルトの名無しさんNGNG
>>180

簡単過ぎて作る気になれない。
0183デフォルトの名無しさんNGNG
>>159 は頭いいよ。よくやるよなぁ。
(天才に OO は無用という証明だな)
0184デフォルトの名無しさんNGNG
プッ
0185デフォルトの名無しさんNGNG
なんだこの激しくくだらないスレは
0186デフォルトの名無しさんNGNG
OO な オセロ作っちゃうぞ!
0187デフォルトの名無しさんNGNG
>>159
OOどころかモジュール化さえしてないのな。
0188デフォルトの名無しさんNGNG
>>159
読みやすいし良いソースだと思う。でも手続き型のソースって OO のより作り手の
スキルに左右されるから大人数でやるとピンキリになっちまうんだよなぁ、などと
久しぶりに手続きソース見て嫌なこと思い出してみるテスト。

ところで、その時間までオセロ作ってて仕事はどうしたの?
0189デフォルトの名無しさんNGNG
問題は拡張性だな。サンプル程度にはいいけど製品レベルの完成度に
するためにはOOにした方がやりやすいね。
0190デフォルトの名無しさんNGNG
>Model と View 分けなよ。(Java に特化したことを言うと、Swing 使うまでもないんでない? AWT でいいよ)
どっちでもいいんじゃない?

ところでATWよりSWINGを使った方がいい時ってどういうとき?
0191デフォルトの名無しさんNGNG
>>188

putPiece っていう関数の名前の付け方からもこなれている感じはする。


476 行目の reverseSub は、軽くポリモーフィズム的と思った。
(同じメソッドでも動作は違う。引数に方向を渡しているんだが。)
0192デフォルトの名無しさんNGNG
>>190

表とか、ツリーとか、そういう高度なコンポーネント使いたいとき
じゃないかしら。
0193デフォルトの名無しさんNGNG
ポリモーフィズムってそういう意味かぁ?
0194デフォルトの名無しさんNGNG
>>188
聞くだけ野暮ってもんでしょう
0195デフォルトの名無しさんNGNG
>>159
たしかにいいソースだと思う、手続き型としては。
でも、全体像を把握しにくい事は確かだし、
新しいコンピューターのアルゴリズムを
今あるのとは別な形で追加する方法が
それなりに難しかったりすると思う。

ここでOOのソースが欲しいところだけどね。

OOはコードの量は多くなってしまうけど、
非OOのコードに比べたら読みやすいし、改良しやすいと思うよ。

ところで、アンドゥ機能はついてますか?
0196デフォルトの名無しさんNGNG
>>195
159じゃないけどコンピュータの思考アルゴリズムを追加するのは
すごく簡単だと思うよ。computer関数を書き換えて呼び出してるところを
変えるだけじゃん。
ゲーム中に動的に変えたくなったら初めてポリモの出番じゃないの?
あのコードならそのときに失うものなにもない。YAGNIだね

アンドゥ機能もしかり。ターンごとにmaster_board変数をVectorにでも突っ込んでおけば
それだけでアンドゥになるんじゃない?
0197デフォルトの名無しさんNGNG
そりゃその程度の規模なら簡単なわけで
大規模かつ複雑になると
「関数を書き換えて呼び出してるところを
変えるだけ」
がえらい手間になって
0198デフォルトの名無しさんNGNG
YAGNI
You’re NOT gonna need it!
いずれ必要には「ならない」!


それは本当に必要にならない・・・のか?

いるものを作らないのはYAGNIじゃないよな。
0199デフォルトの名無しさんNGNG
>ゲーム中に動的に変えたくなったら初めてポリモの出番じゃないの?
ユーザーはコードを書き換えて選択するのでしょうか?w
0200デフォルトの名無しさんNGNG
>>199
おまえ…
0201デフォルトの名無しさんNGNG
何いってんの?
0202デフォルトの名無しさんNGNG
>>199
えーと、そこ笑うところでしたか?
0203デフォルトの名無しさんNGNG
ストラテジー
0204デフォルトの名無しさんNGNG
>>199
いいね、荒野の中に咲く一輪の花のようなギャグってw
0205デフォルトの名無しさんNGNG
>>169
> もしかしてこのスレには、
> 真性無知アンチOO
> 勘違いOO
> 努力の足りないアンチOO
> 天才OO使い
> の4カテゴリーの人間がいたりして。
いいえ「天才OO使い」はいません
その証拠に、能書きばかりたれているだけで、
全然OO版オセロのソースが出てきません。
0206デフォルトの名無しさんNGNG
                     マチクタビレタ
☆ チン                   マチクタビレター            
        ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ヽ ___\(\・∀・)< OO版のソースまだー?
             \_/⊂ ⊂_)_ \____________
          / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
        l ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| .|
        |   み か ん   |/
0207デフォルトの名無しさんNGNG
結論:
OOではオセロ書けない
0208デフォルトの名無しさんNGNG
何故学生相手に本気になる必要がある?
対価を払う気あるのか?
0209デフォルトの名無しさんNGNG
>>206
今作ってんだけどw
斜め見下ろしって部分はもう完成してるからあとはゲーム固有部分の作成のみ
大学受験終わったら完成させるよ。
0210デフォルトの名無しさんNGNG
つうか同じ仕様で作らないと比較のしようがないんだが。

ある程度決めて作ったほうがおもしろいんじゃない?

教科書どおりなら仕様が膨らむほどOOが有利になるはず
0211デフォルトの名無しさんNGNG
仕様を先に決めないってのは良くないね。
OO派、非OO派両方とも自分都合の良い仕様にするから。
このスレは戦場での話だから実際の戦場さながらの現実的な仕様求む。
0212デフォルトの名無しさんNGNG
>アンドゥ機能もしかり。ターンごとにmaster_board変数をVectorにでも突っ込んでおけば
>それだけでアンドゥになるんじゃない?
アフォ?
あのコードにアンドゥ機能つけてみろよ。
アンドゥ機能をつけるという事は
インターフェースが一つ増えるという事だぞ。
ココで言うアンドゥって
一手進める、一手戻るだよな?
さらに相手がコンピューターなら2手戻るわけか?
あのコードに付け加えるのは無理だな。
0213デフォルトの名無しさんNGNG
>>211
> 戦場での話だから実際の戦場さながらの現実的な仕様求む。
取りあえず>>159のソースが仕様でいいんじゃないか?
それで何か不満があるのか?
適当な仕様を作って、五月雨のような仕様変更こそが戦場だ
OOは仕様変更に強いんだろ?
それを口だけでなくソースコードでみせてみろ。
0214デフォルトの名無しさんNGNG
なんでこのスレの連中はケンカ腰なんだ?
0215デフォルトの名無しさんNGNG
とりあえず、誰かOOで>>159相当のコード作ってよ。俺は作らないけど。
それから、OO、非OOのコードに対して仕様変更をしてみるってのはどう?
つまり>>159のコードは完成じゃなくスタート地点ということね。
0216デフォルトの名無しさんNGNG
>>214
> なんでこのスレの連中はケンカ腰なんだ?
戦場だから。煽るか罵られるかの殺伐とした雰囲気こそが戦場に相応しい

>>215
×:俺は作らないけど。
○:俺は作れないけど。
ま、どっちにしても口だけの能なし野郎であることは変わらないけどな。
0217デフォルトの名無しさんNGNG
>>215
暇つぶしに 159のコードをリファクタリングしてる。
出来たらウプするかも。
0218デフォルトの名無しさんNGNG
あの程度のコードはリファクタリングする価値ないよ。
フルスクラッチで書いたらいいよ。
0219デフォルトの名無しさんNGNG
>>215
賛成。非OOのはできてるのでOO厨のみなさん
スタート地点に立てるように頑張ってくださ〜い。
0220デフォルトの名無しさんNGNG
OOだとか非OOだとか関係ないな。
低水準な考えだ。
開発プロセスをどう効率よくやるかが問題であるわけだから、
XPをちゃんと勉強しよう。
まぁWindowsXPをまだ入れてないやつは
体感してないわけだが、
XPは素晴らしい。
開発プロセスの効率を高めることができるし、
モチベーションも高められる。
OOとか非OOとかヤイヤイ逝ってるようじゃ、
まだまだだな。
0221デフォルトの名無しさんNGNG
>>220 ネタはいらん。
0222デフォルトの名無しさんNGNG
>>221
XPを知らん馬鹿は参加しなくていいのですよ。
0223デフォルトの名無しさんNGNG
OO厨。ソースまだ〜?
0224デフォルトの名無しさんNGNG
結局、コード作ってきたのは>>1だけか・・・
まあ、スレ立てたぐらいだからよっぽどこのスレに熱心なんだね
0225デフォルトの名無しさんNGNG
>>159 は、確かに手続き言語的にはよいソースだと思う。
しかし、有能とされるヤシが、実際JAVAのプロジェクトで、
ああ言うコード出してくるから困る。正直、設計はやらせたくない。
0226デフォルトの名無しさんNGNG
>>225
>>>159 は、確かに手続き言語的にはよいソースだと思う。
いや、そんなことはない。
グローバル変数が複雑に絡まり合い不協和音を奏でているよ。
0227デフォルトの名無しさんNGNG
どうでもいいけど期限決めようよ。
OO版は10月2日いっぱいで出来なかったら駄目って事でいい?
既に>>159から丸1日以上経ってるし・・。

もし間に合わなかったら、オセロさえ納期内に作れない=OO役立たず
ということでいいよね。>ALL

参考になるソースだってあるんだから、
1から作るのとは全く難度が違うけどね。
0228デフォルトの名無しさんNGNG
>>227
土日はさまんと無理じゃない? みんな仕事してんだし。
0229デフォルトの名無しさんNGNG
通りすがりだが、週のど真ん中に
そんなヒマなことやれる奴いるのか?
0230デフォルトの名無しさんNGNG
>>227
( ´,_ゝ`)プッ
0231デフォルトの名無しさんNGNG
んなもん探せば山ほどあるよ
0232デフォルトの名無しさんNGNG
>>228
無職のOO厨房ぐらいいるだろ(w
0233デフォルトの名無しさんNGNG
なら、手続き型はあれが最高と考えて良いんだな?
0234デフォルトの名無しさんNGNG
しばらく見ないうちにずいぶん手続き型の質が低下したなw
0235デフォルトの名無しさんNGNG
>>227
じゃあ お前も明後日までにオセロを書いて来い
期限内に作れない=227役立たず
ということでいいよね。>ALL
0236デフォルトの名無しさんNGNG
ヘタレOO厨ども必死だな(プ
0237デフォルトの名無しさんNGNG
>>233プロの逝って良しの1に聞けよ(w
0238逝って良しの1NGNG
14日月曜まで待ってもいいんじゃない?
0239デフォルトの名無しさんNGNG
>>238
正直14日は長すぎ。ネタが枯れる。
せいぜい今週中じゃないの?
0240デフォルトの名無しさんNGNG
つーか一旦、>>227の言う様に今日いっぱいで締め切って、
それから考えようや。既に作り始めてるヤシもいるかもしれんし。

その後新しい課題を考えて、それを両者一週間とか期限設けて
競うとかの方がフェアだよ。
0241逝って良しの1NGNG
ネタはバージョンアップで持たせるよ。
OO版のソース見たいし。
0242デフォルトの名無しさんNGNG
なんで、良スレに変わってんだYO!
0243デフォルトの名無しさんNGNG
>>241
一手進める、一手戻す
というのが実装できたら、
俺のOOバージョンウプします。
OOである自信ないけど。
0244HN ◆wMOjCT4s NGNG
>>220

一昨日あたりから OO Othello 作り始めてるんだけど
俺が欲しい機能が

* コマを置いた時のアニメーション
* コマをひっくり返すアニメーション

これはやりたい。
XP 的には、顧客がこの板の住人だとするならば、まずはとりあえずゲームできるもの
を作れってことになるんだろうが、仕事じゃあるまいし。OO 的に、すぐゲームになる
バージョンのものも作ろうとしてもやる気せん。

顧客は「俺」ゆえに、ちょっと複雑になるけど、好きに作りたいね。
0245デフォルトの名無しさんNGNG
>>244
XP的には、●→@→=→O→○でいいよ。
アニメーションしたきゃ、拾ってきたリソースでも使ってくれ。
まずプロトタイプ提出ありきだ。
0246デフォルトの名無しさんNGNG
まさかCUIじゃねーよなw
プロトタイプでもCUIじゃやらねーよw
0247デフォルトの名無しさんNGNG
>>245

リソースもそうだが、プログラミングも違うのよ。

A) コマを置いてひっくり返す -> モデルを参照し画面を更新
B) コマを置く -> 各種アニメ担当オブジェクトに通知 -> アニメ終了をゲームモデルに通知 -> ひっくり返す -> 各種アニメ担当オブジェクトに通知 -> アニメ終了をゲームモデルに通知


B だと、ちょいメンドイ(けど、既にあるものよりはマシなものを作りたいんだな)
0248 NGNG
とりあえず動くものを作れ。
アニメーションは次のイテレーションで実装すべし。
0249デフォルトの名無しさんNGNG
手持ちのOOOthelloのソースあるけど
良スレになるから貼ってあげない!
0250デフォルトの名無しさんNGNG
問題は、手続き型のよりも良いかどうか。
0251デフォルトの名無しさんNGNG
>>249
自信がないのか?プ
0252デフォルトの名無しさんNGNG
あと5分
■ このスレッドは過去ログ倉庫に格納されています