Пример программы
Перейдём к практике. Рассматриваемый ниже исходный код взят с авторского сайта Vala и слегка подкорректирован для удобства работы. Это программа просмотра текстовых файлов в отдельном окне с панелью инструментов, панелями прокрутки и всплывающим окном выбора файла, в общем, со всеми элементами графического интерфейса пользователя.
При компиляции потребуется библиотека gtk+, поэтому необходимо проверить, установлена ли она в вашей системе.
После директивы, объявляющей использование библиотеки Gtk (строка 1), начинается определение класса с открытым доступом (public) TextFileViewer, являющегося подклассом Window (строка 3).
Наш новый тип объекта – класс TextFileViewer – содержит один закрытый (private) член-переменную text_view (строка 5) и четыре члена-метода, из которых два являются открытыми (public) – конструктор TextFileViewer (строка 7) и точка входа в программу main (строка 56) – и два закрытыми (private), недоступными извне – функции on_open_clicked (строка 32) и open_file (строка 42). По их именам можно понять, что они делают.
Те, кто знаком с языками C++ и C#, обратят внимание на отсутствие деструктора. Дело в том, что задачу управления памятью Vala берет на себя, но при необходимости вы можете написать собственный деструктор. Синтаксис точно такой же, как в упомянутых выше языках: префикс "тильда" (~) и имя класса. В рассматриваемом примере деструктор выглядел бы так:
В методах часто используется ключевое слово this, известное всем ОО-программистам, которое позволяет ссылаться на текущий объект, конкретный экземпляр данного класса.
В строках 9–11 определяются характеристики окна: заголовок, положение, размеры.
Строки 13–16 – создание панели инструментов и размещение на ней кнопки открытия файла. Здесь следует отметить функцию связывания события "щелчок по кнопке" и метода обработки этого события on_open_clicked (строка 16).
В строках 18–20 внутренняя переменная класса text_view инициализируется вновь создаваемым объектом TextView – панелью просмотра текста, без возможности редактирования и без вывода курсора.
Панель с возможностью прокрутки в обоих направлениях (ScrolledWindow) создаётся и связывается с только что организованной областью просмотра текста в строках 22–24.
Далее в строках 26–29 создаётся контейнер VBox. В него упаковывается сначала панель инструментов (строка 27), заполняющая всё пространство по ширине, но без возможности увеличения размера по вертикали, затем панель просмотра текста с прокруткой (строка 28), которая заполняет всю ширину контейнера и может увеличивать свой размер по вертикали. Созданный контейнер вписывается в главное окно приложения.
Со строки 32 начинается метод-обработчик щелчка по кнопке. Здесь создаётся, инициализируется и запускается панель выбора открываемого файла, в которой можно либо выбрать нужный файл и щёлкнуть по кнопке Open (Открыть), либо отказаться от выбора, щёлкнув по кнопке Cancel (Отмена). В любом случае эта панель закрывается, а соответствующий объект удаляется (строка 39).
Строки 42–54 – метод open_file, непосредственно выполняющий процедуру открытия заданного файла. Отметим, что вызывается этот метод из предыдущей функции on_open_clicked (см. строку 37).
Завершающим в определении класса является "главный" метод main – точка входа в программу (строки 56–64). Разумеется, он должен быть общедоступным (public). Здесь инициализируется Gtk-среда (строка 58), создаётся экземпляр нашего класса (строка 59), выполняется связывание закрытия и удаления данного окна с gtk-функцией завершения приложения (строка 60), активизируются и выводятся все элементы в иерархии контейнера (строки 61 и 62).
Компиляция программы выполняется с помощью команды:
Отметим использование ключа компилятора --pkg, который позволяет включить в программу vapi-интерфейсы для связывания с соответствующим пакетом. В данном случае включается файл gtk+-2.0.vapi, обеспечивающий связь с библиотекой gtk+.
Подводя итог, можно отметить лаконичность и компактность исходного кода, которую обеспечивает язык Vala при написании объектно-ориентированных программ с графическим интерфейсом, а также "защиту" прикладного разработчика от необходимости разбора многочисленных деталей реализации этого интерфейса.
Заключение
Итак, мы изучили возможности объектно-ориентированного программирования в языке Vala. Следующая, заключительная статья цикла будет посвящена расширенным возможностям языка, а также применению штатных инструментальных средств и утилит.
Last updated
Was this helpful?