620 likes | 819 Views
Програмиране за .NET Framework. http://www.nakov.com/dotnet-project/. MONO – свободна имплементация на .NET Framework. Антон Андреев Факултет по Математика и Информатика на СУ "Св. Климент Охридски". За презентацията. Целта на настоящата презентация е ви запознае с инициативата MONO
E N D
Програмиране за .NET Framework http://www.nakov.com/dotnet-project/ MONO – свободна имплементация на .NET Framework Антон Андреев Факултет по Математика и Информатика на СУ "Св. Климент Охридски"
За презентацията • Целта на настоящата презентация е ви запознае с инициативата MONO • Необходими знания: • Елементарни познания по Линукс • Базови познания за езика C# • За настоящата изготвянето на презентация е използван свободен софтуер • OpenOffice.org
Съдържание • Значение на не Microsoft имплементациите на .NET • Проектът Mono • Статус на проекта • Поддържани операционни системи • Инсталиране и конфигуриране на Mono под Linux • Компилаторът на C# • Виртуалната машина • Графични интерфейси в Mono • Windows Forms
Съдържание (2) • Графични интерфейси в Mono • GTK# • Gnome# • Cococa# за MAC OS • Glade# • Документацията Monodoc • Среди за разработка • MonoDevelop • Eclipse • ADO.NET под Mono
Съдържание (3) • Java запод .NET CLR • ASP.NETпод Mono • Модулът mod_mono • Сървърът XSP • Mono класовев Mono • Mono във ФМИ на СУ • Mono софтуер • Mono – полезни връзки
Не Microsoft имплементациите на .NET • Изцяло с отворен код • Всеки може да участва в разработката • Лесно прехвърляне на друга хардуерна платформа или операционна система • Мощта на .NET може да направи други ОС като Linux и BSD по-привлекателни за разработчиците (стига с тези с C / C++ :) • Намалява се монопола на Microsoft • Появява се конкуренция • В следствие се подобрява на качеството на продуктите
Имплементации на .NET • Microsoft .NET Framework • Сайт: msdn.microsoft.com/netframework/ • DotGNU Portable.NET • Сайт: http://www.dotgnu.org/ • Виртуална машина, assembler, disassembler • Има компилатори за C и C# • Java и VB.NET – в процес на разработка • Работи се по цялостно ре-имплементиране на Windows Forms • Възможно e GNU да прибавят към gcc и компилатор за C#, който генерира native код
Проектът Mono • www.go-mono.com • Зад проекта Mono стоят Ximian и Novell • Лицензионни проблеми с Microsoft
Статус на проекта Mono • Има версия 1.0 и тя ре-имплементира .NET Framework 1.1 • Поддържа се C# компилатор • VB.NET е в напреднал стадии, но все още е нестабилен • Настоящата версия е 1.05 stable и 1.1.3 unstable • До средата на 2005 ще излезе Mono 1.2. Ще включва следните новости: • Поддръжка на Generics • Обновен на C# компилатор
Статус на проекта Mono • Нова версия на основните библиотеки • ASP.NET 2.0 подобрения • Remoting подобрения от Whidbey • System.XML подобрения • Поддръжка за достъп до конзолата и серийните портове • Нови компилатори: VB.NET и JScript поддръжка • Имплементации на WSE1/WSE2 • System.Windows.Forms ще има по-солидна поддръжка • Mono 2.0 е планирано за 2006 • Ще поддържа напълно .NET Framework 2.0
Поддържани ОС • Достъпни са компилирани пакети за: • RedHat Linux 9.0 • SuSe Linux • Fedora Linux • Mac OS X • Microsoft Windows • За всички останали трябва да се прекомпилира изходният код • Mono се включва и port системите на повечето BSD-базирани ОС • Някои ОС ще включват Mono като част от своите дистрибуции (напр. Gnoppix Linux)
Инсталиране и конфигуриране на Mono под Linux • Вече има графичен инсталатор за Linux • Mono се инсталира бързо и лесно
Инсталиране и конфигуриране на Mono под Linux • Инсталацията под Windows е лесна: • Представлява обикновен Windows Setup • Включва GTK# и Web-сървър за ASP.NET • Може да работи и под cygwin (cygwin е емулация на Linux за Windows) • Под cygwin може да се прекомпилира сорс-кодът на Mono • Под Fedora Linux може да се използва yum repository • Използва се командата yum • Избягва се “Dependency hell”
Инсталиране и конфигуриране на Mono под Linux • Има неофициални Debian Mono пакети • Сами решавате дали да предпочете тях или прекомпилация • Компилацията би трябвало да протича без проблем • Извършва по стандартния начин: • Има и CVS, от който можете да изтеглите текущата версия ./configure && make && make install
Компилаторът на Mono за C# • Самият компилатор е писан на C# и може да се самопрекомпилира • Поддържа стандарта ECMA #334 за C# 1.0 • Работи се по компилатор за C# 2.0 • Как се използва: #mcs proba.cs proba.exe #mcs –-help #man mcs
Виртуалната машина на Mono • 32-битов JIT (Just-In-Time compiler) • Поддържа: Linux/x86, Linux/PPC, Solaris/SPARC S390 и MacOS X • 64-битов JIT • Поддържа: Linux/x86-64, Solaris/SPARCv9 • Има го само в Mono 1.1 • Интерпретаторът mint работи на следните платформи: • Linux/86, Linux/PPC, S390, StrongARM, SPARC, HPPA, SPARC v9
Виртуалната машинана Mono • --optimize – активираоптимизациите • --aot • Ahead-of-time – предварително компилиране (като ngen в MS .NET) • Цялата програма минава през JIT и тогава се стартира • Има спор кое е по-бързо: managed или native код • Има GAC кеш, Remoting и планове за поддръжка на COM и XPCOM
Графични интерфейси (GUI) • Desktop приложенията не могат без тях • Windows Forms не се поддържа напълно • Поддържат се други интерфейси • Целта им е: • Всяко графично приложение да изглежда по съответният за всяка една ОС начин • Това го няма в Java AWT/Swing
Windows Formsпод Mono • В началото се работеше по модела: wine + System.Drawing (wine изпълнява Windows приложения под Linux) • В момента се работи по native имплементация без wine • 100% поддръжка на Windows Forms се очаква в края на 2005 • Има забавяне в разработката поради преминаването към втория модел • Трябва да се инсталират: libgdiplus и графичната библиотека Cairo
GTK# • Под Linux има стандартна библиотека (API) за изграждане на графичен потребителски интерфейс – GTK • GTK може да се ползва от Mono • GTK# е C# обвивката на GTK • С GTK# можете да разработвате графични приложения, ползващи GTK • GTK има имплементация и за Windows (напр. GAIM за Windows)
GNOME# • GNOME# са класове за работа с GNOME API-то • По-удобни от GTK# • Не са портнати за Windows • Приложенията с графичен интерфейс, писани за Mono, са трудно преносими • Често се налага търсене на библиотеки • Трудно е за обикновения потребител • В бъдеще такива проблеми ще намаляват
COCOA# • Библиотека с класове за native look and fell под MacOS X
GLADE# • Библиотека за GUI за Mono • Разделя графичния интерфейс от презентационната логика • Графичният интерфейс се описва в отделен XML файл, а не в C# кода
GLADE – примерен XML файл <?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> <!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> <glade-interface> <widget class="GtkWindow" id="window1"> <property name="visible">True</property> <property name="title" translatable="yes">win2</property> <property name="type">GTK_WINDOW_TOPLEVEL</property> ... <child> <widget class="GtkButton" id="button1"> <property name="border_width">10</property> <property name="visible">True</property> <property name="label">button1</property> ... </widget> </child> </widget> </glade-interface>
GLADE • Примерът задава една форма, един бутон и параметрите им • Подобен начин за създаване на графични интерфейси се очаква и в Avalon на Microsoft в следващата версия на Windows – Longhorn • Позволява се динамично зареждане • Можем да променяме формите без прекомпилация и програмистки умения • Различни платформи/програмни езици могат да използват един и същ XML файл за генериране на графичен интерфейс
Glade Interface Designer • Ползва се стандартният подход: • Лента с контроли • Форма със свойствата на контролата • Дизайнерът автоматично генерира XML файл за създадената форма
Съответстващият C# код using System; using Gtk; using Glade; using GtkSharp; public class GladeTest { [Glade.Widget] Button button1; public GladeTest(string[] args) { Application.Init(); Glade.XML gxml = new Glade.XML( "file.glade", "window2", null); gxml.Autoconnect(this); button1.BorderWidth = 10; Application.Run(); }(примерът продължава)
Съответстващият C# код /* Connect the Signals defined in Glade */ public void OnWindowDeleteEvent(object o, DeleteEventArgs args) { Application.Quit(); args.RetVal = true; } public void OnButton1Clicked(System.Object obj, EventArgs e) { Console.WriteLine("Button 1 clicked"); } public static void Main(string[] args) { new GladeTest(args); } }
Документацията Monodoc • Monodoc e браузър задокументацията на Mono и включва: • Описание на езика C# • Mono handbook – наръчник на Mono разработчика • Документация за средите за разработка • GTK# и GNOME# • Самоучители • Прилича на браузърa на MSDN Library
Средата MonoDevelop • Сайт: www.monodevelop.com • Monodevelop e средата за разработка, която се пише от програмистите на Mono • Представлява порт на SharpDevelop (което е среда за разработка за .NET под Windows) • Настоящата версия е 0.5.1 • Включва следните възможности: • Вградена документация и дебъгер • Поддръжка на Java, NEMERALE (друг език за .NET) и HTML • Отваря Visual Studio .NET проекти • Все още има бъгове
Средата за разработка Eclipse • Eclipse e свободна среда за разработка (IDE) • Разработен е основно от IBM, с отворен код • Писан е на Java • Ползва се главно от Java разработчици • Eclipse може да използва plugins • Един plugin добавя някаква функционалност: • поддръжка на даден програмен език • поддържане на шаблони за проекти • code autocomplete • много други • Eclipse има plugin за C# (малко стар)
ADO.NET под Mono • Mono поддържа следните ADO.NET Data Providers: • DB – MySQL • DB – IBM DB2 • DB – Firebird / Interbase • DB – MS SQL Server • DB – ODBC • DB – OLE DB • DB – Oracle • DB – Sybase • DB – SQL Lite • DB – PostgreSQL
Mono и ADO.NET – пример • Използваме MySql Data Provider "ByteFX" • Този provider го има и под Windows (http://www.bytefx.com/) • Създаваме таблица с PHPMyAdmin на сървъра debian.fmi.uni-sofia.bg: • Създаваме просто приложение за достъп до таблицата • C# кода е показан на следващия слайд (DatabaseDemo.cs) CREATE TABLE employee( firstname varchar(32), lastname varchar(32));
Mono и ADO.NET – пример using System; using System.Data; using ByteFX.Data.MySqlClient; public class DatabaseDemo { const string CONNECTION_STRING = "Server=debian.fmi.uni-sofia.bg;" + "User ID=toncho;" + "Password=T0n40;" + "Database=toncho;"; public static void Main(string[] args) { IDbConnection dbCon = new MySqlConnection(CONNECTION_STRING); dbCon.Open(); using (dbCon) {(примерът продължава)
Mono и ADO.NET – пример IDbCommand dbCmd = dbCon.CreateCommand(); dbCmd.CommandText = "SELECT * FROM employee"; IDataReader reader = dbCmd.ExecuteReader(); using (reader) { while(reader.Read()) { string firstName = (string) reader["firstname"]; string lastName = (string) reader["lastname"]; Console.WriteLine("Name: {0} {1}", firstName, lastName); } } } } }
Java под .NET CLR • Сайт на проекта: www.ikvm.net • Има 2 основни цели: • Java класове да могат да се изпълняват под виртуалната машина на Mono • Java класове/програми да бъдат транслирани от Java byte код до .NET IL • Огромната база от код написан на Java ще може да бъде преизползван под .NET • Пример: • Eclipse (Java програма) работи под Mono • ОС е Windows • Mono работи под cygwin
ASP.NET под Mono • Има два начина за поддръжка на ASP.NET • mod_mono – модул към Apache • Apache използва модулна архитектура и има модули за Perl и PHP например • http://www.gotmono.net/documentation/mod-mono-howto.html • XSP – Web сървър писан на C# • Обслужва ASP.NET заявките • Няма нужда от Apache • Производителността на XSP вече е добра • Поддържат се доста ASP.NET контроли, но още има какво да се довършва • Прегледайте документация и форуми
Модулът mod_mono • След като се инсталира mod_nono в httpd.conf се правят следните промени: • Рестартира се Apache и за тест се ползва следната страница: http://your-server/demo/index.aspx • LoadModule mono_module modules/mod_mono.so • ... • Alias /demo "/usr/share/doc/xsp/test" MonoApplications "/demo:/usr/share/doc/xsp/test" • ... • <Directory /usr/share/doc/xsp/test> • SetHandler mono • <IfModule mod_dir.c> DirectoryIndex index.aspx </IfModule> • </Directory>
Допълнителни класове в Mono • Cairo • Графична библиотека • Commons.Xml • Commons.Xml.Relaxng • Commons.Xml.Relaxng.Rnc • Mono.Math • BigInteger • Mono.Math.Prime • Прости числа • Mono.Math.Prime.Generator • Генериране на прости числа
Допълнителни класове в Mono • Mono.Posix • Системни извиквания • Mono.Security • Mono.Security.Authenticode • Mono.Security.Cryptography • MD4 managed, MD5 unmanaged, RSA managed, SHA1 unmanaged • Mono.Security.Protocol.Ntlm • Mono.Security.Protocol.Tls • Работа със SSL (Secure Socket Layer)