Java および C# のファーストクラス オブジェクトとは何ですか?

StackOverflow https://stackoverflow.com/questions/1599176

  •  22-09-2019
  •  | 
  •  

質問

私が何年も前に OO プログラミングを始めたとき、変数 (その言葉が適切であれば) は「プリミティブ」 (int、double など) かファーストクラスのオブジェクト (String、JPane など) のいずれかであるという印象を受けました。これは、Java と C# のプリミティブに関する最近の回答 (@Daniel Pryden: Java と C# ではプリミティブ型は異なりますか?)。ただし、C# の ValueType がプリミティブなのか、オブジェクトなのか、それとも第 2 クラスのオブジェクトなどの他の獣なのかはわかりません。SO の使用法は 1 つだけであることがわかります。 first-class タグなので、もう便利な用語ではないかもしれません。

私は見つけられませんでした ウィキペディアの記事 役に立ちます (「この記事は、この主題について専門家の注意が必要です。」)。主に Java と C# に関連する用語の分類法と現在の使用法を教えていただければ幸いです (ただし、他の言語も啓蒙されるかもしれません)。

説明:用語を理解したいのですが ファーストクラス そしてその使用範囲はどのようなものなのか。

役に立ちましたか?

解決

問題は「ファーストクラスオブジェクトは」明確に定義された概念ではないということです。

通常の使用は、誰かが「オブジェクト」は、のはのプロパティX、Y及びZのすべてを持っている必要がありますが、持っていない他のものがあること事のクラスであると言うですこれらのプロパティのすべてが、彼らは、ソート対象っぽいのです。私たちは、かつての「ファーストクラス」のオブジェクトと残りません「ファーストクラス」と呼ぶだろう...とオブジェクトではないことがあります。

だから

問題は、事はそれを「ファーストクラス」オブジェクト作るために持っている必要があるという性質上、ビューの任意の数があるということです。そして、コンセンサスに来て反対意見を持つ人々の見込み。

(たとえば、JavaScript言語の専門家は、それは、テンプレートベースの場合、オブジェクトが唯一の最初のクラスであること。精力的に主張するかもしれません)

「第一classness」についてだけは本当に固体洞察は、JavaやC#のために、それぞれの言語仕様から収集することができるものとなります。そして、彼らはだけは本当に多言語間でそれぞれの言語/型システムの範囲内で適用されます...そしてません。

だから、「ファーストクラスのJavaオブジェクト」または「第一級のC#のオブジェクトは、」有意義かもしれませんが、文脈から取り出した「ファーストクラスオブジェクトが」ではありません。

私の意見だうーん...

他のヒント

という概念 「第一級国民」または「第一級要素」 イギリスのコンピューター科学者によって導入されたプログラミング言語 クリストファー・ストレイチー 1960年代には一流の機能の文脈で。この原理の最も有名な定式化はおそらく次のとおりです。 コンピュータプログラムの構造と解釈 ジェラルド・ジェイ・サスマンとハリー・エイベルソン著:

  • 変数によって名前を付けることができます。
  • それらは引数としてプロシージャに渡される場合があります。
  • 手続きの結果として返却される場合があります。
  • それらはデータ構造に含まれる場合があります。

基本的に、このプログラミング言語要素を使用すると、プログラミング言語の他のすべての要素で実行できることはすべて実行できることを意味します。

.NETでは、クラス対プリミティブ型を持っていません。代わりに、クラス対構造体を持っていますが、構造体は、同様にObjectクラスから、および継承(プロパティとメソッドを持っている能力など)のクラスの機能の多くを共有します。

あなたがC#でintを書くとき

は、例えば、それはInt32構造体のためだけの言語のショートカットです。あなたは例のint i=int.Parse("34")、あるいはstring s=1234.ToString()のために行うことができます。型Objectの変数に割り当て構造体インスタンスするために、ボクシング/アンボクシングがありますメカニズムでます。

Javaではでは、他の一方で、あなたは確かにクラスのdicotomy対プリミティブ型を持っています。だから、型intの変数に対して操作を実行するには、たとえば、あなたが補助Integerクラスを使用する必要があります。それは私が.NETに比べてJavaを好きではないというものの一つです。

編集。あなたは「ファーストクラスオブジェクト」(またはクラス)について読んだとき、それは、他のシステムクラスまたはユーザー作られたクラスと同じ機能を持つクラスである「フルパワーオブジェクトを」、を意味します。これは、「限らプリミティブ型」と区別することです。

