Console

Разработка приложений на С# в Linux среде

C# - язык для разработки .NET приложений от Microsoft. Если название последней фирмы Вас не испугало и всё-таки нужно писать эти приложения - можно делать это в любимой ОС. В статье рассмотрен необходимый софт, а также создаётся первая программа.

Почти все знают, что .NET - платформа, разработанная компанией Microsoft, а эта корпорация ничего не делает задаром… Итак, язык C#. Хммм, странно, почему же он так напоминает Java? Ладно, проехали… Будем надеяться, что M$ заплатят за свои грехи. Но иногда даже заядлым линуксоидам приходиться программировать на этом языке. Не лезть же для этого в популярную проприетарную ОС? В этом случае нам на помощь приходит проект Mono. Вот, что про него пишут на официальном сайте:

Mono provides the necessary software to develop and run .NET client and server applications on Linux, Solaris, Mac OS X, Windows, and Unix.

То есть это тот набор утилит, что нам нужен. Собранные пакеты есть почти для всех популярных дистрибутивов Linux, либо сразу входят в набор дополнительного (но не установленного) софта. Итак, скачать Mono можно со странички http://www.mono-project.com/Downloads. Если готового пакета для нужного дистрибутива нет - то можно собрать Mono из исходного кода. Правда, компилируется он довольно долго.

После установки Mono мы уже можем успешно запускать .NET-приложения. Даже те, которые были написаны в Windows и имеют расширение .ехе. Но радоваться тут нечему - приложения “летают” со скоростью эмулятора. Хотя, под Windows скорость их работы примерно такая же :)

Разработчики Mono обещали нам также возможность разработки приложений. Но где же она? Mono - чисто консольное приложение и предназначено для запуска .NET программ. А возможность разработки заключается в том, что в комплект входит ещё и компилятор C#. Никакой удобной IDE для разработки в пакете нет. Это не понравится девелоперам, которые уже успели попользовать проприетарную Visual Studio. Но в Linux даже из безвыходных ситуаций всегда найдётся выход! :)

Удобная IDE для разработки С# приложений есть! И она называется MonoDevelop. Эта среда не входит в пакет Mono, так что качать и ставить её придётся отдельно. Скачать можно с официального сайта: http://www.monodevelop.com/Download. Надеюсь, с установкой у читателя проблем не возникнет.

Теперь создадим свой первый проект на С# под Linux. Для этого нужно запустить monodevelop. По медленной скорости загрузки этого приложения можно понять, что такое интерпретируемый язык… Эта среда так долго запускается только в первый раз. Во время этой загрузки она создаёт необходимые конфигурационные файлы, подготавливает систему к работе. В последующие разы IDE будет грузиться немного быстрее.

MonoDevelop: Главное окно

Итак, создадим новый проект. Это можно сделать либо кликнув по ссылке “Start a New Project” в окне приветствия, либо в меню “Файл” -> “Новый проект”. По умолчанию выбран “Консольный проект”. Так как это наше первое приложение - его и выбираем. В качестве названия я ввел “hello”, название решения выставилось автоматически.

MonoDevelop: Создание проекта

После этого появится диалог “Project Features”. Пока там можно ничего не выбирать (ну, или “Unix integration” наконец :) ). Кликаем “ОК” - и код минимального приложения создан:

MonoDevelop: Минимальное приложение

Допишем чуть-чуть кода, чтобы наше приложение еще и читало какие-нибудь данные из консоли и выводило ткуда что-то. Код заменим на:

// Main.cs created with MonoDevelop
// User: dxp at 20:25 Z03.09.2007
// project created on 03.09.2007 at 20:25
using System;

namespace hello
{

    class Student{
        
        private string Name, Group;
        private sbyte Age;
        
        public void AddToUniversity(string Name, string Group, sbyte Age)
        {
            this.Name = Name;
            this.Group = Group;
            this.Age = Age;
        }
        
