История изменений
Исправление wandrien, (текущая версия) :
Собственно, это классическая реализация ad-hoc полиморфизма и ООП, которая много где используется, независимо от ЯП.
В том же GObject, входящем в состав glib, реализована довольно богатая модель, позволяющая в том числе создавать не только деревья наследования, но и абстрактные интерфейсы, и затем реализовывать данные интерфейсы в произвольном классе.
Код, работающий с интерфейсом некоторого объекта, может вообще ничего не знать о данном объекте, кроме того, что объект реализует заданный интерфейс. (Эту информацию можно получить в рантайме.)
Собственно gtk мог бы быть намного более гибким и универсальным тулкитом, если бы там возможности этого ООП использовались по максимуму в рамках разумного подхода к проектированию программных интерфейсов виджетов.
Но там слишком много было сделано по типу «и так сойдёт». Там, где следовало бы использовать интерфейс, вместо этого делали базовый класс; а там, где базовый класс - хадкодили какой-нибудь код. Потом от этих ошибок уже не избавиться без слома совместимости.
Исходная версия wandrien, :
Собственно, это классическая реализация ad-hoc полиморфизма, которая много где используется, независимо от ЯП.
В том же GObject, входящем в состав glib, реализована довольно богатая модель, позволяющая в том числе создавать не только деревья наследования, но и абстрактные интерфейсы, и затем реализовывать данные интерфейсы в произвольном классе.
Код, работающий с интерфейсом некоторого объекта, может вообще ничего не знать о данном объекте, кроме того, что объект реализует заданный интерфейс. (Эту информацию можно получить в рантайме.)
Собственно gtk мог бы быть намного более гибким и универсальным тулкитом, если бы там возможности этого ООП использовались по максимуму в рамках разумного подхода к проектированию программных интерфейсов виджетов.
Но там слишком много было сделано по типу «и так сойдёт». Там, где следовало бы использовать интерфейс, вместо этого делали базовый класс; а там, где базовый класс - хадкодили какой-нибудь код. Потом от этих ошибок уже не избавиться без слома совместимости.