菊池 Blog

移転しました 続・菊池 和彦の足跡


AILight Blogs

目次

Blog 利用状況

ニュース

移転しました http://aka-kazuk.spaces.live.com/

記事のカテゴリ

過去の記事

カテゴリ

移転先

.NET Framework とJavaの違い

聞かれたので自分の思う所を書いてみる。

  1. 基本オブジェクト(クラスで書ける物)が.NET Frameworkではアクティブオブジェクトであり、Javaはパッシブオブジェクトである。(端的に言えば delegate/event の有無だけどモデリングの観点ではまったく違うはずで別物である)
  2. アクセサは.NET Frameworkではプロパティで表現される。Javaではアクセサメソッドを定義する。
    両言語をフィールドを公開するのは御法度と言う視点で見れば、.NET Framework は真にオブジェクト(属性と振る舞いのペア)であるが、Javaはサービス(属性なぞは存在せず、属性の変わりにサービスメソッドの引数であり戻り値が利用される)である。
  3. C#はOSネイティブの環境で動作する(P/InvokeでAPIを呼ぶ事もできる、その他基本的にInterOpを重視する)、JavaはクローズなVM内で動作し基本としてInterOpをしない(JNI等によってAPIには出られるが基本御法度)
  4. .NET Frameworkには参照型と値型がある、値型の振る舞いはJavaの基本型と同様だが、.NET Frameworkでは値型を任意に追加定義できるが、Javaでは追加できない。
    C 風のstruct Array を.NETでは作れるがJavaでは作れない(見た目としては作れるが物理レイアウトとしては作れない)このため、Javaは座標のリスト等、小さなオブジェクトの列を扱うのが苦手だったはず(安易にやるとGCイジメになりやすい)

Javaはまったくやらないので良くわからんけど自分の理解としてはこんな感じ。

優劣はそもそも動作プラットフォームが違うので比較する意味が無い、プラットフォームにWindows を使うのであれば .NET だろうし、他を使うのであれば Java がいいのではなかろうか。値型の効果が出そうなら.NETが良いかもといえるが、JavaでもFlyweight等のパターンを使えば問題にならない実装とする事ができたはずなので、結局は腕の問題。

ちなみに「XMLパーサのバージョン地獄+あちこちのお手製フレームワークが色々別のXMLパーサバージョンを要求して現場で動く組み合わせが無い+数百万円のサーバでJavaを使ったXML処理がMSXMLを使ったVBアプリにいとも簡単に鴨られる」とか色々あった時期のトラウマが残っていますのでJavaなシステムを私に振らないで下さい。

投稿日時 : 2007年5月30日 19:45

コメントを追加

# re: .NET Framework とJavaの違い 2007/05/31 12:02 社本@ワック

JAVA SE7 (Dolphin) から、プロパティは採用するみたいですね。

public class MyBean {
public property String name1; // read-write
public property String name2 get; // read-only
public property String name3 set; // write-only
}

# re: .NET Framework とJavaの違い 2007/05/31 13:09 菊池

ほう、Javaも真にオブジェクトになりますね。

まぁ、プロパティは無いとソースコードからリバースしたらモデルから属性情報ごっそり脱落で設計モデルと実装モデルの比較が全然できないし何かと問題出るしね。

モデリング系の話だと動的モデル検証がもうちょっと進化してくれると.NET がアクティブオブジェクトをベースとしてる利点が生まれるんだけど、この辺はもうちょっと周辺の進化待ちかな。

タイトル  
名前  
URL
コメント