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

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

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

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

いつの間にかスレが1000に達しようとしていました。たくさん
の意見ありがとうございます。
前スレでの議論の結果、やはりというか当然というかオブジェ
クト指向の戦場での実績や有効性には大きく疑問が残るという
結果となりました。。。
皆さんも本当に何が残ってゆく技術なのか、何がイマイチぱっ
とせずに中途半端に終る技術なのか見きわめて、技術を習得して
いきましょう。
0002あたたたたNGNG
自分で2ゲット
0003 NGNG
こんなスレでパート2やんのかYO!
0004デフォルトの名無しさんNGNG
>>1
>前スレでの議論の結果、やはりというか当然というかオブジェ
>クト指向の戦場での実績や有効性には大きく疑問が残るという
>結果となりました。。。

お前の目は節穴なのかと小一時間問い詰めたい。
0005デフォルトの名無しさんNGNG
>>4
火を噴いたプロジェクトの消火に後付けで OO を突っ込むのは間違い、というのは
共通認識だと思うけど。そこから OO 自体の有効性に話が進むと、意見が割れる。
00064NGNG
>>5
はじめから 「ちゃんとした」 OO をすればプロジェクトは火を噴かない
という結論に達したのかと思ってたよ。
たしかに戦場に後付けの OO はよろしくないね。
0007デフォルトの名無しさんNGNG
OOマスターした人どうしで、
OOを分析して、今後どういう風にしていくか考えるスレという事で
いいですか?>1

そういうわけで、C++もJAVAもRubyも使えないような人は
このスレ立ち入り禁止です。
0008 ◆CudPDzYA NGNG
キャップをつけようかな・・・
0009デフォルトの名無しさんNGNG
>>7
言語と
まぁいいや。
0010デフォルトの名無しさんNGNG
>>6
>はじめから 「ちゃんとした」 OO をすればプロジェクトは火を噴かない
ちゃんとしたOOって何?
0011デフォルトの名無しさんNGNG
>>10
開発プロセスの初期から OO を織り込んでおくこと。
0012t&t ◆CudPDzYA NGNG
アスペクト指向についてまだ調べていないんですが、
アスペクト指向言語っていうのがあるんでしょうか?

ちゃんとしたって言うのは、
経験を積んだ人が、という意味では?
0013デフォルトの名無しさんNGNG
>>7

VBで必死こいてOOしてる俺は立ち入り禁止ですか?
0014デフォルトの名無しさんNGNG
とりあえずOOで成功したプロジェクト上げてくれ
業務内容は適当にぼかす事にして。
0015デフォルトの名無しさんNGNG
>>12
有名なのは AspectJ。Java の拡張ね。
0016デフォルトの名無しさんNGNG
>>14
非 OO で火を噴いたプロジェクトなら、いくつか。思い出したくない思い出だが。
0017デフォルトの名無しさんNGNG
アプリケーションとしては成功したけど、政治的に失敗したプロジェクトなら…
広域交通シミュレータってのがある。
0018デフォルトの名無しさんNGNG
えーなー。公共事業系なら年収1000万いくだろ?
001914NGNG
>>15
そうじゃなくて、自分が担当したプロジェクト。
0020デフォルトの名無しさんNGNG
まあ、OO信者ってのは痛い奴が多いよな。
周回遅れでビリで走ってるのに、本人は戦闘を走っているつもり。
おまけに人を見下すような人間的に問題のある奴も多いし。
誰も書いてない意見に反論するデムパも多い。
002114NGNG
>20
煽り発言ばっかりしてないで、もうちょっと建設的にならないものか。
0022t&t ◆CudPDzYA NGNG
>>15
どもです。
今度、調べてみます。

