トップページ⇒tech
968コメント317KB

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

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


0685デフォルトの名無しさんNGNG
>>600
あと多分岐選択を忘れてるよ
http://hpcgi1.nifty.com/mizukix/text/textdisplay.pl?file=6-5.txt
【構造化プログラミング】
 ダイクストラ(E.W.Dijkstra)らによって提唱された.
 プログラムの基本制御構造の5つのものだけを用いてプログラミング
 せよという指針を持つ。

【基本制御構造】
 連接,選択,多分岐選択,前判定繰返し,後判定繰返し

【構造化定理】
 入り口ひとつ、出口ひとつのプログラムは3つの制御構造の組み合わせで
 すべて表現できるという定理。3つの制御構造とは、以下のものである。



>>684 とりあえず >>683は関数としか言っていないんだから 
 関数型プログラミングパラダイムの事かもしれんと
0686デフォルトの名無しさんNGNG
結局オブジェクト指向のやろうとしてる事は

「入り口ひとつ、出口ひとつのプログラム」 じゃイヤンという事じゃないのかな

その面では構造化プログラミングと対立する概念の部分もあるかもね
0687デフォルトの名無しさんNGNG
>>686
そもそも構造化プログラミングとオブジェクト指向じゃ、語ってる対象が違う。

 構造化プログラミングは、関数/手続きに分解が終わった段階で、その中を
 どう記述するかという話

 オブジェクト指向は、問題をどのようにモデリングするかという話

別に OO で分析/設計して、個々のメソッドは構造化プログラミングにしたがって
書くことは不可能じゃないよ。厳密にやると例外も投げられなくなるからアレだが。
0688 NGNG
>>683
自由度の大きさとOOとは関係ないと思われ。
むしろ、OOは制限の多いパラダイムだと思われ。
0689デフォルトの名無しさんNGNG
オブジェクト指向分析・設計が戦場でダメな理由

1)開発サイクルにおいて分析により多くの労力を費やす事=実コーデング時間の不足
2)スパイラルモデルやラウンドトリップモデル = 最初の設計が疎かになり易い また工程管理が難しい
3)問題領域の分析から入るため、実装仕様の肥大を招き易い
0690デフォルトの名無しさんNGNG
>>689
1 と 2 は矛盾してると思われ。

3 はありがちな話だが、それを防ぐためのスパイラルモデルでもある。汎用性は
そこそこに、適宜リファクタリングせよ、っつーのも小/中規模だとわりと実用的。
0691デフォルトの名無しさんNGNG
長年SEをやってきた経験上から言わせてもらうと、
設計なんぞやらせると、設計を盾に変更に難色を示すプログラマー例が多いので
私は設計なぞさせません。
0692デフォルトの名無しさんNGNG
>>691
変更の可能性のあるポイントを事前に示唆しないお前が悪いんじゃん。
0693デフォルトの名無しさんNGNG
つまんないネタだ・・・
0694デフォルトの名無しさんNGNG
そんなやつでも長年SEが出来るって、なんていうんだ… あ、あれかな?

「日本はまだまだ平和だ」
0695デフォルトの名無しさんNGNG
最近見たな「前者のSE」「後者のSE」。なかなか核心を突いた文章だった.
あれのダメな方だろ。
0696デフォルトの名無しさんNGNG
>>691

長年SEやってて実戦OOはいつ習得したんだ?
そういうSEでまともなOO設計できる奴なんか見たこと無いぞ。
0697デフォルトの名無しさんNGNG
理屈を言うな!
仕事は根性だ!
0698デフォルトの名無しさんNGNG
>>697

たぶんそれは691の口癖だろうな。
設計のマズさを突っ込まれるとつい出るという。
0699デフォルトの名無しさんNGNG
SE って何が仕事なんだろう。
0700デフォルトの名無しさんNGNG
>>697
文系だよね。
理系だったら理屈より他のものを優先させたりしないでね。
0701デフォルトの名無しさんNGNG
>>700

黙れリア厨。
社会に出れば理屈や道理なんか優先順位の下から数えた方が早いんだよ。
0702デフォルトの名無しさんNGNG
>>701
そうでもないぞ。

もちろん組織の間の力関係とかで道理が通らないこともあるが、こと開発に
関しては

 無理を通すとデスマーチ

になるだけだから。分かってるところは、あまり無理をしない。
0703デフォルトの名無しさんNGNG
>>702

じゃあ聞くが、デスマーチが一向に減らないのは何でだ?
691みたいな糞SEがのさばってる証拠だろ。
0704デフォルトの名無しさんNGNG
>>703
そりゃ、あなたの立ってる位置が悪すぎ。

デスマーチに関わらなくても食っていける程度には、まっとうな仕事はあるぞ。
0705デフォルトの名無しさんNGNG
>>704

いまどき食えるだけで満足なの?
とか言ってみるテスト。
0706デフォルトの名無しさんNGNG
>>705
むしろ、デスマーチにはまってるときこそ「食えるだけ」っつー気がするな。
起きて、食って、コード書いて、仕様変更に泣いて、飯を食って、コード書いて、
テストして、家に帰ると午前様。

本を読む時間はおろか、2ちゃんねるで遊んでる暇もありゃしない。
0707703NGNG
>>706
>起きて、食って、

の後に「会社行って」が無いのがやけにリアルだな。
体験記か?
0708デフォルトの名無しさんNGNG
世の中には、デスマーチの指揮をとるのが、楽しくてしかたがない、エラい方もいらっしゃる。
嬉しそうにさしいれもってくるなっつーの…
0709デフォルトの名無しさんNGNG
>>690
矛盾していない
 分析に時間をかけるが最初の設計に時間をかけないのはよくある話し
 分析と称してはグダグダ会議を繰り返し時間を潰し
 スパイラルだといいながらまだ動きもしていない状態で仕様変更
0710デフォルトの名無しさんNGNG
一夜明けたらトンデモな結論でてるな。

>たとえば、>>581が出した短いサンプルコードを見た >>588 の
>>メソッド4つ位で、順次実行べた書きと対して変わらないし。

短いサンプルコードって1Kstep以上あるじゃん。
こんなのクラスライブラリで3行だよ。
0711デフォルトの名無しさんNGNG
>>709
それって、OO分析・設計が駄目な理由というよりは、
駄目な分析・設計したらこーなった、
って話にしか聞こえないんだけど。

例えば構造化分析・設計でも、
ヘッポコな分析・設計すれば
同じような戦場が簡単に発生するわな。
0712デフォルトの名無しさんNGNG
結局は糞Sヨが存在する限りOOなんぞ危なくて使えんわという結論?
0713デフォルトの名無しさんNGNG
>結局は糞Sヨが存在する限りOOなんぞ危なくて使えんわという結論?

だめなやつはなにをやってもだめ。
従来の非OOの設計のほうが危険度が少ないつーだけ。


で、よろしいか?
0714デフォルトの名無しさんNGNG
>>713
よろしいが、だめなやつを減らす努力をしないと何も変わらん。
0715デフォルトの名無しさんNGNG
OOPは誰でも使いこなせるクラスライブラリは出来た。
OOPは使わないと損。

OO分析(OOAだよね)が簡単という話はあまり聞かない気がする。
(でもOO分析とスパイラルアプローチは関係無いよね)
0716デフォルトの名無しさんNGNG
OOだとコーディングが楽になるが、設計の負荷が増える。

つーことは、優秀なSEが低脳なPG使えばいいってことか?
0717デフォルトの名無しさんNGNG
コーディングが楽になったのは事実だけど、
楽なまま終わったんじゃなくて、機能の積み上げが激しくなったね。
もうOOP駆使してもう古い言語やクラスライブラリの無い世界には戻れないって感じ。
その世界にSヨは入れないよ。

Web系はちょっと違うかもしれないけど。
0718デフォルトの名無しさんNGNG
>>713
で非OO設計とは何かというと 画面と印刷物の希望だけ渡されて あとは口頭で聞いて仕上げると
0719デフォルトの名無しさんNGNG
プログラマにもオブジェクト指向設計の知識が要求されるようになってきたんじゃないか?
10年前のようなコーダーはもう生き残れないね。
SEも口先だけではどうにもならなくなってきたんじゃないか。
0720デフォルトの名無しさんNGNG
>>719
オブジェクトの関連は考えてないとトンデモクラスがイパーイできるからそうだね。

