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

среда, 25 мая 2011 г.

Создание графической программы (Встроенный)

Введение

О библиотеках. Необходимой областью имён (namespace) будет Gtk. Для добавления нового пространства имён надо использовать команду "using".


Пример Кода

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

GUISimple1.vala

using Gtk;

public class GUISimple1 {
private static void action_function(Button source) {
// Задаём новое название кнопке
source.label = "Кнопка была нажата";
}

public static int main(string[] args) {
// Инициализация GTK
Gtk.init (ref args);

// Создание переменной-окна
var window = new Window(WindowType.TOPLEVEL);
// Задаём заголовок окна
window.title = "Программа, Програмочка моя";
// Задаём размер окна
window.set_default_size (300, 50);
// Задаём положение на экране
window.position = WindowPosition.CENTER;
// Эта строка задаёт выключение программы по нажати на "выход"
window.destroy.connect(Gtk.main_quit);

// Создаём переменную-кнопку
var button = new Button.with_label("Нажмите, Или не жмите... Как хотите :)");
// Задаём функцию, которая будет выполнятся по нажати на кнопку
button.clicked.connect(action_function);

// Вставляем кнопку в окно, важно: в один контейнер можно вставить только один объект
window.add(button);
// Показать окно
window.show_all();

// Цикл GTK
Gtk.main();

return 0;
}
}


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

using - Это команда добавления пространства имён, эквивалент в "Java" - "import".

Gtk - Это название пространства имён которое будет нам нужно для создания окон (Присоединение библиотеки Gtk+-3.0).

Button - Это название класса-кнопки.

Gtk.init (ref args) - Эта строка с функцией инициализацией библиотеки GTK. (Подготовка к использованию библиотеки GTK).

var window = new Window(WindowType.TOPLEVEL) - Эта строка создаёт переменную с окном (С самыми простыми параметрами).

window.destroy += Gtk.main_quit - Эта строка указывает - какая функция должна выполняться при событии "destroy" (Это событие происходит при закрытие окна). Здесь " += " - это специальный оператор который означает "подключение", то есть с помощью него вы указываете имя функции которую хотите использовать по происхождении сего события. Важно не писать скобочек после указания имени функции (Здесь происходит делегирование функции).

var button = new Button.with_label("Нажмите, Или не жмите... Как хотите :)") - Создание кнопки с названием.

window.add(button) - Вставляем созданную кнопку в окно

window.show_all() - Функция, при выполнении которой появляется окно.

Gtk.main() - Запуск основного цикла окна (Необходимо использовать как аксиому)


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

Для компиляции программы нужно использовать пакет gtk+-3.0.
Компиляция: "valac --pkg gtk+-3.0 GUISimple1.vala"

суббота, 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
  • Рисование на "Холсте"
  • Работа с БД

пятница, 29 апреля 2011 г.

Самое начало

Хочу начать с самого начала!
Во первых скажу что я использую Linux Debian wheezy/sid.
И хочу подметить что буду рассказывать упираясь именно на эту замечательную версию Линукса.

Подготовка

Я вам настоятельно рекомендую установить пакеты:

  • valac - компилятор Vala
  • gtk+-3.0 - графические библиотеки gtk3.0
  • gedit - программа-текстовый редактор для удобства написания программ



Установка пакетов

bash# su
bash# apt-get install valac gtk+-3.0 gedit


Так, теперь о удобстве работы с компилятором "valac" нам необходимо настроить "gedit"
Запускаем "gedit":







Код для инструмента компиляции программы написанной на "vala" в "gedit"


#!/bin/bash

cd "$GEDIT_CURRENT_DOCUMENT_DIR";
valac --pkg gtk+-3.0 --pkg gmodule-2.0 --pkg posix "$GEDIT_CURRENT_DOCUMENT_NAME";
./${GEDIT_CURRENT_DOCUMENT_NAME%%.*}



Начало

Теперь мы можем перейти к программированию.
Нам необходимо научится писать хотя бы самые просты программы на "vala". Нет ничего проще чем создать программу для вывода сообщения с приветом.


SimpleExample.vala

// Простой пример самой простой программы. "Привет друг!" ("Hello World!")
int main(string[] args) {
stdout.printf("Привет Друг!\n");
return 0;
}

Данный код просто выведет сообщение "Привет Друг!" и благодаря символу "\n" перепрыгнет на следующую строчку.

Этот код аналогичен тем что пишутся на "C#" и "C++".
int - здесь в этом месте означает что данная функция должна вернуть целое число.
main - это название функции (Обязательно именно main, потому что это точка входа в любую программу). После имени любой функции обязаны идти, пусть даже пустые, открывающая и закрывающие круглые скобки.
string[] args - Это массив строк с именем args, сюда обычно приходят аргументы командной строки. В данной программе нужно просто для проформы.
stdout.printf("Привет Друг!\n"); - это функция (метод) стандартного вывода (В консоль (В чёрный экран)), она выводит что-то в Двойных кавычках на консоль.
return 0; - это код возврата из функции со значением 0. Здесь нужно для проформы.

Заметка: Соблюдайте все скобочки, сразу после круглых скобок в строке "main" открывается фигурная скобка, и в конце закрывается. Внимательно следите что бы всё было написано так же как и у меня.

Прошу прощения

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