Czym jest .NET

Adam Boduch

Firma Microsoft w roku 2000 przedstawiła nowy pomysł standaryzacji w tworzeniu oprogramowania na platformę Windows. Zamierzeniem firmy jest udostępnienie programistom bibliotek, narzędzi do tworzenia oprogramowania, które będzie charakteryzowało się pewnym standardem.

1 .NET Framework
2 Produkty dla deweloperów
     2.1 ASP.NET
3 Niezależność językowa
     3.2 Czym jest COM?
     3.3 Kontrolka w rozumieniu COM
     3.4 Odrobinę historii
     3.5 ActiveX
4 Język pośredni IL
5 Wspólny system typów
6 Wspólny język wykonywania
7 Biblioteka klas
8 Usługi sieciowe
9 HTTP
10 XML
11 SOAP
12 UDDI
13 WSDL
14 Konkluzja

Platforma .NET stawia największy nacisk na Internet jako źródło komunikacji między poszczególnymi komputerami czy ogólnie - urządzeniami (telefony komórkowe, laptopy). Należy zaznaczyć, że .NET nie jest żadnym systemem operacyjnym - jest to pewna idea, strategia.

.NET Framework

Podstawowym i najbardziej nas interesującym elementem .NET jest .NET Framework, który stanowi infrastrukturę tworzenia aplikacji. Realnie Microsoft .NET Framework to szereg niezbędnych bibliotek umożliwiających tworzenie aplikacji na platformę .NET. Zadaniem .NET Framework jest zarządzanie przeróżnymi elementami systemu, których obsługa do tej pory zajmowała programistom najwięcej czasu.

Należy w tym momencie zaznaczyć, że programowanie pod .NET różni się znacząco w stosunku do dotychczasowego programowania pod Windows. Microsoft .NET Framework udostępnia nowe klasy, biblioteki, których wykorzystanie także różni się tym od standardowego modelu w dotychczasowym Windows. Mówimy o tym z myślą o programistach Delphi, którzy mieli wcześniej styczność z tym językiem, ale teraz chcieliby spróbować swoich sił w .NET. Nowi użytkownicy, którzy dopiero od Delphi 8 zaczynają swoją przygodę z programowaniem, mają bardziej komfortową sytuację. Dla nich będzie to coś nowego i zarazem stanie się naturalne. Starzy użytkownicy muszą uczyć się nowych elementów języka, chociaż podstawowe zasady programowania w Delphi nadaj obowiązują.

Produkty dla deweloperów

Wraz z ujawnieniem idei .NET, Microsoft rozpoczął pracę nad narzędziami dla programistów, którzy chcieliby tworzyć swoje aplikacje w oparciu o .NET. Dzięki temu mamy stare języki programowania unowocześnione o nowe możliwości platformy .NET takie jak: <wiki href="Visual_Basic">Visual Basic.NET</wiki>, <wiki href="ASP">ASP.NET</wiki>, <wiki href="C_sharp">C#</wiki> oraz środowisko tworzenia aplikacji <wiki href="Visual_Studio">Visual Studio.NET</wiki>.

To jeszcze nie wszystko. Istnieje bowiem baza danych MS <wiki href="SQL">SQL.NET</wiki> oraz serwer Microsoftu IIS. Wszystko to umożliwia sprawne tworzenie aplikacji niezależnych. Oznacza to, że praktycznie nie istotne jest to, czy piszemy w C# czy w Visual Basic.NET. W obu tych językach (różniących się w końcu składnią) wykorzystujemy te same mechanizmy platformy .NET Framework osiągając w tym te same cele.

Firma Borland (producent Delphi) również postanowiła, iż będzie wspierać .NET i stworzyła nowe Delphi. Delphi 8 .NET przystosowane do nowej platformy.

ASP.NET

Szeroko promowaną i stosowaną w połączeniu z .NET technologią, jest technologia ASP (ang. Active Server Pages). Technologia ASP umożliwia tworzenie dynamicznych stron WWW (np. pisanie for dyskusyjnych, ksiąg gości, czy całych systemów portalowych) z wykorzystaniem jednego z języków wspieranych przez .NET - np. C#.

