- PR -

VB.NETとオブジェクト指向

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-14 15:13
あわわ。

引用:

Class,Property,Eventを使ったことが無い。


Class は VB6 では、クラス モジュールということになるでしょうか...
RaiseEvent を使ったことがない人は結構いますね。
それにしても、標準モジュールばかりに詰め込んでるの多いですよね。
私は静的クラスなノリで使ったりしています > 標準モジュール

引用:

EnumやTypeも理解していない。
参照のSetやNewの意味を知らない。
配列(0)番目の存在に気づいていない。


流石にこれは、希少かなとは思います。

引用:

UntilとWhileを逆に使っている。


Until は他言語出身者に良く質問されるので、
Do While 〜 Loop のみの使用で、Not を使うようにしますね。
(Until 〜 Loop, Do 〜 Loop は使わない)

引用:

標準basにPublic変数がいっぱいだ。
Public変数を関数の引数に直接渡している。


これは、火消しの時によく見かけます。
Public 変数というか、もはや Global 変数なわけですが、
これが 3,000 行近くあった時には、泣きそうになりました。

引用:

マジックナンバーがいっぱいだ。
「規約で定数を使うようになってますよ」と言ったら、
Const cintNum1 As Integer = 1 と書かれた。


これは、VB に限った話ではないかもです。
#define ONE 1
#define TWO 2

引用:

同名同義の定数がForm毎に宣言されている。
フラグの名前がflag1,flad2だ。


これも、VB に限った話ではないかもです。

引用:

lngAmountという変数名だけど、実際はintでエラーになる。


これは、VB.NET になって見かけなくなりました...

引用:

変数宣言しているけど、実は使っていない。


警告出て欲しいですよね...
いや、管理してれば警告も必要ないのですが...

引用:

モジュール同士が切っても切れない。


モジュール化しているつもりなのですが、"大前提" を忘れてるんですよね。
つまり、モジュールの "独立性" に乗っ取ってない。
これも、デスマってるプロジェクトの「共通」と "呼ばれる" 部分に多いです。

引用:

自信が無いのか、3回もNothingをセットしている。
Null値を扱えないのか、"NULL"文字列をセットしている。


これは、流石に見たことないです。(^o^;)

引用:

LostFocus時に入力値検証しているせいで無限ループだ。


Validate イベントでチェックしてないの多いですよね。
Validate イベントだと不都合のある仕様が多いという事実もありますが...

引用:

オブジェクト指向以前に問題やま積みですから。
靴(言語)に人を合わせられないから、靴を人に合わせたのでしょう。


引用:

最強な気がしますが。いや最凶か。。。


そういう方もいるという程度に思ってます。
(そうでない人も多くいますから)
C, Java をやっていた時にも違う例ですごいのは見てます。


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
117
ベテラン
会議室デビュー日: 2005/05/09
投稿数: 94
お住まい・勤務地: 大阪府
投稿日時: 2005-09-14 15:37
この手の話は大抵「VB=ダメなモノ」という前提ありきで話が進むので
VB屋としては絡みたくないものではあるのですが(僻み)

引用:

脱線が好きなので燃料置いていきます。

■こんな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がで沢山でてくる。



言語が何でもこういう↑タコなことをやらかす人は大勢いるんですが
あえて"VBプログラマ"と限定されるところに若干カチンときますね
_________________
# Future Is On Fire !
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-09-14 15:45
燃料コピペ投下


勘違いしている奴があまりに多いのでいわせてもらう。C#は孤高。突然スマン。
だがもう我慢ならねえ。C#、しかもver1.0を使ってまだ3年の俺だが、いわずにはいられなかった。

ちょっと仕事の合間や休憩室で、よく「C#いいっすねえ」などといわれる。
俺のはVS2002だしスタンダード版だし、別にそうでもないっしょ。でもなんかいわれる頻度が高い。
なんでよ?謎だった。

しかし、この間気付いた。声をかけてくる奴はほぼ100%.NETの開発をしてるんだよ。
C#じゃない。その他の言語な。VB.NETとかJ#とか。
ひでえ奴になるとNetCOBOLとか。あえて「その他の言語」と呼ばせてもらう。

