Книга: Основы программирования в Linux
Система объектов GTK+
Система объектов GTK+
Все, у кого уже есть опыт программирования GUI, возможно, поймут наше утверждение о строгой приверженности библиотек GUI концепции объектно-ориентированного программирования (ООП), настолько строгой, что все современные комплекты инструментов, включая GTK+, написаны в стиле объектно-ориентированного программирования.
Несмотря на то, что комплект инструментов GTK+ написан на чистом С, он поддерживает объекты и ООП благодаря библиотеке GObject. Эта библиотека поддерживает наследование объектов и полиморфизм с помощью макросов.
Давайте рассмотрим образец наследования и полиморфизма на примере иерархии объектов GtkWindow, взятой из документации GTK+ API.
GObject
+---GInitiallyUnowned
+----GtkObject
+----GtkWidget
+----GtkContainer
+----GtkBin
+----GtkWindow
Этот список объектов говорит о том, что объект GtkWindow
— потомок GtkBin
, и, следовательно, любую функцию, которую вы вызываете с объектом GtkBin
, вы можете вызвать и с объектом GtkWindow
. Точно так же объект GtkWindow
наследует из объекта GtkContainer
, который в свою очередь наследует из объекта GtkWidget
.
Для удобства все функции создания виджетов возвращают тип GtkWidget
. Например,
GtkWidget* gtk_window_new(GtkWindowType type);
Предположим, что вы создаете объект GtkWindow
и хотите передать возвращенное значение в функцию, ожидающую объект типа GtkContainer
, например, такую, как gtk_container_add
:
void gtk_container_add(GtkContainer* container, GtkWidget *widget);
Вы применяете макрос GTK_CONTAINER
для приведения типов GtkWidget
и GtkContainer
:
GtkWidget * window = gtk_window_new(GTK GTK_WINDOW_TOPLEVEL);
gtk_container_add(GTK_CONTAINER(window), awidget);
Назначение этих функций вы узнаете позже; сейчас просто отметьте для себя частое применение макросов. Для каждого возможного приведения типа существует макрос.
Примечание
Не беспокойтесь, если вам все это не очень понятно; вам не нужно разбираться в подробностях ООП для того, чтобы освоить GNOME/GTK+. На самом деле это безболезненный способ усвоить идеи и преимущества ООП на базе знакомого вам языка С.
- Система безопасности InterBase
- Иерархия объектов в InterBase
- Что делать, если при установке принтера появляется сообщение Невозможно завершение операции. Подсистема печати недоступн...
- Имена объектов длиной 68 символов
- 7 Система Цикл: долгосрочные цели
- Создание объектов Collection
- 3. Система конкурентных продаж (продажи по методу КЛИН)
- 3.4 Сетевая файловая система
- 3.7 Система Microsoft Exchange 2000 и NAS
- 6.5 Файловая система NTFS
- 1.3.1. Индексирование сайта в поисковых системах
- 6.6.2.1. Файловая система FAT 16