Niezależność językowa

Pierwowzorem tej idei jest COM (ang. Component Object Model), COM+, DCOM. COM zapewniał niezależność języka programowania, lecz .NET wprowadza integracje języka.

Czym jest COM?

Rozwinięciem angielskiego skrótu COM jest nazwa Component Object Model (obiektowy model komponentów). Jest to specyfikacja firmy Microsoft, która w założeniu dotyczy tworzenia obiektów wielokrotnego użytku, niezależnie od języka programowania.

Aby zrozumieć ActiveX, musisz poznać COM. Postaram się zwięźle Ci to wytłumaczyć. Otóż firma Microsoft stworzyła model obiektów, które wykorzystywane mogą być w każdym środowisku programistycznym Windows. Wynikiem powstania obiektu COM jest kontrolka - plik binarny z rozszerzeniem .ocx. Kontrolka taka może być wykorzystana zarówno w Delphi, jak i Visual C++, C++ Builder czy Visual Basic.

Na razie obiekty COM są jedynie obiektami działającymi w różnych środowiskach Windows i niemożliwe jest wykorzystanie ich poza tym systemem.

Kontrolka w rozumieniu COM

Na typ etapie będę używał słowa "kontrolka" w znaczeniu obiektu COM. Można powiedzieć, że obiekty COM są takim uniwersalnym komponentem, podobnym do biblioteki DLL. Raz utworzona kontrolka może być wykorzystywana wiele razy, przez wielu programistów oraz w różnych środowiskach programowania. Jeżeli ktoś już napisał kontrolkę spełniającą daną funkcję, to po co wyważać otwarte drzwi i tworzyć jeszcze raz to samo? Przykładem może być przeglądarka WWW. Napisanie programu analizującego kod HTML jest niezwykle czasochłonnym i żmudnym zadaniem. Niekiedy jednak w naszym programie konieczne staje się wyświetlenie jakiegoś dokumentu w formie strony WWW. Dzięki technologii COM i ActiveX (o ActiveX powiemy nieco później) możemy zaimportować udostępnione przez twórców przeglądarki obiekty COM i wykorzystać je w Delphi w bardzo prosty sposób.

Odrobinę historii

COM jest technologią stosunkowo nową, bo powstałą kilka lat temu. Wprowadzenie jej miało na celu stworzenie jednolitego standardu komunikacji, tak aby np. (by jeszcze raz posłużyć się powyższym przykładem) programiści mogli korzystać z możliwości przeglądania stron WWW w swoich aplikacjach. Firma Microsoft wyszła naprzeciw temu zadaniu i utworzyła moduł obiektów (COM), który umożliwia udostępnianie innym aplikacjom swoich metod.

ActiveX

ActiveX to technologia oparta na COM. Pozwala na tworzenie kontrolek .ocx lub .dll. Tak naprawdę ActiveX to obiekt COM, tyle że posiadający własny interfejs dostępny na poziomie projektowania. Wygląda to w ten sposób, że tworzony jest zwykły formularz VCL, będący w rzeczywistości kontrolką ActiveX. Można korzystać ze wszystkich komponentów i, ogólnie rzecz biorąc, projektowanie jest łatwiejsze niż w przypadku zwykłych obiektów COM.

Dodatkowo ActiveX pozwala na wygenerowanie kodu pozwalającego na umieszczenie aplikacji na stronie WWW.

Więcej na temat tworzenia kontrolek COM/ActiveX oraz wykorzystania ich w aplikacjach, znajdziesz w 13. rozdziale książki Delphi 7. Kompendium programisty, wyd. Helion 2003.

Platforma .NET jest następcą COM, która zakłada integralność pomiędzy programami. Do tej pory programiści mogli budować osobne kontrolki mogące zostać później wykorzystane w innych aplikacjach. Wiązało się to z rejestracją tej kontrolki, dodawaniem odpowiednich wpisów w rejestrze Windows. W .NET komunikacja pomiędzy programami będzie ułatwiona i dany program będzie mógł dziedziczyć z klasy z innej aplikacji, obsługiwać wyjątki innej aplikacji itp.

