オブジェクト指向は戦場では必要無し その2
■ このスレッドは過去ログ倉庫に格納されています
0001あたたたた
NGNGを理解する労力が大きく、目的まで達成するのに時間がかかる。
他人のソースを見るにも複雑でときほぐしにくい。
ちゃんと整備されたドキュメントがなければ粗大ゴミソース。
またオブジェクト指向が○○に優れているとかいう話も、あくまでちゃ
んと設計され、ちゃんと実装されたクラスがあるという前提での話。
実際は世の中にどれだけの糞SEや糞PGがいることか。。。
よってオブジェクト指向は戦場では使いものになりません。
前スレ http://pc.2ch.net/test/read.cgi/tech/1011997945/
いつの間にかスレが1000に達しようとしていました。たくさん
の意見ありがとうございます。
前スレでの議論の結果、やはりというか当然というかオブジェ
クト指向の戦場での実績や有効性には大きく疑問が残るという
結果となりました。。。
皆さんも本当に何が残ってゆく技術なのか、何がイマイチぱっ
とせずに中途半端に終る技術なのか見きわめて、技術を習得して
いきましょう。
0002あたたたた
NGNG0003
NGNG0004デフォルトの名無しさん
NGNG>前スレでの議論の結果、やはりというか当然というかオブジェ
>クト指向の戦場での実績や有効性には大きく疑問が残るという
>結果となりました。。。
お前の目は節穴なのかと小一時間問い詰めたい。
0005デフォルトの名無しさん
NGNG火を噴いたプロジェクトの消火に後付けで OO を突っ込むのは間違い、というのは
共通認識だと思うけど。そこから OO 自体の有効性に話が進むと、意見が割れる。
0007デフォルトの名無しさん
NGNGOOを分析して、今後どういう風にしていくか考えるスレという事で
いいですか?>1
そういうわけで、C++もJAVAもRubyも使えないような人は
このスレ立ち入り禁止です。
0008 ◆CudPDzYA
NGNG0009デフォルトの名無しさん
NGNG言語と
まぁいいや。
0010デフォルトの名無しさん
NGNG>はじめから 「ちゃんとした」 OO をすればプロジェクトは火を噴かない
ちゃんとしたOOって何?
0011デフォルトの名無しさん
NGNG開発プロセスの初期から OO を織り込んでおくこと。
0012t&t ◆CudPDzYA
NGNGアスペクト指向言語っていうのがあるんでしょうか?
ちゃんとしたって言うのは、
経験を積んだ人が、という意味では?
0013デフォルトの名無しさん
NGNGVBで必死こいてOOしてる俺は立ち入り禁止ですか?
0014デフォルトの名無しさん
NGNG業務内容は適当にぼかす事にして。
0015デフォルトの名無しさん
NGNG有名なのは AspectJ。Java の拡張ね。
0016デフォルトの名無しさん
NGNG非 OO で火を噴いたプロジェクトなら、いくつか。思い出したくない思い出だが。
0017デフォルトの名無しさん
NGNG広域交通シミュレータってのがある。
0018デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNG周回遅れでビリで走ってるのに、本人は戦闘を走っているつもり。
おまけに人を見下すような人間的に問題のある奴も多いし。
誰も書いてない意見に反論するデムパも多い。
002114
NGNG煽り発言ばっかりしてないで、もうちょっと建設的にならないものか。
0022t&t ◆CudPDzYA
NGNGどもです。
今度、調べてみます。
>>13
VBはOOできないっす。
VBはけっこういいとは思いますが、
やはりDelphiの方がいいのでは?と。
Delphi入れ忘れました。
0023デフォルトの名無しさん
NGNG0025デフォルトの名無しさん
NGNGええ?まさか。
Basicでだって出来るぞ。
0026デフォルトの名無しさん
NGNGJavaだとやりにくいがな。
0027デフォルトの名無しさん
NGNGいや、漏れは VB6 で OO してたよ。
実装継承がないから Strategy パターンや Decorator パターンに頼る事になるのと Template Method パターンみたいな事はどうしてもできないけど、
それなりにしっかりした物ができる。
実装継承は馬鹿に刃物になりうるので、馬鹿がおおい VB には
丁度いい仕様だったかもしれない。
0028デフォルトの名無しさん
NGNG未知の分野に挑戦する勇気が無いだけなのに、本人は堅実派のつもり。
おまけに人の足を引っ張るような人間的に問題のある奴も多いし。
誰にも相手にされてないのに必死に煽るデムパも多い。
0029デフォルトの名無しさん
NGNGほんとの BASIC だとローカル変数なし、構造体のような複雑な型も一切無し、
関数ポインタなんかも存在しないから、多態とかオブジェクト状態の保存とかえ
らく面倒そうだ。
理論的に出来るのと、実際にプログラミングを組む上で使えるのは別だと思う。
0030デフォルトの名無しさん
NGNG0031アンチOOにOO使いが居ない事は彼らにとって最大の不幸であろう
NGNG0032デフォルトの名無しさん
NGNG>>20=28
0033デフォルトの名無しさん
NGNG総計数十億だったか数百億だったか数千億だったか
開発中は火噴いたが全要件を期間中に実装しきって安定駆動中
何を持って OOP かって難しいけど、フレームワークの中心は
巨大な Composite と Strategy, State だった、で良い?
0034デフォルトの名無しさん
NGNG馬脚を現したな。
それはクラス指向だ。
0035
NGNG0036デフォルトの名無しさん
NGNGプロトタイプベースのオブジェクト指向でも、何らかの形で多態は実現する必要
はあるし(関数ポインタじゃなくて VM の力を借りてシグネチャが一致するメソッド
を実行時に特定するのが多いけど)、オブジェクト固有の状態も保持しなきゃダメ
でしょ。
003833
NGNG0040デフォルトの名無しさん
NGNG具体例を出せといって、出すと根拠のない煽りかい…
0041デフォルトの名無しさん
NGNG0042t&t ◆CudPDzYA
NGNG動的バインドが使えないのは痛いよね。
VB7からは使えるようになるんだっけ?
0043デフォルトの名無しさん
NGNGあ、アホアンチOO発見。わかった振りして適当な言葉使うな。
0045デフォルトの名無しさん
NGNG>Composite と Strategy, State
これをみるとどう見てもパターン名。それで
>Stateと言えば聞こえがよいが、実はmain関数だけしかないソースだったり・・・。
というと、State パターン について何も知らないという事がばれてるよ。
0046t&t ◆CudPDzYA
NGNGたぶん、技術を経験的に身に付けて
かつ
普段デザパタの用語を口にしない人は、
どれがどれだかわからなくなると思うので。
自分は仕事してるわけではないので、
一回一回見ないとわからなくなる。
0048デフォルトの名無しさん
NGNGGoF は何を我々に伝えたかったのか?っていう部分。
おれは
> インターフェイスに対してプログラミングせよ
だと思う。
これがわからないアンチが何言っても駄目だよね?
0049t&t ◆CudPDzYA
NGNGクラス指向って言うのは
プロパティーとメソッドをカプセル化しただけのもので
オブジェクト指向って言うのは、
似たようなプロパティーとメソッドを持つクラスを
グループ化(概念化)したものだと思うよ。
要するに、ポリモーフィズムを使うか使わないか
ってとこじゃないかな?
0050t&t ◆CudPDzYA
NGNGGoF本って良く出てくるけど
何ですか?
お薦めのデザパタの本ってあります?
コレ一冊買えば、他にはいらない。
って感じのがいいのですが。
0051デフォルトの名無しさん
NGNG>業務内容は適当にぼかす事にして。
0053デフォルトの名無しさん
NGNG> プロパティーとメソッドをカプセル化しただけ
それは ADT (抽象データ型) と呼称するのが一般的。
34 はどうせ何も考えちゃいないと思うが、俺はクラス指向というと
クラス間の関係を主に考察する
っつー感じがするな。インスタンスではなく、クラスの方を中心に見る感じ。
0054デフォルトの名無しさん
NGNGギャング オブ フォー
OOメソッドの確立などで中心的な役割をした4人の人たちが共著
したデザインパターンに関する説明の本。
「アンタッチャブル」の主役のようなイメージでみんながあの人
たちをGoFと呼ぶのよ。
0055t&t ◆CudPDzYA
NGNGうぇ?
使えるの?
継承ないんじゃないの?
派生クラスポインタみたいなのがないとか?
VB一回しか触った事ないからよくわかってないのかも。
(かも、じゃないね)
0056デフォルトの名無しさん
NGNGもしかして煽ってるつもりか?
そもそも「成功したプロジェクト」ってなんだよ。
予定した範囲の実装が予定した範囲の予算と期間で完了するだけじゃダメなのか?
0058デフォルトの名無しさん
NGNGサンプルコードを頼みたい
なんか、このスレで珍しく役に立つ情報が(w
0059t&t ◆CudPDzYA
NGNGなるほど。
それがデータ抽象なんですか。
Abstract Data Typeって感じですか。
>>54
その本が今のところバイブル的なもんですか?
0060デフォルトの名無しさん
NGNG動的バインドとは仕組み的に違うけど同じようなことができる。
動的バインドよく理解していないから違ったらゴメン。
0061t&t ◆CudPDzYA
NGNGいや、ネタじゃないですよ(汗)
JavaPressで、デザパタ入門みたいなの読んだくらいですね。
0062デフォルトの名無しさん
NGNGオブジェクト指向は本当に「オブジェクト」指向か?]
http://www.ogis-ri.co.jp/otc/hiroba/technical/Classification/
「アナリシスパターン」買って読んでみるかな。
0063デフォルトの名無しさん
NGNGDim objHoge As Object
Set objHoge = ConcreteObject
objHoge.MethodOfConcreteObject(100) ' ←これ
みたいな物だと思っていたが違うの?
Object 型には具体的なインターフェイスは定義されてないけど、
なんでも呼び出せる。入ってるインスタンスが、対応する
シグネチャのメソッドを持っていないと実行時エラー。
0065デフォルトの名無しさん
NGNGバイブルっつうか、みんなが良く使うクラスの構造に適当な名前を
命名して「こう呼ぶことにしよう」と決めたものということかな。
それぞれの名前があらわす概念については、昔から使われていた
ものであって、特に目新しいわけじゃない。
006657
NGNGネタじゃないのならちゃんと教えてあげよう。
君の求めているのは通称 GoF 本とよばれる。
「オブジェクト指向における再利用の為のデザインパターン」だ。
第二版からはCD-ROMもついてお買い得。
金色と緑のサイケな第一版を間違って買うとマズー。
0067デフォルトの名無しさん
NGNGUMLやら覚えないとプログラムできないものなのですか?
0068t&t ◆CudPDzYA
NGNGimplementっていうのがあるのかな?
http://homepage1.nifty.com/CavalierLab/lab/vb/clsmdl/index.html
>>66
どうもです。
せっかくなので、買ってみようと思います。
サンプルコードはC++ですよね。
0069デフォルトの名無しさん
NGNGんなこたぁない。
むしろデザパタやUMLレスで経験積んでから
それらを読んだ方がありがたみも理解しやすい。
0070t&t ◆CudPDzYA
NGNGそんな事はないよ。
デザインパターンは名前覚えてないけど、
どれも使った事あるようなやつばかりだったし。
UML覚えたけど、あまり使ってない。
それ以上に、C言語的な
(関数)ポインタやら、構造体の仕組みやらがわかってないと、
納得できない部分が生じそう。
0071デフォルトの名無しさん
NGNG>業務内容は適当にぼかす事にして。
0072デフォルトの名無しさん
NGNGものなのですか?
0073デフォルトの名無しさん
NGNGそんなことない。むしろプログラムも組まないでデザインパターンや
UML の話しないでくれ、と言いたい。
0074
NGNG0075デフォルトの名無しさん
NGNG成功数じゃなくて成功率を見なきゃ意味ないだろ。
そもそも成功ってなんだよ。
0076デフォルトの名無しさん
NGNG「成功した」の条件を述べてくれ。
完成したら成功なのか?売れたら成功なのか?
0077t&t ◆CudPDzYA
NGNGデザインパターンは全部覚えた方がいいんじゃないの?
もしかしたら、そういう発想ができないってのは、
それ自体が問題なのかも・・・
重要なのは、他人と会話する時の単語だと思う。
俺はプロじゃないんで、一人で作る事しかないから。
UMLは別に覚える事たくさんあるわけじゃないので
自分で必要だと思えるものに関して、全部覚えておけば
いいと思うよ。
0078デフォルトの名無しさん
NGNG要するに、実装を「良いコード」にするためのガイドラインだよ。
例えばCで、関数ポインタによるジャンプテーブルや構造体のメンバに
関数ポインタを持たせて動的ディスパッチなんて技もあるが、無知バカ
PGでもif文の嵐で同じ結果は出せるでしょ。でも、if文の嵐なんか
使うより、関数ポインタを使ったほうが保守性や拡張性などで有利なこと
が多いよね?
そういった技のOOP言語版だと思えばいいよ。
0079デフォルトの名無しさん
NGNGデザパタは GoF 本に一通り目を通しておけば良いと思うけど。あとは実際に
設計していく段階で
これ、確か似たような状況で使えるデザパタがあった気がするなぁ
っつーときに書籍を読み返して、良く理解する。
UML は人によるな。分析/設計/実装どこをメインでやってるかで話が違うし、
設計の規模にもよる。
数人のチームで行う小規模開発なら、プログラマの間ではクラス図とシーケン
ス図ぐらいがあれば事足りることも多いよ。
0080デフォルトの名無しさん
NGNGimplements はインターフェイス継承するためのキーワードだ。
これ使ってなかったら、VB で OO なんてまったくできないよ。
実装側でメソッドの書き方が特殊なんで気をつけてな。
Public Sub InterfaceName_MethodName ()
みたいな書き方しなきゃいけない
買うっていうのは GoF 本?
サンプルは C++ だけじゃなく Smalltalk なんかも出てくる。
不安ならネタで返してやると言った方の Java言語で学ぶデザインパターン入門 も読むといいよ。
0081t&t ◆CudPDzYA
NGNG確実にOOが成功するパターンは
インターフェースが決まってる場合かな。
1プロトコルAで通信するS/Cを作れ
2ついでに、プロトコルBでも通信できるようにして
3プロトコルCでも・・・
これが永遠と続いてもOOなら大丈夫かな。
0082t&t ◆CudPDzYA
NGNGなるほど。
VBは今後触る事もないだろうな・・・。
Smalltalkは、サッパリだと思う。
どうしよ・・・
JavaPressに載ってた分に関しては、
使った事のないやつはなかったな。
0083デフォルトの名無しさん
NGNGタダのミスだと思うが、普通は
Private Sub InterfaceName_MethodName ()
~~~~~~~
あと、これは書かなくてもマウスでちょっとクリックするだけで
勝手に書いてくれる。
008513
NGNGつまり、こうしたいって事?
Call hoge.InterfaceName_MethodName()
これじゃ何のためにインターフェイス使ったか解らなくなるんですけど。
0086デフォルトの名無しさん
NGNGC++ あたりだと、一般に基底クラスの公開仮想関数を private で実装しなおさない
のが一般的って気がするけど。
0087デフォルトの名無しさん
NGNG多重分類と動的分類を扱った記事ですね。
OOの方にもアンチの方にも、読んでほしい…
008813
NGNG継承する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動的分類はまあ面白いとは思うけど、
問題はそれをどうやってわかりやすくdenotateするかだな。
つまりOOPLなんかにどうやって織込むか。
織込み方をまちがうと、動的分類は多重継承以上の難物になる可能性高し。
009084
NGNG実装側のシグネチャが Private でもいいとは知らなかった。今確認してみたが
たしかにそれで ok だった。
でも、public でも、インターフェイスを通してなら、インターフェイスに定義している名前で呼び出せるよ。
今まで実装側も全部 Public で書いてたよ。Java に慣れてるから。
009184
NGNGキャスト関数!?俺はそんな変な関数書いた事ないよ。
インターフェイス IPrinter と、それを実装した CPrinter がある場合、以下でオーケー
Dim objPrinter As IPrinter
Dim ConcretePrinter As New CPrinter
Set objPrinter = ConcretePrinter 'CPrinter が IPrinter を実装しているので全く問題なし。
Call objPrinter.PrintOut ("Message") 'IPrinter において宣言されているメソッドを呼び出せる
009213
NGNG>キャスト関数!?俺はそんな変な関数書いた事ないよ。
べつに特殊な例を挙げたつもりは無いんだけど。
ttp://www.gj.il24.net/~nakasima/vb/tips/#VBTIPS11
Publicにするっていうからキャストがめんどくさくいのかと思ったよ。
0094デフォルトの名無しさん
NGNG0095デフォルトの名無しさん
NGNGこのキャスト関数ってMSDNライブラリにもしっかりのっていますね。
[VB] オブジェクトを異なるインターフェイスにキャストする方法
MSDNには、「この関数の名前をインターフェイスと同じ名前にすると、プログラムがスリムになります。」
と書いてあるんだけど、同じにしたらなんか不具合が出たような・・・。
009683
NGNGミスじゃなかったのか・・・。
これは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で大規模」って想像できないんですが。
0098デフォルトの名無しさん
NGNG小規模でOO使っちゃいけないのかい。関係ないよね。
0099デフォルトの名無しさん
NGNG0100デフォルトの名無しさん
NGNG0101デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています