Rozdział 2. Wprowadzenie do .NET

Adam Boduch

Cieszę się że czytasz dalej. W poprzednim rozdziale opisałem, na czym polega programowanie. Nadszedł czas, aby zgłębić tę wiedzę i dowiedzieć się czym jest programowanie dla platformy .NET. Nazwa wydaje się dość dziwna, niewątpliwie kojarzy się z internetem. I prawidłowo! Ta technologia ma sporo wspólnego z globalną siecią.

Internet odgrywa coraz większą rolę w naszym życiu. Nie służy już tylko do przeglądania statycznych stron WWW. Teraz internet to w przeważającym stopniu komunikatory oraz dynamiczne strony WWW, które umożliwiają większą interakcję użytkownika. Przykładowo, po otwarciu strony traktującej o gospodarce uzyskuje się na bieżąco wgląd w najnowsze notowania akcji, kursy walut czy ciekawostek. Po rejestracji w takim serwisie można otrzymywać codzienne informacje, kierowane wprost na wskazany telefon komórkowy czy skrzynkę e-mail. Strony WWW dostarczają teraz coraz bardziej interesującej rozrywki dzięki animacjom czy grom wykonanym za pomocą technologii Flash. Wiele serwisów umożliwia rejestrację, gdzie można ustalać swoje preferencje, takie jak wygląd strony czy korzystanie z rozmaitych opcji.

Obecnie nie istnieje jednak technologia pozwalająca na swobodne komunikowanie się serwisów internetowych ze sobą. Np. przeglądając oferty sklepu muzycznego chcielibyśmy zamówić bilet na koncert ulubionego zespołu. Takie zamówienia obsługuje jednak inna witryna. Oczywiście sklep muzyczny może oferować swoim klientom kupno biletu na koncert, podając np. odnośnik do strony, gdzie można zamówić bilet lub pośrednicząc w sprzedaży. Nie jest to jednak idealne i wygodne rozwiązanie. Czy nie lepiej byłoby, gdyby witryny mogły się ze sobą komunikować? Wyobraźmy sobie taki scenariusz: nasza strona — sklep muzyczny wysyła zapytanie do serwisu organizatora koncertu i sprawdza dostępność biletów na występ danego wykonawcy wraz z cenami oraz terminami. W takim przypadku wszystko odbywałoby się automatycznie — nie jest potrzebna jakakolwiek ingerencja człowieka, gdyż informacje są stale pobierane ze strony organizatora koncertu.

Takie między innymi scenariusze zakłada platforma .NET. Chodzi o integrację usług, sprzętu i innych urządzeń, takich jak palmtopy i telefony komórkowe. Microsoft chce, aby aplikacje można było uruchamiać w telefonach, aby aplikacje mogły pobrać aktualne dane z internetu (przykładowo, aktualne terminy koncertów). O tym jednak opowiem nieco dalej... najpierw przecież należy wyjaśnić, w jaki sposób odbywa się programowanie dla systemu Windows.

W tym rozdziale:
*opowiem, czym jest API,
*opiszę, czym jest .NET,
*przedstawię elementy .NET Framework,
*omówię typy aplikacji w Delphi,
*zaprezentuję pojęcie usługi sieciowej.

     1 Interfejs programistyczny
          1.1 API systemu Windows
     2 Wizja .NET
          2.2 Składniki platformy .NET
               2.2.1 Środowisko .NET Framework
               2.2.2 Narzędzia dla programistów
                    2.2.2.1 Tworzenie aplikacji C#
               2.2.3 Serwery .NET Enterprise
          2.3 Konkluzja
     3 Delphi a .NET
     4 Rodzaje aplikacji
          4.4 Aplikacje konsolowe
          4.5 Windows Forms
          4.6 VCL
          4.7 VCL.NET
          4.8 Windows Forms vs VCL.NET
               4.8.4 Wady i zalety VCL.NET
               4.8.5 Wady i zalety WinForms
          4.9 Formularze Web Forms
     5 Składniki .NET Framework
     6 Usługi sieciowe
          6.10 Niezależność
          6.11 Uniwersalność
     7 Test
     8 FAQ
     9 Podsumowanie

Interfejs programistyczny

Kolejnym pojęciem, które trzeba znać jest API, czyli Application Programming Interface (ang. programistyczny interfejs aplikacji). To pojęcie będzie często przewijać się w trakcie czytania tej książki.

Czy Czytelnik pamięta, że w poprzednim rozdziale wspominałem o bibliotekach DLL? Jeżeli nie — należy cofnąć się do poprzedniego rozdziału i zapoznać się z treścią sekcji FAQ. W poprzednim rozdziale wspominałem również o funkcjach oraz o poleceniach języków programowania, takich jak np. MkDir. Wyobraźmy sobie, że chcemy w naszym programie pobrać współrzędne wskaźnika myszy. W systemie Windows w tym celu możemy użyć funkcji GetCursorPos. Program, aby w danym momencie pobrać współrzędne wskaźnika myszy, zgłasza się z „prośbą” do systemu operacyjnego o udostępnienie tych informacji. W takim przypadku sprawa jest prosta — wystarczy jedno polecenie, aby otrzymać współrzędne wskaźnika myszy. Nie trzeba programować własnych funkcji i głowić się nad sposobem pobrania owych współrzędnych.

API jest zestawem funkcji, poleceń, które udostępnia aplikacja (w tym przypadku system Windows). Owe funkcje mogą być następnie wykorzystywane przez inne, pisane przez użytkownika, programy. Przykładowo, API systemu Windows jest zestawem mnóstwa poleceń, które zawarte są w bibliotekach DLL. Nasza aplikacja może wykorzystywać te funkcje, dzięki czemu programowanie staje się prostsze.

API systemu Windows

Aby ułatwić nam pisanie programów dla systemu Windows, programiści Microsoftu udostępniają biblioteki DLL (z których najważniejszymi są: user32.dll, kernel32.dll, gdi32.dll). Biblioteki DLL z kolei zawierają funkcje, które możemy wykorzystywać. Oczywiście trzeba też wiedzieć, jakie nazwy noszą owe funkcje oraz w jaki sposób można z nich skorzystać. Informacje te umieszczono w dokumentacji, udostępnionej na witrynie firmy Microsoft (http://msdn.microsoft.com).

API systemu Windows nosi nazwę WinAPI (Windows Application Programming Interface). Na początku, w systemach Windows 3.1. był to interfejs Win16 (systemy Windows 3.1. były 16-bitowe), a później — Win32 dla systemów Windows 95/98/NT/XP/2000. Interfejs Win32 jest wykorzystywany do dzisiaj przez wielu programistów i aplikacji.

Podsumowując:

*Windows API (WinAPI) — programistyczny interfejs (ang. application programming interface), używany w systemie operacyjnym Microsoft Windows. Innymi słowy, jest to specyfikacja procedur i funkcji służących do komunikowania się programów z systemem operacyjnym.
*Win16 — 16-bitowa wersja WinAPI.
*Win32 — 32-bitowa wersja WinAPI, używana w systemach Windows po dzień dzisiejszy. Jest to zbiór funkcji napisanych w języku C, które są umiejscowione w bibliotekach DLL — np. kernel32.dll, user32.dll itd.

Wizja .NET

W lipcu 2000 roku Microsoft zwołał konferencję programistów, na której zademonstrowano .NET. W zamierzeniu .NET jest platformą nowej generacji, przeznaczoną do tworzenia aplikacji Windows. Bill Gates w swoim przemówieniu porównał powstanie platformy .NET do przejścia z systemu DOS do Windows 3.1., a później — z przejściem do Windows 95. W rzeczywistości .NET nie jest nowym systemem operacyjnym ani językiem programowania. W rzeczywistości .NET jest podstawą, pewna ideą, sposobem budowania aplikacji dla systemu Windows. Platforma .NET to po prostu nowe podejście do tworzenia oprogramowania.

Jednym z założeń platformy .NET jest porzucenie dotychczasowego modelu Win32 i zastąpienie go całkowicie nowym, prostszym oraz bardziej zaawansowanym.

W poprzednim rozdziale opisałem proces instalowania platformy .NET. W rzeczywistości podczas tej operacji instalator kopiuje na twardy dysk komputera szereg bibliotek DLL, aplikacji dla programistów oraz dokumentację. Dzięki temu można korzystać z nowych narzędzi oferowanych przez Microsoft. Windows 2003 standardowo jest wyposażony w platformę .NET, więc nie ma konieczności ponownej instalacji.

Zgodnie z definicją firmy Microsoft:

.NET jest stworzonym przez firmę Microsoft rozwiązaniem dla usług sieciowych, stanowi nową generację oprogramowania łączącego się z naszym światem informacji, urządzeniami i użytkownikami w jednolity, spersonalizowany sposób.

Taka definicja zapewne wydaje się trochę niejasna, dlatego w tym rozdziale postaram się objaśnić kilka kwestii związanych z platformą .NET. Istotnymi założeniami, które zdecydowały o powstaniu platformy .NET, były:

*prostsze tworzenie oprogramowania,
*możliwość komunikowania się aplikacji,
*uproszczone wdrażanie aplikacji.

Składniki platformy .NET

Platforma .NET składa się z kilku składników:

*środowisko .NET Framework,
*narzędzia dla programistów,
*serwery .NET Enterprise.

Środowisko .NET Framework

Jeżeli Delphi działa na danym komputerze, to znaczy, że zainstalowano również pakiet .NET Framework (albo komputer pracuje pod kontrolą Windows 2003, gdzie .NET Framework jest zainstalowany domyślnie). Środowisko .NET Framework jest podstawowym składnikiem platformy .NET. W uproszczeniu są to biblioteki, technologie wspierające działanie programu, odpowiedzialne za zarządzanie pamięcią aplikacji itp.

Należy w tym miejscu zaznaczyć, że programowanie dla platformy .NET różni się od standardowego modelu programowania dla Win32. Środowisko .NET Framework zawiera nowe biblioteki, funkcje, które znacząco różnią się od tych udostępnianych przez Win32. Można powiedzieć, że programowanie dla .NET jest prostsze od programowania dla Win32, gdyż platforma .NET odciąża programistę od zadań, które wcześniej spoczywały na jego głowie (np. zwalnianie pamięci itp.), lecz o tym będziemy mówili w dalszej części książki.

Platforma .NET przyciąga coraz większą liczbę programistów, którzy chcą spróbować swoich sił i modyfikują swoje programy, aby działały pod kontrolą środowiska .NET Framework. Zdobywanie popularności przez środowisko jest jednak procesem długofalowym. Minie jeszcze sporo czasu, zanim większość porzuci standardowy model programowania pod Win32.

Narzędzia dla programistów

Wraz z dostarczeniem technologii, jaką jest platforma .NET, firma Microsoft musiała udostępnić programistom także narzędzia, za pomocą których mogli oni „produkować” swoje aplikacje. W związku z tym powstał pakiet dla programistów o nazwie Visual Studio.NET. Dotychczas językiem programowania popieranym przez Microsoft był Visual Basic, przez wielu uważany za prosty i mało profesjonalny. Język ten został wzbogacony o nowe funkcje i możliwość obsługi platformy .NET (teraz Microsoft promuje go pod nazwą Visual Basic.NET).

Możliwości języka Visual Basic zostały rozszerzone z myślą o programistach, którzy już od dawna używali tego narzędzia. Nie można było o nich zapomnieć, lecz dać im ten sam produkt (poszerzony o nową funkcjonalność), który pozwalałby na tworzenie programów dla platformy .NET. Językiem programowania, który powstał specjalnie na potrzeby platformy .NET, jest C#. Jest to język zbudowany na bazie C++ oraz Javy (o czym wspominałem w poprzednim rozdziale). Wykorzystuje on i zapewnia obsługę wszystkich technologii oferowanych przez .NET Framework. Aplikacje pisane w tym języku nie będą działały na komputerze, na którym nie jest zainstalowany pakiet .NET Framework.

Podstawy języka C# są opisane w dodatku A niniejszej książki.

Narzędzia dla programistów to nie tylko języki programowania. To również nowa baza danych — MS SQL Server oraz technologia bazodanowa ADO.NET. Zarówno o ADO.NET, jak i o bazie SQL Server będziemy wspominali w II części niniejszej książki.

Jeżeli chodzi o technologie związane z internetem, do dyspozycji pozostaje technologia tworzenia dynamicznych stron WWW — ASP.NET. Jest to technologia powstała na bazie ASP (ang. Active Server Pages). Strony ASP.NET mogą być pisane przy użyciu C#, Visual Basic.NET oraz jakiegokolwiek języka obsługującego platformę .NET.

Tworzenie aplikacji C#

Aby zweryfikować moje słowa, proponuję Czytelnikowi wykonanie prostego ćwiczenia, polegającego na wykorzystaniu narzędzia, dostarczonego wraz ze środowiskiem .NET Framework SDK. Pakiet Visual Studio.NET jest produktem komercyjnym i płatnym, jednak na naszym komputerze został zainstalowany kompilator języka C#, który uruchamia się z poziomu wiersza poleceń trybu DOS.

Domyślnie ów kompilator znajduje się w katalogu C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322 i nosi nazwę csc.exe. Należy otworzyć ten folder i utworzyć w nim plik tekstowy, a następnie zmienić jego nazwę na welcome.cs. Plik ten już za chwile będzie zawierał kod źródłowy programu napisanego w języku C#. Aby jednak tak się stało, trzeba otworzyć ten plik w dowolnym edytorze tekstu, a następnie wpisać do niego poniższy kod:

using System;

class Welcome
{
    static void Main()
    {
        Console.WriteLine("Cześć!");
        Console.ReadLine();
    }
}

W tej chwili nie ma potrzeby zastanawiania się, co oznaczają owe dziwne polecenia i znaki. Niezbędne wyjaśnienia znajdują się w dodatku A.

#Z menu Start wybierz Programy => Akcesoria => Wiersz poleceń.
#Wpisz komendę cd C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322, która spowoduje otwarcie katalogu z kompilatorem.
#Następnie wpisz polecenie csc welcome.cs, które spowoduje skompilowanie programu.

Jeżeli wszystko poszło dobrze, czyli kod źródłowy nie zawiera błędów, na ekranie konsoli powinien pojawić się tekst:

Microsoft (R) Visual C# .NET Compiler version 7.10.3052.4
for Microsoft (R) .NET Framework version 1.1.4322
Copyright (C) Microsoft Corporation 2001-2002. All rights reserved.

Teraz można odszukać w katalogu C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322 aplikację welcome.exe i spróbować ją uruchomić. Moje gratulacje! Właśnie napisaliśmy pierwszy program działający w środowisku .NET Framework w języku C# (rysunek 2.1). Program można zamknąć naciskając klawisz Enter.

2.1.jpg
Rysunek 2.1. Pierwszy program napisany w C#

Opisując to ćwiczenie założyłem, że kompilator csc.exe znajduje się w katalogu C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322, jednak wcale tak nie musi być w przypadku wszystkich komputerów.

Oczywiście tematem tej książki nie jest język C#, lecz chciałem Czytelnikowi zaprezentować sposób, w jaki można napisać i skompilować aplikację działającą pod kontrolą środowiska .NET Framework. Nie chciałem jeszcze na tym etapie pokazywać korzystania z Delphi.

Serwery .NET Enterprise

Serwer .NET Enterprise jest oprogramowaniem, które może zostać użyte wraz z aplikacjami .NET. Dobrym przykładem jest baza SQL Server, która pozwala na wymianę informacji pomiędzy aplikacją a serwerem. Dane — np. informacje o klientach — mogą być zgromadzone na jednym komputerze (serwerze). Baza danych będzie obsługiwana przez serwer SQL Server. Klientem jest aplikacja, która łączy się z serwerem i pobiera aktualną listę klientów oraz umożliwia pobranie szczegółowych informacji na temat danego klienta.

Do innych serwerów .NET Enterprise zaliczamy m.in. oprogramowanie BizTalk Server czy Exchange. Nie będę jednak w tej książce szczegółowo opisywał serwerów Enterprise.

Konkluzja

Podsumujmy pokrótce, czym jest .NET:

*.NET jest nową strategią firmy Microsoft,
*.NET wytycza nowe standardy programowania,
*.NET bazuje na infrastrukturze związanej z internetem,
*.NET ma w założeniu działać na każdym systemie lub platformie [#]_,
*.NET to nie system operacyjny.

Delphi a .NET

Delphi 1 generował aplikacje mogące działać tylko i wyłączenie na platformie Win16 (czyli w systemach Windows 3.1.). Wersje 2. – 7. umożliwiały pisanie programów dla systemów Windows (Win32).

W roku 2004 firma Borland postanowiła przyłączyć się do inicjatywy Microsoftu. Wydała środowisko Delphi 8, które często jest określane mianem „rewolucyjnego” produktu. Po raz pierwszy w historii kompilator Delphi generował pliki wykonywalne, które mogły działać tylko pod kontrolą .NET Framework. Należy przy tym zaznaczyć, że z punktu widzenia użytkownika niewiele się zmieniło. Nadal można korzystać z komponentów, formularzy oraz tych samych opcji i funkcji, do których przyzwyczaili się programiści Delphi.

Delphi 2005 stanowi wspaniałe połączenie Delphi 7 (programowanie dla Win32) oraz Delphi 8 (programowanie dla .NET), dzięki czemu każdy będzie mógł zadecydować: czy chce pisać programy, które będą działać na każdym komputerze (Win32), czy też zdecyduje się na nową technologię — .NET. Do tego doszło wiele nowych opcji (o których będę wspominał w rozdziale 12.) oraz możliwość pisania programów w C#, co sprawia, że mamy do czynienia z potężnym środowiskiem do wytwarzania aplikacji.

Rodzaje aplikacji

Delphi 2005 umożliwia tworzenie wielu typów aplikacji. Przykładowo, w poprzednim rozdziale zaprezentowałem utworzenie wizualnej aplikacji typu Windows Forms. Przed przystąpieniem do właściwego projektowania oprogramowania należy zastanowić się, jaki wybór będzie najodpowiedniejszy w konkretnej sytuacji. Warto więc pokrótce zapoznać się z rodzajami aplikacji, jakie oferuje nam nowy pakiet Delphi.

Aplikacje konsolowe

Aplikacje konsolowe to programy uruchamiane w trybie DOS, w oknie konsoli. Tego rodzaju aplikacje nie posiadają interfejsu użytkownika i są przydatne, jeżeli chodzi o prosty program, który będzie używany przez wąską grupę ludzi, posiadających wiedzę potrzebną do uruchomienia i sterowania programem z linii poleceń.

Przykład aplikacji konsolowej został przedstawiony wcześniej w tym rozdziale, gdy zaprezentowałem możliwość skompilowania prostego programu napisanego w C#.

Windows Forms

W rozdziale 1. pokazałem, w jaki sposób utworzyć prosty program wizualny, utworzony na podstawie formularza i z wykorzystaniem komponentu. Po uruchomieniu takiego programu użytkownik widzi standardowe okno Windows wraz z etykietą pośrodku. Tego typu aplikacje będą działać jedynie w przypadku, gdy na komputerze jest zainstalowane środowisko .NET Framework.

Windows Forms (często nazywana w skrócie WinForms) jest biblioteką wizualną, umożliwiającą zaprojektowanie graficznego interfejsu użytkownika (GUI, czyli Graphical User Interface). WinForm jest częścią środowiska .NET Framework, tak więc takie komponenty jak Label (użyty w przykładzie z rozdziału 1.) mogą zostać użyte zarówno w Delphi, jak i w C# czy innym języku obsługiwanym przez platformę .NET (np. Visual Basic.NET).

Biblioteka Windows Forms jest nowa, tak samo jak platforma .NET, więc programiści nie przyzwyczaili się jeszcze do jej stosowania oraz nie nauczyli się metod programowania z użyciem WinForms. Dlatego wielu decyduje się na skorzystanie z VCL...

VCL

Wizualna biblioteka komponentów (ang. Visual Component Library), czyli w skrócie VCL, była częścią Delphi od samego początku. Dzięki bibliotece VCL istnieje możliwość szybkiego projektowania aplikacji z użyciem komponentów, czyli gotowych elementów programu (jak np. przyciski, listy rozwijane, etykiety tekstowe itp.). Programowanie z użyciem VCL jest prostsze niż standardowe kodowanie w WinAPI, bowiem VCL zapewnia wykonywanie pewnych czynności, które kiedyś zabierały programistom wiele czasu. Dlatego nie trzeba np. pisać kodu, który posłuży do wyświetlenia okna (formularza).

Idea wykorzystania komponentów w celu szybkiego projektowania aplikacji nie jest nowa. Już w 1992 roku Microsoft stworzył bibliotekę klas MFC (ang. Microsoft Fundation Classes) napisanych w języku C++. W zamierzeniu firmy biblioteka miała ułatwiać proces programowania w Windows. Mniej więcej w tym samym czasie firma Borland utworzyła bibliotekę OWL (ang. Object Windows Library) i dołączyła ją do kompilatora Turbo C. Do tej pory biblioteka MFC jest wykorzystywana w pakietach programistycznych Visual Studio, w celu szybszego, wizualnego projektowania aplikacji.

Delphi od samego początku miało korzystać z komponentów i posiadać bibliotekę klas. I tak wraz z pojawieniem się na rynku pierwszej wersji Delphi, firma Borland dołączyła do niego bibliotekę VCL. Od samego początku komponenty VCL zdobyły przychylność programistów, gdyż stanowiły prosty i szybki sposób tworzenia aplikacji. Zyskały dużą popularność m.in. dzięki poparciu programistów z całego świata, którzy pisali nowe komponenty dla Delphi i C++ Buildera (C++ Builder również wykorzystuje VCL).

C++ Builder to pakiet programistyczny (bardzo podobny do Delphi), który umożliwia wizualne projektowanie aplikacji, tyle, że z użyciem języka C++.

Biblioteka VCL została napisana w Delphi. Jej kody źródłowe są dołączane do komercyjnych wersji Delphi.

VCL.NET

VCL był obecny w Delphi przez wiele lat, stąd programiści przyzwyczaili i polubili taki sposób projektowania. Wizualna biblioteka udostępniała im setki komponentów, także w internecie można było znaleźć tysiące kolejnych, gotowych do użycia we własnym programie.

Gdy Borland postanowił przystosować Delphi do platformy .NET, nie chciano rezygnować z VCL na rzecz WinForms. Postanowiono więc przystosować kod źródłowy biblioteki VCL do platformy .NET i tak powstał VCL.NET. Różnice pomiędzy VCL a VCL.NET są niewielkie, można by rzecz — znikome. I o to właśnie chodziło: aby programiści nie odczuli zbyt dużej zmiany, bo zmiany bywają niebezpieczne, mogą zniechęcić wielu klientów. Firma Borland doskonale zdawała sobie z tego sprawę.

Tworząc programy z wykorzystaniem VCL.NET zapewnia się, że będą one działały pod kontrolą platformy .NET. Warto o tym pamiętać!

Windows Forms vs VCL.NET

Na pewno obecność VCL.NET bardzo pomoże programistom, którzy chcieliby dostosować swoje aplikacje, tak aby działały pod kontrolą platformy .NET. Wtedy w najlepszym przypadku nie będą konieczne żadne zmiany. Wystarczy skompilować swój projekt w Delphi 2005, aby kompilator wygenerował program zgodny z platformą .NET. Zagadnienie migracji z platformy Win32 na .NET (przystosowaniem aplikacji do działania na .NET) będzie szczegółowo omawiane w rozdziale 11.

VCL.NET jest także przydatne dla osób, które już wcześniej pracowały z Delphi i przywykły do tej — bądź co bądź — wygodnej biblioteki. Dzięki podobieństwu pomiędzy VCL a VCL.NET ludzie ci nie będą musieli zmieniać swoich przyzwyczajeń.

WinForms jest nową biblioteką tworzenia wizualnych kontrolek, uboższą niż VCL.NET (posiada mniejszy zestaw kontrolek). Wytycza ona jednak programistom nową drogę: w każdym języku obsługiwanym przez .NET użycie WinForms jest identyczne. Wadą tej biblioteki jest konieczność uczenia się jej struktury itp. Co prawda, niektóre sprawdzone rozwiązania z VCL.NET obecne są także w WinForms, lecz są to jednak dwie różne biblioteki.

W tej książce będę używał zamiennie sformułowań VCL, VCL.NET oraz WinForms, ale w takim przypadku będę pisał, z jakiej biblioteki pochodzi prezentowany kod.

Wady i zalety VCL.NET

Nie da się ukryć, że VCL oraz VCL.NET są do siebie bardzo podobne. Dzięki temu można przenieść istniejący kod, napisany w starszych wersjach Delphi, na nową platformę, dokonując w nim tylko minimalnych zmian i to nie w każdej sytuacji.

Kod VCL od zawsze był ogólnie dostępny — tak jest i teraz! Każdy może swobodnie przeglądać, w jaki sposób jest zbudowane całe środowisko VCL.NET.

Przez blisko dziesięć lat pracy nad VCL powstało wiele dodatkowych kontrolek gotowego kodu. Zapewne wśród Czytelników jest ktoś, kto wcześniej pisał w „starym” Delphi, zdobył w tym zakresie pewne doświadczenie i nabył wprawy w tworzeniu aplikacji. W internecie istnieje dodatkowo zbiór gotowych kontrolek dla Delphi i C++ Buildera (C++ Builder także wykorzystuje VCL), które wystarczy zainstalować w Delphi i korzystać tak jak ze zwykłych komponentów. Przykład: komponent umożliwiający wyświetlanie animacji w formacie *.gif. Normalnie napisanie kodu wyświetlającego ową animację jest dość trudnym zadaniem. Ktoś jednak utworzył odpowiedni komponent do ogólnego użytku. W tym momencie można zainstalować ową kontrolkę i korzystać jak ze zwykłego komponentu.

Niewątpliwą wadą zastosowania VCL.NET jest rozmiar kodu wynikowego (.exe) aplikacji. W Delphi 2005 prosty program zawierający jedynie formularz po skompilowaniu zajmuje ponad 1 MB.

Przypominam, że mówimy tutaj o VCL.NET, porównując możliwe rodzaje aplikacji dla platformy .NET. Biblioteka VCL, użyta dla systemu Win32, generuje mniejszy kod wynikowy (czyli kod binarny wykonywalnej aplikacji .exe).

Należy wspomnieć jeszcze o jednej sprawie. Otóż w przyszłości platforma .NET będzie działała także na innych urządzeniach niż dotychczasowy komputer PC. Środowisko .NET Framework będzie instalowane w telefonach komórkowych i palmtopach. Podstawowym założeniem platformy .NET jest niezależność platformy, tak więc aplikacje, które teraz działają w komputerze pod kontrolą systemu Windows, już niedługo będziemy mogli uruchomić w swojej komórce.

VCL oraz VCL.NET korzystają z bibliotek systemu Windows, co automatycznie ogranicza ich działanie jedynie dla wspomnianego systemu. Jeżeli więc tworzone programy mają działać w przyszłości na innych urządzeniach niż komputer PC, należałoby zastanowić się nad oparciem swojego programu na Windows Forms.

Wady i zalety WinForms

Projektowanie wizualne za pomocą Windows Forms wytycza nowe horyzonty — niedługo stanie się standardem. Aplikacja skompilowana w .NET z wykorzystaniem jedynie WinForms zajmuje o wiele mniej miejsca niż standardowa aplikacja w VCL.NET. Wszystko dzięki temu, iż odpowiednie pakiety zostały już wdrożone w środowisku .NET.

Do uruchomienia aplikacji wykorzystującej WinForms jest potrzebna platforma .NET Framework SDK, tak więc użytkownik nieposiadający tego pakietu nie uruchomi takiej aplikacji. Kolejną wadą WinForms jest znaczna różnica w projektowaniu w stosunku do VCL.NET. Co prawda, nadal posługujemy się językiem Delphi, jednak różnice są niezwykle widoczne — trzeba przywyknąć do nowego modelu programowania.

Nic jednak nie stoi na przeszkodzie, aby wykorzystywać w jednym projekcie zarówno bibliotekę WinForms, jak i VCL.NET — w niektórych przypadkach stanowi to najlepsze, kompromisowe rozwiązanie.

Na tym etapie należy zaznaczyć, że projektowanie aplikacji w Windows Forms i VCL.NET różni się w pewnych aspektach — odmienne są nie tylko nazwy komponentów i ich właściwości, ale również sposób ich działania. Projekty VCL.NET oraz WinForms różnią się także plikami projektu. Przykładowo, projekt VCL.NET posiada plik *.nfm, którego nie ma WinForms. O tym jednak będziemy szczegółowo mówić w rozdziale 4.

Formularze Web Forms

Delphi 2005 umożliwia tworzenie dynamicznych stron WWW z użyciem technologii ASP.NET. Tym zagadnieniem będziemy zajmować się w III części książki. Chciałbym jednak już teraz wspomnieć o czymś takim jak formularze Web Forms.

Tworzenie dynamicznych stron ASP.NET odbywa się w Delphi w sposób wizualny. Do dyspozycji pozostaje formularz (który odzwierciedla przyszłą stronę WWW) oraz zestaw kontrolek. Wykorzystanie owych komponentów opiera się na dynamicznym generowaniu kodu HTML dla strony. Projektowanie strony odbywa się wizualnie — programista umieszcza odpowiedni element na stronie (np. komponent — tabelę), a Delphi w tle generuje odpowiedni kod HTML, który w końcu będzie przetwarzany przez przeglądarkę.

Składniki .NET Framework

W tym miejscu można by się zatrzymać i zapytać: „Zaraz, zaraz... wcześniej była mowa o składnikach platformy .NET, a teraz o składnikach platformy .NET Framework?”. Trzeba więc wyjaśnić, że zagadnienia związane z .NET są bardzo rozległe i całościowe ich omówienie w tej książce jest po prostu niemożliwe. Chciałbym jednak poruszyć kilka najważniejszych kwestii związanych z tą platformą. Nie można przy tym pominąć najważniejszego, czyli środowiska .NET Framework.

Środowisko .NET Framework jest podstawową technologią budowania i uruchamiania aplikacji. Szczegółowo omówimy ją w rozdziale 5. Tutaj chciałbym wspomnieć jedynie o kilku jej składnikach:

*Class Libraries (CL) — biblioteka klas. O tym już wspominałem niejednokrotnie. Są to gotowe komponenty, funkcje i biblioteki, które można wykorzystać we własnym programie. Wizualna biblioteka WinForms jest także częścią CL, podobnie jak szereg innych funkcji, które stopniowo będę omawiał w tej książce.
*Common Language Runtime (CLR) — wspólne środowisko wykonywalne (albo wspólne środowisko uruchomieniowe). Technologia CLR odpowiada za uruchamianie aplikacji .NET oraz ich prawidłowe działanie, a także za zwalnianie pamięci czy inne skomplikowane czynności. Szerzej o CLR opowiem w rozdziale 5.
*Common Type System (CTS) — wspólny system typów. Dzięki tej technologii jest możliwa współpraca pomiędzy różnymi aplikacjami na platformie .NET. Póki co, nie trzeba zaprzątać sobie tym głowy. Wystarczy tylko wiedzieć, że coś takiego istnieje.

Usługi sieciowe

Usługi sieciowe są aplikacjami udostępnianymi poprzez interfejs WWW. Nie chodzi tutaj bynajmniej o strony WWW, gdyż aplikacje sieciowe mogą komunikować się ze sobą za pomocą mechanizmu zdalnego wywoływania procedur (ang. Remote Procedure Calls — RPC), przeważnie używając do tego protokołu HTTP.

Dobrym przykładem jest wypożyczalnia DVD. Szef takiej firmy może podpisać umowę z właścicielami sklepów z płytami DVD, którzy na swoich stronach będą oferowali płyty z wypożyczalni. Wówczas serwisy właścicieli sklepów mogą komunikować się z usługą sieciową, znajdującą się na serwerze przynależnym do wypożyczalni w celu pobrania aktualnej oferty, sprawdzenia, czy dany tytuł jest już wypożyczony i kiedy ma zostać zwrócony. Podobnie, oprogramowanie zainstalowane w placówce/placówkach wypożyczalni może komunikować się z serwerem, pobierając aktualne dane o klientach czy wypożyczonych tytułach. Wszystkie dane znajdują się na jednym serwerze i są udostępniane przez usługę sieciową. Wszelkie zmiany w tytułach bądź produktach będą przeprowadzane jedynie na centralnym serwerze — nie zachodzi wówczas potrzeba aktualizacji oprogramowania w placówkach.

Usługi sieciowe można także sprzedawać. Jeżeli ktoś napisze innowacyjną usługę, wykorzystującą niepowtarzalny, innowacyjny algorytm szyfrujący, może taką usługę udostępniać w internecie. Klienci natomiast mogą dostosować odpowiednio swoje oprogramowanie, tak aby umożliwić wykorzystanie tej nowej usługi. W takim przypadku wszelkie poprawki czy naprawa błędów będzie dotyczyła tylko tej jedynej usługi, a klienci nie muszą nawet o tym wiedzieć. Warunkiem jest jedynie zapewnienie dostępności takiej aplikacji przez internet.

Inny przykład: autorzy popularnej wyszukiwarki Google udostępnili programistom jej interfejs. Dzięki usługom sieciowym można wykorzystać mechanizmy Google do przeszukiwania zasobów internetu. Następnie wyniki takiego wyszukiwania można zaprezentować w swoim programie lub stronie internetowej. Przykład takiej aplikacji zaprezentuję w rozdziale 21.
Usługi sieciowe są uniwersalnym sposobem wymiany informacji pomiędzy aplikacjami czy stronami WWW. Teraz aplikacja nie musi składać się tylko z jednego modułu (pliku wykonywalnego .exe), ale może dzielić się na kilka mniejszych, które zostaną rozmieszczone na kilku serwerach. Centralna aplikacja, znajdująca się na komputerze klienta, może bezproblemowo łączyć się z serwerami i wymieniać dane oraz realizować zadania.

Niezależność

Bardzo ważnym aspektem usług sieciowych jest ich niezależność od platformy językowej. Ważne jest, aby usługa działała pod kontrolą .NET Framework, jednak nieistotne jest to, w jakim języku została napisana. Może to być więc C#, Visual Basic.NET czy Delphi. Natomiast aplikacja, która korzysta z danej usługi, również może być napisana w jakimkolwiek języku obsługiwanym przez .NET.

Uniwersalność

A zatem już wiadomo, że usługa napisana w C# może być wykorzystywana przez aplikację napisaną w Delphi. Jak to się więc dzieje, że pomiędzy usługą a aplikacją jej używającą zachodzi swobodna komunikacja? Dokładniej opowiem o tym w rozdziale 21., lecz już teraz chciałbym zasygnalizować kilka podstawowych pojęć związanych nie tylko z usługami, lecz ogólnie — z platformą .NET.

Komunikacja z usługami sieciowymi odbywa się poprzez sieć WWW, a konkretniej — przez wykorzystywany tutaj protokół HTTP. Aplikacja może wysłać do usługi sieciowej zapytanie w formacie XML, a następnie otrzymać odpowiedź — również w formacie XML. Kluczową rolę w procesie komunikowania się z usługami sieciowymi odgrywa właśnie język XML, opracowany przez konsorcjum W3C.

Konsorcjum W3C (World Wide Web Consorcium) jest organizacją wyznaczającą standardy technologii związanych z internetem (specyfikacje, wytyczne aplikacji itp.). Organizacja W3C jest odpowiedzialna m.in. za opracowanie standardu HTML, który obowiązuje do dzisiaj. Stanowi niewątpliwy autorytet w dziedzinie definiowania standardów sieciowych. Więcej informacji na temat konsorcjum znajduje się na stronie www.w3c.org.

Z usługami sieciowymi wiąże się kilka następnych pojęć:

*XMLeXtensible Markup Language. Jest to uniwersalny język znaczników, przeznaczony do publikowania danych. Jego uniwersalność, niezależność od platformy oraz coraz większa popularność czynią go idealnym formatem do przesyłania danych pomiędzy usługami sieciowymi.
*SOAPSimple Object Access Protocol. SOAP jest językiem opartym na XML, wykorzystywanym przez usługi sieciowe do wywoływania procedur. Protokół SOAP określa format przesyłanych danych, nazwy parametrów itp.
*WSDLWeb Service Description Language. WSDL jest również opartym na XML formatem opisu usługi sieciowej. WSDL służy do opisywania usługi, dostarcza użytkownikom informacje o przeznaczeniu danej usługi i sposobie jej wykorzystania.
*UDDIUniversal Description, Discovery and Integration. Jest to spis usług sieciowych udostępnianych publicznie.

Test

  1. Co nie jest składnikiem platformy .NET?
    a) Serwery Enterprise,
    b) WinAPI,
    c) .NET Framework.
  2. Delphi 2005 nie oferuje możliwości tworzenia aplikacji:
    a) VCL,
    b) VCL.NET,
    c) oferuje możliwość tworzenia aplikacji zarówno VCL, jak i VCL.NET.
  3. Technologia CLR oznacza:
    a) Wspólne środowisko uruchomieniowe,
    b) Wspólny język typów,
    c) Integrację między aplikacjami.
  4. Skrót CTS oznacza:
    a) Common Technology System,
    b) Class Technology System,
    c) Common Type System.
  5. Jaki protokół odpowiada za zdalne wywoływanie procedur usług sieciowych?
    a) XML,
    b) HTTP,
    c) SOAP.
  6. Usługi sieciowe to:
    a) Strony WWW udostępniające pewne dane,
    b) Aplikacje sieciowe,
    c) Dane zapisane w formacie XML.