Język pośredni IL

Języka Java zyskał sporą popularność głównie dlatego, iż może zostać uruchomiony na różnych platformach. Wszystko dzięki maszynom wirtualnym. Microsoft zaczerpnął ten pomysł do platformy .NET. Microsoft Intermediate Language (MSIL), bo to o nim mowa, stanowi pewnego rodzaju kod pośredni pomiędzy kodem źródłowym, a kodem maszynowym (wykonywalnym). Platforma .NET zawiera instrukcję umożliwiające kompilowanie na kod maszynowy i uruchamianie programów, zarządzanie i zwalnianie pamięci. Dzięki temu MSIL pozwala na pełną integrację z różnymi językami programowania.

Możliwość wykonywania aplikacji .NET na procesorach innych niż Intel x86 daje perspektywy na tworzenie programów na inne urządzenia jak telefony komórkowe, czy palmtopy.
Kod IL przypomina nieco język Asemblera, fragment takiego kodu znajduje się poniżej:

.method family hidebysig virtual instance void 
        Dispose(bool Disposing) cil managed
{
  // Code size       30 (0x1e)
  .maxstack  2
  IL_0000:  ldarg.1
  IL_0001:  brfalse.s  IL_0016
  IL_0003:  ldarg.0
  IL_0004:  ldfld      class [System]System.ComponentModel.Container WinForm.TWinForm1::Components
  IL_0009:  brfalse.s  IL_0016
  IL_000b:  ldarg.0
  IL_000c:  ldfld      class [System]System.ComponentModel.Container WinForm.TWinForm1::Components
  IL_0011:  callvirt   instance void [System]System.ComponentModel.Container::Dispose()
  IL_0016:  ldarg.0
  IL_0017:  ldarg.1
  IL_0018:  call       instance void [System.Windows.Forms]System.Windows.Forms.Form::Dispose(bool)
  IL_001d:  ret
} // end of method TWinForm1::Dispose

Ciekawostką jest to, że oprócz kodu pośredniego, w pliku umieszczane są także informacje, tzw. metadane. Można powiedzieć, że metadane to opis kodu, lista parametrów funkcji, opis zmiennych oraz innych operacji. To wszystko umieszczane jest w jednym pliku PE (ang. Portable Executable) dając przy tym wrażenie zwykłej aplikacji wykonywalnej z rozszerzeniem *.exe.

Możliwe jest również jednorazowe skompilowanie danego programu od razu na kod maszynowy dzięki temu przy każdym uruchamianiem programu, oszczędzane są zasoby systemowe potrzebne na uruchomienie kompilatora JIT (ang. Just-In-Time).

Wspólny system typów

Microsoft wprowadził pewną nowość w tym zakresie nazwaną wspólnym systemem typów (ang. Common Type System). Polega ona na tym, że każdy język programowania wspierany przez platformę .NET będzie miał identyczne typy danych, programy będą mogły wzajemnie się ze sobą integrować i wymieniać dane.

Wspólny język wykonywania

Wspólny język wykonywania, czyli Common Language Runtime (w skrócie CLR), to podstawowy komponent .NET Framework. CLR jest odpowiedzialny za uruchamianie programów, zarządzanie kodem i pamięcią. Zajmuje się również bezpieczeństwem danych, obsługą błędów oraz konwersją języka IL do postaci maszynowej.

Biblioteka klas

Aby korzystać z .NET wymagane jest zainstalowanie odpowiedniego oprogramowania, które w przyszłości standardowo będzie zintegrowane z systemem Windows. Teraz jednak wymagane jest ściągnięcie pakietu Microsoft .NET Framework SDK (ang. Software Developer Kit). Ów pakiet możesz ściągnąć (oczywiście za darmo) ze strony Microsoftu.

