- PR -

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

投稿者投稿内容
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2005-09-14 22:15
葉瀬崎浩樹さん、こんばんは。

引用:

その疑問に対する回答も何パターンかありまして。。


あはははははは。
まるでレギュラーのネタですねぇ。
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2005-09-14 22:37
おばんです(方言だと思ってますが「こんばんは」の意味)

きくちゃん様
>データの圧縮・復元アルゴリズムの実装・・・
とのことですが、なんと言いますかとても素人考えの素人意見で笑われそうですが
「確かにそういった難しそうなサンプルだとかはC#で書かれてる・・・」
という印象です(笑)やはりそうしたサンプルがC#で書かれているのはそれなりの理由があるんだろうなと感じました。(本当に安直な意見ですいません(笑))

VB.netを始めるにあたっては先ほど書いたように「簡単に習得できる(らしい)」言語ということで始めたのも
一つの理由からですが、欲張ってOOPとはなんだ?という興味も混じって「簡単&OOPもOK」というMSの文句だったのでVBを選択した訳ですが、当初から現在まで「なぜ現場の仕事とOOPが結びつかないんだろう?」という疑問がありました(今もですが)

色々と調べていてもどうしてもVBとOOPが結びつかなくて、「この仕事をC#でやったら結びつくんだろうか?」などと安直に考えたりしていたのですが、本日Tdnr_Sym様のレスを読んでなんとなくその自分の中での困難さがなんとなく分かったような気がしました。

本来は意識すべきところなのでしょうが、私は長年COBOLオンラインをメインとしたいわゆる業務系アプリを作成しており、VB.netになってからも業務系アプリばかりの開発を行っています。Tdnr_Sym様のおっしゃる「インピーダンス・ミスマッチ」についてもう少し理解する必要があるんだーというのが今の印象です。

素人考えで
「今の仕事(業務系アプリ)→VB.netで→OOPとやらをやってみたい」
と考えてそれらのキーワードで色々と調べては来たのですが
・VBをサンプルとしたほとんどの参考書(とか記事とか)もまず「動物」「猫」「啼く」というキーワードがそれに近い印象的な言葉で書かれていてなんとなく現場の仕事(RDB中心)と結びつかない
・「動物」がどのマスタ(??)にあたるとか「啼く」がどの更新処理にあたる(??)とかが全く結びつかない(RDB中心)
・結局「OOPの基本的な概念とかはある程度分かるようになったけど現場の仕事とどう結びつけて考えればいいのか分からない」ので従来の方法でなんとか乗り切ってしまう
・業務系アプリ(RDB中心)でOOPを実現している方法(というかサンプル)を探し求める
・VBだから出来ないんじゃないの??という0点の考えを持ってしまう
ということになってしまっていました。
(検索結果にもの凄く期待を掛けていた某出版社「VBではじめるオブジェクト指向プログラミング(正確な名前忘れました)は絶版になっていたし)

やはり何度か出てきているキーワード「専門職向けの言語」ということで、VB業務系アプリには向いているけど「ふるまい」が複雑な物にはC#が向いているという認識は少なからず当たっていますでしょうか?

又、「RDB中心でもOOPでやりなさい!(こうすれば出来る)」という書籍や記事をご存知でしたらキーワードだけでも教えて頂ければと思います。

めちゃくちゃな文章ですが初心者の浅知恵ということでご容赦ください・・・.
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2005-09-14 22:59
さかもと様
> ・VBだから出来ないんじゃないの??という0点の考えを持ってしまう

VBだからRDBをOOPで組むのが難しいのではない、ということが分かっていただけて幸いです。

「インピーダンス・ミスマッチ」が何なのかについて、なにも記述してませんでしたので、下記の記事などをご参考に。

http://capsctrl.que.jp/kdmsnr/wiki/agiledata/?TheObject-RelationalImpedanceMismatch