FAQ

Jakie wymagania musi spełniać mój komputer, aby zapewniać usługi sieciowe?

Usługi sieciowe muszą znajdować się na komputerze-serwerze, którzy przede wszystkim jest wyposażony w środowisko .NET Framework. Obecnie oznacza to, iż na komputerze musi być również zainstalowany system Windows. Niestety, w Polsce niewiele firm hostingowych posiada serwery działające pod kontrolą systemu Windows. Przede wszystkim są to serwery działające pod kontrolą darmowego oprogramowania typu Open-Source (np. system Linux).

Czy używając Windows Forms będę mógł uruchomić swoje programy na innych urządzeniach — np. na palmtopach?

Tak, jednakże na palmtopie musi zostać zainstalowane środowisko .NET Compact Framework, czyli odpowiednik .NET Framework na palmtopy. Trzeba pamiętać, aby w swoich aplikacjach używać WinForms i nie korzystać z żadnych funkcji czy bibliotek charakterystycznych dla systemu Windows (o tym opowiem w rozdziale 11.). Nie należy więc korzystać z jakże wygodnej biblioteki VCL.NET, gdyż wykorzystuje ona funkcje systemu Windows.

Mam kody źródłowe działające pod kontrolą biblioteki VCL. Jak mogę skompilować swój program, aby działał pod kontrolą VCL.NET?

