Programowanie w środowisku sieciowym

21
Programowanie w środowisku sieciowym W. Bartkiewicz 1. Wprowadzenie do platformy .NET

description

Uniwersytet Łódzki Katedra Informatyki. W. Bartkiewicz. Programowanie w środowisku sieciowym. 1. Wprowadzenie do platformy .NET. Katedra Informatyki. Literatura podstawowa. Orłowski S., C# Tworzenie aplikacji sieciowych, Helion, 2007. Katedra Informatyki. Literatura dodatkowa. - PowerPoint PPT Presentation

Transcript of Programowanie w środowisku sieciowym

Page 1: Programowanie w środowisku sieciowym

Programowanie w środowisku sieciowym

W. Bartkiewicz

1. Wprowadzenie do platformy .NET

Page 2: Programowanie w środowisku sieciowym

Literatura podstawowa

• Orłowski S., C# Tworzenie aplikacji sieciowych, Helion, 2007.

Page 3: Programowanie w środowisku sieciowym

Literatura dodatkowa

• Perry S.C., Core C# i .NET, Helion, 2006.

Page 4: Programowanie w środowisku sieciowym

Literatura dodatkowa

• Perry S.C., Core C# i .NET, Helion, 2006.

• Troelsen A., Język C# i platforma .NET, Mikom, 2006.

Page 5: Programowanie w środowisku sieciowym

Cele platformy .NET

• Platformę .NET zaprojektowano jako zintegrowane środowisko, które w założeniu ma umożliwiać wytwarzanie i uruchamianie aplikacji internetowych, bazujących na Windows Forms, a nawet aplikacji dla urządzeń mobilnych.

• Cele platformy:– Zapewnienie logicznie spójnego obiektowego środowiska dla rozmaitych

aplikacji.

– Zapewnienie środowiska, które pozwoli zminimalizować konflikty wersji heterogenicznych składników aplikacji, i tym samym uprościć proces dystrybucji i instalacji kodu.

– Zapewnienie środowiska, które będzie bazowało na certyfikowanych standardach i które będzie dawało możliwość zarządzania przez dowolny system operacyjny.

– Zapewnienie środowiska zarządzanego, w którym weryfikacja kodu pod względem bezpieczeństwa wykonywania będzie możliwie prosta.

Page 6: Programowanie w środowisku sieciowym

Infrastruktura wspólnego języka (CLI) • U podstaw tworzonej platformy legła specyfikacja standardu

infrastruktury wspólnego języka (Common Language Infrastructure – CLI).

• Prezentowane wyżej postulaty dla platformy aplikacyjnej są w zasadzie niemożliwe do realizacji w przypadku środowiska działającego na poziomie natywnego kodu wynikowego. Dlatego CLI definiuje niezależne od platformy systemowej środowisko wykonywania kodu wirtualnego.

• Specyfikacja obejmuje przede wszystkim:– Definicja wspólnego języka pośredniego (Common Intermediate Language

– CIL), który musi być generowany przez kompilatory zgodne ze standardem CLI.

– System typów, który definiuje typy danych obsługiwane przez wszystkie zgodne języki programowania (Common Type System – CTS).

Page 7: Programowanie w środowisku sieciowym

Platforma .NET

System operacyjny

Wspólne środowisko uruchomieniowe (CLR)CTS, kompilator JIT, zarządzanie pamięcią

BIBLIOTEKA KLAS PLATFORMY (FCL)

Klasy bazoweSystem.IO, System.Drawing, System.Threading

Klasy danychADO.NET, XML, SQL

Windows FormsAplikacje internetowe

ASP.NET, Web Services

• Platforma .NET jest implementacją standardów CLI. Dzieli się ona na dwie podstawowe części:– Wspólne środowisko

uruchomieniowe (Com-mon Language Runtime – CLR).

– Biblioteka klas platformy (Framework Class Lib-rary – FCL).

Page 8: Programowanie w środowisku sieciowym

Wspólne środowisko uruchomieniowe (CLR)

• Wspólne środowisko uruchomieniowe (CLR) zarządza całym cyklem życia aplikacji, a także zapewnia automatyczne zarządzanie pamięcią.

• Środowisko CLR obsługuje także całą integrację języków programowania, odpowiadając za bezproblemową współpracę kodu napisanego w różnych językach i skompilowanego za pomocą różnych kompilatorów.

• Kompilatory spełniające wymagania CLI generują kod pośredni interpretowany przez środowisko CLR, a nie kod dla konkretnego procesora. Kod ten nazywany jest wspólnym językiem pośrednim (CIL), językiem pośrednim (IL), lub językiem pośrednim Microsoft (MSIL).

• W praktyce kod pośredni jest umieszczany w plikach EXE lub DLL, ale nie są to standardowe pliki wykonalne.

• Wymagają one użycia kompilatora na bieżąco (Just-In-Time – JIT), który w czasie wykonywania aplikacji dokona interpretacji języka pośredniego na odpowiedni kod maszynowy.

Page 9: Programowanie w środowisku sieciowym

Wspólne środowisko uruchomieniowe (CLR)

• Za zarządzanie językiem pośrednim odpowiada środowisko CLR. Dlatego kod ten nazywamy kodem zarządzanym (managed code).

• Kod pośredni jest kluczem do spełnienia wymogów formalnych stawianych platformie .NET:– Ponieważ elementy aplikacji integrowane są za pomocą niezależnego od

języka źródłowego, ale jednolitego dla wszystkich języków źródłowych, kodu pośredniego, integrowane mogą być elementy wygenerowane za pośrednictwem różnych kompilatorów.

– Ponieważ proces tworzenia kodu maszynowego przeniesiony został na poziom kompilatora JIT wbudowanego w środowisko, więc ten sam kod pośredni wykonywany może być na różnych platformach systemowych, zawierających własne środowiska CLR.

Page 10: Programowanie w środowisku sieciowym

Platforma .NET

Pascal VB.NET C# J# C++.NET Perl

Język pośredni+ metadane

Biblioteki klas podstawowych

Wspólne środowisko uruchomieniowe Programwczytujący klasy

Kompilator JIT

Kod natywny

Obsługa wykonywaniaBezpieczeństwoZarządzanie pamięcią

Procesor

Page 11: Programowanie w środowisku sieciowym

Metadane • Poza generowaniem kodu pośredniego, kompilatory CLI generują w

każdym module kodu odpowiednie metadane, zbiór tabel zapewniający modułom własność samoopisywania.

• Metadane obejmują informacje o pakiecie (zestawie) kodu (assembly), do którego dany kod należy oraz kompletny opis samego kodu, a przede wszystkim opisy typów i ich składowych.

• Metadane wykorzystywane są przede wszystkim przez kompilator JIT, pobierający informacje niezbędne do weryfikacji kodu oraz badania zgodności typów.

• Metadane wykorzystywane są również przez podstawowy składnik CLR w dziedzinie zarządzania pamięcią, odśmiecacz pamięci (garbage collector). Używa on metadanych do określenia, kiedy pola w ramach danego obiektu odwołują się do innych obiektów.

• Platforma .NET zawiera zbiór klas, wykorzystujących metadane do odpytywania obiektów o ich strukturę. Tego rodzaju funkcjonalność nazywamy refleksją (reflection).

Page 12: Programowanie w środowisku sieciowym

Wspólny system typów (CTS)• Dla integracji na płaszczyźnie języka pośredniego, elementów aplikacji

stworzonych z wykorzystaniem różnych języków źródłowych, niezbędne jest, aby języki te obsługiwały wspólny zestaw typów danych i specyfikacje języków.

• Wspólny system typów (Common Type System – CTS) definiuje bazowy zbiór typów danych dla każdego języka zgodnego ze specyfikacją CLI.

• System CTS definiuje nie tylko same typy, ale także ich zachowania gwarantujące pełną zgodność ze środowiskiem CLR.

• Określa on również sposób deklarowania i tworzenia typów niestandardowych oraz mechanizm zarządzania cyklem życia instancji tych typów.

Page 13: Programowanie w środowisku sieciowym

Wspólny system typów (CTS)

Object

Typy referencyjne(sterta)

Klasa

Interfejs

Tablica

Typy wartościowe(stos)

Typy proste

Struktury

Typywyliczeniowe

Page 14: Programowanie w środowisku sieciowym

Specyfikacja wspólnego języka (CLS)

• Kompilator zgodny ze specyfikacją wspólnego systemu typów (CTS) gwarantuje jedynie, że jego typy będą prawidłowo obsługiwane przez środowisko uruchomieniowe CLR. Sama zgodność typów nie oznacza jeszcze, że dany język może być integrowany z innymi językami.

• Taka możliwość wymaga zgodności z bardziej restrykcyjnym zbiorem specyfikacji wspólnego języka (Common Language Specification – CLS), które definiują podstawowe reguły współpracy języków programowania.

• Wspomniane specyfikacje stanowią minimalny zestaw wymagań, które muszą być spełnione przez każdy kompilator zapewniający pełną zgodność ze środowiskiem CLR.

Page 15: Programowanie w środowisku sieciowym

Moduły kodu .NET

• Kompilatory umieszczają cały kod wykonywany na platformie .NET w specjalnych modułach kodu, nazywanych pakietami lub zestawami (assemblies).

• Każdy taki zestaw logicznie postrzegany jest jako pojedynczy plik EXE lub DLL. Fizycznie moduły te mogą składać się z kolekcji plików, zawierających sam kod oraz niezbędne zasoby.

Moduł kodu .NET

Manifest

Metadane

Kod pośredni

Zasoby

Page 16: Programowanie w środowisku sieciowym

Elementy modułu kodu .NET • Manifest. Każdy moduł kodu .NET musi zawierać jeden plik,

zawierający tzw. manifest. – Manifest jest zbiorem tabel metadanych, zawierającym listy nazw

wszystkich plików w danym zestawie (pakiecie), odniesienia do modułów zewnętrznych, oraz informacje identyfikacyjne dla danego modułu (np. nazwa, numer wersji, w niektórych przypadkach również niezbędne sygnatury cyfrowe).

