- - PR -
VB.NETとオブジェクト指向
投稿者 | 投稿内容 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-09-13 10:37
お世話になります。
若輩者がこのようなスレに書き込みさせていただくのも恐縮していますが…
がるがるさんの↑の投稿で思い出したのですが、 過去に、私が携わったプロジェクト(VB.NET)で、こんな話がありました。 PJの音頭をとっている会社(仮にAとします)が、 オブジェクト指向で開発を進めることの利点を知っていらっしゃったので、 (でも、詳細はわかっていなかったみたいですが…) 基本的には「オブジェクト指向開発で進めましょう。」 という事になっていたのですが、 そのPJに参入したほとんどの協力会社はオブジェクト指向開発未経験でした。 画面まわりについては、A会社が提供してきた 画面の基底クラスを使って実装し、 なんとか第一フェーズ納品まで行きました。 その時点で、私たちはそのPJから撤退しました。 その後第二フェーズになって、 ユーザーから「全画面に時計を表示して欲しい」なんていう要望が出てきまして、 A会社から、「たくさん画面があって、全部に実装しないといけないから、 人手が足りない」なんて相談を受けましたw 「全然複雑な画面でもないし、そもそも親画面があるんだから、 それに一個実装すれば済むこと」なのに… 私たちの会社は、その追加要望対応は、色々事情もあって受けませんでしたが 後で聞いた話によると、 他の協力会社さんが、人海戦術で全部の画面に時計を表示する実装を施したとか。 オブジェクト指向について、正しい理解を持って 作業を進めないと、結局意味無いなぁ…と思った出来事でした。 | ||||||||||||||||||||||||
|
投稿日時: 2005-09-13 19:49
じゃんぬねっとさん、こんばんは。
実はとっくに、物議を醸してたのね…。 アップグレードウィザードがもっとお利口になってくれれば済むだけの話だと思うんですけどねぇ。 | ||||||||||||||||||||||||
|
投稿日時: 2005-09-13 20:05
VB6 なプログラマが VB2002, 2003 で躓いてしまったことが問題ですかね。 いまだにアップグレード ウィザードでエラーが発生しますだの、 アップグレードできなかった部分についてはどうしたらいいのか? なんて質問が来ますからね。 もちろん、アップグレードされたソースも、 お世辞にも良いコードとは言えなかったり... VB6 でもある程度 OOP を意識して組んでくれれば、 こんなことにはならなかったでしょうに、残念ですよね。 互換性を重視するために、VB2005 は VB6 に近づいてしまいましたが、 できれば 2 極化できるような仕組みが欲しかったです。 結局仕組みをわかってる人ほど、VB2003 流儀に組むでしょうから、 それなりに制約できるオプションが欲しかったですね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||||||
|
投稿日時: 2005-09-14 12:50
objectです。
私は、 ------------------------------ msoさんの「むしろNewする分面倒なことが増えるだけだと思います。」 himaninさんの「そう。面倒なんです。…」 ------------------------------ きくちゃんさん、 じゃんぬねっとさんのご指摘に象徴される 「インスタンスを生成する必要がなく、直接、Form2というクラス名からShowメソッドの呼び出しが可能となったのだ。」 ------------------------------ これらの中に問題が象徴されている様に思います。 先ず問題なのは、 「型」と「そのインスタンス」の違いに対する「認識レベル」 ではないでしょうか? #極端に言えば、私は「new」があるからこそ安心・納得しているんですけどね。 それから、 問題は、VBユーザーにあるのではなく、 その様な考え方にユーザーを導いてきた「MSのVB設計者」のポリシーにあるのではないでしょうか? 実際、例えば VB.NETでは、 メソッドに於ける「()」の使い方が「デタラメ」ですし、 本来、最も理解している筈の「プロパティ」に関しても、 その定義は 「メソッド」の形式 使用形式は、 本来の「プロパティ」の形式 となっています。 「MS」での「VB」の影響力は「異常」の様ですから、 「.NET」が「VB.NET」によって「歪んで行く」 のは、恐らく避けられないでしょうね? でも、だからこそ、逆に 「MS」以外の「CLIプラットフォーム」の可能性が大きくなる のではないでしょうか? #そういう意味では、 #Javaにも可能性はあるんですが、 #Javaには、問題の本質が見えてないのでしょうか? >じゃんぬねっとさん >VB6 なプログラマが VB2002, 2003 で躓いてしまったことが問題ですかね。 >いまだにアップグレード ウィザードでエラーが発生しますだの、 >アップグレードできなかった部分についてはどうしたらいいのか? >なんて質問が来ますからね。 VB6の人には、PGの「エントリポイント」という意識も殆ど無い人がいます。 それから、私は「VB6の人」から 「知りたいのは、考え方では無く、作り方だ!」 と言われた事があります。 >互換性を重視するために、VB2005 は VB6 に近づいてしまいましたが、 >できれば 2 極化できるような仕組みが欲しかったです。 私もそう思います。 しかし、これは 「MS自体が 2 極化している」 と考えれば、「必然の流れ」と納得できますよね? 「本来のMSはVB6的」 という事なんでしょうかね? | ||||||||||||||||||||||||
|
投稿日時: 2005-09-14 13:00
objectさん、こんにちは。
取り敢えずここ↑だけ反応します。 MS の人も、
と言われ続けているのでしょう。 | ||||||||||||||||||||||||
|
投稿日時: 2005-09-14 13:51
はい、そのとおりです。 VB6 でも、私は Form を使う時は明示的に new しています。
VB は Professional (と言っても医者などの職業) 用。 VC は Developer 用とされてきました。 ですから、VB がこうなってしまったのは必然と言えるかもしれません。 で、VB.NET になって変わったものを、何故戻すのか... ですよね。
すいません、ここが少し判りませんでした。 VB6 の時に引数のないメソッドの () が消されちゃうのには泣けました。 引数が複数ある場合でかつ、引数を () で括る場合は、 Call をつけないと構文エラーになるのにも泣けました。 が、VB7 からはこれらが解消されて、 「VB 見やすくなって良いなぁ!」 って思ってました。
決して「歪んで行く」とも言えないのではないでしょうか? MVP だから擁護しているわけじゃなくて、C# は C# らしさを、 VB は VB らしさを出す、ようなイメージに思えます。
VB6 でも Sub Main あるんですけどね... (´・ω・`) Form::Load イベントで "起動前にすべき" 初期化処理が入ってるのを、 今までにも幾度となく見ました... (特に火消しの時にですが...)
先にも話したように、VB らしさを出すためかなぁとも思います。 現に「C# 使えばいいじゃん」という方もおりますからね。 しかし、世の中は「VB は楽」という固定観念が抜けず、 どうしても、VB の案件になってしまうことが避けられなかったりします。 だからこそ、2 極化をして欲しかったんですね... # または、VB# をきぼんぬですか...w _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||||||
|
投稿日時: 2005-09-14 14:03
脱線が好きなので燃料置いていきます。 ■こんなVBプログラマーは嫌だ。 Class,Property,Eventを使ったことが無い。 CollectionやDictionayを使ったこと無い。 EnumやTypeも理解していない。 参照のSetやNewの意味を知らない。 配列(0)番目の存在に気づいていない。 UntilとWhileを逆に使っている。 標準basにPublic変数がいっぱいだ。 Public変数を関数の引数に直接渡している。 マジックナンバーがいっぱいだ。 「規約で定数を使うようになってますよ」と言ったら、Const cintNum1 As Integer = 1 と書かれた。 同名同義の定数がForm毎に宣言されている。 フラグの名前がflag1,flad2だ。 lngAmountという変数名だけど、実際はintでエラーになる。 変数宣言しているけど、実は使っていない。 モジュール同士が切っても切れない。 自信が無いのか、3回もNothingをセットしている。 Null値を扱えないのか、"NULL"文字列をセットしている。 LostFocus時に入力値検証しているせいで無限ループだ。 参照設定しようとすると、同名のocxがで沢山でてくる。 -.-.-.-.-.-.-.-.-.-.-.-.-.-.- オブジェクト指向以前に問題やま積みですから。 靴(言語)に人を合わせられないから、靴を人に合わせたのでしょう。 | ||||||||||||||||||||||||
|
投稿日時: 2005-09-14 14:59
若輩者の私的見解です。
OOP としての完全性を重視するか否かで VB.NET への評価は分かれると思います。 本来は、『VB は Professional 用、VC は Developer 用』 という方針で設計されたんでしょう。 しかし、開発者でなくとも簡単に書けるような実装を多数盛り込んだことで、 より複雑性が増してしまうという副作用が目立つ結果になってしまい、 混乱を招いているのだと思います。 つまり、多すぎるシンタックスシュガーで OOP 臭を消しすぎたのが問題かと。 両方弄ってみた感想としては、今となっては本来の設計思想とは逆、 『VB.NET は Developer 用、C#.NET は Professional 用』と感じます。 柔軟な記述が出来て便利な反面、柔軟に書けてしまい過ぎて 特にチーム開発なんかでは取り扱いが難しくなっちゃうこともしばしば。 OOP 言語としてはいざ知らず、Windows Programing 言語としては 最強な気がしますが。いや最凶か。。。 # ちょっと修正しました [ メッセージ編集済み 編集者: いげ太 編集日時 2005-09-15 10:35 ] |