Почти все знают, что .NET - платформа, разработанная компанией Microsoft, а эта корпорация ничего не делает задаром... Итак, язык C#. Хммм, странно, почему же он так напоминает Java? Ладно, проехали... Будем надеяться, что M$ заплатят за свои грехи. Но иногда даже заядлым линуксоидам приходиться программировать на этом языке. Не лезть же для этого в популярную проприетарную ОС? В этом случае нам на помощь приходит проект Mono. Вот, что про него пишут на официальном сайте:
Итак, создадим новый проект. Это можно сделать либо кликнув по ссылке "Start a New Project" в окне приветствия, либо в меню "Файл" -> "Новый проект". По умолчанию выбран "Консольный проект". Так как это наше первое приложение - его и выбираем. В качестве названия я ввел "hello", название решения выставилось автоматически.
После этого появится диалог "Project Features". Пока там можно ничего не выбирать (ну, или "Unix integration" наконец :) ). Кликаем "ОК" - и код минимального приложения создан :
Допишем чуть-чуть кода, чтобы наше приложение еще и читало какие-нибудь данные из консоли и выводило ткуда что-то. Код заменим на:
[code=C#]
1 // Main.cs created with MonoDevelop
2 // User: dxp at 20:25 Z03.09.2007
3 //
4 // To change standard headers go to Edit->Preferences->Coding->Standard Headers
5 //
6 // project created on 03.09.2007 at 20:25
7 using System;
8
9 namespace hello
10 {
11
12 class Student{
13
14 private string Name, Group;
15 private sbyte Age;
16
17 public void AddToUniversity(string Name, string Group, sbyte Age)
18 {
19 this.Name = Name;
20 this.Group = Group;
21 this.Age = Age;
22 }
23
24 public void Write()
25 {
26 Console.WriteLine("\nYour name is {0}\nYou in {1} group\nand your age is {2} :)",
27 this.Name, this.Group, this.Age);
28 }
29 }
30
31 class MainClass
32 {
33 public static void Main(string[] args)
34 {
35 Console.WriteLine("Hello! What is your name?");
36 Student Me = new Student();
37 string par1 = Console.ReadLine();
38 Console.WriteLine("OK. How old are you?");
39 sbyte par2 = sbyte.Parse( Console.ReadLine() );
40 Console.WriteLine("And what is your group?");
41 string par3 = Console.ReadLine();
42 Me.AddToUniversity(par1, par3, par2);
43 Me.Write();
44 Console.ReadKey();
45 }
46 }
47 }
[/code]
После этого сохраняем файл (тандартный хоткей Ctrl+S - рабочий) и компилируем программу. Это можно сделать либо при помощи меню "Проект" -> "Простроение hello" / "Построение решения", либо при помощи соответствующей кнопки на панели инструментов, либо ещё удобнее - по клавише F7. После этого в журнале построения должно появиться сообщение об успешной сборке.
Как видно, MonoDelvelop вполне функциональная и удобная среда. В ней уже можно с комфортом разрабатывать приложения. Порадовала относительно хорошая русская локализация - даже сообщения компилятора выводятся на русском языке. Большое количество настроек порадует любого девелопера. Также среда может помочь создать архив с новоразработанным приложением. Причём, сделать как версию с исходными кодами, так и с бинарными файлами. Отучают нас от консоли, балуют! :)
Ещё одной приятной фишкой среды было автодополнение функций. При введении символа "."(точка) после объекта какого-нибудь класса во всплывающем окошке отображаются все методы и свойства этого класса, будь то встроенный или только что написанный класс. Причём, можно использовать клавиши стрелок для навигации по этому списку и по каждой функции будет отображено краткое описание (если таковое имеется). Также можно продолжать вводить имя нужной функции с клавиатуры - тогда поиск в окне-подсказке будет совершён автоматически:
В целом эта IDE оставляет приятные ощущения. И это не смотря на очень раннюю версию (0.15). Уже виднеются кроссплатформенные конкуренты Visual Studio от MS! :)
Но некоторые жизненно важные возможности пока не реализованы. Например, отладка. Если нужно написать небольшое приложение - то можно его написать и без отладки. Но писать серьёзные коммерческие приложения в этой среде пока будет трудновато. Остаётся лишь надеяться, что разработчики не заставят нас долго ждать и уже в ближайших версиях пошаговая отладка появится.
Теперь запустим нашу программу. Если сделать это при помощи кнопки "Запустить" (F5), то программа обругает нас, мол "Unhandled Exception: System.ArgumentNullException: Argument cannot be null..." Это происходит потому, что в поле "Возраст" мы должны были ввести число, а программа автоматически подставила значение null.
Чтоб ощутить, что мы написали реально рабочее приложение запустим его вручную. Для этого нужно перейти в каталог проекта. Потом в нем в каталог ./bin/Debug/. И в этом каталоге уже будет лежать наше готовое кроссплатформенное приложение. Можем запустить его при помощи mono и посмотреть результат:
Как видите, приложение работает :)
Теперь вернёмся к исходному коду. В нём показаны почти все основные принципы ООП:
- Инкапсуляция (скрытие полей объекта от других классов) - напрямую обращаться к свойствам объекта Me нельзя, компилятор выдаст ошибку. Для обращений к этим полям нужно использовать специальные доступные функции (API - Application Prorgramm Interface). Конкретно в данном примере это функции AddToUniversity и Write.
- Полиморфизм (возможность использования одинаковых имён). А именно, в функцию AddToUniversity передаются переменные, соответствующие классовым; вывод данных - функция Write.
- Наследование (в примере использовано не было).
В остальном исходный код должен быть понятен, так как приложеньице совсем маленькое. Однако даже маленькоее приложение может быть революционным шагом в истории! Ведь теперь для разработки приложений даже на C# вовсе не обязательно использовать Windows...
При написании данного материала были использованы:
- ОС : Gentoo Linux 2007.0
- Браузер : Mozilla Firefox 2.0.0.6
- Файловый менеджер : Midnight Commander 4.6.1 с набором патчей
- Эмулятор терминала : Konsole 1.6.6 (просвечивается картинка на рабочем столе)
- Текстовый редактор : GVim 7.1 (он же использовался для подсвечивания синтаксиса C# в материале)
- Графический редактор : Gimp 2.4.0
- Оконный менеджер : KDE 3.5.7
- Mono 1.2.4
- MonoDevelop 0.15
P.S. За грамматику прошу простить - писалось ночью, руки ватные, мозгов и так мало. Причём, заметьте, в день когда нам прочитали первую лекцию по этому языку! :) Ибо был реальный мандраж - смогу ли девелопить в любимой оси, или придётся мастдай в эмуле ставить....
У меня комментарий немного не в тему будет ;) Честно признаюсь, что я не сильно хорошо разбираюсь в кроссплатформенном программировании, но немного разбираюсь в программировании вцелом. Вот эта фраза:
>> В нём показаны почти все основные принципы ООП:
Полиморфизм здесь тоже не показан. Полиморфизм строится именно на методах позднего связывания (виртуальных) и заключается в том, что перекрытый в потомке виртуальный метод заставляет объект вести себя по-другому, несмотря на то, что метод имеет то же имя. Полиморфизм невозможен без наследования, следовательно, в данном примере также не показан.
Классический пример полиморфизма (на Delphi)
type
TFigure = class
private
FName: String;
public
function GetName: String; virtual; abstract;
end;
TCircle = class(TFigure)
public
function GetName: String; override;
end;
TSquare = class(TFigure)
public
function GetName: String; override;
end;
...
function TCircle.GetName: String;
begin
Result:='Окружность';
end;
function TSquare.GetName: String;
begin
Result:='Квадрат';
end;
Одноименные методы разных классов выполняют различные действия, в результате чего родственные объекты ведут себя по-разному. Это и есть полиморфизм.