Oczywiście jest to możliwe. Migracja aplikacji z VCL do VCL.NET nie powinna sprawić trudności, aczkolwiek zależy to od stopnia złożoności programu. Szczegółowo o migracji z Win32 do .NET będę pisał w rozdziale 11.

Podsumowanie

Ufff... w tym rozdziale zaprezentowałem kolejną dawkę teoretycznej wiedzy z zakresu platformy .NET. Bardziej szczegółowo o platformie .NET opowiem w rozdziale 5., teraz jednak Czytelnik powinien zapamiętać pewne podstawowe pojęcia, takie jak CLR czy CLS. Trzeba również odróżniać model programowania dla Win32 od modelu .NET i wiedzieć, że Delphi 2005 oferuje możliwość tworzenia programów na obydwie platformy.

Nawet osoba, która zamierza tworzyć swoje aplikacje jedynie dla platformy Win32, powinna znać choćby podstawowe pojęcia związane z .NET. Należy bowiem wiedzieć, na czym polega jej działanie. Dogłębne poznanie tej technologii pozwoli programiście na odkrycie jej zalet i wartości. Być może już teraz warto zdecydować się na przystosowanie swoich aplikacji, tak aby działały pod kontrolą .NET Framework.

.. [#] Odniosę się w tym momencie do starego powiedzenia. Owszem, .NET ma działać na każdej platformie, ale pod warunkiem, że będzie to produkt firmy Microsoft. Powstaje jednak darmowy projekt (Open Source), którego założeniem jest stworzenie platformy zintegrowanej z .NET dla systemu Linux. Projekt nosi nazwę dotGNU, a jego strona internetowa to www.dotgnu.org.

[[Delphi/Vademecum|Spis treści]]

[[Delphi/Vademecum/Prawa autorskie|©]] Helion 2005. Autor: Adam Boduch. Zabrania się rozpowszechniania tego tekstu bez zgody autora.

0 komentarzy