.NET posiada również coś co nazywa się Windows Forms. Dla programisty Delphi będzie to jasne - są to zwykłe komponenty udostępnione przez .NET. W Delphi odpowiednikiem Windows Forms było VCL; w VC++ była biblioteka MFC. Teraz zarówno Visual Studio.NET oraz Delphi.NET korzystają z Windows Forms, który trochę różni się od starego VCL i - niektórzy mogą mieć kłopoty z przyzywczajeniem się do nowego modelu programowania.

Usługi sieciowe

Podstawową ideą platformy .NET jest komunikacja między komputerami i ogólnie - urządzeniami przenośnymi takimi jak telefony komórkowe, palmtopy, laptopy za pośrednictwem Internetu.

Usługi sieciowe (ang. Web Service) to interfejsy umożliwiające innym aplikacjom wykorzystanie i ogólnie - komunikowanie się między sobą. W niedalekiej przyszłości usługi sieciowe będą zapewne wbudowane w każde oprogramowanie Microsoft łącznie z Windows oraz Office. Dzięki usługom sieciowym będziemy mogli podzielić program na kilka modułów, które komunikować się mogą poprzez Internet.

HTTP

Chyba każdy słyszał o HTTP (ang. Hypertext Transfer Protocol). Jest to standard komunikowania się przez Internet. Przykładem może być sieć WWW. Użytkownik chcący zobaczyć stroną WWW, wpisuje jej adres, a przeglądarka korzystając z protokołu HTTP komunikuje się z serwerem, który przesyła nam zawartość danej strony WWW.

XML

Stosunkowo nowym standardem opracowanym przez World Wide Web Consortium (W3C) jest standard XML (ang. eXtensible Markup Language) służący do przechowywania danych.

Tak samo jak protokół HTTP jest niezależny od platformy systemowej i pozostałych czynników, tak samo XML może być wykorzystywany na każdym sprzęcie i każdym systemie. XML to w rzeczywistości język znaczników (podobny do HTML), który służy do przechowywania danych. Struktura takiego pliku musi być oczywiście określona, ale ta tematyka wykracza poza ramy tego artykułu.

Działanie XML jest często porównywane do bazy danych. XML również służy gromadzeniu danych lecz te dwa pojęcia nie są równoznaczne.

SOAP

SOAP (ang. Simple Object Access Protocol) jest kolejnym protokołem opracowanym przez W3 w celu komunikacji pomiędzy aplikacjami.

*SOAP to protokół komunikacji pomiędzy aplikacjami;
*SOAP został zaprojektowany w celu komunikacji przez Internet;
*SOAP jest niezależny od platformy systemowej;
*SOAP komunikuje się wysyłając komunikaty;
*SOAP jest oparty na XML;

Protokół HTTP nie został zaprojektowany w celu komunikacji między aplikacjami, a pomiędzy serwerem a przeglądarką. Aby zapełnić tę lukę zaprojektowano SOAP.

UDDI

UDDI (ang. Universal Description, Discovery and Integration) to po prostu katalog, usługa katalogowa. Użytkownicy mogą rejestrować się w owym katalogu i wyszukiwać potrzebnych informacji.

WSDL

WSDL to w rzeczywistości dokument zapisany w XML opisujący daną usługę sieciową. Na razie wiedz, że coś takiego istnieje, nie musisz zawracać sobie tym głowy.

Konkluzja

Idea .NET dopiero zaczyna się rozwijać więc nie od razu wszystkie aplikacje będą zgodne z tą platformą. Na to potrzeba czasu i Microsoft zdaje sobie z tego sprawę. Planowane jest wydanie systemu Windows.NET całkowicie zgodnego z .NET, ale data premiery nie jest jeszcze znana (pierwsze plany wskazują na rok 2006 lub 2007).

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;
*.NET bazuje na nowoczesnych standardach (XML, SOAP itp.);

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 (OpenSource), którego założeniem jest stworzenie platformy zintegrowanej z .NET. Projekt nosi nazwę dotGNU, a jego strona główna to: www.dotgnu.org.

