- - PR -
VB.NETとオブジェクト指向
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-09-14 22:15
葉瀬崎浩樹さん、こんばんは。
あはははははは。 まるでレギュラーのネタですねぇ。 | ||||||||||||||||||||
|
投稿日時: 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でやりなさい!(こうすれば出来る)」という書籍や記事をご存知でしたらキーワードだけでも教えて頂ければと思います。 めちゃくちゃな文章ですが初心者の浅知恵ということでご容赦ください・・・. | ||||||||||||||||||||
|
投稿日時: 2005-09-14 22:59
さかもと様
> ・VBだから出来ないんじゃないの??という0点の考えを持ってしまう VBだからRDBをOOPで組むのが難しいのではない、ということが分かっていただけて幸いです。 「インピーダンス・ミスマッチ」が何なのかについて、なにも記述してませんでしたので、下記の記事などをご参考に。 http://capsctrl.que.jp/kdmsnr/wiki/agiledata/?TheObject-RelationalImpedanceMismatch > 又、「RDB中心でもOOPでやりなさい!(こうすれば出来る)」という書籍や記事をご存知でしたらキーワードだけでも教えて頂ければと思います。 上記URLページの最後のほうに 「オブジェクト-リレーショナル・インピーダンス・ミスマッチを乗り越えるための戦略」 という項目がありますので、なにかヒントをつかんでみてください。 | ||||||||||||||||||||
|
投稿日時: 2005-09-15 04:33
さかもと様
> やはり何度か出てきているキーワード「専門職向けの言語」ということで、VB業務系アプリには向いているけど「ふるまい」が複雑な物にはC#が向いているという認識は少なからず当たっていますでしょうか? もしかして「ふるまい」とは、私のレスから出てきた言葉でしょうか? > そして、「業務アプリのような『振る舞い』の少ないものを、OOで作ってもメリットが少ない」のです。 私がここで使った『振る舞い』とは、オブジェクト指向用語です。 例えば、 業務アプリでは、「顧客」クラスに「クレームを言う」なんていうメソッドはきっとないですよね?(絶対にないとは言えませんが・・) つまり、「顧客」オブジェクトが「クレームを言う」「取引をする」という『振る舞い』があるか、ないかです。 それは、言語がVB.NETであろうとC#であろうとJavaであろうとC++であろうと同じです。 これが、例えばシミュレーション系ゲームなんかになると 「クルマ」クラスに「走る」「止まる」・・などのメソッドがあって、(実際にはこんな単純ではないかもしれませんが・・) 実際にスクリーン上で何台もの「クルマ」オブジェクトが走ったり、止まったり・・と『振る舞う』わけです。 設計(モデリング)が同じであれば、言語がVB.NETであろうとC#であろうとJavaであろうと、だいたい同じでしょう。 すいません、「VB.NETでは□□が向いていて、C#では△△が向いている」といった議論は私にはできません。 #私はC++が専門ですので・・。あと業務アプリ分野は経験ありますが、どちらかというと専門外です。 > なぜ現場の仕事とOOPが結びつかないんだろう? もし、もっとオブジェクト指向について勉強したいのであれば、 一度、業務アプリ以外(RDBを使わない)のプログラム(ゲームやツールや・・)を作ってみられてはいかがでしょう。 世の中、業務アプリだけでなく、いろんな分野でソフト開発の仕事をしている人がいます。 「業務アプリ」にだけ拘っていると、「オブジェクト指向」の真価は分からないと思いますよ。 | ||||||||||||||||||||
|
投稿日時: 2005-09-15 09:22
こんにちは、じゃんぬ です。
あまり、過激な発言は... お願いします。(*_ _)
そういえば、こんなこともできますよね。
って、きくちゃん さんと同じようなこと書いてるわん...
この 3 つは横に並べれないんじゃないですか? Integer.Parse(), CInt, CType, DirectCast は。 Int32.Parse() は Framework だから仕方がないし、 CInt は VB6 から引き継いでるもので仕方がないし... って、C# みたいに ([型])[value] でいいじゃんってことですか? キーワードを増やすのは、文字を青くして強調して見やすくするためじゃないかなぁ。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||
|
投稿日時: 2005-09-15 10:08
こんにちは、じゃんぬ です。
2003 までのレベルで言えば、良く言われるのが、 C# は、using でオブジェクトの破棄が保証できる。(IDisposable でないとダメですが) VB は、Try 〜 Finally で代用するしかない。 オブジェクトの破棄を保証する C# はコードに XML コメントを書くことができる。 VB は自分で XML ファイルを書くか、アドインに頼ることになる。 ただし、2005 からはこれがなくなります。 で、逆で C# だと困るのは、Excel COM 何かを使うときに、 Optional による引数省略ができないので、面倒くさい。。。 つまり、C# では、やりたくない... 2003 まではインテリセンスは VB の方が親切ですが、 2005 になると、C# も VB も両方ともかなり親切です。 他は好みの問題かな、と思います。 Framework を利用して開発してるのだから、あんまり差異を感じません。 コード量が減る減らないは私は気にしませんが、 VB の冗長なキーワードいっぱいなコードが嫌いという方もおりますし。
あ... すいません... (*_ _) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||
|
投稿日時: 2005-09-15 10:27
一介のプログラマには、『インピーダンス・ミスマッチ』は
『オブジェクト技術とリレーショナル技術の不整合』ぐらいにしか 理解できなかったのですが。。。 『インピーダンス・ミスマッチ』というのは、一般的な実装で 回避できないもんなんでしょうか? 例えば、 データレイヤーでデータアクセスクラスから RDB にアクセスして、 テーブルデータを取得する。そして、データレイヤーからビジネスレイヤーへ 取得したテーブルデータを DataTable クラスで受け渡す、みたいな。 # O/R マッピングとか DataTable クラスで吸収されてるんだろうって # 勝手に思ってたんだけど、違うんだろうか。。。 | ||||||||||||||||||||
|
投稿日時: 2005-09-15 11:16
一介のプログラマである私はこんな風に考えています。
インピーダンスミスマッチというのは、メモリ上のオブジェクトの世界と、リレーショナルデータベースの世界のギャップのことだと思います。 例えば、"社員"クラスと"支店"クラスがあって、支店が合併するのでA支店とB支店の社員をAB支店に所属させるという変更を行う時に、オブジェクトの世界ではリンクをつなぎ変えてやるだけでよいですが、その変更をRDBに適用させようとした時に"一工夫"必要になります。 具体的には、社員-支店間のリンクに変更があった時に"社員テーブル"の"所属支店"列の値を書き換えるという処理を行ってしまうと、A,B両支店の社員の数だけUPDATE文が実行されることになります。(100人なら100回、200人なら200回) ですが、RDBとしてはUPDATE文1回でその作業は済みますよね? ですから単純に 「オブジェクトの状態をレコードとして保存。変更があれば変更、追加があれば追加。」 というわけにはいきません。 データの取得にしても、本当は全ての値をメモリ上のオブジェクトに保持しておければ最高ですが、そういうわけにもいきません。 メモリ上に展開しておくデータの範囲や、取得するタイミングを考えなければならないのです。 単純に1オブジェクト1レコードというわけにもいきませんしね。 その"一工夫"しなければならないというのが、ギャップがあるという証明ではないでしょうか。 学術的な定義などは良く分かりませんので、「ぜんぜん違うよ」とかありましたら指摘をお願いします。 いずれにしても、オブジェクト指向開発ですんなりRDBを使えないというのは皆さん感じていると思います。 逆(データ)からの視点で見れば、 「オブジェクトとか面倒な物作ってないでSQL文をポ〜ンと実行すれば済むんじゃね?」 ってことですね。 |