– Ładując moduł, środowisko CLR otwiera manifest w pierwszej kolejności, aby mieć możliwość identyfikacji pozostałych elementów zestawu.

• Metadane. Oprócz tabel manifestu, kompilator .NET generuje jeszcze tabele definicji oraz referencji.– Tabele definicji zawierają kompletny opis typów stosowanych w kodzie

pośrednim modułu. Przykładowo kompilator C# generuje tabele definiujące typy, metody, pola, parametry i właściwości.

– Tabele referencji zawierają informacje o wszystkich odniesieniach do typów i pozostałych modułów.

Page 17: Programowanie w środowisku sieciowym

Właściwości modułów • Do uruchomienia aplikacji wymagane są tylko te moduły (zestawy,

pakiety), bez których nie można przeprowadzić inicjalizacji. Pozostałe są ładowane na żądanie (według potrzeb).

• Moduł kodu .NET wyznacza tzw. granicę wersji. Pole wersji w manifeście stosowane jest do wszystkich elementów zestawu, włącznie z typami i zasobami.

• Zestaw .NET wyznacza również granicę bezpieczeństwa, od której zależą wszystkie uprawnienia dostępu. Niektóre elementy modułu dostępne są jedynie wewnątrz niego.

• Moduł .NET może mieć charakter prywatny w obrębie aplikacji. Zestawy (pakiety) prywatne mogą być umieszczane bez żadnej rejestracji w katalogach bazowych aplikacji. Mogą być również zarządzane z wykorzystaniem specjalnych plików konfiguracyjnych aplikacji.

• Moduł .NET może mieć również charakter współdzielony. Zestawy (pakiety) współdzielone rejestrowane są w środowisku .NET, w tzw. globalnej pamięci podręcznej zestawów (Global Assembly Cache – GAC).

Page 18: Programowanie w środowisku sieciowym

Biblioteka FCL

• Biblioteka klas platformy (Framework Class Library – FCL) jest zbiorem klas i innych typów (interfejsów, typów wyliczeniowych i struktur), które są dostępne dla zarządzanego kodu napisanego w dowolnym języku zgodnym ze specyfikacją środowiska uruchomieniowego CLR.

• Biblioteki te związane są więc ze środowiskiem .NET i są jednakowe dla wszystkich kompilatorów.

• Zasoby w ramach biblioteki FCL podzielone są na logiczne grupy nazywane przestrzeniami nazw (namespaces).

• Do najważniejszych przestrzeni nazw w bibliotece FCL należą:– System – Elementarne typy danych, działania matematyczne, czyszczenie

pamięci, wiele powszechnie stosowanych wyjątków oraz atrybutów predefiniowanych.

– System.Collections – Klasy kontenerowe (np. ArrayList, Queue, SortedList), jak również typy podstawowe oraz interfejsy umożliwiające tworzenie kontenerów niestandardowych.

Page 19: Programowanie w środowisku sieciowym

Biblioteka FCL

– System.Data, System.Data.Common, System.Data.OleDb, System.Data.SqlClient – Operacje na bazach danych.

– System.Diagnostics – Debugowanie i śledzenie wykonania kodu źródłowego.

– System.Drawing, System.Drawing.Drawing2D, System.Drawing.Printing – Typy opakowujące GDI, obsługa drukarki, zaawansowane klasy obsługi grafiki.

– System.IO – Obsługa operacji wejścia/wyjścia.

– System.NET – Programowanie sieciowe.

– System.Reflection, System.Reflection.Emit – Odpytywanie informacji o typach podczas działania programu, dynamiczne tworzenie i wywoływanie własnych typów użytkownika.

– System.Runtime.InteropServices – Współpraca z kodem niezarządzanym (np. biblioteki DLL w C, komponenty COM).

– System.Runtime.Remoting – Komponenty .NET Remoting.

Page 20: Programowanie w środowisku sieciowym

Biblioteka FCL – System.Security – System bezpieczeństwa wbudowany w środowisko .NET

(zarządzanie prawami dostępu, szyfrowanie, itp.).

– System.Threading – Wątki, współbieżność.

– System.Web – Aplikacje internetowe, m.in. ASP.NET, usługi sieciowe XML.

– System.Windows.Forms – Komponenty wspomagające tworzenie GUI.

– System.XML – Obsługa danych w formacie XML.

Page 21: Programowanie w środowisku sieciowym

Biblioteka FCL • Korzystanie z przestrzeni nazw w C#:

– Nazwy elementów innych przestrzeni nazw kwalifikowane są nazwą przestrzeni nazw i kropką.

Np. odwołanie do klasy Bitmap z System.Drawing:

new System.Drawing.Bitmap(20, 20);– Włączenie przestrzeni nazw umożliwia dalsze odwołania do jej elementów

bez kwalifikacji nazwą namespace’a:

using System;...new Bitmap(20, 20);

– Włączenie przestrzeni nazw nie dotyczy jej podprzestrzeni.

using System;using System.Drawing;