GObject GObjectの概要

GObject

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/10/03 03:43 UTC 版)

GObject クラスの典型的な初期化コード。この例ではあるクラスに file-size というプロパティを追加している

歴史

GLiblibcにのみ依存しており、GNOMEの基礎として GTKPango、Accessibility Toolkit、多くのGNOMEライブラリやアプリケーションなど広範囲に利用されている。GTK 2.0以前は、GObjectのコードはGTK+の一部だった。ただし、当時はGObjectとは呼ばれておらず、ベースクラスは GtkObject と呼ばれていた。

GTK 2.0リリースの際に、オブジェクトシステムを汎用ユーティリティとすべく、別ライブラリとして分離した。その際にGUI関係でない GtkObject クラスの大部分は新たなベースクラスである GObject に移された。GTK 2.0のリリースされた2002年3月11日以降、GObjectは独立したライブラリとして存在し続け、現在ではGUI以外のCUIアプリケーションやサーバアプリケーションにも広く使われている。

GLibとの関係

GObjectのマニュアル等はGLibとは別にあり[1]ライブラリファイルとしても別になっているが、ソースコードはGLibのソースツリー内にあって、GLibと共に配布されている。このため、GObjectのバージョン番号はGLibのものを使っており、GLibパッケージの一部とされることが多い(例えば、DebianではGObjectを libglib2.0 パッケージファミリに入れている)。

型システム

GObjectフレームワークの基盤として、汎用の動的型システム GType がある。GTypeシステムは全オブジェクトの実行時記述を保持し、各種言語バインディングを実現するグルーコードからそれを使うことができる。型システムは任意の単一継承クラス階層を扱え、同時にクラスでないデータ型も扱える(不透明ポインタ、文字列、各種サイズの整数浮動小数点数など)。

GTypeは登録されている型に属する値のコピー、代入、破棄の方法を知っている。整数などの型ではこれらは自明だが、複雑なオブジェクトには参照カウントがあるものもあれば、(一部だが)参照カウントのないものもある。型システムが参照カウントのあるオブジェクトを「コピー」するとき、一般に単に参照カウントをインクリメントするだけである。しかし、参照カウントのないオブジェクト(例えば文字列)のコピーでは、メモリを確保して実際にコピーを生成する。

この基本機能を使って GValue が実装されている。これは汎用コンテナ型であり、型システムが把握している任意の型の値を保持できる。このようなコンテナは、全てのネイティブ値をそのような型タグコンテナに格納する動的型付き言語とやりとりする際に特に便利である。

基本型

クラスと関連のない型を non-classed と称する。そのような型と何らかの rootクラスに対応した全ての型を総称して「基本型」と呼び、それ以外の型を「派生型」と呼ぶ。これらは比較的閉じた体系であり、一般ユーザーが独自の基本型を生成することはないものと想定されているが、生成は可能であり、GObject クラスに基づかないクラス階層を独自に作ることもできる。

GLib 2.9.2[2]では、non-classed の基本型は以下の通りである。

  • 空の型、C言語の void に対応。(G_TYPE_NONE)
  • C言語の charintlong64ビット整数に対応した型。(G_TYPE_CHAR, G_TYPE_UCHAR, G_TYPE_INT, G_TYPE_UINT, G_TYPE_LONG, G_TYPE_ULONG, G_TYPE_INT64, G_TYPE_UINT64)
  • ブーリアン型。(G_TYPE_BOOLEAN)
  • 列挙型とフラグ型。C言語の enum に対応するが、後者はビットフィールドにのみ使われる。(G_TYPE_ENUM, G_TYPE_FLAGS)
  • IEEE 754の単精度および倍精度の浮動小数点数。C言語の floatdouble に対応。(G_TYPE_FLOAT, G_TYPE_DOUBLE)
  • 文字列型。C言語の char * に対応。(G_TYPE_STRING)
  • 不透明ポインタ型。C言語の void * に対応。(G_TYPE_POINTER)

classed の基本型は以下の通りである。

  • 標準クラス継承ツリーのrootである GObject のインスタンスの基底クラス型。(G_TYPE_OBJECT)
  • 基底インタフェース型。標準インタフェース継承ツリーの rootを表している。(G_TYPE_INTERFACE)
  • ボックス化用の型。単純な値オブジェクトや外部オブジェクトを参照カウント付きの「ボックス」で包むのに使われる。(G_TYPE_BOXED)
  • 「パラメータ記述オブジェクト(parameter specification object)」用の型。オブジェクトのプロパティのメタデータを記述するのに使われる。(G_TYPE_PARAM)

型システムによって自動的にインスタンス化できる型を instantiable と称する。そのような型の重要な特徴は、インスタンスの先頭数バイトに必ずその型に対応したクラス構造(一種の仮想関数テーブル)へのポインタが格納されている点である。このため、instantiableな型は必ずクラスと対応している。逆にnon-classedな型(整数や文字列)は instantiableではない。また、classedな型はインタフェース型などを除いてinstantiableである。

派生型

GObjectの組み込みの基本型から派生する型は4種類に分けられる。

列挙型とフラグ型
オブジェクトシステムとの関連で何らかの形で使われる列挙型や整数ベースのビットフィールド型(すなわち、全ての enum 型)。例えば、オブジェクトのプロパティの型など。一般にこれらの型の登録を行う初期化コードは glib-mkenums[3]というツールで自動生成され、別ファイルに格納される。
ボックス化型
完全なクラス型にするには単純すぎるデータ構造だが、型システムに登録する必要があるもの。例えば、あるクラスに background-color というプロパティを追加したいとする。その値は struct color { int r, g, b; } のようなデータ構造のインスタンスである。これを GObject のサブクラスにしたくない場合、ボックス化型で表し、コピーや解放といった機能を提供できる。GObjectにはGLibの単純なデータ型を包んだ各種ボックス化型が最初から備わっている。ボックス化型は、外部オブジェクトのタグ付きコンテナとしても使える。
不透明ポインタ型
場合によっては、コピーや解放といった機能も不要で、ボックス化型でも大げさすぎるというオブジェクトもある。そのようなオブジェクトは単に不透明ポインタ (G_TYPE_POINTER) として扱っても良いが、派生ポインタ型を生成することで、それがある特定用途のオブジェクトであることを示すことができる。
クラス型とインタフェース型
GObjectアプリケーションにおける大半の型はクラス型であり、通常のオブジェクト指向的な感覚で言えば、rootクラス GObject から直接または間接的に派生する。Java風のインタフェースもあるが、2006年現在ではあまり使用されていない(2004年3月16日にリリースされたGLib 2.4あたりで導入された新機能であるため)。GIMPはGObjectのインタフェース型を使っている。

メッセージング・システム

GObjectのメッセージングシステムは、相補的な closuresignal から構成される。

Closure
コールバックを一般化したもの。C言語とC++以外にもバインディングがある言語から使える。例えば、PythonJavaのコードをClosureの機構で GObjectから呼び出すことができる。
Signal
Closureを呼び出す一次機構。オブジェクトは、あるSignalとClosureのマッピングを指定したSignalリスナーを登録する。登録されたSignalが発信されると、対応するClosureが呼び出される。GTKでは、全てのネイティブGUIイベント(マウスの動きやキーボード操作)はGObjectのSignalを発信でき、対応するリスナーがそれに対して動作する。

  1. ^ GObject Reference ManualArchived 2007年7月3日, at the Wayback Machine.
  2. ^ GTypeArchived 2007年6月9日, at the Wayback Machine.
  3. ^ glib-mkenumsArchived 2007年8月12日, at the Wayback Machine.
  4. ^ GObject Builder


「GObject」の続きの解説一覧




固有名詞の分類


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「GObject」の関連用語

GObjectのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



GObjectのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのGObject (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2024 GRAS Group, Inc.RSS