        public void Write()
        {
            Console.WriteLine(
        "\nYour name is {0}\nYou in {1} group\nand your age is {2} :)",
        this.Name, this.Group, this.Age
            );
        }
    }
    
    class MainClass
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Hello! What is your name?");
            Student Me = new Student();
            string par1 = Console.ReadLine();
            Console.WriteLine("OK. How old are you?");
            sbyte par2 = sbyte.Parse( Console.ReadLine() );  
            Console.WriteLine("And what is your group?");
            string par3 = Console.ReadLine();
            Me.AddToUniversity(par1, par3, par2);
            Me.Write();
            Console.ReadKey();
        }
    }
}

После этого сохраняем файл (тандартный хоткей Ctrl+S - рабочий) и компилируем программу. Это можно сделать либо при помощи меню “Проект” -> “Простроение hello” / “Построение решения”, либо при помощи соответствующей кнопки на панели инструментов, либо ещё удобнее - по клавише F7. После этого в журнале построения должно появиться сообщение об успешной сборке.

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

Ещё одной приятной фишкой среды было автодополнение функций. При введении символа “.”(точка) после объекта какого-нибудь класса во всплывающем окошке отображаются все методы и свойства этого класса, будь то встроенный или только что написанный класс. Причём, можно использовать клавиши стрелок для навигации по этому списку и по каждой функции будет отображено краткое описание (если таковое имеется). Также можно продолжать вводить имя нужной функции с клавиатуры - тогда поиск в окне-подсказке будет совершён автоматически:

MonoDevelop: Вывод подсказки

В целом эта IDE оставляет приятные ощущения. И это не смотря на очень раннюю версию (0.15). Уже виднеются кроссплатформенные конкуренты Visual Studio от MS! :) Но некоторые жизненно важные возможности пока не реализованы. Например, отладка. Если нужно написать небольшое приложение - то можно его написать и без отладки. Но писать серьёзные коммерческие приложения в этой среде пока будет трудновато. Остаётся лишь надеяться, что разработчики не заставят нас долго ждать и уже в ближайших версиях пошаговая отладка появится.

Теперь запустим нашу программу. Если сделать это при помощи кнопки “Запустить” (F5), то программа обругает нас, мол “Unhandled Exception: System.ArgumentNullException: Argument cannot be null…” Это происходит потому, что в поле “Возраст” мы должны были ввести число, а программа автоматически подставила значение null.

Чтоб ощутить, что мы написали реально рабочее приложение запустим его вручную. Для этого нужно перейти в каталог проекта. Потом в нем в каталог ./bin/Debug/. И в этом каталоге уже будет лежать наше готовое кроссплатформенное приложение. Можем запустить его при помощи mono и посмотреть результат:

Запуск приложения в консоли Linux

Как видите, приложение работает :) Теперь вернёмся к исходному коду. В нём показаны почти все основные принципы ООП:

  • Инкапсуляция (скрытие полей объекта от других классов) - напрямую обращаться к свойствам объекта 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

Other Linux

Dialogue & Discussion

Ins

Wednesday, September 5th, 2007, 02.02pm

У меня комментарий немного не в тему будет ;-) Честно признаюсь, что я не сильно хорошо разбираюсь в кроссплатформенном программировании, но немного разбираюсь в программировании вцелом. Вот эта фраза:

В нём показаны почти все основные принципы ООП:

Полиморфизм здесь тоже не показан. Полиморфизм строится именно на методах позднего связывания (виртуальных) и заключается в том, что перекрытый в потомке виртуальный метод заставляет объект вести себя по-другому, несмотря на то, что метод имеет то же имя. Полиморфизм невозможен без наследования, следовательно, в данном примере также не показан. Классический пример полиморфизма (на 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;

Одноименные методы разных классов выполняют различные действия, в результате чего родственные объекты ведут себя по-разному. Это и есть полиморфизм.

Leave a comment

(after comment you will be redirected back here)