>>13
VBはOOできないっす。
VBはけっこういいとは思いますが、
やはりDelphiの方がいいのでは?と。
Delphi入れ忘れました。
0023デフォルトの名無しさんNGNG
OO盲信者にはそういうやつ多いかもね。
002415NGNG
>>19
お前には言ってない。
0025デフォルトの名無しさんNGNG
>>22
ええ?まさか。
Basicでだって出来るぞ。
0026デフォルトの名無しさんNGNG
いや、アセンブラでだって出来るぞ>OO
Javaだとやりにくいがな。
0027デフォルトの名無しさんNGNG
>>22
いや、漏れは VB6 で OO してたよ。
実装継承がないから Strategy パターンや Decorator パターンに頼る事になるのと Template Method パターンみたいな事はどうしてもできないけど、
それなりにしっかりした物ができる。
実装継承は馬鹿に刃物になりうるので、馬鹿がおおい VB には
丁度いい仕様だったかもしれない。
0028デフォルトの名無しさんNGNG
まあ、アンチOOってのは痛い奴が多いよな。
未知の分野に挑戦する勇気が無いだけなのに、本人は堅実派のつもり。
おまけに人の足を引っ張るような人間的に問題のある奴も多いし。
誰にも相手にされてないのに必死に煽るデムパも多い。
0029デフォルトの名無しさんNGNG
>>25
ほんとの BASIC だとローカル変数なし、構造体のような複雑な型も一切無し、
関数ポインタなんかも存在しないから、多態とかオブジェクト状態の保存とかえ
らく面倒そうだ。

理論的に出来るのと、実際にプログラミングを組む上で使えるのは別だと思う。
0030デフォルトの名無しさんNGNG
>>20=27
0031アンチOOにOO使いが居ない事は彼らにとって最大の不幸であろうNGNG
技術的な話が全くできんからなぁ・・・
0032デフォルトの名無しさんNGNG
まちがえた
>>20=28
0033デフォルトの名無しさんNGNG
某保険イントラ/エクストラシステム
総計数十億だったか数百億だったか数千億だったか
開発中は火噴いたが全要件を期間中に実装しきって安定駆動中
何を持って OOP かって難しいけど、フレームワークの中心は
巨大な Composite と Strategy, State だった、で良い?
0034デフォルトの名無しさんNGNG
>>29
馬脚を現したな。
それはクラス指向だ。
0035 NGNG
Stateと言えば聞こえがよいが、実はmain関数だけしかないソースだったり・・・。
0036デフォルトの名無しさんNGNG
>>34
プロトタイプベースのオブジェクト指向でも、何らかの形で多態は実現する必要
はあるし(関数ポインタじゃなくて VM の力を借りてシグネチャが一致するメソッド
を実行時に特定するのが多いけど)、オブジェクト固有の状態も保持しなきゃダメ
でしょ。
003727NGNG
>>32
びっくりして >>20 読み直したじゃねーかゴルァ!
003833NGNG
ああもう話が次逝ってるし…
003928NGNG
>>32

はずれ。
0040デフォルトの名無しさんNGNG
>>35
具体例を出せといって、出すと根拠のない煽りかい…
0041デフォルトの名無しさんNGNG
TASMでOOやってる強者はいないか?
0042t&t ◆CudPDzYA NGNG
>>27
動的バインドが使えないのは痛いよね。
VB7からは使えるようになるんだっけ?
0043デフォルトの名無しさんNGNG
>>34
あ、アホアンチOO発見。わかった振りして適当な言葉使うな。
004436NGNG
>>34
クラス指向とオブジェクト指向の違いを説明してくれ。俺は >>36 で答えたが、
これで問題ある?
0045デフォルトの名無しさんNGNG
>>35
>Composite と Strategy, State
これをみるとどう見てもパターン名。それで
>Stateと言えば聞こえがよいが、実はmain関数だけしかないソースだったり・・・。
というと、State パターン について何も知らないという事がばれてるよ。
0046t&t ◆CudPDzYA NGNG
http://www.ff.iij4u.or.jp/~ahirusan/Java/patterns/patternIndex.html
たぶん、技術を経験的に身に付けて
かつ
普段デザパタの用語を口にしない人は、
どれがどれだかわからなくなると思うので。
自分は仕事してるわけではないので、
一回一回見ないとわからなくなる。
004713NGNG
>>27
>実装継承は馬鹿に刃物になりうるので、馬鹿がおおい VB には
>丁度いい仕様だったかもしれない。

