Поиск по блогу

Показаны сообщения с ярлыком Vala в классах. Показать все сообщения
Показаны сообщения с ярлыком Vala в классах. Показать все сообщения

вторник, 26 августа 2014 г.

Готовимся к написанию Свежего приложения на Vala. Часть 1

Введение

Для начала нам следует продумать концепцию проекта. К примеру, вы заботитесь об OpenSource сообществе, и хотите написать новое приложение, которое позволяет решить задачу, ну к примеру, программу которая получает с определённого web-сервера цитату, каждый раз новую, и каждый раз случайную.

И не каждый знает с чего же ему начать... В действительности, само программирование, как вы знаете, отнимает лишь 10% времени разработки. Наибольшую часть времени разработки отнимает построение модели, и решение по поводу того какие инструменты использовать, какая мощность функционала будет присутствовать в приложении. Но есть ещё один очень важный аспект любого проекта: Поддержка и развитие. Продумывая приложение - необходимо рассмотреть развитие проекта как можно дальше - чтобы иметь представление о том во что выльется проект.

С чего начать?

Базовую цель мы поставили: "сделать программу которая получает с определённого web-сервера цитату", назовём это задачей-минимум. Именно данная цель будет нашей путеводной звездой, указывая на то куда нам идти.

Далее. Нам необходимо решить, а в какой среде должна существовать программа, какие инструменты использовать, и как нам хранить и публиковать код. На данном этапе воля ваша, в рамках моего блога, я в качестве инструмента выбираю Vala + Gtk3 и ОС Линукс. В качестве хранилища и публикации кода будет использовать публичный git (к примеру github.com).

Инструмент-то мы выбрали, но мы не решили в каком виде будем писать наш код (код можно писать многими способами, так же и интерфейс и структура программы может быть написана разными способами). Так как я любитель ООП в разумных приделах, то именно по структуре ООП мы и будем писать наше приложение на Vala. А по поводу построения окон и приложения с точки зрения Gtk и Gnome мы выберем модель "Application" которая активно развивается и уже нашла своё место в среде Gnome. Что я имею ввиду под моделью "Application" - ни что иное как построение приложения используя Класс Gtk.Application (и вспомогательный к нему Gtk.ApplicationWindow).

В чём же разница в использовании этого класса и того как писали раньше спросите вы?!, а разница в том, что теперь 1 приложение может иметь несколько окон, но управляться по типу того как это делается в MacOS. Тоесть каждое новое окно - это не второе приложение, а то же самое приложение, только с дополнительным Окном. Подобная практика позволяет очень сильно увеличить производительность за счёт снижения затрат ресурсов системы. К тому же даёт возможность реально обезапасить некоторые источники данных с которыми работает приложение. К примеру 2 одинаковых приложения работающих над одним и тем же источником - очень небезопасная структура, ибо некоторые данные могут потеряться по причине того что приложения даже не догадываются о существовании друг друга. К тому же, структура Базового Приложения (Application) значительно элегантнее и легче всякого рода костылей типа блокировки ресурса.

Как начать?

Мы будем использовать Анюту :), ну, нет, не в пошлом смысле этого слова :), мы будем использовать систему разработки кода "Anjuta" которая традиционно идёт в большинстве случаев, практически с самим "Gnome". Версия Gnome на момент написания статьи: 3.13.2 (по факту 3.12). ОС Arch Linux x86_64. Так же из инструментов мы будем пользоваться Glade. Как бы не было приятно всё создавать на чистом коде, но хороший тон диктует нам что типовые объекты нам лучше описать с помощью GtkBuilder (Gtk.Builder). То есть, часть интерфейса у нас будет содержаться в XML файле сгенерированным в Glade приложении по типу GtkBuilder.

Примечание

Даже самый последний Glade не даёт вам всех возможностей современного GtkBuilder, почему так происходит не знаю, но если вы научитесь дополнять интерфейс GtkBuilder вручную кодом XML - цены вам не будет! Ибо самые современные виджеты либо не работают в Glade либо очень хорошо спрятаны

Погружение

Начнём нашу работу с создания проекта в Anjuta. Описывать весь процесс не стану. Там слишком всё тривиально. Главное чтобы вы выбрали Vala как язык программирования, и создавали проект сразу на основе make/configure сборки. Всё таки цель у нас делать качественное приложение, а значит надо всё делать как грамотному человеку, не забывая упрощать жизнь вашим последователям.

Как создать проект в Anjuta

Модификация кода

Полученный код разделим на 3 части:

  1. Нужная часть
  2. Ненужная часть
  3. Лицензирование и Документация (комментарии)

В идеале программа у вас готова, точнее болванка, в которой создаётся окошко. Но, программа эта бесполезна и вы ничего не сделали, к тому же, программа создаётся по старым принципам, которые нас не устраивают. Следовательно мы будем менять данную болванку. То есть мы модифицируем код так, чтобы он соответствовал требованию (Application), был оптимален и делал тоже самое что и шаблонный код делал.

Для начала выправите код в том стиле в котором вам работать комфортно. Рекомендую не превышать длину строки в 80 - 100 символов. Всё таки приятно когда код читабельный и компактный. Далее. Придумайте название классу (к примеру WisdomBook), замените наследование вместо Object на Application. Создайте метод newWindow() и перенесите туда то что содержалось в конструкторе. Переименуйте конструктор согласно нового имени вашего Класса.

Теперь ваш конструктор должен содержать только вот такого рода строчку: Object(application_id: "org.valhalla.projects.myhandbookofwisdom"); где строковая переменная - это некоторое глобальное название для вашего приложения в системе. ваша функция main теперь должна одержать всего 2 строчки:
WisdomBook app = new WisdomBook();
return app.run(args);
Где вы ставите вместо WisdomBook своё название класса.

Последний шаг: Добавить метод activate
protected override void activate() {
this.newWindow();
}
И в методе newWindow необходимо добавить строчку: window.application = this; перед строчкой: window.show_all ();
Всё! все приготовления произведены. Ваше приложение готово впитывать вашу мудрость и превращаться в кусок прекрасного творения!

суббота, 30 апреля 2011 г.

Резкое погружение

Введение

Здравствуйте, я очень вас прошу простить меня за сложность того примера который составил, и за малую долю разъяснений. Я рассчитываю что те кто будет рассматривать этот язык программирования, должен представлять себе что такое ООП (Объектно Ориентированное Программирование).


Пример Кода

Пример представляет из себя не оптимизированный, демонстрационный пример.

Сам код примера, после кода я объясню кратенько что, да как.

SimpleExample2.vala

namespace org {
namespace newnauka {
namespace examples {
public class SimpleExample2 {

private int property_x = 0;
private int property_y = 1;
private int property_z = 2;

public SimpleExample2.first(int x) {
this.property_x = x;
}

public SimpleExample2.second(int x, int y) {
this.property_x = x;
this.property_y = y;
}

public SimpleExample2.third(int x, int y, int z) {
this.property_x = x;
this.property_y = y;
this.property_z = z;
}

public int X {
get { return property_x; }
set { property_x = value; }
}
public int Y {
get { return property_y; }
set { property_y = value; }
}
public int Z {
get { return property_z; }
set { property_z = value; }
}

public int calculateALL() {
return X * Y * Z;
}

static int main(string[] args) {
SimpleExample2 example = new SimpleExample2.second(23, 54);
stdout.printf("Первый результат:\t%d\n", example.calculateALL());
example.Z = 100;
stdout.printf("Второй результат:\t%d\n", example.calculateALL());

return 0;
}
}
}
}
}


Разбор полётов

namespace - Это команда определения пространства Имён, эквивалент в "Java" - "Пакеты".

public class - Это две команды означающие что вы описываете "Класс", описываете его доступным для использования из вне Пространства Имён "org.newnauka.examples".

private и public - Это модификаторы доступа, если у вас private - то значит что только соседние методы смогут использовать такую конструкцию. Еже ли у вас стоит модификатор доступа public, это значит что эту конструкцию будет видеть кто угодно из любого пространства Имён.

public SimpleExample2.first - И подобные конструкции, это разного рода "Конструкторы", в отличии от "Java", здесь конструкторы должны отличаться друг от друга и по имени, Это важно. Их обычно делают по имени одинаковыми, но добавляют дополнительный определитель через точку.


Конструкция для задания правила "Чтение и Запись" свойству

public int X {
get { return property_x; }
set { property_x = value; }
}

Эта конструкция предназначена для задания правил для свойств, в "Java" они задавались с помощью специальных getter и setter методов, здесь это реализовано гораздо проще. Если Вы хотите чтобы ваше свойство было только "Читабельным", но не "Писабельным", то вам необходимо использовать такую конструкцию:


Конструкция для задания правила "Только для чтения" свойству

public int X {
get { return property_x; }
}


Это описание простейшего метода (Функции):


Пример простого метода

public int calculateALL() {
return X * Y * Z;
}


SimpleExample2 example = new SimpleExample2.second(23, 54); - Данная строчка создаёт объект типа "SimpleExample2" (Так у нас называется весь наш класс) ссылка на этот объект будет помещена в переменную "example". Заметьте что используется именно конструктор с пометкой "second", в этот конструктор нам необходимо передавать 2 аргумента (параметра), из-за того что мы его таковым описали в теле класса.

static - Это специальный модификатор означающий что наш метод (функция), в данному случае "main" не требует создание объекта, то есть этот метод можно использовать сразу при выполнении программы, так как "main" - это точка входа для программы, нам необходимо чтобы он был доступным с самого начала существования программы.


Умозаключения

Данный пример поможет более-менее понять суть программирования в классах под Vala. Этот пример сложен, однако, люди знакомые с ООП, не увидят здесь затруднительного материала.
Хочу напомнить, что синтаксис в Vala и идея построения используется языка "C#".
Эта сухая и неинтересная теория скоро сойдёт на нет, и следующие свои посты я уже буду писать в более интересном ключе.
Я постараюсь осветить вопросы:

  • Создания Графических программ (С внешним и Внутренним интерфейсом)
  • Работа с "Коллекциями"
  • Создание своих библиотек
  • Создание приложений сразу под Windows и Linux
  • Рисование на "Холсте"
  • Работа с БД