Sieci neuronowe w prognozowaniu – podejmowanie decyzji i

Download Report

Transcript Sieci neuronowe w prognozowaniu – podejmowanie decyzji i

W. Bartkiewicz
Programowanie w środowisku
sieciowym
1. Wprowadzenie do platformy .NET
Literatura podstawowa
• Orłowski S., C# Tworzenie aplikacji sieciowych,
Helion, 2007.
Literatura dodatkowa
• Perry S.C., Core C# i .NET, Helion, 2006.
Literatura dodatkowa
• Perry S.C., Core C# i .NET, Helion, 2006.
• Troelsen A., Język C# i platforma .NET,
Mikom, 2006.
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.
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).
Platforma .NET
BIBLIOTEKA KLAS PLATFORMY (FCL)
Windows Forms
Aplikacje internetowe
ASP.NET, Web Services
Klasy danych
ADO.NET, XML, SQL
Klasy bazowe
System.IO, System.Drawing, System.Threading
Wspólne środowisko uruchomieniowe (CLR)
CTS, kompilator JIT, zarządzanie pamięcią
System operacyjny
• Platforma
.NET
jest
implementacją standardów
CLI. Dzieli się ona na
dwie podstawowe części:
– Wspólne
środowisko
uruchomieniowe (Common Language Runtime
– CLR).
– Biblioteka klas platformy
(Framework Class Library – FCL).
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.
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.
Platforma .NET
Pascal
VB.NET
C#
J#
C++.NET
Język pośredni
+ metadane
Wspólne środowisko uruchomieniowe
Obsługa
wykonywania
Bezpieczeństwo
Zarządzanie
pamięcią
Perl
Biblioteki
klas podstawowych
Program
wczytujący klasy
Kompilator JIT
Kod natywny
Procesor
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).
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.
Wspólny system typów (CTS)
Object
Klasa
Typy proste
Interfejs
Struktury
Tablica
Typy
wyliczeniowe
Typy referencyjne
(sterta)
Typy wartościowe
(stos)
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.
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.
Manifest
Metadane
Kod pośredni
Zasoby
Moduł kodu .NET
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.
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).
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.
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.
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.
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;