他のオブジェクトシステムとの比較
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/11/24 14:08 UTC 版)
「GObject」の記事における「他のオブジェクトシステムとの比較」の解説
GObjectはC言語での完全なオブジェクトシステムであり、C言語から派生したC++やObjective-Cと同等のものと見ることもできる(ただし、C++はオブジェクトシステム以外にも様々な機能がある)。C++とGObjectの明らかな違いは、GObjectが多重継承をサポートしていない点である。 もう1つの重要な違いは、C++やObjective-Cが独立した言語であるのに対して、GObjectは単なるライブラリであり、新たな構文やコンパイラ機能を追加しているわけではないという点である。例えば、GObjectベースのコードを書くとき、明示的な cast が頻繁に必要となる。従ってGObjectとC言語の組合せを通常のC言語とは別の言語と考えたとき、それはC++とは異なり、通常のC言語の厳密なスーパーセットとなっている。 C++コンパイラを対象とした標準ABIは存在しないので(例外としてWindowsではCOMがその役割を担っている)、あるC++コンパイラでコンパイルされたライブラリから、別のC++コンパイラでコンパイルされたライブラリを呼び出せないことがある。そのような互換性を必要とする場合、C++メソッドはC言語の関数としてエクスポートされる必要があり、C++のオブジェクトシステムが部分的に破綻する。原因の一部は、C++コンパイラがエクスポートするシンボルの一意性を保証するために、それぞれ独自に名前修飾しているためである。一方これとは対照的に、C言語にはオーバーロードも名前空間もないので、C言語ライブラリではエクスポートされるシンボルの一意性を保証するために明示的なプレフィックスを付けるのが一般的である。GObjectベースのライブラリはオブジェクト指向ではあるがC言語で書かれているので、コンパイラが何であっても明示的なシンボル名を使う。 おそらく最も意義のあるGObjectの特徴はSignal(他の言語ではイベントと呼ばれる)である。これは、GObjectがGUIツールキット向けに開発されたために必要になった機能である。他のオブジェクト指向言語にも同様の機能はあるが、GObjectではオブジェクトシステムそのものに組み込まれている。このため、GObjectアプリケーションはSignalを多用する傾向があり、GObjectのコンポーネントはC++やJavaよりもカプセル化とコードの再利用という面で優れている。
※この「他のオブジェクトシステムとの比較」の解説は、「GObject」の解説の一部です。
「他のオブジェクトシステムとの比較」を含む「GObject」の記事については、「GObject」の概要を参照ください。
- 他のオブジェクトシステムとの比較のページへのリンク