GObject
表示
GObjectは、C言語向けのオブジェクト指向フレームワークであり、GNOMEプロジェクトやGTKの基盤となっています。このハンドブックでは、GObjectの基本概念、クラスやインターフェースの作成、シグナルの利用方法、メモリ管理などを解説します。
対象読者
[編集]- C言語の基礎知識を持つプログラマー
- GObjectを使ったアプリケーション開発に興味がある方
前提条件
[編集]- 基本的なC言語の知識
- GLibのインストール済み環境
- GCCやClangなどのCコンパイラ
目次
[編集]GObjectとは
[編集]GObjectは、C言語にオブジェクト指向の機能を追加するためのライブラリです。主な特徴は以下の通りです:
- クラスと継承: オブジェクト指向プログラミングの基本概念をサポート
- シグナル: オブジェクト間のイベント通知を実現
- プロパティ: オブジェクトの属性を動的に操作可能
GObjectの基本
[編集]GObjectの初期化
[編集]GObjectを使用するには、GLibの初期化が必要です。以下に最小限のコード例を示します:
#include <glib-object.h> int main() { g_type_init(); // GLibの初期化(GObject 2.36以降では不要) return 0; }
GTypeとは
[編集]GTypeは、GObjectがオブジェクトタイプを管理するための仕組みです。GTypeにより、クラス情報や継承関係が管理されます。
クラスとプロパティの作成
[編集]GObjectを使って独自のクラスを作成する例を以下に示します。
クラス定義
[編集]#include <glib-object.h> /* MyObjectクラスの宣言 */ G_DECLARE_FINAL_TYPE(MyObject, my_object, MY, OBJECT, GObject) struct _MyObject { GObject parent_instance; int my_property; // プロパティ }; /* クラスの実装 */ G_DEFINE_TYPE(MyObject, my_object, G_TYPE_OBJECT) static void my_object_class_init(MyObjectClass *klass) { /* クラス初期化処理 */ } static void my_object_init(MyObject *self) { self->my_property = 0; }
シグナルの利用
[編集]GObjectでは、シグナルを用いてオブジェクト間の通信を実現します。
シグナルの登録と発行
[編集]#include <glib-object.h> /* シグナルの定義 */ enum { SIGNAL_MY_SIGNAL, N_SIGNALS }; static guint my_signals[N_SIGNALS]; G_DEFINE_TYPE(MyObject, my_object, G_TYPE_OBJECT) static void my_object_class_init(MyObjectClass *klass) { my_signals[SIGNAL_MY_SIGNAL] = g_signal_new( "my-signal", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 0 ); }
メモリ管理
[編集]GObjectは参照カウント方式でメモリ管理を行います。`g_object_ref()`および`g_object_unref()`で管理します。
演習問題
[編集]問題1: 基本クラスの作成
[編集]独自のクラスを作成し、プロパティを1つ追加してください。
問題2: シグナルの利用
[編集]クラスにシグナルを追加し、シグナルを発行してハンドラを呼び出してください。