そいつらの「C#いいっすねえ」の中には「同じ.NETプログラマの仲間ですね」ってニュアンスを感じる
ことに気付いたんだよ。冗談じゃねえって。仲間じゃねえよ。
「俺の操る言語の血筋はC#とつながってるんだぜ」みたいなオーラも感じる。つながってねーよ。
完璧に気のせいだ。ふざけんな。

C#と他を比べてどっちがいいかなんてことはいうつもりはない。C#を使ってる奴はそんなことは
いわない。Javaを使ってる奴もそうだろう。CやC++使いでも同じだ。Perl、PHP使いだってそうだろう。
その言語が好きで使ってる奴は他を認めつつも他を羨まない。自分の選択に自信を持ってる。
「その他の言語」を使ってる奴はそうじゃない。C#、そしてMicrosoftの栄光につかりながら
「その他」を使ってる。きもち悪い。一番手に負えないのが「その他」のVB.NETを使ってる奴らだよ。
.NETってだけでC#と同列だと思ってる。いや、信じてる。心の底まで信じきってる。
ありえねえ。同列なわけねえだろ。いっしょにするな。死ね。

誤解のないように言っておくが、Javaには敬意を表してる。Java使いは「その他の言語」使い
とは違う。C#を羨まない。精神が違う。

もう一度いうが、C#は孤高。
その他の言語とは違うこと、そして明確に区別されるべき存在であることを忘れるな。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-14 16:03
こういう展開を危惧して、

> そういう方もいるという程度に思ってます。
> (そうでない人も多くいますから)

と書いたのですが...

私は、C# メインのつもりですが、VB の好きなところがあります。

 ・キーワードが良い意味で冗長で見やすい。
 ・Handles 句のおかげでイベント ハンドラがわかりやすい。
 ・RaiseEvent が楽で便利。etc...

C# より劣ってるとは思わないですね。
VB2005 からは Using や XML コメントも対応されますし。

# My とかフォームの暗黙のインスタンス化を使うかどうかは、
# もう好みの問題にするしかないのかなぁ、とも最近は思ってます。


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2005-09-14 16:12
なんだか話題から逸れるないようでスイマセン。
C++ユーザーの私がこんなところで発言するのは恐縮なのですが・・

> C/Sの業務アプリで、業務ロジックは全てクライアントのGUI、サーバはDBのみというシステムをVB.NETで行おうとしています。
> クラス図書いてさて実装・・と思うと、どうもしっくりしません。

VBプログラマの多くがOOにつまづいている・・というより
業務系VBプログラマが、RDBとOOの融合につまづいている気がします。そして、その多くが
『オブジェクト・リレーショナル・インピーダンス・ミスマッチ』というよく知られた(?)壁を
乗り越えられず、「OOは難しい」という結論に至っているように思えます。

結論から言えば、「RDBとOOは相性が悪い」のです。
そして、「業務アプリのような『振る舞い』の少ないものを、OOで作ってもメリットが少ない」のです。
#私の個人的意見です。

たとえば、
1.RDBのテーブルをクライアント側でそのままクラスと記述したが、
  そのクラスにはフィールドの取得・設定以外なにもない、メソッドのないクラスになってしまった。
  これじゃユーザー定義型と変わらないじゃないか
とか
2.相変わらずコードの大部分は、
  ・SQLで取得したレコードをせっせと画面コントロールやグリッドに表示していく
  ・画面入力されたデータをせっせとテーブルにINSERT,UPDATEしていく
  なんかもっと効率よく記述できないのかなぁ
とか・・

じゃ、「業務系プログラマはOOを諦めろ」というかというと、そうではありません。
私もRDBを使ったシステム設計/開発(C++)は何度かありますが、
どうやってRDBとOOを融合してきたかというと・・

まず、上記1.のように「RDBテーブルに対応するクラスを作成することは、ほとんど意味がない」と気付きます。
そして、上記2.ようなコードの大部分の処理は、「単にデータ移送しているに過ぎない」と気付くことです。
つまり
 ・RDBテーブル->画面(コントロールやグリッドあるいは帳票)
 ・画面->RDBテーブル
の2方向のデータ移送です。

