Классы

Классы

 className класса : SuperClassName , InterfaceName {
}

Определяет класс (ссылочный тип). В отличии от структур, экземпляры классов выделяются в куче. Более полно классы обсуждаются в секции "Объектно-ориентированное программирование".

Интерфейсы

interface  InterfaceName : SuperInterfaceName {
}

Определяет интерфейс - неинстанциируемый тип. Чтобы создать экземпляр интерфейса, необходимо сначала реализовать его абстрактные методы в неабстрактном классе. Интерфейсы в Vala имеют больше возможностей, чем интерфейсы в Java или C#. Фактически они могут быть использованы как примеси. Детали будут описаны в секции "Объектно-ориентированное программирование".

------------

wiki: Преимуществом примесей является то, что повышая повторную используемость текстов программ, этот метод избегает многих проблем множественного наследования. Однако при этом метод накладывает свои ограничения.

Вообщем примеси это так сказать ООП как оно задумывалось изначально, а не как его реализовали создатели С++.

примеси поддерживают следующие языки:

Статья в которой подробно рассматриваются преимущества интерфейсов Vala.

Атрибуты

Атрибуты указывают компилятору Vala детали о том, как именно должен работать код на целевой платформе. Их синтаксис прост: [AttributeName] или [AttributeName(param1 = value1, param2 = value2, ...)].

Они в основном используются для привязок в vapi файлах, [CCode(...)] наиболее используемый атрибут в них. Другой пример - атрибут [DBus(...)], используемый для экспортирования удалённых интерфейсов через D-Bus.

Примечание

Существует возможность создать компактный класс - он не наследуется от Object и следовательно имеет ограниченные возможности, инициализация членов таких классов будет выполнятся быстрее.

"Только классы GObject имеют свойства gobject (интроспектируемые во время выполнения). Эта особенность не выделена на изображении выше."

Last updated