は、Javaの各プリミティブデータタイプに対して、コアクラスライブラリはJavaオブジェクトとして表すラッパークラスを提供します。例えば、のInt32クラスには、intデータ型をラップし、Doubleクラスは、doubleデータ型をラップします。

一方、C#のすべてのプリミティブデータ型は、System名前空間内のオブジェクトです。各データ・タイプ、ショートネーム、または別名のために、設けられています。例えば、intが可能System.Int32の短縮名で、ダブルSystem.Doubleの短い形式です。

C#のデータの種類とそのエイリアスのリストは、以下の表に提供されます。あなたは、Javaで利用可能なプリミティブ型に、これらの対応の最初の8を見ることができるように。ただし、Javaのboolean型は、C#でのブールと呼ばれていること。

から:ます。http:// MSDN .microsoft.com / EN-US /ライブラリ/ ms228360%28VS.80、軽量%29.aspxする

http://onjava.com/onjava/2003/05/21 /delegates.htmlする

我々は別の方法でそれを渡すことができるので、#メソッドC言い換えれば、

はファーストクラスのオブジェクトです。我々は他の値(文字列、数値、ユーザが作成したオブジェクト)のようなメソッドを使用することができます。

最初のクラスの別の例は、uは他の言語では珍しい見つけることができるというオブジェクトが、C#の式

であります

正直、「一流のオブジェクト」が何なのか全く分かりません…。
しかし、私は Lua のドキュメントとメーリング リストで、関数は第一級市民、つまり第一級の値であるという同様の表現が使われているのを初めて見つけました。

Lua の作者の 1 人に、Lua が何であるかを説明してもらいました。 Lua でのプログラミング:6 - 関数の詳細

これは、LUAでは、関数は数字や文字列などの従来の値と同じ権利を持つ値であることを意味します。関数は、変数(グローバルおよびローカル)に保存され、表には引数として渡すことができ、他の関数によって返される可能性があります。

どういうわけか、この定義は Java のオブジェクトに適用されます。それらを変数や配列に保存したり、関数パラメータとして使用して返したり、HashMap や他のコレクションのキーとして使用したりできます。
この用語がオブジェクトに対してそのように使用されるかどうかはわかりませんが、少なくとも意味はあります...:-)

C のような言語では、オブジェクトをいくつかのトリック (C++ を再作成するなど) を使用して最初から作成する必要があるため、一流のものではありません。それらを操作するにはポインタを渡す必要があります。

私たちは、「オブジェクト」による「ファーストクラスオブジェクト」の話をしているときに私たちは、その言語で作成することではないオブジェクト、言語のいくつかの概念を意味します。 「第一級市民」などのような用語もある理由です。

Javaベースのオブジェクト、Javaのプリミティブ、フィールド、メソッド、およびその他(Object型のインスタンスである私は平均のJava-オブジェクトを何による) -

そうは、例えば、Javaはコンセプトを以下ました。私はJavaでのJava-オブジェクトとJavaプリミティブの両方が、第一級の市民が言語であることを言うと思います。

でC#は、私たちはファーストクラスのプロパティの「テスト」ができることをいくつかの追加の概念を持っています。例えば、代表者。私たちは、(例えば、デリゲートの辞書を持っている)、(名前を付けて)OT変数を委任引数としてメソッドに渡し、メソッドからそれを返し、データ構造内組み込ん割り当てることができます。私たちは、デリゲートはC#でファーストクラスのオブジェクトであると言うことができると思う私はそう。あなたは、C#の他の概念のために継続することができます - イベント、プロパティ...

関数型言語では、「機能」の概念を持っているし、もちろんそれがどの関数型言語における第一級オブジェクトです。私はそれがファーストクラスの概念(名前、パス、リターン組み込む...)として「機能」を持っている場合、我々は関数型言語の言語呼び出すことができることを言うと思います。

だから、いくつかの言語は、我々が「測定」言語それ自身でこの概念の電力を供給できますいくつかの概念を持っている場合。

ファーストクラスのオブジェクトは、私たちが「新しい」キーワードを使用せずに作成し、それらのオブジェクトです。 通常、私たちは「新しい」キーワードを使用せずに作成した言語のプログラミングで「新しい」キーワードが、いくつかのオブジェクトを使用してオブジェクトを作成します。

javaの「文字列」でファーストクラスのオブジェクトです。これは、Javaの概念であり、それは、すべてのプログラミング言語のための立っている人の概念ではない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top