オープンソースとの共存を考えると、膨大なコードを読む能力がこれから必要になるね。
膨大なコードとOOPのカプセル化はピッタリなんだけど、オープンソースはC言語かな。
0721デフォルトの名無しさんNGNG
WEB系は違うと聞いてふと思った。
WEB系ってASPとかJSPも含めて
ファイルのサイズはそれなりの大きさになるけど
それを大規模あるいは中規模と勘違いして
OOは大規模には向かないとか言ってたりして・・・
昨今はWEB系が流行りだけどさ。
JSPを例にあげたOO的設計では、
仕様が変わらないTOMCAT以下は、インターフェースでラップして
.jspは使い捨て、という認識で・・・
ejbもフレームワークができてるんで
ejb使ったり、作ったりするのが
OOかどうかは怪しいよ。

そんな勘違い君がいない事を願う。
0722デフォルトの名無しさんNGNG
>>720
甘いと思う
OOPでオープンソースを作ったとすると問題はクラスライブラリの互換性
特にGUIにクラスライブラリを使われてしまうと 合成が出来なくなる。
0723デフォルトの名無しさんNGNG
そういや、別に設計されたクラスライブラリ同士をどう合成するかってのは難しい問題かも
0724デフォルトの名無しさんNGNG
別々のクラスライブラリ同志を合成は出来ないでしょう。

あるクラスライブラリを派生したもの同志なら出来るけど。
0725デフォルトの名無しさんNGNG
>>722
具体例をあげてくれよ
どういうケースで問題があるのか。

クラスライブラリ同士を合成するってどういう意味だ?

フレームークを合成するだったらネタだとしか思えないけど。

WEB系はコーダーって言うんだよ。
プログラマーとは言わない。
0726デフォルトの名無しさんNGNG
>WEB系はコーダーって言うんだよ。 プログラマーとは言わない。

なんかそうみたいだね。WEB系って最先端のイメージだったのに。
これからのWEB系はどうなるんだろう。
0727デフォルトの名無しさんNGNG
>>726
そうなん?
おれんとこじゃコーダーって聞いたことないぞ。
0728デフォルトの名無しさんNGNG
>クラスライブラリ同士を合成するってどういう意味だ?

