トップページ⇒tech
972コメント280KB

【結論】オブジェクト指向は戦場では必要なし 5

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

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

 私の独自の調査においては、OOで開発すると効率が悪く
バグコードが侵入しやすい傾向があるという調査結果が出ています。
また実際の現場での有効性に疑問をもっているという人は
全体の75.3%にも達しました。移行のことからOOはその有効性
に疑問があると言わざるをえません。

OOは近いうちに消えゆく技術となることでしょう。
0809デフォルトの名無しさんNGNG
>>808
> ファイルスコープで隠蔽とか、関数ポインタの構造体で多態モドキ
> なこと(いや、Cが先なんでもどき呼ばわりは失礼だが)とか、やる
> でしょ?

どうでしょ?Simula-67とか、現在のように洗練されていなくても
継承による多態は存在はしていました。
0810デフォルトの名無しさんNGNG
Cでも DLL作って処理する時には 相手には データ構造は教えずに
void *のポインタを用意させて
void *hoge=OpenHoge(引数);
 HogeHage(hoge,引数)
みたいなのは、普通だしな

これをオブジェクト指向だななんて 呼ばないでくれ

だって FOpenから学んだんだから
0811810NGNG
ありゃ 大文字 FOpenは格好悪かった・鬱
0812デフォルトの名無しさんNGNG
>>810
つーか、多態だからといってオブジェクト指向なわけではないでしょ。
parametric polymorphismなんかはむしろ(非OOな)関数型言語だし、
operator overloadingやimplicit type conversionによるad-hoc polymorphismなんかはFORTRANからあるし。

>>810のCでの例はinclusion polymorphismの一種だね。
ただ、言語仕様でそれを積極的にサポートされてるかどうかは大きな違いだけど。
0813812NGNG
うぐ。訂正すまそ。
> parametric polymorphismなんかはむしろ(非OOな)関数型言語だし、
は、
> parametric polymorphismなんかはむしろ(非OOな)関数型言語のほうが主流だし、
に読み替えてちょ。
0814810NGNG
>>812
 判ってくれたか。 Cでやってたように、オブジェクト指向もどきの事を C++ や Delphiでやってるだけで

オブジェクト指向をやってる訳じゃない。
それは似てるけど、俺たちはオブジェクトを指向などしたくないんだ
0815デフォルトの名無しさんNGNG
> 787 名前:デフォルトの名無しさん 投稿日:02/08/12 14:17
> (´゚∀゚`) OOが普及するっていってから何年経ってるんだ?
>
>
> 788 名前:デフォルトの名無しさん 投稿日:02/08/12 14:20
> (´゚∀゚`) 構造化分析設計が普及するっていってから何十年経ってるんだ?
>

