C#とJavaの間に言語的差異はあまりないですよね。

C#とJavaの間に言語的差異はあまりないですよね。 会社の同僚(営業)がJavaの経験者が多くいるが、案件はC#ばかりで悩んでいたので、アドバイスとして、C#は本格的オブジェクト指向を目指したものであり、ちょこちょこ手続き型の名残がある一方で、JavaはC#の後継で 手続き型の文法が廃止されたものだから、あんまり差異はなく、廃止されたものが何か抑えとけば問題ないと回答しました。 が、このアドバイスが適切かチキンになったので、質問させていただきました。

Java | C言語関連463閲覧xmlns="http://www.w3.org/2000/svg">25

ベストアンサー

1

「C#とJavaが、殆ど同じ」と言う回答が多いのですが、もしも殆ど同じならば、Microsoftは裁判所と世間にコテンパンに叩かれて消滅しています。 そうならないように、Javaとは違う言語にしたのがC#です。 詳しくは、後に説明します。 アドバイスの間違い探しが目的の質問と言うことなので、取り合えず、そこから始めます。 また、実際にC#とJavaは、どう言った点が違うのか、質問者さんは、その辺が知りたいと思いますので、それも説明します。 [アドバイスが違う点を修正した説明文] C++は、C言語を後継して、C言語にオブジェクト指向の機能を追加したものである。 しかし、C++は、C言語との互換性を重視したので、C言語流儀のオブジェクト指向ではない書き方も行える(C++は、中途半端なオブジェクト指向になってしまった)。 一方、Javaは、完全なオブジェクト指向を目指したので、C言語での非オブジェクト指向の書き方を廃止している。 そのため、Javaは、C++の後継とは言えない(Javaは、C++の影響は受けているが、互換性はないので、後継とは言えない)。 また、Javaより後に、C#と言うプログラミング言語が誕生している。 そのC#は、オブジェクト指向の面では、Javaから受けた影響が大きい。 そのため、C#は、Javaと同じく、完全なオブジェクト指向である(C言語的な非オブジェクト指向の書き方を廃止)。 しかし、C#は、JavaやC++の影響は受けているが、JavaやC++との互換性はない。 よって、C#は、C++からの後継ではないし、Javaの後継でもない。 [登場時期] C言語 1972年登場 C++ 1983年登場 Java 1995年登場 C# 2000年登場 [オブジェクト指向への対応の件] C言語は、オブジェクト指向に対応していません。 そこで、C言語にオブジェクト指向の機能を追加したプログラミング言語として、C++が誕生しました。 このC++は、C言語との互換性を重視しています。 そのため、C言語流儀での、オブジェクト指向ではない書き方も行えます。 すなわち、C++は、オブジェクト指向の書き方と、非オブジェクト指向の書き方の両者に対応しています。 しかし、オブジェクト指向の長所を活かすには、完全なオブジェクト指向のほうが望ましいです。 そのため、「C++は、オブジェクト指向対応言語ではない」と批判する人達が多くいました。 C++が普及し始めた当時では、Smalltalkと言うオブジェクト指向対応言語が既に活躍していたからです。 しかし、C++が、C言語との互換性を重視したことは、結果として正解でした。 現在Smalltalkの存在を知らない人は多いのですが、C++を知らない人はいません。IT関係者ならば。 当時、C言語の重要度がかなり高かったので、普及ではC++の勝利となりました。 しかし、C++が、中途半端なオブジェクト指向対応言語であることには、変わりありません。 そこで、オブジェクト指向に完全対応したJavaが誕生しました。 Javaは、人気を落としませんでした。 それどころか、どんどんと人気を上げて行きました。 Javaは、インターネット仕様を取り入れた点が、有利だからです。 (これに対してC++は、インターネットが普及する前に定着した言語なので、インターネット仕様が考慮されていません) また、Javaは、様々なOS上で動作するアプリケーションソフトが開発可能と言う点も、Javaが有利になっています。 しかし、Javaの人気急上昇で、C言語やC++が、廃れることはありませんでした。 C言語とC++は、ポインターと言う技術仕様があって、メモリを直接アクセスすることが可能だからです。 ハードに近い底部の階層のプログラミングでは、C言語とC++が重要になります。 よって、プログラミング言語の人気ランキングでは、だいたいいつでも、Java、C言語、C++が、上位側になっています。 [サービス指向アーキテクチャに対応したプログラミング言語] さらにJavaより後に、C#と言うプログラミング言語が誕生しました。 C#は、オブジェクト指向に完全対応していますし、サービス指向アーキテクチャにも対応しています。 サービス指向アーキテクチャとは、簡単に説明しますと、オブジェクト指向のインターネット対応版です(詳しい説明は後述)。 サービス指向アーキテクチャでのプログラミングを行なうには、JavaかC#を使います。 特に、C#は、サービス指向アーキテクチャーを実現させるために作られた各種技術仕様と共に誕生したプログラミング言語です。 [オブジェクト指向とサービス指向アーキテクチャーの違い] オブジェクト指向は、各機能ごとにプログラムをグループ化して、まとめたものです。 そして、そのグループ化したプログラムを部品のように扱うと言うものです。 様々な機能の部品を組み合せて、製品を仕上げる。 また、部品と部品を組み合わせて、新たな機能拡張された部品を作る。 と言うようなものです。 この部品をインターネット仕様の規格で標準化したのが、サービス指向アーキテクチャです。 部品の規格がインターネット仕様なので、インターネットのサーバに、この部品を配置することが可能です。 インターネット上の様々な部品(機能)を、クライアント側に取り込んで実行されます。 必要な部品を必要な時に、クライアントへ組み込んで行きます。 [サービス指向アーキテクチャーの関連技術とC#の誕生] サービス指向アーキテクチャを実現するには、プログラム部品をインターネット仕様の規格で標準化する必要があります。 Microsoftは、まず高機能化したプロトコル(通信の規約)を作りました。 そこで誕生したのが、SOAPと言うプロトコルです。 Microsoftだけではなく、IBMやOracleも協力して作られました。 最終的には、Microsoft、IBM、Oracle、BEAシステムズ、SAP、富士通、ヒューレット・パッカード、インテルによるWS-Iと言う組織になりました。 WS-Iで作られたものは、プロトコルのSOAPだけではなく、SOAPを使ったサーバシステムを作る技術である「Webサービス」が作られました。 また、Webサービスに関連する様々な付属技術が作られて行きました。 その際にMicrosoftが作ったプログラミング言語が、C#です。 C#は、作られて間もないので、Microsoft以外の企業達は、Javaを使いました。 しかし、Microsoftは当然、最初からC#で、サービス指向アーキテクチャー関連の開発を行ないました。 [C#が誕生した切っ掛けと、Javaとは異なる理由] C#が誕生した理由は、前述の通り、サービス指向アーキテクチャを十分に活かせるプログラミング言語を作るためです。 ただし、作られた切っ掛けと言う意味では、Microsoftが、Sunに裁判で訴えられたからです。 ところで、Microsoftは、インターネットを取り入れたのが、大手IT企業の中では遅いほうでした。 Microsoftがインターネットを取り入れた時、既にインターネット関連で活躍していたJavaを採用しました。 Microsoftとしては、Windows関連の機能をインターネットでも使いたい訳です。 しかし、Javaを作ったSunが、「インターネットの世界に、Microsoftの独自仕様を持ち込むな」と怒って、裁判で訴えました。 よって、Microsoftは、Javaの代替えとして、C#を作りました。 すなわち、Microsoft系で使う、インターネット関連に強いプログラミング言語として、C#が作られました。 ただし、Javaと殆ど同じならば、Sunに再度裁判で訴えられます。 そんなことになれば、世間からもボコボコにされて、企業として成り立たたなくなります。 よって、C#は、Javaとは異なるプログラミング言語にする必要がありました。 そこで、Microsoftは、前述の通り、サービス指向アーキテクチャーを実現するための技術開拓を始めました。 また、C#は、様々なプログラミング言語のよい所を取って、Javaとは異なる、明らかに新たなプログラミング言語としました。 しかし、結果は、今までのJavaを中心としたインターネット世界に惨敗して、サービス指向アーキテクチャは普及しませんでした。 正確に言い直せば、企業向けのビジネス系システムでは、普及に成功しました。 しかし、一般ユーザー向け(音楽、ゲーム、ファッション等々の様々な分野)では、普及しませんでした。 [C#の特徴] <1> VBやDelphiの影響を受けていて、簡単にユーザーインターフェイスが作れる。 <2> C++の影響を受けていて、マルチスレッドの機能が豊富など、システム的なプログラミングが得意。 普段は、ポインタは使わないが、一応ポインタも使えるので、C言語やC++との連携がしやすい。 <3> Javaの影響を受けていて、インターネット系でのシステム的なプログラミングが得意。 <4> Pythonの影響を受けていて、動的処理が得意。 [C#の仕事が増えてきた理由] クラウドコンピューティングの普及やスマートフォンの普及で、サービス指向アーキテクチャが重要になって来ました。 今既に普及しているクラウドコンピューティングの多くは、「サーバの運用管理の専門知識がなくても、クラウドコンピューティングの運営会社と契約すれば、サーバの運用が行える」と言うタイプのものです。 しかし、サービス(機能)を提供して行くタイプのクラウドコンピューティングが、普及し始めています。 SaaSと言うタイプのクラウドコンピューティングです。 サービス(機能)を提供して行くタイプでは、サービス指向アーキテクチャが重要です。 また、クラウドコンピューティングによるサーバに、スマートフォンを接続して、クラウドコンピューティングとスマートフォンを連携させるのも、サービス指向アーキテクチャーが重要になります。 よって、C#の人気が上がっています。 当初C#は、人気ランキングでベスト10入りすれば良いほうでしたが、最近では、ベスト5入りすることもよくあります。 C#の業務も増えています。