19 komentarzy

Myślę, że nie da się tak łatwo z linuxa wysiedlić programistów. http://www.mono-project.com/, do poczytania :].

Wydaje mi sie, ze Microsoft dzieki technologii .NET chce sprzedać swój produkt jakim bedzie Windows.NET. Po prostu chca, aby programisci z linuxa sie na windowsa przeszli :)))

A mi .NET bardziej moj tok myslenie przypomnia, robie robie programik pozniej go zstawiam i dziala jak sie go prawidlowo uzywa.... caly microsoft :]

Zgadzam się zupełnie z aelbereth. Dodam, że uczenie się C# nie wyjdzie nikomu na dobre, bo ten język umrze. W dodatku Windowsy zawsze będą popularne i te nieszczęsne .NET ... Sam już zauważyłem, że za dużo wszyscy pomagają Microsoftowi, dlatego nie mam zamiaru wspierać .NET i C#. Pascal i C++ to najwolniejsze języki i ich trzeba się trzymać

BatSk8: Taaa, jasne. Zobaczysz, ze C# wraz z technologia stanie sie najpopularniejszym jezykiem programowania. Moge sie o to zalozyc.

Widzisz, swoja opinie opierasz tylko na tym, ze jest to wymslone przez Microsoft. I co? Wiesz czym jest ta platforma, programowales pod .NET?

Pisze bo w sumie żadnego dobrego i wiarygodnego porółnania J2EE vs .NET nie znalazłem. Może któaś z tych tech. wam bardziej przypadłą do gustu itp. (ja narazie jestem na początkach z java/jsp/midlety, .NET(C#) jeszce wogole nie ruszałem, wiec nie wiem jak to wygląda w praktyce). Z tego co czytałem każda z technologi ma swoje plusy, minusy i zastosowania. Ale ogólnie któraś będzie za pare lat raczej dominować... (na Windowsach będzie to na pewno .NET, ale pytanie czy windowsy będą popularne) Jakie jest wasze zdanie ?
O ile wogole nastawiacie sie na "programowanie" a nie np. "sprzedaż" lub "administrowanie"...

[quote]Wolverine co ma Delphi do platformy .NET?[/quote]

To, ze .NET wystepuje w Delphi 8.

Przez rok bylem na studiach w UK i mialem okazje chodzic na wyklady zwiazane z e-biznesem i z e-commerce prowadzone przez ludzi z IBM oraz BT. To umozliwilio mi obiektywnie spojrzec na dostepne technologie internetowe. Poza tym dziwi mnie ze nikt tutaj nie wspomina o najwiekszym przeciwniku .Net czyli technologii J2EE wpieranej przez takie firmy jak IBM,SUN,BEA Weblogic,Oracle i wiele innych. Ja jestem zwolennikiem tej drugiej (pracuje wykorzystujac ja juz od 4 lat) i majac wystarczajaco informacji na temat obydwu platform mam wiele obaw co do .Net. Po pierwsze nie zapominajmy ze jest to Microsoft - dlaczego Polska nie zdaje sobie z tego sprawy ze ladujac sie w platne oprogramowanie giganta z Redmont staniemy sie od niego uzaleznieni? Poza tym kolejny aspekt - C# - jest to po prostu przerobka Javy (bo jak wiadomo Microsoft sądował sie z SUN'em i przegral sprawe) dlatego zainwestowal w swoj wlasny jezyk ktory jest klonem javy z parom udogodnieniami (nowa java 1.5 wyrownuje roznice). Poza tym - pomyslmy - co daje nam mozliwosc pisania w wielu jezykach aplikacji - z jednej strony ciekawa rzezcz - ale z drugiej - czy ktos widzial aby Visual Basic byl przeznaczony do tworzenia zaawansowanych aplikacji e-biznesowych? A teraz wyobrazmy sobie ze w pracy otrzymujemy kawalek kodu napisany w 5 roznych jezykach - chyba troche niewesolo miec taki sphagetti-code do zdebugowania? Nastepny argument - .NET jest srodowiskiem ktore bardzo szybko mozna sie nauczyc, poniewaz wiekszosc operacji jest zautomatyzowana przez Visual Studio. Tego typu podejscie zupelnie wypacza sprawy zwiazane z zrozumieniem technologii - dlatego tez obawiam sie ze wiekszosc programistow .NET nawet nie bardzo wie w jaki sposob funkcjonuje cala architektura systemu i wykonuje mechanicznie rozne przycisniecia kontrolek aby cos stworzyc, co mija sie zupelnie z celem. Dlatego tez bardzo latwo i przejemnie jest stworzyc proste aplikacje ale zaawansowane systemy transakcyjne wykorzystujace synchorniczne oraz kolejkowe metody przesylu danych, lub zaawansowane web-services, hmm tutaj moze byc problem. Dlatego tez radzilbym spojrzec na J2EE, bo chociaz jest to o wiele trudniejsza technologia - pozwoli ona zrozumiec meritum sprawy oraz dac programiscie kontrole nad cala aplikacja. Poza tym istnieja wersje open-source jak JBoss, ktore z powodzeniem sa uzywane w przemysle i dzialaja na platformach linuksowych. Pytanie dlaczego ladowac sie w zmonopolizowane oprogramowanie, ktore nie bedzie tanie i niezawodne (Windows jako serwer aplikacji? Nie sadze!) skoro mozna to miec za darmo?

Wolverine co ma Delphi do platformy .NET? :)

A mi sie .NET wcale nie podoba. Juz w starszych wersjach delphi programowanie wyglada jak ukladanie klockow lego, to ciekawe co bedzie z .NET. Przynoszac nowy komputer do klienta obsluga sklepu nie bedzie mowic jak wlaczyc winampa, tylko jak samemu napisac baze danych :/ <- Celowo przesadzone ;)