> 又、「RDB中心でもOOPでやりなさい!(こうすれば出来る)」という書籍や記事をご存知でしたらキーワードだけでも教えて頂ければと思います。

上記URLページの最後のほうに
「オブジェクト-リレーショナル・インピーダンス・ミスマッチを乗り越えるための戦略」
という項目がありますので、なにかヒントをつかんでみてください。


Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2005-09-15 04:33
さかもと様
> やはり何度か出てきているキーワード「専門職向けの言語」ということで、VB業務系アプリには向いているけど「ふるまい」が複雑な物にはC#が向いているという認識は少なからず当たっていますでしょうか?

もしかして「ふるまい」とは、私のレスから出てきた言葉でしょうか?
> そして、「業務アプリのような『振る舞い』の少ないものを、OOで作ってもメリットが少ない」のです。

私がここで使った『振る舞い』とは、オブジェクト指向用語です。

例えば、
業務アプリでは、「顧客」クラスに「クレームを言う」なんていうメソッドはきっとないですよね?(絶対にないとは言えませんが・・)
つまり、「顧客」オブジェクトが「クレームを言う」「取引をする」という『振る舞い』があるか、ないかです。
それは、言語がVB.NETであろうとC#であろうとJavaであろうとC++であろうと同じです。

これが、例えばシミュレーション系ゲームなんかになると
「クルマ」クラスに「走る」「止まる」・・などのメソッドがあって、(実際にはこんな単純ではないかもしれませんが・・)
実際にスクリーン上で何台もの「クルマ」オブジェクトが走ったり、止まったり・・と『振る舞う』わけです。
設計(モデリング)が同じであれば、言語がVB.NETであろうとC#であろうとJavaであろうと、だいたい同じでしょう。


すいません、「VB.NETでは□□が向いていて、C#では△△が向いている」といった議論は私にはできません。
#私はC++が専門ですので・・。あと業務アプリ分野は経験ありますが、どちらかというと専門外です。


> なぜ現場の仕事とOOPが結びつかないんだろう?

もし、もっとオブジェクト指向について勉強したいのであれば、
一度、業務アプリ以外(RDBを使わない)のプログラム(ゲームやツールや・・)を作ってみられてはいかがでしょう。
世の中、業務アプリだけでなく、いろんな分野でソフト開発の仕事をしている人がいます。
「業務アプリ」にだけ拘っていると、「オブジェクト指向」の真価は分からないと思いますよ。

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-15 09:22
こんにちは、じゃんぬ です。

引用:

objectさんの書き込み (2005-09-14 16:53) より:

#結局、全言語ユーザーに、「VB」のお守りをしろって事かな?


あまり、過激な発言は... お願いします。(*_ _)

引用:

表現が簡単過ぎましたかね。
簡単に言えば、

コード:

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

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


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



そういえば、こんなこともできますよね。

コード:

Private _Hoge As String()()

Public ReadOnly Property Hoge(ByVal x As Integer, ByVal y As Integer) As String
    Get
        Return Me._Hoge(x)(y)
    End Set
End Property


って、きくちゃん さんと同じようなこと書いてるわん...

引用:

ええ、「VB」と「C#」を比較しても、「VB」の方が遥かに複雑なんですよね。
型変換でも、本来「型」だけで良い所を余計にキーワードを増やしています。
#「Integer」、「CInt」、「CType」等


この 3 つは横に並べれないんじゃないですか?
Integer.Parse(), CInt, CType, DirectCast は。
Int32.Parse() は Framework だから仕方がないし、
CInt は VB6 から引き継いでるもので仕方がないし...
って、C# みたいに ([型])[value] でいいじゃんってことですか?
キーワードを増やすのは、文字を青くして強調して見やすくするためじゃないかなぁ。


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-15 10:08
こんにちは、じゃんぬ です。

引用:

さかもとさんの書き込み (2005-09-14 16:35) より:

・C#だと出来るけどVB.netだと絶対に出来ない(というかやりたくない)事
・VBはC#に比べて明らかにこんな部分が劣っている


2003 までのレベルで言えば、良く言われるのが、
C# は、using でオブジェクトの破棄が保証できる。(IDisposable でないとダメですが)
VB は、Try 〜 Finally で代用するしかない。
オブジェクトの破棄を保証する

C# はコードに XML コメントを書くことができる。
VB は自分で XML ファイルを書くか、アドインに頼ることになる。

ただし、2005 からはこれがなくなります。

で、逆で C# だと困るのは、Excel COM 何かを使うときに、
Optional による引数省略ができないので、面倒くさい。。。
つまり、C# では、やりたくない...

2003 まではインテリセンスは VB の方が親切ですが、
2005 になると、C# も VB も両方ともかなり親切です。

他は好みの問題かな、と思います。
Framework を利用して開発してるのだから、あんまり差異を感じません。
コード量が減る減らないは私は気にしませんが、
VB の冗長なキーワードいっぱいなコードが嫌いという方もおりますし。

引用:

以前「INETA Japan セッション in Developer Summit 2005」の議題として取り上げられたのでその後の記事を期待してたのですが中々更新されなくて・・・(笑)


あ... すいません... (*_ _)


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
いげ太
常連さん
会議室デビュー日: 2004/10/27
投稿数: 32
投稿日時: 2005-09-15 10:27
一介のプログラマには、『インピーダンス・ミスマッチ』は
『オブジェクト技術とリレーショナル技術の不整合』ぐらいにしか
理解できなかったのですが。。。

『インピーダンス・ミスマッチ』というのは、一般的な実装で
回避できないもんなんでしょうか?

例えば、
データレイヤーでデータアクセスクラスから RDB にアクセスして、
テーブルデータを取得する。そして、データレイヤーからビジネスレイヤーへ
取得したテーブルデータを DataTable クラスで受け渡す、みたいな。

# O/R マッピングとか DataTable クラスで吸収されてるんだろうって
# 勝手に思ってたんだけど、違うんだろうか。。。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-09-15 11:16
一介のプログラマである私はこんな風に考えています。

インピーダンスミスマッチというのは、メモリ上のオブジェクトの世界と、リレーショナルデータベースの世界のギャップのことだと思います。
例えば、"社員"クラスと"支店"クラスがあって、支店が合併するのでA支店とB支店の社員をAB支店に所属させるという変更を行う時に、オブジェクトの世界ではリンクをつなぎ変えてやるだけでよいですが、その変更をRDBに適用させようとした時に"一工夫"必要になります。
具体的には、社員-支店間のリンクに変更があった時に"社員テーブル"の"所属支店"列の値を書き換えるという処理を行ってしまうと、A,B両支店の社員の数だけUPDATE文が実行されることになります。(100人なら100回、200人なら200回)
ですが、RDBとしてはUPDATE文1回でその作業は済みますよね?
ですから単純に
「オブジェクトの状態をレコードとして保存。変更があれば変更、追加があれば追加。」
というわけにはいきません。
データの取得にしても、本当は全ての値をメモリ上のオブジェクトに保持しておければ最高ですが、そういうわけにもいきません。
メモリ上に展開しておくデータの範囲や、取得するタイミングを考えなければならないのです。
単純に1オブジェクト1レコードというわけにもいきませんしね。

その"一工夫"しなければならないというのが、ギャップがあるという証明ではないでしょうか。


学術的な定義などは良く分かりませんので、「ぜんぜん違うよ」とかありましたら指摘をお願いします。
いずれにしても、オブジェクト指向開発ですんなりRDBを使えないというのは皆さん感じていると思います。

逆(データ)からの視点で見れば、
「オブジェクトとか面倒な物作ってないでSQL文をポ〜ンと実行すれば済むんじゃね?」
ってことですね。

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