1人がナイス!しています

[JavaとC#の違いで困る例] 既存のC++のシステムをC#でラップして(おおいかぶせて)、クラウドコンピューティングのシステムに作り直すことがあります。 その際、Javaプログラマーに、「C#で、C++とのインターフェイスを作って下さい」と言う業務依頼が来たら、かなり厳しいと思います。 その手の業務は、C++とC#との、両方の業務経験があることが望ましいです。

ThanksImg質問者からのお礼コメント

勉強になりました。ありがとうございます。

お礼日時:2018/6/6 22:06

その他の回答(7件)

0

https://ja.wikipedia.org/wiki/C_Sharp%E3%81%A8Java%E3%81%AE%E6%AF%94%E8%BC%83 下のオッチャン、URLがリンク切れしてますよw 〉Java出来たのは1995年。C#は2000年から。 こんな嘘言うと、古いSEのオッチャンに怒られますよ(笑) 反省して以下ちゃ〜んと理解して下さいね。あと良いプログラマーになる様に… https://ja.m.wikipedia.org/wiki/C_SharpとJavaの比較

0

両方使ってる人ほんとにいるのかな? と回答見て思いました。 ほとんど同じだけど C#の方が部分クラスがある分便利ってくらいです。

0

〉JavaはC#の後継で 手続き型の文法が廃止されたものだから… おいおい… Java出来たのは1995年。C#は2000年から。 こんな嘘言うと、古いSEのオッチャンに怒られますよ(笑) 反省して以下ちゃ〜んと理解して下さいね。あと良いプログラマーになる様に… https://ja.m.wikipedia.org/wiki/C_SharpとJavaの比較

0

後継ではないけどやりたいことはほとんど同じ マイクロソフトがやっているか 他がやっているかくらい

0

『C#とJavaの間に言語的差異はあまりないですよね。』 だと思います。 『JavaはC#の後継で』 言い間違いでしょう。ですよね。 C# は最近出来ました。Visual Studio .NET とかって、それまでと違った名前が付けられてたので覚えてます。2002 年ですよね。当時は Visual C++ 6.0 を使ってました。次の Visual Studio .NET 2003 で、一部は Visual C++ .NET 2003 に切り替えましたが。 え?2002 年が最近っておかしいって? かも。ただ、個人的には最近できた新しい言語という感覚です。Java も新しいですが、C# よりはだいぶ古いかなって思いまして。 『このアドバイスが適切かチキンになったので』 当たり前の内容であると思われます。 ただ、「Javaの経験者」ということからすると、そのあたりについて知らないというのは不自然かも。 「案件はC#ばかりで悩んでいた」 C# が嫌いなのかもしれません。Java と同じようなものだと思いますが実際に Java をやってこられた方々にすればイヤなのかもしれません。 食わず嫌いという可能性も。先入観というか。似てるだろうけど、ともかく C# はイヤだなあって思ってたりして。 想像になりますが、一切勉強することなく直ちに作業を始められるような気がしています。勉強するとしても、ちょっと確認する程度じゃないでしょうか。数時間か最大でも2~3日でしょう。 多分そうなると思います。 あとは慣れ。C# プログラマと同水準になるのに半年もあれば十分かもしれません。もっと早いかもしれません。改めて何かを勉強する必要は無いと思われますので。 ~理由~ C++ プログラマです。10年くらい前から時々 C# でサンプルプログラムなどを作るようになりました。C++/CLI で作ったプログラムの応用例を示すためです。C# は良くできた言語だと思います。新たに勉強すべき内容がまず無いんですよね。なので、Java プログラマの方々も同様であろうと思った次第です。

いえ、単に同僚がIT初心者で基礎知識ないのに、営業やっていて、派遣先の案件がC#ばかりなのに対して、所属社員はJavaばかりで、違いの有無がわからなくて悩んでいたところを、僕がしゃしゃりでたのです。 確か、C#(本格的オブジェクト指向のC言語バリエーション)は、開発が流れたことを記憶してます。企画が流れたことで、別会社の人が本格的オブジェクト指向プログラムであるJava言語を開発した順だと記憶してます。 リリースの順番が違うのは、リリースされたC#がいわば、二代目になるという意味です。