Na platformie .NET programowałem z rok. Dla mnie to jedno z najlepszych środowisk programistycznych. Fajnie, szybko i przejrzyście się programuje. Ci od Microsoftu się już o to postarali :) Polecam .NET. Gdyby obserwować Zachód, to tam już dawno ta platforma jest szeroko rozpowszechniona, w Polsce dopiero wchodzi.

A czy są już jakieś znane programy napisane w oparciu o .NET?

XML nie jest nowym standardem, nawet stosunkowo nowym...

A co ze sposobami wykonywania programów zgodnych z .net? Wiele lat temu gdy to wszystko się zaczynało w jednym z artykułów napisano, że aplikacje będą transmitowały do internetu argumenty funkcji i czekały na zwrócenie wyniku. To poważna wada. Więc przestałem tym się interesować.
Nie tak dawno zwilennik M$ wspomiał o "drobnej" wadzie - zwolnieniu obliczeń. To nie jest dorbnostka. To poważne niedociągnięcie.
I ta komunikacja użądzeń przez internet ....
Ja wolałbym przesyłać dane bezpośrednio z palm- czy laptopa do komputera. Bez czułej opieki M$.
Chyba jednak pora pożegnać microsoft.

Fajnie dzięki wreszcie zaczynam kumać o co chodzi, wraz z Delphi 7 dostałem 6 płytek miedzy innymi Delphi studio for Microsoft . Net i to jest chyba właśnie to.
A tak z innej beczki, jak się płaci tyle kasy za program to można by się spodziewać że dostanę jakiś opis do zamieszconych programów, przecież nie wszyscy wszystko wiedzą.

pawwell: ja tez szczerze mówiąc na razie mam mieszane uczucia. No, ale zobaczymy co to będzie jak zacznie to działać na większą skalę (w praktyce).

W końcu wiem co to jest naprawdę... dzięki :)

Wszystko fajnie, nawet podoba mi się ten .net, ALE...
jak zwykle nad wszystkim Macrokasa będzie miała kontrolę. I nie sądzę aby dotGNU miał większe znaczenie.

Bardzo ciekawy artykuł, nareszcie się dowiedziałem co to jest .NET