OOも30年以上の歴史があるんだけど・・・ね。
まあ方法としては確立されてはいるけど、
結局はイマイチなんだろうね。
0816デフォルトの名無しさんNGNG
>>815
だからOOなんてバブルみたいなもんなんだよ。
0817デフォルトの名無しさんNGNG
>>814
つーかさ、君がやっていた(いる)事は
「オブジェクト指向もどき」じゃなくて「自作多態」って事なんじゃないの?
0818デフォルトの名無しさんNGNG
>>816
(´゚∀゚`) OO一生懸命勉強したのにね。お気の毒に。
0819810NGNG
あのさ >>810 は これは多態じゃなくて いわゆるデータの隠蔽って奴だ

多態もどきにするなら、Hogeの中で関数ポインタを持たせて
void HogeHage( hoge , 引数){
hoge->MyFunc(hoge,引数);
}
とやるわけだけど、それは外からは見えない

0820812NGNG
>>819
いや、void *型に宣言した変数にいくつかの種類の構造型へのポインタを入れて、
それを関数に渡してやるんだろ?
つまり、
struct foo {
int sort;
int x, y, z;
....
};
struct bar {
int sort;
int x, y;
...
}
とかあって、
void * OpenHoge(引数)が引数に応じてstruct foo *を返すかstruct bar *を返すかが決まるとするよ。

void *polymorphic_var;
polymorphic_var = OpenHoge(何か適当は変数);

とすると、polymorphic_varの参照先にはパラメータに応じてstruct fooの値か
あるいはstruct barの値が入ってるわけでしょ。
これって、十分にポリモーフィズムだよ。
さらに、
HogeHage(polymorphic_var, ...);
とかすれば、この関数への第一引数がstruct foo *の場合もあるし struct bar *の場合もある。
これもやはりpolymorphismになる。

ここで、このpolymorphismを何polymorphismと呼ぶべきかだけど、
変数polymorphic_varの参照先が先頭のint sort;の内容で型を判定するとすると、
これは一種のstructural type equivalenceによるinclusion polymorphismと捉えることができる。
だから、「>>810のCでの例はinclusion polymorphismの一種だね。 」と言ったわけ。
0821812NGNG
まあ、>>810では複数の構造体を定義していないから>>820は曲解の可能性もあるけど、
OpenHoge()の返り値の型をvoid *にしたのはそういう意味があったんじゃないかと思ったんだけど。
あと、HogeHageへの第一引数もvoid *の変数で渡してるし。
0822810NGNG
スマン、 そんな事より >>820 を見ると foo/barの識別は sortでやるのか?
 それなら enumにしてくれとか
 それより関数ポインタ持たせてとか
そんなレベルの問題が気になってしょうがない 

そのポリモーフィズムの話は、なんか俺が齧ったのとは違うようだが
あんまり興味ない
0823812NGNG
>>822
> スマン、 そんな事より >>820 を見ると foo/barの識別は sortでやるのか?
> それなら enumにしてくれとか
> それより関数ポインタ持たせてとか
すまん。enumにしてくれってのはその通り。
関数ポインタについては、続きを見てくれ。
0824812NGNG
>>823の続き
>>822
>そのポリモーフィズムの話は、なんか俺が齧ったのとは違うようだが

実は同じだったりする。どっちもsubtypeによるinclusion polymorphismだよ。
たとえば>>822が聞いたというポリモーフィズムは
t a;
a.message();
があったとすると、
・変数aには複数の型(型tのsubtype)の値が代入されている可能性があり、
・その値の実際の型に応じて実際に実行されるmessage()の実体が異なる
という話だと思う。
このうち1番目のほうは>>820で書いた例と同じだということがわかると思う。
実はこれこそがsubtypeによるinclusion polymorphismだったりする。
それが(クラスベースの静的型付)オブジェクト指向言語では副次的に
・型tのsubtypeはメッセージmessage()を受け付けることができ、
・対応するメソッドはaの実際のクラスによって定義される
ということが自然な拡張というか、当然の結果というか、まあ、そういうことになる。
オブジェクト指向では、こちらの副次的な部分のほうが強調される事がままあるけれども、
型理論的には、本来ポリモーフィズムが意味するのは上のほうの1番目の機能だったりする。

関数ポインタを構造体に持たせるのはinclusion polymorphismなしで
その副次効果を実現させているわけだが、実はその究極の形を考えれば
関数ポインタ型の変数そのものだったりする。
実際の値によって実際に呼び出される関数がかわるっていう意味ではね。
0825812NGNG
というわけで、興味ないと言われながらの長文すまそ。
おまけに「だったりする」ばかりで本当に駄文だな。
重ねてすまそ。欝だ。

まあ、enjoy programmingということで。
0826デフォルトの名無しさんNGNG
社内のオブジェクト指向設計で開発している
自己満足PGをクビにしたい。
コメントもドキュメントもないからなぁ。使えネーヨ。
0827デフォルトの名無しさんNGNG
やはりオブジェクト指向という試みは失敗に
終わったということでいいんじゃないでしょうか?
0828デフォルトの名無しさんNGNG
>>826
クビにしてみたらいいと思います。
そのPGもまともな同僚に恵まれた環境を得て
いい仕事ができるようになるかもしれませんから。
0829デフォルトの名無しさんNGNG
またfopenバカがかきこんでるな。
「Cでもオブジェクト指向できるから、オブジェクト指向なんていらねぇよ」
この論理っておかしくねぇ?
結局、自分の今までのやり方が通らないから嫌なだけ。
それを必死で言い繕っても端から見てると哀れなだけ。
0830デフォルトの名無しさんNGNG
おまえらくだらねぇ
0831デフォルトの名無しさんNGNG
>>829 このすぐ上で言ってる事はそういう事じゃないように思うんだが?
0832デフォルトの名無しさんNGNG
確かにここ最近OOが下火になってきて、
OOでも非OOでもこだわらない効率のよい環境や言語が
人気がでてきているのは確か。
0833デフォルトの名無しさんNGNG
>OOでも非OOでもこだわらない効率のよい環境や言語
ってなあに?HSP?
0834デフォルトの名無しさんNGNG
C使いは帰っていいよ。
0835名無しさん@EmacsNGNG
>>832
そうかい? 俺はそうは思わないよ.
OOが下火になってきたってのは分かるけど.
0836デフォルトの名無しさんNGNG
>>832
それってC++位しか該当言語が思い当たらないんだが、
全然C++の仕事無いぞ
0837名無しさん@EmacsNGNG
>>836
うちはJavaが増えてC++が減った.
あと急増するPHP…w 俺の中では飽きたから惰性で書いてるなぁ….
個人的にはC++とJavaがもっと来てくれるとうれすぃ.
0838逝って良しの1NGNG
うーん、サイクルがずれている会社があるな。
Javaが増えてって・・・まだ・・・地獄を見ていない・・・かんじ。

クライアントがとにかくJavaが良いと、どっかの雑誌なんかで洗脳されて、
で、発注して出来あがったモノ見てその遅さにクレームつけてくるパターンね。
「Javaは遅いんです」つっても信じてもらえるまで地獄を見るか、
あるいは発注した馬鹿が責任をひた隠しにした結果その会社との取引ききられたとか
まあご苦労さんね。
0839デフォルトの名無しさんNGNG
>>838
> 「Javaは遅いんです」
そうか?
VMの起動が遅いだけでJava自体はそんなに重いとは思わないけど。
マシン起動時にVMも同時に起動させれば特に問題はない。
0840デフォルトの名無しさんNGNG
>>1
オマエが必要なし!
0841デフォルトの名無しさんNGNG
遅いんだからしょうがない。
0842名無しさん@EmacsNGNG
実際遅いのは認めるよ. 少なくとも今の速度のままならクライアントサイドの
アプリケーションは使いたくない. でもサーバサイドなら気にならないけど?
Javaはうちの開発部では2番目にクレームが少ない言語だし.
出来上がったものの遅さにクレーム付けられることは今までない. 発注かかる時に
パフォーマンスのデータは出すし(いや, 俺がやってるわけじゃないけど営業が).
出来上がったモノにクレーム付けられるなんて(Javaに限らず)営業がキチンと
仕事してないか, 開発の実力不足だろ. そんな会社辞めたほうがいいぞ.

で, ここまで話しといて何だけど, OOと遅さは関係ない.
0843デフォルトの名無しさんNGNG
逝って良しの1さんへ

純粋OOPLがキライならそれでいいと思います。

ただ、Smalltalkerに代表されるような
すべてをオブジェクトとして考えるのが自然だと感じる人も
いるということを分かって欲しいと思います。

そういう人にとって純粋OOPLは使いやすい言語です。
0844デフォルトの名無しさんNGNG
>>843

> すべてをオブジェクトとして考えるのが自然だと感じる人も
> いるということを分かって欲しいと思います。

人間、清濁合わせ持つってのは大事だぞ。
所詮世の中グレーなんだ。
白か黒かなんてのは子供の自己満足。
両極端を選択するのは単純明快だが、
妥当な落としどころを模索するのがプロの仕事。
0845デフォルトの名無しさんNGNG
SmallTalkと聞いて思い出す。
九州・・・(以下略)
0846逝って良しの1NGNG
すべてオブジェクトは無理。
つうか、屁理屈みたいなクラスができる。
0847デフォルトの名無しさんNGNG
>>846
激しく同感。
クラスの中でクラスを呼んだクラスがクラスを呼んで、
一度ループした事がありました。

・・・俺だけ??
0848デフォルトの名無しさんNGNG
そもそもOOでの設計は非OOよりも
トリッキーになりがちじゃない?
0849デフォルトの名無しさんNGNG
それをごまかすためのデザインパターン
0850デフォルトの名無しさんNGNG
>>888で結論がでます!
0851逝って良しの1NGNG
>>847
今ナウいヤングなプログラマーの間で人気の「再帰」ということに。
0852デフォルトの名無しさんNGNG
>>846-849
たぶんもう釣れない予感。
0853逝って良しの1NGNG
釣りって・・・
前にも誰か書いてたけど、javaのmathクラスなんか屁理屈だし
Systemクラスもオブジェクトとは言えないじゃん。
それからアプリケーションのメインのクラスもオブジェクトとは言えないし。
0854デフォルトの名無しさんNGNG
Javaはクラスを名前空間代わりに使ってるだけじゃん
そんなにシビアになるなよ。
0855デフォルトの名無しさんNGNG
>>842
1番クレームが少ない言語ってなにさ?
0856デフォルトの名無しさんNGNG
C言語病 (C++病かも?)

オブジェクト イコール 構造体の中に関数を入れたもの
0857デフォルトの名無しさんNGNG
>>854
すべてをオブジェクトにという足枷が
本来のOOの概念を崩しているね
矛盾した事をいってるように聞こえるかな?
0858デフォルトの名無しさんNGNG
>>853-857
やっぱりもう釣れない予感。
0859856NGNG
>>857
オブジェクトを構造体と結び付けるからおかしくなる。

オブジェクトという概念が構造体から生まれたわけじゃない。
構造体とデータ抽象型も関係ないし。
0860名無しさん@EmacsNGNG
>>855
C++
0861デフォルトの名無しさんNGNG
>>859
> オブジェクトを構造体と結び付けるからおかしくなる。
勝手な妄想されても困る。
mathクラスは本来のOOの概念でオブジェクトか?
0862デフォルトの名無しさんNGNG
オブジェクトです。
なにも問題はありません。
0863名無しさん@EmacsNGNG
>mathクラスは本来のOOの概念でオブジェクトか?
デザパタ勉強してからOOの否定しろよ….
0864逝って良しの1NGNG
>>862-863
信者逝って良し。
0865デフォルトの名無しさんNGNG
>>863
> デザパタ勉強してからOOの否定しろよ….
また勝手な妄想・・・・
OO自体は肯定してるだろ。
もういやだ夏厨は(泣
0866Hikky!NGNG
>>855
C++!
0867デフォルトの名無しさんNGNG
このスレはコンプレックスに悩む逝って良しの1を慰めるスレになりますた。
0868856NGNG
>>861
関数型OOPには代入という概念がないので
クラスの中にはメソッドしかありません。

データ + メソッド という定義は手続き型的なものです。

オブジェクト指向とは関係ありません。
0869デフォルトの名無しさんNGNG
>>861
普通に immutable なオブジェクトでいいんじゃない。
0870デフォルトの名無しさんNGNG
> オブジェクトを構造体と結び付けるからおかしくなる。
これ、同意。
0871デフォルトの名無しさんNGNG
>>868
オブジェクト指向のオブジェクトとは何かいってみなさい
そこに答えがある
夏厨の相手はもうあきました
0872デフォルトの名無しさんNGNG
逆にOOが生かせるプロジェクトってどんなのよ?
0873デフォルトの名無しさんNGNG
OOPLの機能がOOだと、勘違いしてるバカが居るな。
0874デフォルトの名無しさんNGNG
このスレ全部読み返して思ったんだけどさー、ここでOO否定してる奴らって
何の概念持ってきてもアレコレ文句つけて否定するんじゃないの?
0875デフォルトの名無しさんNGNG
>>872
OOで苦労して作ったプロジェクトの次のプロジェクトでは?
0876デフォルトの名無しさんNGNG
>>874
意味のない
妄想が出ました
0877デフォルトの名無しさんNGNG
>>874
被害者妄想?
0878デフォルトの名無しさんNGNG
>>874
正解。ここで難癖をつけていい気分になりたいだけなんだよ。
現実が悲惨だから。
0879デフォルトの名無しさんNGNG
>>877
加害者妄想?
0880デフォルトの名無しさんNGNG
>>878
得意の自己レスが連発しています
見ているこちらが恥ずかしいです
0881デフォルトの名無しさんNGNG
デザパタなんてOOでもなんでもねーじゃん。
つーかオブジェクト指向ってよ、シューティングゲームを例に取ると
自機、敵、弾、敵弾、爆発、カメラ等って感じで、これがそのままクラス
になる(その後の継承とかはまあすきにしろよ。)。
とりあえずだれがみてもみんながおおよそ納得してくれるように
わかりやすいものでなきゃならんと俺は思うよ。
デザパタってみんな読まないだろ?
そうだよな、これ会社の基準なんかにしちゃうと500ページを超える
プログラム社内規約になっちゃうだけだよ。
で、内容は誰も考えつかないようなトリッキーなクラス設計?
これが間違ってんだよ。
どうしてみんながはじめに認識できる形でそのままクラスに
落とし込めないのか疑問でしょうがない。
0882デフォルトの名無しさんNGNG
晒しage
0883デフォルトの名無しさんNGNG
すみません・・・
バイオとかNECとかのキーボードの上についてるボタンはキーコードを吐き出しますか?
どうも読み取れません。
0884878NGNG
>>880
俺?
俺は逝って良しのlだけど?
0885デフォルトの名無しさんNGNG
>>880
あの…>>878は俺じゃないんだけど…(汗). トリップ付けようか?

とりあえずさ, OOのどこが悪いのかキチンと理論付けて否定してほしい.
で, 何が至上なのか. 正直, このスレ全部読んでも何がダメなんか
分からん.
0886デフォルトの名無しさんNGNG
自分を基準にしちゃいけないよ。
0887デフォルトの名無しさんNGNG
>>881
そんなキミには小話。
0888デフォルトの名無しさんNGNG
あ
0889デフォルトの名無しさんNGNG
なんか荒れてきたけどオブジェクトとは何かから
もう一度勉強した方が良いよ
自分の好きな言語の仕様を正当化する
気持ちははわかるけどね
0890デフォルトの名無しさんNGNG
>>881
ちょっと待てやー!




とは言ったものの中途半端な意見しか言えそうにないんで
理解のある人に助けを求めてみる。
0891デフォルトの名無しさんNGNG
>で、内容は誰も考えつかないようなトリッキーなクラス設計?
>これが間違ってんだよ。

これが間違ってんだよ。
0892デフォルトの名無しさんNGNG
>>868のような都合の悪いレスはアンチOOに無視される。
0893逝って良しの1NGNG
868は妄想君じゃん
0894デフォルトの名無しさんNGNG
>>878
0895デフォルトの名無しさんNGNG
>>893
妄想だって (ぷぷぷ

もっとまともな反論できないの?
0896デフォルトの名無しさんNGNG
まあ結論としてOOは青春のいい思い出だったということでいいんじゃない?
0897デフォルトの名無しさんNGNG
>>895
他人のことは言えまい。
0898デフォルトの名無しさんNGNG
>>867

0899デフォルトの名無しさんNGNG
>>893
みんなだって悩んでるんだ。君だけじゃないよ。
がんばって!
0900デフォルトの名無しさんNGNG
なぜアンチOOは誤ったオブジェクト指向の定義に固執するの?
0901デフォルトの名無しさんNGNG
>900
それがわからないから
0902デフォルトの名無しさんNGNG
おまえらハッスルしすぎ
0903デフォルトの名無しさんNGNG
>>900-901
0904逝って良しの1NGNG
このスレ読み返して見ろ。
だれもそんな定義なぞしとらん。
だから妄想だといってんの。
0905デフォルトの名無しさんNGNG

そろそろ次スレを立てた方が良くないか?
0906デフォルトの名無しさんNGNG
950で
0907デフォルトの名無しさんNGNG
次スレが必要なら、逝って良しの1氏が立てるんじゃないの?
0908デフォルトの名無しさんNGNG
>>904
こんな所でオブジェクト指向を批判するより
情報工学を勉強した方がいいよ。
レス数が900を超えています。1000を超えると表示できなくなるよ。