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

オブジェクト指向は戦場では必要無し その2

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

前スレ http://pc.2ch.net/test/read.cgi/tech/1011997945/

いつの間にかスレが1000に達しようとしていました。たくさん
の意見ありがとうございます。
前スレでの議論の結果、やはりというか当然というかオブジェ
クト指向の戦場での実績や有効性には大きく疑問が残るという
結果となりました。。。
皆さんも本当に何が残ってゆく技術なのか、何がイマイチぱっ
とせずに中途半端に終る技術なのか見きわめて、技術を習得して
いきましょう。
0153148NGNG
>>149
サーブレットならシングルトンが使えるから
「一回ごとに作っては入れなおして消す」
みたいなことしなくていい。
上層ではDBを意識せずOOとして使えるようには組めます。
0154デフォルトの名無しさんNGNG
>>152
>○データ重視設計で十分破綻なく設計できる
>○請負や短期派遣で作ってしまうパターンが...
>○オブジェクト指向設計は案外方言が多く統...
3、はあまり実感わかないけど、だいたいその通りっすね。

っつうか小中規模で破綻するような状態では・・・
OOつかおうがなにしようがダメじゃーんって感じで。
0155仕様書無しさんNGNG
ソフトウェアメトリクス
この技術は重要だと思うよ。
見積もり誤りはデスマーチの始まりなのはみんなわかってんだから。
ただ、ソースコードが無い状態でどうやってメトリクスするのか?
OOPの達人たちは何をどうしているのか?
0156デフォルトの名無しさんNGNG
>>149
>クラスがただ単にデータの入れものになってしまって

メソッドの無いクラスを作ってはいけないという規則は無いよ。
0157デフォルトの名無しさんNGNG
>>153
147その他っす

シングルトンつかって期限つきのキャッシュこしらえて
企業の組織とか、使いまわしきくようなデータは使いま
わす(深いクローンで)設計にしようかと思ってます。
いまのところ。
んで、社員とかもろもろのデータとかは、要求ごとにR
DBから適宜もってきて、部とか課とかに関連づけよう
かという考えなんす。
で、そこらへんの処理するクラスをきりわけておけば、
上層からはDB意識しないですむようになるかな・・・と。

ただ、それなりにメンドクサイなーと・・・
SQLに全条件つっこんで欲しい一覧表形式でデータ取
り出して必要なパラメータだけもったデータクラスにつ
っこんで・・・ってやりたくなっちゃった。
そんな感じっす。
0158148NGNG
パラメーターからSQL文を組み立てて表を返すメソッドでも組んだら?
DB見るだけなら。
トランザクションだのセッションだのが多いと上層組んで忘れたくなる
けどね。
0159デフォルトの名無しさんNGNG
>>157

上層は上層の都合で設計するのは正しい事です。
最初からパフォーマンスを追及するとトンデモOO設計の出来上がり。
パフォーマンスアップにはUnitTestでリファクタリング、これ最強。
0160 NGNG
パフォーマンス追求でrowid多用してあやうく死ぬところだったのは
内緒だ。
0161157NGNG
>>159
ラジャーっす!!
そう強く言い切ってもらえるといい感じっす
0162デフォルトの名無しさんNGNG
とにかく動くこと! これが最低限必要なことなのよ。
判ってくれ!
0163デフォルトの名無しさんNGNG
納期内に動くものをつくる。
そういう話はOOとかなんとか以前の問題っすね。
0164デフォルトの名無しさんNGNG
マニファクチャーって言葉を思い出したよ。
ネクタイ締めて、スーツ着てるけど、やってることは
家内制手工業か。エレガントな解法が見つかったとき職を失う。
0165デフォルトの名無しさんNGNG
戦場で必要なのは兵隊の血と涙のみよね
0166デフォルトの名無しさんNGNG
>>162
> とにかく動くこと! これが最低限必要なことなのよ。
当然。そして競争に勝つためにさらに良い方法を目指す。
いつまでも最低限のままじゃだめだよ。
0167デフォルトの名無しさんNGNG
関係ないですがOOでOSを組む内容の本が昔ありましたが、
すでに絶版になっているようです。
0168デフォルトの名無しさんNGNG
>>166禿げDO

ところで1は、OO自体が有効じゃないというてるの?
>あくまでちゃんと設計され、ちゃんと実装されたクラスがあるという前提での話。
ならOOは有効って意味じゃない?ねぇ?
OOを有効に使えるPG、SEがいないってことと、
OOが有効かどうかってのは別の問題ちゃうん?
どうなの?
0169デフォルトの名無しさんNGNG
つーかむちゃくちゃな顧客の要求を整理して、仕事の内容を整理する
ことの方が重要じゃねーの。10年SEやっててそう思った。
なにをしたいかってのが判ってない顧客が多すぎるんだよ。イメージ先行で。
0170デフォルトの名無しさんNGNG
最近は、「仕様は変わるもん」って開き直った開発手法が
はやってるね
0171デフォルトの名無しさんNGNG
>百七十 違うよ。「仕様は変えるもの」だろ。
矛盾した仕様でコードはかけねーよ。手で出来ないことは
機械には絶対出来ないって。
0172デフォルトの名無しさんNGNG
>>171
「仕様は変わるもん」って矛盾した仕様でもとりあえず組む
ってことで言ったんじゃないYO。
0173デフォルトの名無しさんNGNG
>>168がいいこといった
よってこのスレ終了 おつかれさまでした〜
0174デフォルトの名無しさんNGNG
業務だとよくわかんないけど
とりあえず、一般的なアプリケーションでは
OOは有効という事でいいのかな?
0175 NGNG
>>174
使って間違い無いのはGUI部品だけ。
0176デフォルトの名無しさんNGNG
業務でも有効だけど何か?
でも派遣や委託、DQソにやらせるなら、処理の末端部分、つまり
「このフローをココにかけ」レベルまで落とし込んでやらないと
だめ (OO でも実装の末端は細かい処理の集まり)。従って >>1 は
末端のフローしか書かせてもらったことのないドコモ社員。
0177デフォルトの名無しさんNGNG
>>155
工程の見積もりはFP法でも使ってくれ。
メトリクスはソースコードが健全かどうかを測るものだ。
例えばリファクタリングの基準に使える。
0178デフォルトの名無しさんNGNG
つーかDQNにOOやらせちゃ駄目。
0179 NGNG
つーかOOでフローなど言語道断。
0180デフォルトの名無しさんNGNG
>>178
つーかDQNに仕事やらせちゃ駄目
0181 NGNG
つーかそれじゃコボラーとおんなじ。OOにした意味無し。
0182デフォルトの名無しさんNGNG
>>180
つーかDQNをプロジェクトに入れちゃ駄目
0183デフォルトの名無しさんNGNG
>>182
つーかPMがDQNだからそれ無理
0184デフォルトの名無しさんNGNG
必死で勉強したオブジェクト指向で作品を作りたくて仕方のない、
しったか君はプロジェクトでつまはじき。
0185外人NGNG
日本ってほんっとレベル低いね(藁
0186デフォルトの名無しさんNGNG
>>185
おい外人、お前らなぁUNICODEみたいな糞規格つくるんじゃねーよ。
0187デフォルトの名無しさんNGNG
>>185
おい外人、おまえらの国際化とは ISO-8859-X 圏だけか?
ウワァァン
0188デフォルトの名無しさんNGNG
おい日本人、お前らさっさと英語を公用語にしる!
0189チョソ通信NGNG
日本が生き残る道はハソグルを公用語にすることニダー
0190デフォルトの名無しさんNGNG

話が脱糞してます…
0191 NGNG
まあ、あれだ、散々探しまわった挙句、究極の開発手法は
COBOLでずーっと前からやってた手法と変わんなかったわけだ。
童話「青い鳥」と同じという
心温まるお話でした。

0192デフォルトの名無しさんNGNG
だってさぁ、石投げてアサインできるのは手続きを順番通りに
並べるしかできない奴らばっかなんだもん… それ以上の知識
を得ようという奴は少ないし。

手法の問題というより業界意識の問題かな。アウシュビッツも
そうだけど、安定した作業をこなすには考えないで黙々とこなす
事務的な人が必要という罠。
0193デフォルトの名無しさんNGNG

開発=アウシュビッツ論が提出されました。
0194デフォルトの名無しさんNGNG
開発はアウシュビッツである。そこは脚色された殺人鬼が喜びに酔い
しれながらユダヤ人を殺害してゆくのではなく、大量のユダヤ人を効率
よく殺してゆくため与えられた作業を黙々とこなす作業員ばかりだった。

# 文才ねぇな、おれ…
0195デフォルトの名無しさんNGNG
>>183
経営者がDQNですが、なにか?
0196デフォルトの名無しさんNGNG
>>195
顧客がDQNですが、なにか?
0197デフォルトの名無しさんNGNG
>>196
小泉みたいなハリボテを支持してしまうDQN国民ですが、なにか?
0198デフォルトの名無しさんNGNG
>>192
手続きを順番通りに 並べる方法で使えるからクラスライブラリは便利なのではないのか?
ひとりでやってるならともかく、
そういうふうに下位コーダに作業出来るようにするのが上位プログラマの仕事だろ?

みんながクラス作る側に回ったら、そりゃ船頭多くて山に登ってしまうよ
0199デフォルトの名無しさんNGNG
いつまでも戦争を止めないDQN星人ですが、なにか?
0200デフォルトの名無しさんNGNG
上司の子供が珍ですが何か?
0201デフォルトの名無しさんNGNG
結局ここにいたOO野郎は戦場を経験してもない、
机上理論野郎だったということだね。
0202デフォルトの名無しさんNGNG
>>198

「下位コーダ」とやらにはクラスを作らせない、インターフェイスは変えさせない
って事か?
そういうことやってるから巨大なクラスが出来上がってクライアントからパフォー
マンスでクレームが来るんだよ。
いい加減ウォーターフォールの幻想は捨てろよな。
0203デフォルトの名無しさんNGNG
>>201
いや、むしろ逆だろ。
0204デフォルトの名無しさんNGNG
>>201

残業は勲章だと思ってる勘違い野郎か?

確かに、

戦争=毎回デスマーチ

と言う意味では未経験だが、何か?
0205デフォルトの名無しさんNGNG
>>202
 なんで? パフォーマンスに関係する所なんて触らせたりしないよ?
逆に思うんだけど、そんな所まで触らせてまともなものが出来るなんて
よほど良質な下請使ってるんだね。 よかったら紹介してよ
0206 NGNG
>>201
つい最近DQNの援護射撃で味方撃ち殺しプロジェクトで地獄を見てきましたが何か?
0207デフォルトの名無しさんNGNG
>>202
厨にクラス設計させると大変なことになるって…
0208デフォルトの名無しさんNGNG
>>202
DQNは通常パフォーマンスに影響しない部分でも激重コーディング
しますが何か?
0209202NGNG
>>205
>パフォーマンスに関係する所なんて触らせたりしないよ?

自分をコーダとしか思ってない奴にクラスライブラリ使わせると、とんでもない
ソースを書いてきやがりませんか?
関数呼び出しの感覚で高コストインスタンスをループ中で毎回生成したりとか。
俺はそういう意識の奴が外注で来たら、コードレビュー程度では超えられない溝が
有るとみなして即切り。
逆にその辺がわかってるレベルの外注なら詳細設計を任す事も良くやる。
担当範囲でのクラス新設は自由。もちろんレビューはするけどね。
0210デフォルトの名無しさんNGNG
>>208
そもそもDQNは「パフォーマンス」という言葉や意味を知らないのですが、何か?
0211デフォルトの名無しさんNGNG
>>209
オレはコーダより上だというレベルでも
とんでもないソースを書いてきやがりますが、なにか?
0212DQNの評価NGNG
非OO=役立たず
 OO=自爆テロ
0213デフォルトの名無しさんNGNG
try{
  for(int i=0; i<100000; i++){
    Connection c = DriverManager.getConnection();
    String s = "SELECT FOO FROM BAR WHERE ID=" + i;
    ResultSet r = c.createStatement().executeQuery(s);
    r.next();
    ret[i] = r.getString(1);
    c.close();
  }
} catch(ArrayIndexOutOfBoundException ex){
  ;
}

ループの終了条件は配列外参照という罠。
>>202 はこんなコード見たことないんでしょ (鬱
0214202NGNG
>>213

いや、だからそんな馬鹿コード書く外注は即チェンジなんだってば。
社内メンバがそれ書いたらどうするかって?
上司に言ってチームから外してもらいます。俺を。
0215俺なら死刑NGNG
>>213
初めて見た、なんてすばらしいコードだ…
0216あまりのすばらしさにNGNG
屁がでました
0217デフォルトの名無しさんNGNG
>>214 なんだいつでも逃げられるようなシタッパか
0218デフォルトの名無しさんNGNG
>>217
それなりに実力がある人間なら、ほんっとに開発体制が腐ってると思ったら

 この仕事終わったら、転職させてもらいます

とは言えると思うが。(会社を経営してる人間は除く)
0219デフォルトの名無しさんNGNG
良い物見せてもらったので age
0220デフォルトの名無しさんNGNG
>>218
”外注は即チェンジ”なんてのたまってられる環境は転職したってそうは見つかるもんじゃない。

その前に、そんなせりふが出るような人間に プログラマーとしての能力は認められても
マネジメント能力は期待出来ない。 それだけの人間だと思われてるよ。
0221俺なら市中引き回しNGNG
>>213
すばらしぃ・・・間違いなく俺の拳がコーダーの顔面を直撃しているだろう。
0222デフォルトの名無しさんNGNG
>>213
おれのコードだ!
0223202NGNG
>>220

なんで?
外注のレベルが低いのは俺の責任か?
無理してDQN外注使って後で責任追及されるのは俺なんだから、早めにリスク回避
するのが当然だろ。
もしかしてDQNを更正させるのもマネジメントの一部なのか?
0224俺なら市中引き回しNGNG
>>221
一発殴って言い?
0225デフォルトの名無しさんNGNG
プロジェクト要員の面接時に >>213 のコードの悪い部分を全て出して
もらうっての良いんじゃない?

つうかこれはちょっとやばすぎるだろ…
オチはコピペで大量生産と睨んだ。
0226デフォルトの名無しさんNGNG
>>224 自分をか(w
0227 NGNG
ループの終了よりコネクション数の方が異常だと思うが・・・。
0228 NGNG
あ、いちおうcloseしてるのか。
いちいち。
0229デフォルトの名無しさんNGNG
>>223 
すこしいいすぎたよ。すまんな

外注を好きに選べる今の環境は幸せだと思うよ。大事にするといい
0230デフォルトの名無しさんNGNG
>>227,228

コネクションプーリング関連でサーバにすさまじく負荷をかけると思われ。
0231デフォルトの名無しさんNGNG
外注を「下請け」「下位コーダー」と呼んで枠にはまった単純作業しかさせなけ
れば、そりゃ能力がある外注は別のところに逃げるって。
0232213NGNG
>>225
> オチはコピペで大量生産と睨んだ。

当たり。元々はいくつかの処理を走らすと開放されないDB接続が
発生していたので調査したしたのが事の始まり。もうびっくりと
いうかなんと言うか、マジ笑えました。とはいえ一応親会社みたいな
ところから頼み込んで入ってもらった人達なので切る事もまま
ならず、結局資料まとめてた新人に修正させました (俺も手一杯
だったし)。こんなすごいお方たちにクラス分割なんて申し訳なくて (;´д`)
0233213NGNG
・ループごとにコネクションを取得/クローズしている (本当はコネクションプールから)
・配列に値をとるのに毎回 SQL を投げている (配列は 200 個)
・配列外参照でループを抜けるときにクローズされない
・その他の例外でもクローズされない
・ちゅうかそもそも配列外参照でループ抜けるな
・規約に入ってたトランザクション分離レベル設定も自動コミット設定も無視

が正解 (他にある?)
0234 NGNG
俺はループの中でコネクション確保してる所まで見て
頭の中が真っ白になったYO!
その先読めないYO!
0235デフォルトの名無しさんNGNG
あー俺も過去に見たことあるなー、設定ファイル感覚でデータベースから
値を「一個一個」とってる奴。今はもういないが (藁
0236っていうかNGNG
こんなやり方もあったんだ!と目から鱗
0237213NGNG
なんかいろいろ思い出しちまった。

「動かしてて遅いと思いませんでした?」
「アハハ♪ボクのマチン、セレロン 500 に Win98 でしたから♪」

  鯖・側・で・動・い・て・ん・だ・よ、カ・ス!!

ダブルクリックが好きな奴らでな、ウィンドウの×ボタンをダブル
クリック、[スタート] メニューをダブルクリック、OKボタンも
ダブルクリック…。結局こいつらのためにダブルクリックするだけ
で必要なファイル全部コンパイルするバッチファイル書いてやったさ、
おー書いたとも。なんか文句ある?あーーーーーすっきり!
0238デフォルトの名無しさんNGNG
>>237
ワロタ
0239デフォルトの名無しさんNGNG
>>237 やるなら SQLパッケージのラッパー作っておけばトータル楽だったんじゃないの?
0240デフォルトの名無しさんNGNG
>>239
あたりだね。ドキュソにDriverManagerを直で触らせるような状況に
した人がわるいきもする。バカにバカコードを書かせない技だね。
0241デフォルトの名無しさんNGNG
まあこんな奴がけっこうウヨウヨいるんだろうな。
だとするとOOなんてまともに普及するわきゃねーんだよ。
本国アメリカでもなんだかんだいって同じようなもん
0242213NGNG
あのコードはラッパー抜きの簡略コードで書いちゃいました。
DriverManager ってのは本当はデータソースです。
0243 NGNG
>>237
奴らって何?一人じゃないの?そんな事すんのは。
0244お好み醤油NGNG
>>213 のコードって、書いてる奴の思考が読めておもしろい。
「要は適当な回数だけ回してえ、query投げてテキトーに配列に入れときゃいいんでしょ」
っていう感じ。

とても日常的というか素人的なんだけど、
でも、人間がいちいち最適なループ構造を考えなきゃいけないような
現在の大部分のプログラミング言語ははっきりいって不完全だと思う。

こういう、最適化をまったく考えられないような素人が書くコードでも、
そこそこまともに動くようなフレームワーク(言語とか概念とか)を
作っていかないとソフトウエア業界は近い将来立ちゆかなくなるだろう。
0245244NGNG
しまった、名前が残ってた…
0246213NGNG
3 人のうち 1 人が作ってコピペでまわされた形跡があった。
質的に VBそこそこC少々×1 + VB厨完全体×2 という感じ
(後で分かった)。本業務から外れたメンテナンス機能だった
のでこっちも少々油断しすぎていた (藁。まぁコードはかな
り簡略化したけどね、フロー的にあんな具合に動くよ。
0247デフォルトの名無しさんNGNG
>>244
Smalltalkのenumeratingメソッド群、もしくは
Iteratorパターンを覚えよう!
0248デフォルトの名無しさんNGNG
>>244
> ソフトウエア業界は近い将来立ちゆかなくなるだろう
RDBMS なんかは、ある意味で「素人が書くコードでも、 そこそこまともに動くような
フレームワーク」ではあるんだけどね。

OS もデバイスドライバもなし RDBMS もなしって状況で、ファイルシステムを一か
ら実装するのに比べれば、既存の RDBMS を使うのは遥かに楽だし。
0249デフォルトの名無しさんNGNG
>>246
そういうやつって、外注全体のうちどのくらいいるんだろ…
ロジックのコストとかに脳みそがいかない人がいるっていうのは、言語
使える使えないと全く違う話だというのは、最近ワカタヨ。

Cを10年やってるベテラン扱いの人が一緒に仕事してるんだけど、確かにCで
コードはかけるんだけど(Javaの仕事なので、CっぽいJavaコードをかかれるが)、
そういうところが腐ってる人がいるよ。おいらが、ソイツのコードを全部チュー
ニングしなおししてるよ。ソイツは俺の倍給料貰ってるよ。理不尽ダーヨ。
0250デフォルトの名無しさんNGNG
>>248
OSとデバドラがあって、ローカルディスクが使えるなら、
なるべくファイルシステム使うようにして欲しいよ。
0251!=248NGNG
>>250

うちはボラと提携してるから無理っス。
0252デフォルトの名無しさんNGNG
>>250
トランザクションと同時アクセス対応が難しいっス。
50万件のレコードを許容時間内に検索するコード書けませン。
デッドロック時がきついっス。

でも不必要に DB 使うのはどうかと思う今日この頃。

# 1 から Oracle を作ったら米国の国家予算が丸ごと必要
# だっつう話をどこかで聞いたような
■ このスレッドは過去ログ倉庫に格納されています