だから、BCBのTComboBox->ItemsをSTLのVectorに移したり出来ないよね。
BCB同志だったら、TComboBox->ItemsをTStringGrid->Cols[0]に代入とか出来るじゃない。
0729デフォルトの名無しさんNGNG
ドカタが自分でそうよばないのと同じだよ
0730デフォルトの名無しさんNGNG
Web 系は設計事務所と土建屋が明確に分かれているドカタ仕事です。
0731デフォルトの名無しさんNGNG
しかし今面白いのはWeb系
0732デフォルトの名無しさんNGNG
で、Web系ってなんなのよ?
0733デフォルトの名無しさんNGNG
>>728
なーんだ、自分のコーディングの技術がないだけじゃん(w
調てこい、ボケ!!
0734デフォルトの名無しさんNGNG
>>728
大いにウケタ(w

>>732
いまだと .net なのか?

一昔前は IIS + VBScript, JSP とか Apache + Perl が流行ってたけど、あれは面
白いかっつーとそうでもない気がする。全体像を設計するのは楽しいけど、コーディ
ングは単調だし。
0735デフォルトの名無しさんNGNG
>>733
超お願い。技術教えて下さい。
今までVCLばっかりやっててSTLに挑戦しているところだ。
0736デフォルトの名無しさんNGNG
>>735
まずはプログラミング言語 C++ と Effective STL 読みましょう。
0737デフォルトの名無しさんNGNG
>>735
おまえ728か?
STLとか言って言い訳してんじゃねーよ。
まずOOわかれ。
それからSTLだよ。
何でSTLが必要(便利)なのかわかってから使え。
0738デフォルトの名無しさんNGNG
>>737
STL は OO じゃないと思うけど。あれは Generic Programming でしょ。

(仮想関数を一切使わんし)
0739デフォルトの名無しさんNGNG
テンプレートベースのOO?
0740デフォルトの名無しさんNGNG
>737
どうも勘違いしてるみたいだけどSTLは使えるよ。
728に書いたのは、VCL同志では、TStringsから派生した文字列セットは、
まとめて移動できるけど、STLには移動できずにループでまわしてセットしなきゃ
ならんのじゃないの?ってこと。
0741デフォルトの名無しさんNGNG
>>740
STLでできることは全てOOでできる。
でもSTLで書くと、うまくかけるケースがある。
それが何かわからないまま、STLを乱用するのはよくない。
Javaが最初にSTLを実装しなかったのはそのためだと「思う」。
Javaでgenericsが使えるようになるのはいつだっけか?
楽しみだ。
0742デフォルトの名無しさんNGNG
つまり、あえてSTLする必要は無いってこと?

今はJavaはSTL使えるのでしょうか?
0743デフォルトの名無しさんNGNG
>>742 自分で好きなプリプロセッサ作ればいいんじゃない?
0744デフォルトの名無しさんNGNG
>>742
まだ。Generics のサポートは Java 1.4 で入る予定だったが、間に合わず次に
持ち越しになってる。
0745高校生NGNG
>>741,742,743,744
わざわざ作る必要ないだろ!gccが使える環境なら

 %cpp -P foo.java > temp ; mv temp foo.java

でCのプリプロセッサが使えるだろ。。。誰か、本番で
使ってみるチャレンジャーおらんかな?
0746デフォルトの名無しさんNGNG
>>745 Cのプリプロセッサじゃ STLモドキは無理だろ
0747デフォルトの名無しさんNGNG
EPPを使おう
http://staff.aist.go.jp/y-ichisugi/epp/j-index.html
0748 NGNG
言語コンパイラと一緒にしてないのはSUNのミスだね。
プリプロセッサの数だけJavaの方言が出来てしまう。
0749デフォルトの名無しさんNGNG
アホか
一緒に配布したら誰でも使うようになるだろうが。
0750デフォルトの名無しさんNGNG
そうそう.バカがプリプロセッサを喜んで使うと周りが迷惑する.
確かCプログラミングの「教科書」でとんでもないマクロを使いまくって
いたのがあったと記憶している.
Java処理系と一緒に配布しないのは正解.
0751 NGNG
>>749
はあ?
0752デフォルトの名無しさんNGNG
だからJavaはヘッダーファイルというものを否定してるんでは?
プリプロセッサが入っちゃうとヘッダーファイルが出来ちゃう。
0753 NGNG
アンチプリプロセッサは放置しといて、
gccがなくてもVCがインストールされてればCL.EXEで行けることが判明。
0754 NGNG
#includeマンセー
0755 NGNG
#ifdefマンセー
0756デフォルトの名無しさんNGNG
だからぁ、Cのプリプロセッサじゃ STLは作れないって
0757デフォルトの名無しさんNGNG
templateなんていう中途半端なものよりちゃんとしたパラメタ多相型を言語
に導入するほうがずっといい.だから次期Javaまで待て.待てなければGJや
Pizzaを使うと幸せになれる.
0758デフォルトの名無しさんNGNG
次のバージョンのC#にはテンプレートが入るよヽ(´∀`)ノ
0759デフォルトの名無しさんNGNG
Genericsだったらもうダウンロードできるだろ?
0760デフォルトの名無しさんNGNG
SunのGenericsは弱すぎ
関数型言語にどっぷりつかってきたのでPizzaがいい
0761デフォルトの名無しさんNGNG
>>760
それ、危険な考え方じゃない?
0762 NGNG
>>755
よくわからんが、正確にはVCじゃなくてVC++を使用。>CL
0763デフォルトの名無しさんNGNG
>>752
> プリプロセッサが入っちゃうとヘッダーファイルが出来ちゃう。
おいおい…
0764デフォルトの名無しさんNGNG
>>763 STLを内蔵させればSTLについてはあるという事に出来るけど

自作のジェネリックライブラリを作った場合は、何らかの方法でソースで指定する必要が出るでしょ?
0765デフォルトの名無しさんNGNG
>>764
何が言いたいやらさっぱりわからん。
俺がアホなのか?
0766763NGNG
>>765
俺も分からんから、気にするな。
0767デフォルトの名無しさんNGNG
"ジェネリック"ライブラリのジェネリックってただの名称じゃないのか?
0768デフォルトの名無しさんNGNG
>>765
だから、自作のテンプレート関数を書いたとするよ。
それをいちいちコピペするんじゃ テンプレート関数にする意味ないでしょ?
テンプレート関数がどこにあるか指定する必要が最低あるでしょ?
それはJAVAの文法だと先頭に宣言する必要があって、やっぱりヘッダーファイルと呼ぶんじゃないの?
0769デフォルトの名無しさんNGNG
>>768
それって、上にいくつか出てる Java の Generics の実装を見た上で言ってるのか?
0770765NGNG
>>768
やっぱりわからん。
Javaをよく知らんのか?
0771デフォルトの名無しさんNGNG
>>768
STLがヘッダーファイルだから、
テンプレートが入ると必ずincludeしなきゃならない、
と思ってるんだNE!
0772デフォルトの名無しさんNGNG
>>768
コンパイラも新しいのが必要になるんだから、
-templatepathとかオプション追加すれば
いいんじゃないの?
0773デフォルトの名無しさんNGNG
>>768
もういいから JavaWorld の特集読んで出直してきてよ
0774デフォルトの名無しさんNGNG
>>773
768じゃないけど、そういう言い方は嫌だな。
0775768NGNG
勉強不足な俺が悪いんだからもういいですが

import で、テンプレートを指定するか、別の宣言になるか判らないけど、インポート宣言が必要になるだろうし
STL程強力なライブラリを実現するためには、
そのインポートされるライブラリは完全にはコンパイルされない状態でないと難しい筈
つまり、ライブラリだけを差し替えて動かすためには どこかで再コンパイルが必要になる筈だと
思ったわけです。 それが解決されているならいいです

0776高校生NGNG
2chでJavaの標準ヘッダー作ったらどうよ?お前等も少しは貢献しないとな!
#define BEGIN {
#define END }
#define IF if (
#define THEN ) {
#define ELSE } else {
...
誰か草案まとめてくれ。。。
0777デフォルトの名無しさんNGNG
次>>777が>>1の結論を出す!
0778デフォルトの名無しさんNGNG
おまえじゃん
0779デフォルトの名無しさんNGNG
正直、長いこと C++ やってるとだんだん template 使わなくならない?
だから俺 Java 始めたときテンプレートなくても変な気しなかったけど。

# 使うと作るはまた別か。あの頃に STL があったら使ってたかも
# しれんが。
0780デフォルトの名無しさんNGNG
>>779
templateキーワード自体はめったに使わない(w
がSTLなんかは頻繁に使う。
0781デフォルトの名無しさんNGNG
>>779
いや、むしろよく使うようになるけど。

「作る」方にはアルゴリズムなどを自分で書く機会は少ないけど、Mixin を書いたり
Facade には使うけどな。template 使った Facade は、こんな感じね。

template<
  class TWindow,
  class TDisplay,
  class TSoundDev,
  class TScript
>
class DemoPlayerBase
{
  // 中身実装いろいろ
};

typedef DemoPlayerBase<MainWindow, DirectX7Display,
 NullSoundDev, DemoScript> DemoPlayer;

もちろん template 使わずに WindowBase, DisplayBase, SoundDevBase みたいな
抽象基底クラスを作ってそれを継承してやってもいいんだが、こっちの方が潰しが
効く。
0782デフォルトの名無しさんNGNG
>>781 コンパイルに相当時間かかりそうな・・・
0783デフォルトの名無しさんNGNG
>>782
DemoPlayerBase のサイズによるけど、ふつーは

- Facade 部分は、各モジュールをつなぐ接着剤のように使う
 メッセージの転送が中心の、小さなコードの断片
- Facade でまとめる各モジュールの実装は *.cpp に書いておいて、Facade
 をコンパイルするときに見るのはヘッダだけ

としておくから、大して問題にならんよ。それに最近のマシンは十分に速いし。
0784デフォルトの名無しさんNGNG
あの、そろそろスレ趣旨に戻さへん?
■ このスレッドは過去ログ倉庫に格納されています