同意。
Formにロジック全部のっけるような馬鹿が多いからねぇ。
0048デフォルトの名無しさんNGNG
ところでさ GoF パターンの「本質」ってなんだと思う?
GoF は何を我々に伝えたかったのか?っていう部分。

おれは
> インターフェイスに対してプログラミングせよ
だと思う。
これがわからないアンチが何言っても駄目だよね?
0049t&t ◆CudPDzYA NGNG
おそらく
クラス指向って言うのは
プロパティーとメソッドをカプセル化しただけのもので
オブジェクト指向って言うのは、
似たようなプロパティーとメソッドを持つクラスを
グループ化(概念化)したものだと思うよ。
要するに、ポリモーフィズムを使うか使わないか
ってとこじゃないかな?
0050t&t ◆CudPDzYA NGNG
>>48
GoF本って良く出てくるけど
何ですか?
お薦めのデザパタの本ってあります?
コレ一冊買えば、他にはいらない。
って感じのがいいのですが。
0051デフォルトの名無しさんNGNG
>とりあえずOOで成功したプロジェクト上げてくれ
>業務内容は適当にぼかす事にして。
005213NGNG
>>42
>動的バインドが使えないのは痛いよね。
>VB7からは使えるようになるんだっけ?

ん?
俺がVB6で使ってるのは幻か?
0053デフォルトの名無しさんNGNG
>>49
> プロパティーとメソッドをカプセル化しただけ
それは ADT (抽象データ型) と呼称するのが一般的。

34 はどうせ何も考えちゃいないと思うが、俺はクラス指向というと

 クラス間の関係を主に考察する

っつー感じがするな。インスタンスではなく、クラスの方を中心に見る感じ。
0054デフォルトの名無しさんNGNG
>>50
ギャング オブ フォー

OOメソッドの確立などで中心的な役割をした4人の人たちが共著
したデザインパターンに関する説明の本。

「アンタッチャブル」の主役のようなイメージでみんながあの人
たちをGoFと呼ぶのよ。
0055t&t ◆CudPDzYA NGNG
>>52
うぇ?
使えるの?

継承ないんじゃないの?
派生クラスポインタみたいなのがないとか?

VB一回しか触った事ないからよくわかってないのかも。
(かも、じゃないね)
0056デフォルトの名無しさんNGNG
>>14,51

もしかして煽ってるつもりか?
そもそも「成功したプロジェクト」ってなんだよ。
予定した範囲の実装が予定した範囲の予算と期間で完了するだけじゃダメなのか?
005748NGNG
>>50
ネタだと思うのでネタで返してやる。
「Java言語で学ぶデザインパターン入門」がいいよ。
ネタではあるが、この本自体は初学者には本当にいい。
0058デフォルトの名無しさんNGNG
>>52
サンプルコードを頼みたい

なんか、このスレで珍しく役に立つ情報が(w
0059t&t ◆CudPDzYA NGNG
>>53
なるほど。
それがデータ抽象なんですか。
Abstract Data Typeって感じですか。

>>54
その本が今のところバイブル的なもんですか?
0060デフォルトの名無しさんNGNG
VB6で動的バインドっていうのはWithEventsを使うやりかたかな?
動的バインドとは仕組み的に違うけど同じようなことができる。
動的バインドよく理解していないから違ったらゴメン。
0061t&t ◆CudPDzYA NGNG
>>57
いや、ネタじゃないですよ(汗)

JavaPressで、デザパタ入門みたいなの読んだくらいですね。
0062デフォルトの名無しさんNGNG
全然関係ないが、クラス指向で検索したらこんなのが出てきた。

オブジェクト指向は本当に「オブジェクト」指向か?]
http://www.ogis-ri.co.jp/otc/hiroba/technical/Classification/