これをシンプルに解決する方法は、「データ・バインディング」という汎用的な仕組みを作ることです。
この仕組みを実装するのは、かなりの力量とセンスが必要となるでしょうが、
VB6ならまだしも、オブジェクト指向言語となったVB.NETには、
この仕組みを実装できるだけの記述能力はあるとおもいます。

「データ・バインディング」について具体的なこというと、長々となってしまいますが、基本的な発想は

【テーブルの各フィールド】と【画面の各コントロール】をなんらかの方法で結びつけをしてやることです。
ひとつの方法として、「画面コントロールに文字列ID(フィールド名)を割り当てて結びつける」ことです。

こうやって、【テーブルの各フィールド】と【画面の各コントロール】とが結びつけば、その間のデータを
自動で移送させることが可能となります。


・・以上、長々と書き込みましたが、とりあえず

”業務系VBプログラマの方は『インピーダンス・ミスマッチ』という問題を認識してください”

さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2005-09-14 16:35
さかもとと申します。
ワタクシは余り言語仕様レベルでとやかく言えるレベルには無いものですが
現在VBを利用している物としてやはり色々と意見(大抵はVB=悪)を読むにつれ
今後はどうしよう?(Java,C#へ転居する)という立場で拝見させていただいております。「こんなVBプログラマは嫌だ」に当てはまる部分があって,しまった・・・と思ってもいます。
ワタクシのレベル
・元COBOLプログラマーでVBは.netになって初めて始めた人
・@ITの記事の「熱血VB・・・(でしたっけ?)」などを読んで更に悩む人。
・2005版への期待(とそれらの特集記事)も含めて更に悩む人です
・.net云々以前にVB自体への知識が少ない人

よく「VB vs C#」などというキーワードで検索し色々と記事を読むのですが,大抵の場合
言語仕様レベルでのクセ(?)の違いが大きく取り上げられていて,もう少し広い視点
での違い(何をどう広く?と言われると困るんですけど・・・こういった案件の場合はVBがいいとか悪いとか・・・)が取り上げられていればいいのになと思います。

 結局のところ駆け出しのワタクシの場合は「.Netだと色々な言語を使って開発が出来ます!(ちょっと端折り過ぎていますが)」というMSの謳い文句を信じて「じゃあ比較的容易に習得できる(といわれている)VBで!」という決定になってしまいました。


ご存知の方がいらっしゃれば是非教えていただきたいのですが
・C#だと出来るけどVB.netだと絶対に出来ない(というかやりたくない)事
・VBはC#に比べて明らかにこんな部分が劣っている
という記事などはありませんでしょうか?
(出来たら VB=悪 という前提に立っていない方が・・・)
以前「INETA Japan セッション in Developer Summit 2005」の議題として取り上げられたのでその後の記事を期待してたのですが中々更新されなくて・・・(笑)

前述したように,本当にワタクシ自身のスキルが低いので余り高度な話になると付いていけない部分があるのですが,この場を借りて勉強させて頂きます。

葉瀬崎浩樹
大ベテラン
会議室デビュー日: 2005/06/28
投稿数: 115
お住まい・勤務地: 兵庫県
投稿日時: 2005-09-14 16:38
引用:
117さんの書き込み (2005-09-14 15:37) より:
この手の話は大抵「VB=ダメなモノ」という前提ありきで話が進むので
VB屋としては絡みたくないものではあるのですが(僻み)

引用:

言語が何でもこういう↑タコなことをやらかす人は大勢いるんですが
あえて"VBプログラマ"と限定されるところに若干カチンときますね



むむ、燃料が燃えてるし!
お気に障ったようでゴメンナサイ(*_ _)m

釈明します。
私もVB6プログラマで、実際にそれで苦労しています。(現在進行形)
これは、この業界の構造と組織と人に帰結する問題だと考えています。
#どっかで見かけましたが「ジーンとミーン」のお話と底で繋がっています。
言語使いの優劣や中傷を意図したわけではなりません。
でも、結果的にそう取られたのですから、軽く反省してます。

あー、冗談めかして投稿してますけど、全部「実際にあった」話です。ヒィィ
でも、みなさんもいっぱいネタお持ちなんでしょう?

#編集追記
>>一郎さん
コピペゴチになります。職場で笑い死にしそう。。

[ メッセージ編集済み 編集者: 葉瀬崎浩樹 編集日時 2005-09-14 16:47 ]
object
ぬし
会議室デビュー日: 2002/03/20
投稿数: 338
お住まい・勤務地: 香川県高松市
投稿日時: 2005-09-14 16:53
objectです。
#纏めレスですみません。

>きくちゃんさん
私が言われる位ですから、恐らく「MS」の人も言われてると思います。
この問題は、数学教育で言えば、
「公式主義」
の問題に繋がっているのではないでしょうか?
まるで全てに「公式」があって、それさえ覚えれば、何でも出来る。
しかし、
「その様なユーザーが存在する」
事が問題では無く、
「VB」をずっと使ってても、その考えが修正出来ない事
否、寧ろ、
「その様な人を増加させている(その様にみえる)事」
にこそ問題があるのではないでしょうか?
#「MS」はツール(VC++等)に対するスタンスでも
#同様の問題を以前から持っていると私は思います。
#つまり、ツールに透過性が無くても、気に掛けない様に見える。

>じゃんぬねっとさん
>VB は Professional (と言っても医者などの職業) 用。
>VC は Developer 用とされてきました。
>ですから、VB がこうなってしまったのは必然と言えるかもしれません。
>で、VB.NET になって変わったものを、何故戻すのか... ですよね。
そういう面はありますね。
しかし、「VB.NET」に移行した時点で、
妥協出来ない最低レベル(型の意識)があった
と思います。
そして、それを崩した為のリスクは、本来ユーザーに来ると思います。
でも、恐らく全く同じ観点から、
「MS」はライブラリの変更でそれ相殺しちゃうんですよね。
#結局、全言語ユーザーに、「VB」のお守りをしろって事かな?

>すいません、ここが少し判りませんでした。
表現が簡単過ぎましたかね。
簡単に言えば、
コード:

VBの場合
Property ABC() As String
Set
End Set
Get
End Get
End Property

C#の場合
string ABC {
set {
}
get {
}
}

となりますよね?
同じプロパティの定義が「ABC()」と「ABC」と全く違う訳です。
これらは、個々の言語に依存するより、本来全体として一貫すべきものだと思います。
#勿論、プロパティ概念がないものは、この限りではありません。

>決して「歪んで行く」とも言えないのではないでしょうか?
勿論、歪む事が必然だと言っている訳では無く、
「可能性がゼロでは無い」
より、ホンの少し強調したという意味で
「恐らく避けられないでしょうね?」
と表現しました。

>先にも話したように、VB らしさを出すためかなぁとも思います。
>現に「C# 使えばいいじゃん」という方もおりますからね。
>しかし、世の中は「VB は楽」という固定観念が抜けず、
>どうしても、VB の案件になってしまうことが避けられなかったりします。
>だからこそ、2 極化をして欲しかったんですね...
ええ、「VB」と「C#」を比較しても、「VB」の方が遥かに複雑なんですよね。
型変換でも、本来「型」だけで良い所を余計にキーワードを増やしています。
#「Integer」、「CInt」、「CType」等
それから、ある意味では
「VB2002, 2003」でも 2 極化している部分はあった
と思います。
でも、それを
「VB2005」で完全な 2 極化に持っていこうとしている
んじゃないでしょうか?
そういう意味では、「VB」で歪む可能性は高くなりましたよね?

>葉瀬崎浩樹さん
>117さん
問題を、人の問題で考えるとそうなってしまうと思います。
同じ言語でも、人によって千差万別なのは、明らかですよね。
VBの問題は、人ではなく
「言語としてのVBのポリシーの問題」
だと私は思います。
その影響を直接人が受けて、
今迄の「VB6」以上に被害が拡大する恐れがある
という所が問題だと私は感じています。
「MS」としては、「やる事・やり方」を含めてもっと色々あるんじゃないのかな…。

[ メッセージ編集済み 編集者: object 編集日時 2005-09-14 16:58 ]

スキルアップ/キャリアアップ(JOB@IT)