В комментариях к последняя статья Часто утверждалось, что система GObject не нужна из-за доступности C++ и других языков высокого уровня.
Помимо чисто технических вопросов, которые уже обсуждались в комментариях, хотелось бы затронуть еще один аспект. Вероятно, большинство комментаторов видят смысл существования объектной системы GLib в упорном нежелании ретроградных специалистов воспользоваться благами цивилизации и смириться с неумолимыми темпами прогресса.
Вероятно, так было на заре развития Glib/GTK, зародившегося в мире UNIX-систем, GNU, открытого исходного кода, идей Столлмана и т. д. Большинство хакеров этого поколения действительно предпочитали C, в то время как C++ был относительно молодой и неразвитый, и польза от его использования не казалась столь очевидной.
Сегодня, конечно, для новых проектов большинство из нас предпочтет использовать более удобные, лаконичные и безопасные языки, даже если мы знакомы со всеми нюансами использования GObject. Однако не следует упускать из виду тот факт, что за 20 с лишним лет существования GLib/GTK с их использованием были созданы тысячи приложений и библиотек, многие из которых по сей день активно разрабатываются тысячами программистов со всего мира.
мир.
В них добавляется новый функционал, выявляются ошибки, адаптируются к современным технологиям вроде экранов HiDPI, Wayland, Vulkan и т.д. Чтобы читать (дополнять, исправлять) код таких проектов, необходимо иметь базовые знания объектно-ориентированного программирования.
ориентированные расширения для Си, о которых мы говорим.
Поэтому добро пожаловать под кат. Тренируемся, как обычно, на котах :)
Вся серия о GObject:
GObject: Основы GObject: наследование и интерфейсы GObject: инкапсуляция, создание экземпляров, самоанализНаследование от потомков GObject
В общем, GObject подразумевает только одиночное наследование.Для множественного наследования предполагается использование Java-подобных интерфейсов, о которых мы поговорим во второй части статьи.
Давайте создадим тип Tiger, который будет наследоваться от Cat, который мы описали в предыдущей статье.
На этот раз мы сделаем его конечным объектом и, таким образом, будем считать, что в дальнейшем наследования от него не будет. Давайте создадим файл Animaltiger.h:
Обратите внимание, что мы использовали макрос G_DECLARE_FINAL_TYPE вместо G_DECLARE_DERIVABLE_TYPE для описания конечного объекта и что последним аргументом макроса был родительский объект AnimalCat. Если бы мы предположили дальнейшую цепочку наследования с производным объектом, нам нужно было бы описать класс и создать экземпляр родительского класса в качестве первого поля в нем; в данном случае нам это не нужно.#ifndef _ANIMAL_TIGER_H_ #define _ANIMAL_TIGER_H_ #include "animalcat.h" G_BEGIN_DECLS #define ANIMAL_TYPE_TIGER animal_tiger_get_type() G_DECLARE_FINAL_TYPE (AnimalTiger, animal_tiger, ANIMAL, TIGER, AnimalCat)
/*
struct _AnimalTigerClass
{
Теги: #*nix #разработка Linux #C++ #OOP #GTK #gobject #glib
-
Зачем Поездам Глонасс?
19 Oct, 24 -
World Of Warcraft Русская Версия.
19 Oct, 24 -
Они Приехали!... И Засорили Его.
19 Oct, 24 -
Великий И Мощный Язык. Это Безгранично?
19 Oct, 24