「アナリシスパターン」買って読んでみるかな。
0063デフォルトの名無しさんNGNG
VB6 における動的バインドって

Dim objHoge As Object

Set objHoge = ConcreteObject

objHoge.MethodOfConcreteObject(100) ' ←これ

みたいな物だと思っていたが違うの?
Object 型には具体的なインターフェイスは定義されてないけど、
なんでも呼び出せる。入ってるインスタンスが、対応する
シグネチャのメソッドを持っていないと実行時エラー。
006457NGNG
>>61
0065デフォルトの名無しさんNGNG
>>59
バイブルっつうか、みんなが良く使うクラスの構造に適当な名前を
命名して「こう呼ぶことにしよう」と決めたものということかな。

それぞれの名前があらわす概念については、昔から使われていた
ものであって、特に目新しいわけじゃない。
006657NGNG
> 61
ネタじゃないのならちゃんと教えてあげよう。
君の求めているのは通称 GoF 本とよばれる。
「オブジェクト指向における再利用の為のデザインパターン」だ。
第二版からはCD-ROMもついてお買い得。
金色と緑のサイケな第一版を間違って買うとマズー。
0067デフォルトの名無しさんNGNG
オブジェクト指向プログラミングというのは、デザインパターンや
UMLやら覚えないとプログラムできないものなのですか?
0068t&t ◆CudPDzYA NGNG
VB6で動的バインドできそうな雰囲気です。
implementっていうのがあるのかな?
http://homepage1.nifty.com/CavalierLab/lab/vb/clsmdl/index.html

>>66
どうもです。
せっかくなので、買ってみようと思います。
サンプルコードはC++ですよね。
0069デフォルトの名無しさんNGNG
>>67
んなこたぁない。
むしろデザパタやUMLレスで経験積んでから
それらを読んだ方がありがたみも理解しやすい。
0070t&t ◆CudPDzYA NGNG
>>67
そんな事はないよ。
デザインパターンは名前覚えてないけど、
どれも使った事あるようなやつばかりだったし。
UML覚えたけど、あまり使ってない。

それ以上に、C言語的な
(関数)ポインタやら、構造体の仕組みやらがわかってないと、
納得できない部分が生じそう。
0071デフォルトの名無しさんNGNG
>とりあえずOOで成功したプロジェクト上げてくれ
>業務内容は適当にぼかす事にして。
0072デフォルトの名無しさんNGNG
デザインパターンやUMLというのはどこまで覚えればよい
ものなのですか?
0073デフォルトの名無しさんNGNG
>>67
そんなことない。むしろプログラムも組まないでデザインパターンや
UML の話しないでくれ、と言いたい。
0074 NGNG
あのーOOってなんですか?
0075デフォルトの名無しさんNGNG
>>71
成功数じゃなくて成功率を見なきゃ意味ないだろ。
そもそも成功ってなんだよ。
0076デフォルトの名無しさんNGNG
>>71
「成功した」の条件を述べてくれ。
完成したら成功なのか?売れたら成功なのか?
0077t&t ◆CudPDzYA NGNG
>>72
デザインパターンは全部覚えた方がいいんじゃないの?
もしかしたら、そういう発想ができないってのは、
それ自体が問題なのかも・・・
重要なのは、他人と会話する時の単語だと思う。
俺はプロじゃないんで、一人で作る事しかないから。

UMLは別に覚える事たくさんあるわけじゃないので
自分で必要だと思えるものに関して、全部覚えておけば
いいと思うよ。
0078デフォルトの名無しさんNGNG
GoF本に書いてある、いわゆるデザインパターンと呼ばれるものは、
要するに、実装を「良いコード」にするためのガイドラインだよ。

