電子書籍の厳選無料作品が豊富!

昨年まで、C++プログラマをしていました。しかし恥ずかしながらぜんぜんオブジェクト指向じゃないコードを書いていました・・・

いまJavaで仕事していて感じるのですが、C++にはガベージコレクションがないので、実はオブジェクト指向プログラミングがとてもやりにくい言語ではないですか?
そうなると、C++の必然性がなくなり、C Java C# に取って代わられてC++は消え去っていく言語なのでしょうか。

「いやC++はすばらしいオブジェクト指向言語だ!」というお叱りを期待しています。

A 回答 (5件)

Javaはポータビリティーがあるようで無いですね。

バージョンが違うだけでも、微妙に動作が異なり移植の妨げになったりします。また、各社の囲い込みなんかがあって、思うようにポータビリティーを維持できません。それでもがんばってポータビリティーを保証したプログラムをしている人にどうやっているのと聞いたら、ほとんどJavaのコアな機能しかつかっていないとのこと。これではC++使っているのとほとんど同じではなかろうか。

これに対して、CやC++は、長年使い込み、様々な自分用ライブラリなんかが書きたまってくると、結構ポータビリティーの良いコードが書けますね。ほとんどシンタックスの仕様も年月の間に変化しないので、いわば安定した言語と言えるんじゃないかな。

また私は、「オブジェクト指向」というのは言語の性質を言うものではなく、プログラミングスタイルのことを言うものだと考えています。質問者にあるとおり、いくらオブジェクト指向をうたった言語を使っていても、オブジェクト指向プログラミングを生かすことが出来ない一方、オブジェクト指向言語をうったっていない言語を使っていても、オブジェクト指向プログラミングは可能です。

オブジェクト指向というものを最もシンプルに基本的な形で表してくれるのが、UNIXのファイルシステムです。UNIXでは、様々な異なるディバイス、あるいは、プロセスなどまで、すべて「ファイル」という概念で仮想化されています。「ファイル」の中身がどうなっているかを問わず、この「ファイル」にたいして、open / read / write / fcntl/close という統一されたシステムコールによって作用を与えます。
    • good
    • 0
この回答へのお礼

貴重なご意見が聞けました。
お答えくださった皆様ありがとうございました。

お礼日時:2005/04/24 00:20

C++ には標準ライブラリが存在しないという不幸な歴史があって、ベンダーやコミュニティーが各自でライブラリを開発し混沌としていました。

言語仕様としては、「ベターC」と「オブジェクト指向」の二つの顔を持っておりJavaよりも複雑であると良く言われます。ガーベージコレクション云々は、オブジェクト指向の本質からずれます。ガーベージコレクションが無くても参照カウンタを使えば特に問題にはなりません。

現時点で、パフォーマンスが高く、OSネイティブなコードが書けるC++の方が、完成したアプリケーションの性能が上でしょう。ただ、C++を100%使いこなせるには言語を超えた知識が必要になります。比較的簡単なJavaを使えば、開発期間の短縮につながります。

一番良いのは、C++を使ってJavaと同様の開発効率でプログラミングできる人材になることです。ちなみに、プロは、いまさら言語の良し悪しについて議論しません。お茶碗とお箸の使い方について熱い議論をする人はいないでしょう。つまり、日常の単なるツールにしか過ぎないのです。もっと言えば、利用者側からすれば、Java、C++はどうでもいい話です。

最後に付け加えていきます。言語を生かすのも殺すのも開発者次第です。こっそり教えると、C++がオブジェクト指向プログラミングがやりにくいと言う事は、恥ずかしい事です。ちなみにオブジェクト指向も、アスペクト指向などで補完しないと使えないという事が言われ始めています。。。
    • good
    • 0

> 「いやC++はすばらしいオブジェクト指向言語だ!」



C++をオブジェクト指向言語だと考えるのが最悪の誤解かと思います。まるで、「パソコンはワードとエクセルのための機械だ」というのと、同レベルの誤解ではないでしょうか。
「C++」と「オブジェクト指向」が不可分なものであるという考えが、C++の普及を妨げているような気がしてならないのです。
    • good
    • 0

マイクロソフトは、.NetFrameworkで、他の言語でガベージコレクションがされていることの親和性から、C++を拡張したマネージドC++を開発しています。

VC++2005でそうなる予定です。
マネージ拡張は、マイクロソフトだけでなく、ECMAでも標準化作業がおこなわれているので、そういう流れのC++というのも(将来的に)存在するということになるかと思います。
(VCの話でいえばVC++2002からガベージコレクションはサポートされています)
ガベージコレクションがあるとプログラマにとって便利なのは確かですが、それとオブジェクト指向プログラミングのしやすさ自体は直接関係ないのじゃないかと思います。
また、ガベージコレクションがプログラマの予測しないところで実行されると困るようなプログラムもあるでしょうから、そういうガベージコレクションが使用できる・しないをコントロールできるのは必要なことだと思います。

この回答への補足

マネージドC++というものがあるのですね。勉強になりました。

ガベージコレクションがないと、メソッドの戻り値として安易にnewしたオブジェクトが返せませんよね?
オブジェクト指向設計(UML等による分析や設計)した結果を実装するためには、言語の特性や制限のために設計結果に手を加えることになりますが、それがC++では大きいと感じたのです。

オブジェクト指向言語とは、設計した結果をそのまま実装できるのが理想と考えています。

Javaが「オブジェクト指向設計を実装するための言語」すると、C++は「ベターC を作るためにオブジェクト指向を取り入れた言語」に過ぎないのかなと思いました。

補足日時:2005/04/22 14:42
    • good
    • 0

すばらしいオブジェクト指向言語かはともかく


すばらしい言語ではあると思います。
ガベージコレクションはなくてもデストラクタで管理すればメモリリーク
も心配しないように設計できるでしょう。
おっしゃるように
Web系や、SI系のソフトウェアではC/C++は将来性は少ないかもしれません。
ベージコレクションも無いですし、しかもJavaと比べれば
機能を使いこなすのに時間がかかります。
保守の面から考えると、その点はJavaやC#に分があるでしょう。
しかしガベージコレクションがあるということは
そのアドレスにアクセスがあるかを監視する必要があるわけで
その事はオーバーヘッドになるでしょうし、仮想メモリがある環境
でもなければガベージコレクションなんて使えません。

既存の市販ゲームがほとんどC/C++で開発されている
事はいうまでもないと思いますが、
次世代ゲーム機(XBox2等)のソフトもC++で開発します。
C++かJavaかは、用途によるということです。
    • good
    • 0
この回答へのお礼

自分はSI系なので知りませんでしたが、次世代ゲーム機もC++なんですね。井の中の蛙でした。
ありがとうございます。

お礼日時:2005/04/22 00:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!