javaとC#の違いについて

C#とjavaどちらもオブジェクト指向を使用した、プログラミング言語です。
今回はC#とjavaという二つのプログミング言語を比較していきます。

●統合開発環境(IDE)について
今回、javaはEclipse(エクリプス) C#はVisual Studio(ビジュアルスタジオ)という開発環境を説明します。

Eclipse
まずEclipseについてですが、特徴としてはプラグインが豊富で、様々な開発環境に対応可能という特徴があります。
このプラグインによって、各種言語の開発環境にも使えます。
開発言語以外にもさまざまなプラグインがあり、多彩な開発作業環境を構築できます。
なおこのプラグインは、java言語で自作することもできます。
EclipseはIBMが開発しました、その後WebSphereという新しいアプリケーションを制作して使用しているので、使用されなくなったEclipseはIBMが無料配布されています。
ダウンロードしてインストールを行い
ライセンス契約すれば使用できるのでEclipseでの開発費は掛かりません。

Visual Studio
次にVisual Studioですが、特徴的なのはmicrosoftで作っているアプリケーション開発を全て賄えるということです。

Windowsアプリケーション、Web&クラウドアプリケーション、モバイルデバイス開発、Officeアプリケーション、基幹業務プリケーション、クロス・プラットフォーム開発など、それぞれの分野に向けたアプリケーション開発がVisual Studioという1つのキーワードの下で統合されています。

Visual Studioにはエディションがあり、Visual Studio2015では上から性能順にVisual Studio Enterprise  Visual Studio Professional  Visual Studio community の3種類のエディションがあり、各エディションの違いは、機能とライセンスの利用規約です。

communityとProfessionalの機能的な差があるのは、CodeLensとTFS連携の違いがあります。
EnterpriseとProfessionalの機能的な差があるのは、デバッグ関連機能、テスト関連機能、アーキテクチャとモデリング、ラボ管理、TFS/VS Online連携があります。

Communityは無料で配布されているのですが、ライセンスの利用規約があります。
ライセンスの利用規約には個人ライセンスか、組織ライセンスの2つがあり、個人ライセンスならばアプリの開発を自由に行えますが組織ライセンスならば
オープンソースソフトウエア開発/トレーニング/教育/学術研究/VSの拡張機能開発には人数の制限なしに使用可能。
非エンタープライズ企業では、同時に最大5人までのユーザーが使用できます。
エンタープライズ企業ではトレーニング/教育/学術研究/VSの拡張機能開発以外の目的では使用できない、という制約があります。

上記に書いてあるエンタープライズというのは、250台を越えるPCを所持しているか、250人を越えるユーザーがいるもしくは、年間収益が100万米ドルを超えるという条件です。

EnterpriseとProfessionalは利用制限がないのだがMicrosoftから購入しないといけません。