例えばCで、関数ポインタによるジャンプテーブルや構造体のメンバに
関数ポインタを持たせて動的ディスパッチなんて技もあるが、無知バカ
PGでもif文の嵐で同じ結果は出せるでしょ。でも、if文の嵐なんか
使うより、関数ポインタを使ったほうが保守性や拡張性などで有利なこと
が多いよね?

そういった技のOOP言語版だと思えばいいよ。
0079デフォルトの名無しさんNGNG
>>72
デザパタは GoF 本に一通り目を通しておけば良いと思うけど。あとは実際に
設計していく段階で

 これ、確か似たような状況で使えるデザパタがあった気がするなぁ

っつーときに書籍を読み返して、良く理解する。

UML は人によるな。分析/設計/実装どこをメインでやってるかで話が違うし、
設計の規模にもよる。

数人のチームで行う小規模開発なら、プログラマの間ではクラス図とシーケン
ス図ぐらいがあれば事足りることも多いよ。
0080デフォルトの名無しさんNGNG
>>68
implements はインターフェイス継承するためのキーワードだ。
これ使ってなかったら、VB で OO なんてまったくできないよ。
実装側でメソッドの書き方が特殊なんで気をつけてな。
Public Sub InterfaceName_MethodName ()
みたいな書き方しなきゃいけない

買うっていうのは GoF 本?
サンプルは C++ だけじゃなく Smalltalk なんかも出てくる。
不安ならネタで返してやると言った方の Java言語で学ぶデザインパターン入門 も読むといいよ。
0081t&t ◆CudPDzYA NGNG
>>76
確実にOOが成功するパターンは
インターフェースが決まってる場合かな。

1プロトコルAで通信するS/Cを作れ
2ついでに、プロトコルBでも通信できるようにして
3プロトコルCでも・・・
これが永遠と続いてもOOなら大丈夫かな。
0082t&t ◆CudPDzYA NGNG
>>80
なるほど。
VBは今後触る事もないだろうな・・・。

Smalltalkは、サッパリだと思う。
どうしよ・・・
JavaPressに載ってた分に関しては、
使った事のないやつはなかったな。
0083デフォルトの名無しさんNGNG
>>80
タダのミスだと思うが、普通は
Private Sub InterfaceName_MethodName ()
~~~~~~~
あと、これは書かなくてもマウスでちょっとクリックするだけで
勝手に書いてくれる。
008480NGNG
>>83
何故 Private にするの?
VB のインターフェイスは Java のインターフェイスに近いものだから
Private なメソッドは大抵の場合必要ないよ?
008513NGNG
>>84

つまり、こうしたいって事?

 Call hoge.InterfaceName_MethodName()

これじゃ何のためにインターフェイス使ったか解らなくなるんですけど。
0086デフォルトの名無しさんNGNG
>>85
C++ あたりだと、一般に基底クラスの公開仮想関数を private で実装しなおさない
のが一般的って気がするけど。
0087デフォルトの名無しさんNGNG
>>62 オブジェクト指向は本当に「オブジェクト指向」か

多重分類と動的分類を扱った記事ですね。
OOの方にもアンチの方にも、読んでほしい…
008813NGNG
>>86

継承するInterfaceをIHogeとして、IDEのスケルトン生成機能を使うと、
HogeConcreteの実装は>>83氏が書いたように、デフォルトでは

Private Sub IHoge_MethodName ()

となるわけです。
このConcreteなクラスを利用する時は、

Public Function CIHoge(Byref hoge As Object) As IHoge
  Set CIHoge = hoge
End Sub

というキャスト関数を用意しておいて、

Private Sub Form_Load()

  Dim hoge As HogeConcrete

  Set hoge = New HogeConcrete

  Call CIHoge(hoge).MethodName()

End Sub

とします。
もしPublicで実装してしまうとキャスト関数が不要になる代わりに、85みたいな
事になってメソッド名が統一できなくなるんですよ。
0089デフォルトの名無しさんNGNG
>>87
動的分類はまあ面白いとは思うけど、
問題はそれをどうやってわかりやすくdenotateするかだな。
つまりOOPLなんかにどうやって織込むか。
織込み方をまちがうと、動的分類は多重継承以上の難物になる可能性高し。
009084NGNG
>>13
実装側のシグネチャが Private でもいいとは知らなかった。今確認してみたが
たしかにそれで ok だった。
でも、public でも、インターフェイスを通してなら、インターフェイスに定義している名前で呼び出せるよ。
今まで実装側も全部 Public で書いてたよ。Java に慣れてるから。
009184NGNG
>>88
キャスト関数!?俺はそんな変な関数書いた事ないよ。
インターフェイス IPrinter と、それを実装した CPrinter がある場合、以下でオーケー


Dim objPrinter As IPrinter
Dim ConcretePrinter As New CPrinter

Set objPrinter = ConcretePrinter 'CPrinter が IPrinter を実装しているので全く問題なし。

Call objPrinter.PrintOut ("Message") 'IPrinter において宣言されているメソッドを呼び出せる
009213NGNG
>>84
>キャスト関数!?俺はそんな変な関数書いた事ないよ。

べつに特殊な例を挙げたつもりは無いんだけど。
ttp://www.gj.il24.net/~nakasima/vb/tips/#VBTIPS11

Publicにするっていうからキャストがめんどくさくいのかと思ったよ。
009313NGNG
>>92(自己レス)

×:>>84
○:>>91

×:めんどくさくい
○:めんどくさい

集中力が切れたようなので寝ます。
0094デフォルトの名無しさんNGNG
なぜOOスレにブヴィ房が?
0095デフォルトの名無しさんNGNG
>>88
このキャスト関数ってMSDNライブラリにもしっかりのっていますね。
[VB] オブジェクトを異なるインターフェイスにキャストする方法

MSDNには、「この関数の名前をインターフェイスと同じ名前にすると、プログラムがスリムになります。」
と書いてあるんだけど、同じにしたらなんか不具合が出たような・・・。
009683NGNG
>>84
ミスじゃなかったのか・・・。
これはVBなのでVBの書き方でお願いします。m(__)m

>>86
別にここでPrivateにしたから、実装がPrivateになるわけじゃないんです。
PublicはPublicです。ただ単に書き方が違うだけです。

VBではMethodNameが定義されているInterfaceNameをImplementsしたHogeから
Hoge.MethodName()という呼び出し方は出来ないんです。
一旦InterfaceName型の変数に代入する(キャストみたいな感じ)必要があります。
InterfaceName型に代入された後はInterfaceName型のシグネチャでアクセスできます。
つまり、InterfaceNameの宣言でMethodNameがPublicなら、
HogeのInterfaceName_Method()を呼び出すことが出来ます。

クラスHogeでのインターフェースの定義は
Private Sub InterfaceName_MethodName ()
となります。ここでPrivate宣言していますが、MethodNameのスコープをP
rivateに変更するわけではありません。

これをPublicにした場合もHoge.MethodName()という風には呼ぶとは出来ません。
InterfaceName型の変数に一旦代入するのは同じです。
一つ変化することは、インターフェースの定義の書き方はメソッドの定義の書き方と
同じなのでHoge.InterfaceName_MethodName()という呼び出しができるようになります。
しかし、インターフェースの利用の仕方からいってあまり意味はありません。
0097デフォルトの名無しさんNGNG
たとえVBにOO導入したとしても、
「VBで大規模」って想像できないんですが。
0098デフォルトの名無しさんNGNG
>>97
小規模でOO使っちゃいけないのかい。関係ないよね。
0099デフォルトの名無しさんNGNG
大規模ってどのくらいの規模?
0100デフォルトの名無しさんNGNG
フォーム50以下かな
0101デフォルトの名無しさんNGNG
50超えた付近から まあ多少整理した方が効率良い感じになるね
■ このスレッドは過去ログ倉庫に格納されています