2009-10-28 18 views
9

私は小さな話が完全にオブジェクト指向であることを読んだ.. C++でも完全にオブジェクト指向ですか?そうでなければ..なぜそれ?C++は完全にオブジェクト指向の言語ですか?

+0

「スモールトークは完全にオブジェクト指向です」、これはどこから読んだのですか?ちょっと興味があるんだけど。 –

+0

「完全に」とはどういう意味ですか? –

+0

Rubyについてはどうですか? – ukanth

答えて

27

いいえ、そうではありません。オブジェクトを一度でも使用することなく、妥当なコーディング済みで優れたスタイルのC++プログラムを書くことができます。

C++はオブジェクト指向プログラミングをサポートしていますが、OOはその言語固有のものではありません。実際、main関数はオブジェクトのメンバではありません。

スモールトークまたはJavaでは、少なくとも1つのクラスなしで靴を結ぶことはできません(または「Hello、world」と書くことはできません)。

(そのプリミティブ(たとえば、intは)オブジェクトではありませんので、もちろん、1は、あまりにもJavaは完全にオブジェクト指向言語であることについて議論することができます。)

+0

これには汎用プログラミング言語 テンプレートなどのユーティリティもあります。しかし、私はオブジェクト指向言語としてC++を関連付ける多くの学校レベルのテキストブックを見てきました。問題は著者がそうしたときに、読者(主に学生)がC++が多くのタイプのプログラミング言語にも適合することを便利に忘れることです。 – sjsam

1

OOLを定義する。クラスなどの使用を意味するならば、C++はOOスタイルのプログラミングをサポートします。クラスを使わないことからあなたを止めるものは何もありません。 Java OTOHは、クラスを許可しません。 (はい、私はJavaがFPをサポートしていることを知っています)。

+1

"はい、JavaはFPをサポートしています。"それは私にとって初めてのことです。 JavaでFPの例がありますか? –

+0

簡単な検索で私にはかなりの記事が届きます。そのようなもの: dirkgently

+0

ダーク。私はあなたがJavaが**手続き型プログラミングをサポートしていることを意味すると思いますか? Ne? –

3

C++には、純粋に手続き型のコードを許可するサブセットとして 'C'方言が含まれています。

0

C++は、純粋なオブジェクト指向言語ではない、とのようにすでに言及したものでは、C++でOOPの概念を使用する必要はありません。純粋に手続き型言語であるCに基づいているので、C++はハイブリッドオブジェクト指向言語と呼ばれています。

純粋なオブジェクト指向言語の例は、C#とJAVAです。

+1

プリミティブ・データ型と同じものは、ユーザー定義データ型と同じセマンティクスに従わないものです。それらの操作はメッセージの受け渡しに関して定義されておらず、派生クラスでオーバーロードまたは再定義することはできません。 – Omnifarious

+0

あなたは間違った投稿をコメントしたと思います。 ;) –

+1

オムニは、C#とJavaのどちらも、オブジェクトではないintやlongのようなものを持っているので、純粋なオブジェクト指向ではないと言っています。 – paxdiablo

0

いいえ、純粋にオブジェクト指向の言語ではありません。特にC++のプリミティブなデータ型では、プリミティブではないデータ型とは頻繁に異なる規則があります。さらに、どのデータ型にも関連付けられていない関数を持つことは可能です。 C++が純粋なオブジェクト指向言語ではない、無数の他の方法がありますが、それは最大の理由の2つです。

JavaもC#も、「オブジェクト」データ型と同じセマンティクスに従わないプリミティブなデータ型を持っているため、どちらも純粋なオブジェクト指向言語ではありません。

1

短い答えはいいえ - C++は完全にOO言語ではありません。 Cサブセットの使用に頼らなくても、C++を使用して「正確ではない」OOPを書くことができます。そのような例の1つが主な方法です。これはどのクラスにも含まれていません。

主な理由は、C++がCから由来していたことです.Stroustrupが新しいバージョンのC(クラスを含む)を作成することを目指していたときです。実際に彼はC(C84)の新しい味として彼の創作を提出しようとしました。

1

人が「純粋」OOとC++の宣言に対して持っている大きな議論が、それはまだ少なくとも非OOビット、main()を必要としないすべてのものがオブジェクト(intlongら)であることということです。

また、メッセージパッシングパラダイム(パブリックメンバー)を使用せずにオブジェクトの状態を公開します。これにより、オブジェクトのカプセル化が解除されます。

Javaは、一方で、クラスの静的メソッドとしてmain()を持っています。したがって、それはより近いですが、それにはまだオブジェクトではないものがあります。

スモールトークは、通常、純粋な純粋なものとして開催されているリンガフランチャですが、私はそれについて十分には分かりません。私はコードを開発し、

もちろんの
+0

実際にメインは必要ありません。そのちょうどよく知られているエントリーポイントなので、コマンドラインと(いくつかの)GUIは、ロード後に制御をどこに渡すべきではありません。 –

+0

あなたはメインを必要としますが、それは標準によって義務づけられています。 – paxdiablo

0

ない:-)私のクライアントに提供して乗るながら私

は、私は知識階級の引数のこれらの並べ替えを残す傾向があります! 本来のデータ型をサポートします。

0

C++は「クラスを持つC」に過ぎません。私はまだCプログラムを書いて、.cppファイルとして保存することができます。 したがって、「C++は純粋にオブジェクト指向言語ではありません。

関連する問題