●メソッド
Javaのメソッドのデフォルトは仮想的(C#でvirtual指定された状態)でありfinalを付けることで、逆に非仮想的に近い状態にすることもできます。
C#のメソッドはデフォルトだと非仮想的(非virtual)であり、必要ならば明示的にvirtualと宣言しなければいけない。
この二つの違いは、オーバーライド時に違いが出ます。
非仮想メソッドまたは静的メソッドのオーバーライドはできないので
C#はオーバーライドするには、メソッドをvirtual、abstract、または override のいずれかにする必要があります。
javaではfinalをつけることでオーバーライドを止めることができます。

●データ型
変数名と同時に変数データの型を指定する時に使います。
C# javaどちらもプリミティブ型(C#では値型と呼ばれる)の概念を持っています。
C#はjavaで対応しているどのデータ型も使用できます。
javaではプリミティブ型、参照型の二つの型が存在し、C#では値型、参照型の二つの型が存在します。
またデータ型値の種類により整数型、浮動小数点型、文字型、ブール型などの仕様出来る種類があります。

値型
char、int、float などの組み込みのプリミティブ データ型と、構造体で宣言されるユーザー定義型があります。

参照型
クラス、およびプリミティブ型から作成されるその他の複合データ型。
参照型の変数には、型のインスタンスは含まれず、インスタンスへの参照だけが含まれます。

整数型
整数のデータを扱います。

浮動小数点型
浮動小数点を含むデータを扱います。

文字型
[A] [あ] などの文字を扱います。

ブール型
trueまたはfalse、真か偽かの論理情報を扱います。

java
type                     型                        値

byte       参照型   符号付き整数型    -128~127
short   参照型   符号付き整数型    -32768~32767
int          参照型   符号付き整数型    -2147483648~2147483647
long       参照型   符号付き整数型    -9223372036854775808~
                9223372036854775807
float       参照型   浮動小数点型       ±1.40239846×10^-45~
                ±3.40282347×10^38
double   参照型   浮動小数点型       ±4.94065645841246544×10^-324~
                1.79769313486231570×10^308
char       参照型   文字型                  Unicode 記号
boolean 参照型   ブール型                true または false

C#
type                      型                        値

byte        値型      符号無し整数型     0~255
sbyte      値型      符号付き整数型     -128~127
int           値型      符号付き整数型    -2147483648~2147483647
uint         値型     符号無し整数型     0~4294967295
short       値型      符号付き整数型    -32768~32767
ushort     値型      符号無し整数型    0~65535
long         値型      符号付整数型       -922337203685477508~
                 922337203685477507
ulong       値型      符号無し整数型    0~18446744073709551615
float         値型      浮動小数点型       -3.402823e38~3.402823e38
double     値型      浮動小数点型       -1.79769313486232e308~
                 1.79769313486232e308
char         値型      文字型                  Unicode 記号
bool         値型      ブール型               true または false
decimal   値型                                  10進数を使える±1.0 × 10e – 28~
                 ±7.9 × 10e28小数または整数型
object      参照型  基本型
string       参照型  文字列

Java の boolean は、C# では bool と呼ばれます。

●構造体
構造体は、javaには存在しなくてC#では使用できるstruct型のことです。
でも構造体で、出来ることはクラスでもほとんどできてしまいます。
では構造体とクラスの違いは
上記のデータ型説明に書いてある、値型と参照型の差で構造体は値型、クラスは参照型となっています。
それぞれに利点、欠点がありそれを上げると

値型は変数ごとに、別々の値を持つため代入時にメンバー変数が多い場合複製する数が多くなり時間がかかりますが
値型は直接操作できるため、読み書きが速くなります。

参照型は代入時には参照情報のみを、渡すので、メンバー変数が多くても手間はかかりませんが、値を操作する場合
参照情報を用いて実体のある場所を探してから値の操作を行う必要があるので、値の読み書きは値型より遅くなります。

●多重定義(オーバーロード)
プログラミング言語において、関数や演算子やメソッドの同一名や同一の演算子記号について複数定義し
利用時にプログラムの文脈に応じて選択することで複数の動作を行わせる仕組みです。

java
乱用を防ぐため演算子オーバーロードをサポートしていないので、使用不可
メソッド多重定義ならば使用できる。
C#
論理的一貫性を守る為制限があるものの、演算子オーバーロードをサポートしているので使用できます。

演算子多重定義

public static 戻り値の型 operator演算子 (引数リスト)

class Complex
{
public static Complex operator+ (Complex z, Complex w)
{
return new Complex(z.Re + w.Re, z.Im + w.Im);
}

}

●パッケージ

javaでは、packageキーワードを使ってクラスをグループ化できます。
C#では、名前空間という概念を使用して、論理的に関連するクラスを[namespace]キーワードでグループ化します。
外部の名前空間にアクセスするには、usingディレクティブと名前空間の名前を使用します。

java
同じ1つのソースファイルで複数のパッケージは使えない
C#
.csファイルで複数の名前空間を使用できます


java

package Acme;
import java.io.*;
class Customer
{

}

C#

using System.IO;

namespace Acme
{
class Customer
{

}
}

●アクセス修飾子

JavaでもC#でも、違いがないのは、public修飾子とprivate修飾子のみ。

public   どちらもどこからアクセス可能
protected     java 同じパッケージならアクセス可能 C# 派生したクラスからアクセス可能。
internal java 存在しない C# 同じアセンブリ内でアクセスが可能。
protected internal java 存在しない C# 同じアセンブリ内または格納しているクラスから派正した型のみアクセス可能。
private   java 同じクラス内のみアクセス可能 C# 同じクラス内のみアクセス可能。
指定なし   java 同じパッケージ内のみアクセス可能 C# [privata]と同じ扱い。
●アセンブリ

.NETベースのアプリケーションの配置、バージョン管理、再利用、アクティブスコープ、およびセキュリティ権限の基本単位を生成します。
実行可能 .exeファイルか ダイナミックリンクライブラリ .dllファイルを使用して
.NET Framework のビルド ブロックとして機能として使う事ができます。
なので .dllファイルはVisual Studioを使用していれば共通のフーレムワークとして使用できるので、高い汎用性を持っています。

●多次元配列
まず多次元配列の前に、配列とは何かというと下記に例を置いておきますが、型の後ろに[]を入れてその中に値を入れて管理することです。

型名[長さ]変数名

配列はjava C#どちらも使うことができますが、多次元配列という機能はC#でしか使えません。
では多次元配列でなにができるかというと、配列は直線的な処理しかできませんが、多次元配列では名前の通り
多次元の配列を使うことができます。
一応javaでも結果が同じことはできるが、配列の配列というようなことになるので多次元配列ではありません。
配列の配列になってしますと、参照する数が多くなるので処理が遅くなりますが、多次元配列だと一回で済むので処理が速くなります。

型名[長さ1, 長さ2]変数名; 二次元配列
変数名 = new 型名[長さ1, 長さ2, 長さ3]; 三次元配列の生成

以上で今回の記事は終わりますが、この記事にも記載されていないjavaとC#の違いなどもあるので注意してください。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA