SlideShare a Scribd company logo
1 of 53
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 1 / 31
Programowanie Komponentowe 
Wykład #5: Wprowadzenie do srodowiska .NET 
Mikołaj Olszewski 
Wydział Zastosowan Informatyki i Matematyki 
Szkoły Głównej Gospodarstwa Wiejskiego 
4.11.2014 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 2 / 31
Plan wykładu 
1 Srodowisko .NET 
2 Komponenty na platformie .NET 
3 Wewnetrzna nomenklatura .Net 
4 Podsumowanie 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 3 / 31
Srodowisko .NET 
Plan wykładu 
1 Srodowisko .NET 
2 Komponenty na platformie .NET 
3 Wewnetrzna nomenklatura .Net 
4 Podsumowanie 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 4 / 31
Srodowisko .NET 
Wprowadzenie 
Problemy z przenaszalnoscia (WinAPI) 
miedzy procesorami 
miedzy wersjami systemu 
Rozwiazanie — kod posredni CIL (jak w Javie) 
kompilacja do kodu maszynowego w momencie wywołania — JIT 
cache’owanie kodu maszynowego 
Rozwój platformy 
1.0 — 13.02.2002 — VisualStudio .NET 
... 
4.5.1 — 17.10.2013 — VisualStudio 2013 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 5 / 31
Srodowisko .NET 
Common Language Runtime 
Lokalizowanie, kompilowanie i wykonywanie kodu posredniego 
Zarzadzanie pamiecia i bezpieczenstwem 
Dostep do systemu opracyjnego 
System scisłych typów (problemy) 
Common Language Specification 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 6 / 31
Srodowisko .NET 
Wykonywanie kodu 
kod zródłowy ! CIL 
CIL ! kod bajtowy, asemblacja 
bytecode ! kod natywny (JIT) 
wykonanie kodu natywnego 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 7 / 31
Srodowisko .NET 
Common Intermediate Language 
1 . a s s embl y He l loWor ld 
2 . c l a s s auto a n s i HelloWorldApp 
3 f 
4 . method p u b l i c h i d e b y s i g s t a t i c void Main ( ) c i l managed 
5 f 
6 . e n t r y p o i n t 
7 . maxstack 1 
8 l d s t r ” He l l o wor ld . ” 
9 c a l l void [ ms c o r l i b ] System . Consol e : : Wr i t eLi n e ( s t r i n g ) 
10 r e t 
11 g 
12 g 
odpowiednik asemblera 
tłumaczony na kod bajtowy 
DLL i EXE 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 8 / 31
Srodowisko .NET 
Assemblacje 
Odpowiednik na 
niedogodnosci DLL-i 
Oddzielenie logicznych 
atrybutów od fizycznej 
paczki 
Wynikowo: DLL lub 
EXE (mała róznica) 
Moze zawierac wiele 
modułów (plików) 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 9 / 31
Srodowisko .NET 
Metadane 
Wewnatrz asemblacji 
Generowane 
automatycznie 
Opis dostepnych 
typów 
nazw 
widocznosci 
zaleznosci 
Mozliwosc odczytu przez 
refleksje 
Manifest — opis 
asemblacji 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 10 / 31
Srodowisko .NET 
Manifest 
using System.Reflection; 
using System.Rue.CompilerServices; 
[assembly: AssemblyTitle("MyAssembly")] 
[assembly: AssemblyDescription("Assembly containing my .NET components")] 
[assembly: AssemblyCompany("My Company")] 
[assembly: AssemblyCopyright("Copyright c
 My Company 2005")] 
[assembly: AssemblyTrademark("MyTrademark")] 
[assembly: AssemblyVersion("1.2.3.4")] 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 11 / 31
Srodowisko .NET 
Kompatybilnosc binarna 
Metadane w roli głównej 
IL zawiera odwołania poprzez tokeny (identyfikator i indeks) 
Odwołania fizyczne obliczane w locie 
Kazda klasa jest binarnym komponentem 
Brak ograniczen do interfejsów 
Binarne dziedziczenie 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 12 / 31
Komponenty na platformie .NET 
Plan wykładu 
1 Srodowisko .NET 
2 Komponenty na platformie .NET 
3 Wewnetrzna nomenklatura .Net 
4 Podsumowanie 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 13 / 31
Komponenty na platformie .NET 
Wprowadzenie 
Mozliwosc tworzenie komponentów w stary sposób COM/COM+, 
OLE/AcitveX 
Kazda klasa moze byc komponentem 
Asemblacje - naturalne komponenty 
Srodowisko zarzadza łaczeniem komponentów 
Wiecej czasu na implementacje logiki 
Mozliwe podejscie „czysto” obiektowe 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 14 / 31
Komponenty na platformie .NET 
Wprowadzenie 
Mozliwosc tworzenie komponentów w stary sposób COM/COM+, 
OLE/AcitveX 
Kazda klasa moze byc komponentem 
Asemblacje - naturalne komponenty 
Srodowisko zarzadza łaczeniem komponentów 
Wiecej czasu na implementacje logiki 
Mozliwe podejscie „czysto” obiektowe (nie korzystac!) 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 14 / 31
Komponenty na platformie .NET 
Pryncypia programowania komponentowego 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 15 / 31
Komponenty na platformie .NET 
Pryncypia programowania komponentowego 
Separacja interfejsu od implementacji: interfejsy i klasy 
Binarna kompatybilnosc miedzy klientem a serwerem: asemblacje 
Niezaleznosc jezykowa: CLR 
Transparentnosc lokalizacji kodu: WCF 
Zarzadzanie wielowatkowoscia: standard, TPL 
Wsparcie dla wersjonowania: asemblacje (vs. DLL Hell) 
Bezpieczenstwo na poziomie komponentów: security policy 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 16 / 31
Komponenty na platformie .NET 
Pryncypia programowania komponentowego 
Separacja interfejsu od implementacji: interfejsy i klasy 
Binarna kompatybilnosc miedzy klientem a serwerem: asemblacje 
Niezaleznosc jezykowa: CLR 
Transparentnosc lokalizacji kodu: WCF 
Zarzadzanie wielowatkowoscia: standard, TPL 
Wsparcie dla wersjonowania: asemblacje (vs. DLL Hell) 
Bezpieczenstwo na poziomie komponentów: security policy 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 16 / 31
Komponenty na platformie .NET 
Pryncypia programowania komponentowego 
Separacja interfejsu od implementacji: interfejsy i klasy 
Binarna kompatybilnosc miedzy klientem a serwerem: asemblacje 
Niezaleznosc jezykowa: CLR 
Transparentnosc lokalizacji kodu: WCF 
Zarzadzanie wielowatkowoscia: standard, TPL 
Wsparcie dla wersjonowania: asemblacje (vs. DLL Hell) 
Bezpieczenstwo na poziomie komponentów: security policy 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 16 / 31
Komponenty na platformie .NET 
Pryncypia programowania komponentowego 
Separacja interfejsu od implementacji: interfejsy i klasy 
Binarna kompatybilnosc miedzy klientem a serwerem: asemblacje 
Niezaleznosc jezykowa: CLR 
Transparentnosc lokalizacji kodu: WCF 
Zarzadzanie wielowatkowoscia: standard, TPL 
Wsparcie dla wersjonowania: asemblacje (vs. DLL Hell) 
Bezpieczenstwo na poziomie komponentów: security policy 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 16 / 31
Komponenty na platformie .NET 
Pryncypia programowania komponentowego 
Separacja interfejsu od implementacji: interfejsy i klasy 
Binarna kompatybilnosc miedzy klientem a serwerem: asemblacje 
Niezaleznosc jezykowa: CLR 
Transparentnosc lokalizacji kodu: WCF 
Zarzadzanie wielowatkowoscia: standard, TPL 
Wsparcie dla wersjonowania: asemblacje (vs. DLL Hell) 
Bezpieczenstwo na poziomie komponentów: security policy 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 16 / 31
Komponenty na platformie .NET 
Pryncypia programowania komponentowego 
Separacja interfejsu od implementacji: interfejsy i klasy 
Binarna kompatybilnosc miedzy klientem a serwerem: asemblacje 
Niezaleznosc jezykowa: CLR 
Transparentnosc lokalizacji kodu: WCF 
Zarzadzanie wielowatkowoscia: standard, TPL 
Wsparcie dla wersjonowania: asemblacje (vs. DLL Hell) 
Bezpieczenstwo na poziomie komponentów: security policy 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 16 / 31
Komponenty na platformie .NET 
Pryncypia programowania komponentowego 
Separacja interfejsu od implementacji: interfejsy i klasy 
Binarna kompatybilnosc miedzy klientem a serwerem: asemblacje 
Niezaleznosc jezykowa: CLR 
Transparentnosc lokalizacji kodu: WCF 
Zarzadzanie wielowatkowoscia: standard, TPL 
Wsparcie dla wersjonowania: asemblacje (vs. DLL Hell) 
Bezpieczenstwo na poziomie komponentów: security policy 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 16 / 31
Komponenty na platformie .NET 
Wsparcie dla programowania komponentowego 
Wspólna klasa bazowa: object 
Programowanie deklaratywne: atrybuty 
Szczegółowe zarzadzanie bezpieczenstwem 
Uproszczone wdrazanie: asemblacje prywantne lub w GAC 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 17 / 31
Komponenty na platformie .NET 
Tworzenie komponentów 
VS ! Rozwiazanie, Główny projekt: exe, dll, web 
Rozwiazanie ! Projekty 
1 projekt – 1 asemblacja 
Projekt ! Referencje 
mozliwosc ustawienia sciezki poszukiwania 
dll i exe 
Asemblacje 
wersje 
klasy czesciowe (partial) 
Przestrzenie nazw 
global 
aliasowanie 
Zakres widzialnosci 
internal (domyslny) 
protected internal 
zaprzyjaznianie: [assembly: InternalsVisibleTo("MyClient")] 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 18 / 31
Komponenty na platformie .NET 
Tworzenie komponentów 
VS ! Rozwiazanie, Główny projekt: exe, dll, web 
Rozwiazanie ! Projekty 
1 projekt – 1 asemblacja 
Projekt ! Referencje 
mozliwosc ustawienia sciezki poszukiwania 
dll i exe 
Asemblacje 
wersje 
klasy czesciowe (partial) 
Przestrzenie nazw 
global 
aliasowanie 
Zakres widzialnosci 
internal (domyslny) 
protected internal 
zaprzyjaznianie: [assembly: InternalsVisibleTo("MyClient")] 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 18 / 31
Komponenty na platformie .NET 
Tworzenie komponentów 
VS ! Rozwiazanie, Główny projekt: exe, dll, web 
Rozwiazanie ! Projekty 
1 projekt – 1 asemblacja 
Projekt ! Referencje 
mozliwosc ustawienia sciezki poszukiwania 
dll i exe 
Asemblacje 
wersje 
klasy czesciowe (partial) 
Przestrzenie nazw 
global 
aliasowanie 
Zakres widzialnosci 
internal (domyslny) 
protected internal 
zaprzyjaznianie: [assembly: InternalsVisibleTo("MyClient")] 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 18 / 31
Komponenty na platformie .NET 
Tworzenie komponentów 
VS ! Rozwiazanie, Główny projekt: exe, dll, web 
Rozwiazanie ! Projekty 
1 projekt – 1 asemblacja 
Projekt ! Referencje 
mozliwosc ustawienia sciezki poszukiwania 
dll i exe 
Asemblacje 
wersje 
klasy czesciowe (partial) 
Przestrzenie nazw 
global 
aliasowanie 
Zakres widzialnosci 
internal (domyslny) 
protected internal 
zaprzyjaznianie: [assembly: InternalsVisibleTo("MyClient")] 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 18 / 31
Komponenty na platformie .NET 
Tworzenie komponentów 
VS ! Rozwiazanie, Główny projekt: exe, dll, web 
Rozwiazanie ! Projekty 
1 projekt – 1 asemblacja 
Projekt ! Referencje 
mozliwosc ustawienia sciezki poszukiwania 
dll i exe 
Asemblacje 
wersje 
klasy czesciowe (partial) 
Przestrzenie nazw 
global 
aliasowanie 
Zakres widzialnosci 
internal (domyslny) 
protected internal 
zaprzyjaznianie: [assembly: InternalsVisibleTo("MyClient")] 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 18 / 31
Komponenty na platformie .NET 
Tworzenie komponentów 
VS ! Rozwiazanie, Główny projekt: exe, dll, web 
Rozwiazanie ! Projekty 
1 projekt – 1 asemblacja 
Projekt ! Referencje 
mozliwosc ustawienia sciezki poszukiwania 
dll i exe 
Asemblacje 
wersje 
klasy czesciowe (partial) 
Przestrzenie nazw 
global 
aliasowanie 
Zakres widzialnosci 
internal (domyslny) 
protected internal 
zaprzyjaznianie: [assembly: InternalsVisibleTo("MyClient")] 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 18 / 31
Komponenty na platformie .NET 
Wskazówki do budowy komponentu 
Modelowanie abstrakcji za pomoca interfejsów 
specjalizacja 
uzywanie ich zamiast konkretnych implementacji 
rzutowanie za pomoca operatora as 
Ukrywanie implementacji 
internal 
fasada i delegacje 
implementacja explicite 
Uzywanie kompatybilnosci binarnej 
osobne asemblacje do kontraktów i ich implementacji 
dodawanie funkcjonalnosci (bez usuwania!) 
Zarzadzanie zasobami — deterministyczna finalizacja 
Open() / Close() 
Dispose(), GC.SuppressFinalize(this) 
IDisposable, using 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 19 / 31
Komponenty na platformie .NET 
Wskazówki do budowy komponentu 
Modelowanie abstrakcji za pomoca interfejsów 
specjalizacja 
uzywanie ich zamiast konkretnych implementacji 
rzutowanie za pomoca operatora as 
Ukrywanie implementacji 
internal 
fasada i delegacje 
implementacja explicite 
Uzywanie kompatybilnosci binarnej 
osobne asemblacje do kontraktów i ich implementacji 
dodawanie funkcjonalnosci (bez usuwania!) 
Zarzadzanie zasobami — deterministyczna finalizacja 
Open() / Close() 
Dispose(), GC.SuppressFinalize(this) 
IDisposable, using 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 19 / 31
Komponenty na platformie .NET 
Wskazówki do budowy komponentu 
Modelowanie abstrakcji za pomoca interfejsów 
specjalizacja 
uzywanie ich zamiast konkretnych implementacji 
rzutowanie za pomoca operatora as 
Ukrywanie implementacji 
internal 
fasada i delegacje 
implementacja explicite 
Uzywanie kompatybilnosci binarnej 
osobne asemblacje do kontraktów i ich implementacji 
dodawanie funkcjonalnosci (bez usuwania!) 
Zarzadzanie zasobami — deterministyczna finalizacja 
Open() / Close() 
Dispose(), GC.SuppressFinalize(this) 
IDisposable, using 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 19 / 31
Komponenty na platformie .NET 
Wskazówki do budowy komponentu 
Modelowanie abstrakcji za pomoca interfejsów 
specjalizacja 
uzywanie ich zamiast konkretnych implementacji 
rzutowanie za pomoca operatora as 
Ukrywanie implementacji 
internal 
fasada i delegacje 
implementacja explicite 
Uzywanie kompatybilnosci binarnej 
osobne asemblacje do kontraktów i ich implementacji 
dodawanie funkcjonalnosci (bez usuwania!) 
Zarzadzanie zasobami — deterministyczna finalizacja 
Open() / Close() 
Dispose(), GC.SuppressFinalize(this) 
IDisposable, using 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 19 / 31
Komponenty na platformie .NET 
Rozwiazywanie zaleznosci 
Standardowo brak sensownego rozwiazania 
jedynie bezposrednie powiazanie (przez referencje) 
zaleznosc binarna 
koniecznosc wystepowania asemblacji o danej nazwie 
koniecznosc wystepowania uzywanych typów 
Mechanizmy introspekcji i refleksji 
introspekcja typów (odkrywanie interfejsów) 
replikacja (tworzenie nowych instancji) 
do zapoznania: Type, Assembly, Activator 
Wsparcie dla róznych rodzajów zaleznosci 
bezposrednia / natychmiastowa 
nowa instancja 
singleton 
leniwa (Lazy<T>) 
fabrykowalna (Func<T>) 
wyliczeniowa (Enumerable<T>) 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 20 / 31
Komponenty na platformie .NET 
Rozwiazywanie zaleznosci 
Standardowo brak sensownego rozwiazania 
jedynie bezposrednie powiazanie (przez referencje) 
zaleznosc binarna 
koniecznosc wystepowania asemblacji o danej nazwie 
koniecznosc wystepowania uzywanych typów 
Mechanizmy introspekcji i refleksji 
introspekcja typów (odkrywanie interfejsów) 
replikacja (tworzenie nowych instancji) 
do zapoznania: Type, Assembly, Activator 
Wsparcie dla róznych rodzajów zaleznosci 
bezposrednia / natychmiastowa 
nowa instancja 
singleton 
leniwa (Lazy<T>) 
fabrykowalna (Func<T>) 
wyliczeniowa (Enumerable<T>) 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 20 / 31
Komponenty na platformie .NET 
Rozwiazywanie zaleznosci 
Standardowo brak sensownego rozwiazania 
jedynie bezposrednie powiazanie (przez referencje) 
zaleznosc binarna 
koniecznosc wystepowania asemblacji o danej nazwie 
koniecznosc wystepowania uzywanych typów 
Mechanizmy introspekcji i refleksji 
introspekcja typów (odkrywanie interfejsów) 
replikacja (tworzenie nowych instancji) 
do zapoznania: Type, Assembly, Activator 
Wsparcie dla róznych rodzajów zaleznosci 
bezposrednia / natychmiastowa 
nowa instancja 
singleton 
leniwa (Lazy<T>) 
fabrykowalna (Func<T>) 
wyliczeniowa (Enumerable<T>) 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 20 / 31
Komponenty na platformie .NET 
Rozwiazywanie zaleznosci 
Standardowo brak sensownego rozwiazania 
jedynie bezposrednie powiazanie (przez referencje) 
zaleznosc binarna 
koniecznosc wystepowania asemblacji o danej nazwie 
koniecznosc wystepowania uzywanych typów 
Mechanizmy introspekcji i refleksji 
introspekcja typów (odkrywanie interfejsów) 
replikacja (tworzenie nowych instancji) 
do zapoznania: Type, Assembly, Activator 
Wsparcie dla róznych rodzajów zaleznosci 
bezposrednia / natychmiastowa 
nowa instancja 
singleton 
leniwa (Lazy<T>) 
fabrykowalna (Func<T>) 
wyliczeniowa (Enumerable<T>) 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 20 / 31
Komponenty na platformie .NET 
Rozwiazywanie zaleznosci 
Standardowo brak sensownego rozwiazania 
jedynie bezposrednie powiazanie (przez referencje) 
zaleznosc binarna 
koniecznosc wystepowania asemblacji o danej nazwie 
koniecznosc wystepowania uzywanych typów 
Mechanizmy introspekcji i refleksji 
introspekcja typów (odkrywanie interfejsów) 
replikacja (tworzenie nowych instancji) 
do zapoznania: Type, Assembly, Activator 
Wsparcie dla róznych rodzajów zaleznosci 
bezposrednia / natychmiastowa 
nowa instancja 
singleton 
leniwa (Lazy<T>) 
fabrykowalna (Func<T>) 
wyliczeniowa (Enumerable<T>) 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 20 / 31
Komponenty na platformie .NET 
Rozwiazywanie zaleznosci 
Standardowo brak sensownego rozwiazania 
jedynie bezposrednie powiazanie (przez referencje) 
zaleznosc binarna 
koniecznosc wystepowania asemblacji o danej nazwie 
koniecznosc wystepowania uzywanych typów 
Mechanizmy introspekcji i refleksji 
introspekcja typów (odkrywanie interfejsów) 
replikacja (tworzenie nowych instancji) 
do zapoznania: Type, Assembly, Activator 
Wsparcie dla róznych rodzajów zaleznosci 
bezposrednia / natychmiastowa 
nowa instancja 
singleton 
leniwa (Lazy<T>) 
fabrykowalna (Func<T>) 
wyliczeniowa (Enumerable<T>) 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 20 / 31
Komponenty na platformie .NET 
Rozwiazywanie zaleznosci 
Standardowo brak sensownego rozwiazania 
jedynie bezposrednie powiazanie (przez referencje) 
zaleznosc binarna 
koniecznosc wystepowania asemblacji o danej nazwie 
koniecznosc wystepowania uzywanych typów 
Mechanizmy introspekcji i refleksji 
introspekcja typów (odkrywanie interfejsów) 
replikacja (tworzenie nowych instancji) 
do zapoznania: Type, Assembly, Activator 
Wsparcie dla róznych rodzajów zaleznosci 
bezposrednia / natychmiastowa 
nowa instancja 
singleton 
leniwa (Lazy<T>) 
fabrykowalna (Func<T>) 
wyliczeniowa (Enumerable<T>) 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 20 / 31
Komponenty na platformie .NET 
Przykładowy interfejs kontenera 
1 p u b l i c i n t e r f a c e ICo n t a i n e r 
2 f 
3 void Re g i s t e r ( Assembly a s s embl y ) ; 
4 void Re g i s t e r (Type t ype ) ; 
5 void Re g i s t e r ( o b j e c t impl ) ; 
6 void Re g i s t e r <T>(T impl ) where T : c l a s s ; 
7 void Re g i s t e r <T>(Func<T> p r o v i d e r ) where T : c l a s s ; 
8 
9 T Re sol v e<T>() where T : c l a s s ; 
10 g 
Specyfikacja na bitbuckecie 
Laboratoria 
Własny kontener dla komponentów .NET 
(bez koniecznosci implementacji konkretnego interfejsu). 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 21 / 31
Komponenty na platformie .NET 
Przykładowy interfejs kontenera 
1 p u b l i c i n t e r f a c e ICo n t a i n e r 
2 f 
3 void Re g i s t e r ( Assembly a s s embl y ) ; 
4 void Re g i s t e r (Type t ype ) ; 
5 void Re g i s t e r ( o b j e c t impl ) ; 
6 void Re g i s t e r <T>(T impl ) where T : c l a s s ; 
7 void Re g i s t e r <T>(Func<T> p r o v i d e r ) where T : c l a s s ; 
8 
9 T Re sol v e<T>() where T : c l a s s ; 
10 g 
Specyfikacja na bitbuckecie 
Laboratoria 
Własny kontener dla komponentów .NET 
(bez koniecznosci implementacji konkretnego interfejsu). 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 21 / 31
Wewnetrzna nomenklatura .Net 
Plan wykładu 
1 Srodowisko .NET 
2 Komponenty na platformie .NET 
3 Wewnetrzna nomenklatura .Net 
4 Podsumowanie 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 22 / 31
Wewnetrzna nomenklatura .Net 
Wewnetrzna nomenklatura .Net 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 23 / 31
Wewnetrzna nomenklatura .Net 
Klasa / Kontrolka / Komponent 
Zewnetrzne zasoby bez edytora ! IDisposable 
Edytor wizualny ! IComponent 
Edytor wizualny i interfejs uzytkownika ! Control 
Reszta — zwykłe klasy 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 24 / 31
Wewnetrzna nomenklatura .Net 
Komponenty 
System.ComponentModel.IComponent 
Kontrola zewnetrznych zasobów — IDisposable 
Wsparcie dla edytora 
Przechowywanie w kontenerach 
Marshaling 
przez referencje — System.ComponentModel.Component 
przez wartosc — 
System.ComponentModel.MarshalByValueComponent 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 25 / 31
Wewnetrzna nomenklatura .Net 
Kontrolki 
Interfejs uzytkownika 
Klasy bazowe: 
System.Windows.Forms.Control 
System.Web.UI.Control 
Kazda kontrolka to komponent 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 26 / 31
Wewnetrzna nomenklatura .Net 
Kontenery i parcele 
Kontenery 
System.ComponentModel.IContainer 
zawieraja komponenty 
Parcele 
System.ComponentModel.ISite 
zarzadzanie i komunikacja z komponentami 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 27 / 31
Podsumowanie 
Plan wykładu 
1 Srodowisko .NET 
2 Komponenty na platformie .NET 
3 Wewnetrzna nomenklatura .Net 
4 Podsumowanie 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 28 / 31
Podsumowanie 
Podsumowanie 
Rewolucja w stosunku do dotychczasowego podejscia 
Niezaleznosc od jezyka i platformy dzieki IL 
Binarna kompatybilnosc wysokiej jakosci 
Wsparcie dla programowania komponentowego 
Wszystko moze byc komponentem 
Wytyczne dobrego programowania komponentowego 
Ułatwienia dla kontenerów 
Komponenty specjalne 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 29 / 31
Podsumowanie 
Do domu 
Przeczytac rozdziały 2 – 4 „Programming .NET Components” 
Zapoznac sie z architektura .NET i klasami pomocniczymi 
Type, Assembly, Activator 
Lazy<T>, Func<T>, Enumerable<T> 
Stworzyc własny kontener rozwiazujacy zaleznosci miedzy 
komponentami 
wykorzystanie mechanizmów dostarczanych przez .NET (bez 
koniecznosci implementowania specyficznych interfejsów) 
zgodnosc ze specyfikacja na bitbuckecie 
oryginalnosc rozwiazan 
wersja binarna 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 30 / 31
Podsumowanie 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 31 / 31

More Related Content

Similar to Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NET

Programowanie Komponentowe: #6 Wersjonowanie
Programowanie Komponentowe: #6 WersjonowanieProgramowanie Komponentowe: #6 Wersjonowanie
Programowanie Komponentowe: #6 WersjonowanieMikołaj Olszewski
 
ITAD PolSl 2014 - Nowości w .NET 2015
ITAD PolSl 2014 - Nowości w .NET 2015ITAD PolSl 2014 - Nowości w .NET 2015
ITAD PolSl 2014 - Nowości w .NET 2015Michał Dudak
 
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz
 
Delphi dla .NET. Vademecum profesjonalisty
Delphi dla .NET. Vademecum profesjonalistyDelphi dla .NET. Vademecum profesjonalisty
Delphi dla .NET. Vademecum profesjonalistyWydawnictwo Helion
 
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future ProcessingPROIDEA
 
Piątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous DeliveryPiątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous DeliveryXSolve
 
Programowanie Komponentowe: #D Model komponentowy OSGi
Programowanie Komponentowe: #D Model komponentowy OSGiProgramowanie Komponentowe: #D Model komponentowy OSGi
Programowanie Komponentowe: #D Model komponentowy OSGiMikołaj Olszewski
 
Seminarium .Net CF 2004
Seminarium .Net CF 2004Seminarium .Net CF 2004
Seminarium .Net CF 2004Tomasz Cieplak
 
Zrozumieć platformę .NET. Wydanie II
Zrozumieć platformę .NET. Wydanie IIZrozumieć platformę .NET. Wydanie II
Zrozumieć platformę .NET. Wydanie IIWydawnictwo Helion
 
Delphi 2005. 303 gotowe rozwiązania
Delphi 2005. 303 gotowe rozwiązaniaDelphi 2005. 303 gotowe rozwiązania
Delphi 2005. 303 gotowe rozwiązaniaWydawnictwo Helion
 
Czym jest złożoność ?
Czym jest złożoność ?Czym jest złożoność ?
Czym jest złożoność ?GOG.com dev team
 
Delphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyDelphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyWydawnictwo Helion
 
Wprowadzenie do MEF w .NET 4.0
Wprowadzenie do MEF w .NET 4.0Wprowadzenie do MEF w .NET 4.0
Wprowadzenie do MEF w .NET 4.0Maciej Zbrzezny
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyqbeuek
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Cloudskraqa
 

Similar to Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NET (20)

Programowanie Komponentowe: #6 Wersjonowanie
Programowanie Komponentowe: #6 WersjonowanieProgramowanie Komponentowe: #6 Wersjonowanie
Programowanie Komponentowe: #6 Wersjonowanie
 
Ext js
Ext jsExt js
Ext js
 
ITAD PolSl 2014 - Nowości w .NET 2015
ITAD PolSl 2014 - Nowości w .NET 2015ITAD PolSl 2014 - Nowości w .NET 2015
ITAD PolSl 2014 - Nowości w .NET 2015
 
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
 
Delphi dla .NET. Vademecum profesjonalisty
Delphi dla .NET. Vademecum profesjonalistyDelphi dla .NET. Vademecum profesjonalisty
Delphi dla .NET. Vademecum profesjonalisty
 
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
 
Piątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous DeliveryPiątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous Delivery
 
Programowanie Komponentowe: #D Model komponentowy OSGi
Programowanie Komponentowe: #D Model komponentowy OSGiProgramowanie Komponentowe: #D Model komponentowy OSGi
Programowanie Komponentowe: #D Model komponentowy OSGi
 
DSL - DYI
DSL - DYIDSL - DYI
DSL - DYI
 
Seminarium .Net CF 2004
Seminarium .Net CF 2004Seminarium .Net CF 2004
Seminarium .Net CF 2004
 
Zrozumieć platformę .NET. Wydanie II
Zrozumieć platformę .NET. Wydanie IIZrozumieć platformę .NET. Wydanie II
Zrozumieć platformę .NET. Wydanie II
 
Isyp07
Isyp07Isyp07
Isyp07
 
Delphi 2005. 303 gotowe rozwiązania
Delphi 2005. 303 gotowe rozwiązaniaDelphi 2005. 303 gotowe rozwiązania
Delphi 2005. 303 gotowe rozwiązania
 
Czym jest złożoność ?
Czym jest złożoność ?Czym jest złożoność ?
Czym jest złożoność ?
 
Delphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyDelphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programisty
 
Wprowadzenie do MEF w .NET 4.0
Wprowadzenie do MEF w .NET 4.0Wprowadzenie do MEF w .NET 4.0
Wprowadzenie do MEF w .NET 4.0
 
C#. Ćwiczenia. Wydanie II
C#. Ćwiczenia. Wydanie IIC#. Ćwiczenia. Wydanie II
C#. Ćwiczenia. Wydanie II
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Clouds
 
Php i Microsoft
Php i MicrosoftPhp i Microsoft
Php i Microsoft
 

More from Mikołaj Olszewski

The metadata driven e-laboratory web client
The metadata driven e-laboratory web clientThe metadata driven e-laboratory web client
The metadata driven e-laboratory web clientMikołaj Olszewski
 
Optoelektroniczne modelowanie sieci neuronowej cz. 1
Optoelektroniczne modelowanie sieci neuronowej cz. 1Optoelektroniczne modelowanie sieci neuronowej cz. 1
Optoelektroniczne modelowanie sieci neuronowej cz. 1Mikołaj Olszewski
 
Programowanie Komponentowe: #B Komponentowe aspekty springa
Programowanie Komponentowe: #B Komponentowe aspekty springaProgramowanie Komponentowe: #B Komponentowe aspekty springa
Programowanie Komponentowe: #B Komponentowe aspekty springaMikołaj Olszewski
 
Optoelektroniczne sieci neuronowe
Optoelektroniczne sieci neuronoweOptoelektroniczne sieci neuronowe
Optoelektroniczne sieci neuronoweMikołaj Olszewski
 
Programowanie Komponentowe: #A Wprowadzenie do Springa
Programowanie Komponentowe: #A Wprowadzenie do SpringaProgramowanie Komponentowe: #A Wprowadzenie do Springa
Programowanie Komponentowe: #A Wprowadzenie do SpringaMikołaj Olszewski
 
Programowanie Komponentowe: #9 Java Beans
Programowanie Komponentowe: #9 Java BeansProgramowanie Komponentowe: #9 Java Beans
Programowanie Komponentowe: #9 Java BeansMikołaj Olszewski
 
Optyczne solitony przestrzenne
Optyczne solitony przestrzenneOptyczne solitony przestrzenne
Optyczne solitony przestrzenneMikołaj Olszewski
 
Kwantowe struktury półprzewodnikowe
Kwantowe struktury półprzewodnikoweKwantowe struktury półprzewodnikowe
Kwantowe struktury półprzewodnikoweMikołaj Olszewski
 
Programowanie Komponentowe: #7 Programowanie asynchroniczne i sterowane zdarz...
Programowanie Komponentowe: #7 Programowanie asynchroniczne i sterowane zdarz...Programowanie Komponentowe: #7 Programowanie asynchroniczne i sterowane zdarz...
Programowanie Komponentowe: #7 Programowanie asynchroniczne i sterowane zdarz...Mikołaj Olszewski
 
Metody efektywnego łączenia sieci neuronowych
Metody efektywnego łączenia sieci neuronowychMetody efektywnego łączenia sieci neuronowych
Metody efektywnego łączenia sieci neuronowychMikołaj Olszewski
 

More from Mikołaj Olszewski (20)

Architektura heksagonalna
Architektura heksagonalnaArchitektura heksagonalna
Architektura heksagonalna
 
The metadata driven e-laboratory web client
The metadata driven e-laboratory web clientThe metadata driven e-laboratory web client
The metadata driven e-laboratory web client
 
Optoelektroniczne modelowanie sieci neuronowej cz. 1
Optoelektroniczne modelowanie sieci neuronowej cz. 1Optoelektroniczne modelowanie sieci neuronowej cz. 1
Optoelektroniczne modelowanie sieci neuronowej cz. 1
 
Programowanie Komponentowe: #B Komponentowe aspekty springa
Programowanie Komponentowe: #B Komponentowe aspekty springaProgramowanie Komponentowe: #B Komponentowe aspekty springa
Programowanie Komponentowe: #B Komponentowe aspekty springa
 
Optoelektroniczne sieci neuronowe
Optoelektroniczne sieci neuronoweOptoelektroniczne sieci neuronowe
Optoelektroniczne sieci neuronowe
 
Programowanie Komponentowe: #A Wprowadzenie do Springa
Programowanie Komponentowe: #A Wprowadzenie do SpringaProgramowanie Komponentowe: #A Wprowadzenie do Springa
Programowanie Komponentowe: #A Wprowadzenie do Springa
 
Materiały fotorefrakcyjne
Materiały fotorefrakcyjneMateriały fotorefrakcyjne
Materiały fotorefrakcyjne
 
Programowanie Komponentowe: #9 Java Beans
Programowanie Komponentowe: #9 Java BeansProgramowanie Komponentowe: #9 Java Beans
Programowanie Komponentowe: #9 Java Beans
 
Lokalne sieci światłowodowe
Lokalne sieci światłowodoweLokalne sieci światłowodowe
Lokalne sieci światłowodowe
 
Optyczne solitony przestrzenne
Optyczne solitony przestrzenneOptyczne solitony przestrzenne
Optyczne solitony przestrzenne
 
Swiatłowodowy czujnik prądu
Swiatłowodowy czujnik prąduSwiatłowodowy czujnik prądu
Swiatłowodowy czujnik prądu
 
Optyka ciekłych kryształów
Optyka ciekłych kryształówOptyka ciekłych kryształów
Optyka ciekłych kryształów
 
Kwantowe struktury półprzewodnikowe
Kwantowe struktury półprzewodnikoweKwantowe struktury półprzewodnikowe
Kwantowe struktury półprzewodnikowe
 
Programowanie Komponentowe: #7 Programowanie asynchroniczne i sterowane zdarz...
Programowanie Komponentowe: #7 Programowanie asynchroniczne i sterowane zdarz...Programowanie Komponentowe: #7 Programowanie asynchroniczne i sterowane zdarz...
Programowanie Komponentowe: #7 Programowanie asynchroniczne i sterowane zdarz...
 
Metody efektywnego łączenia sieci neuronowych
Metody efektywnego łączenia sieci neuronowychMetody efektywnego łączenia sieci neuronowych
Metody efektywnego łączenia sieci neuronowych
 
Parallel quicksort cz. 2
Parallel quicksort cz. 2Parallel quicksort cz. 2
Parallel quicksort cz. 2
 
Parallel quicksort cz. 1
Parallel quicksort cz. 1Parallel quicksort cz. 1
Parallel quicksort cz. 1
 
Maszyna Turinga
Maszyna TuringaMaszyna Turinga
Maszyna Turinga
 
Planowanie działań cz. 2
Planowanie działań cz. 2Planowanie działań cz. 2
Planowanie działań cz. 2
 
Planowanie działań cz. 1
Planowanie działań cz. 1Planowanie działań cz. 1
Planowanie działań cz. 1
 

Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NET

  • 1. Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 1 / 31
  • 2. Programowanie Komponentowe Wykład #5: Wprowadzenie do srodowiska .NET Mikołaj Olszewski Wydział Zastosowan Informatyki i Matematyki Szkoły Głównej Gospodarstwa Wiejskiego 4.11.2014 Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 2 / 31
  • 3. Plan wykładu 1 Srodowisko .NET 2 Komponenty na platformie .NET 3 Wewnetrzna nomenklatura .Net 4 Podsumowanie Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 3 / 31
  • 4. Srodowisko .NET Plan wykładu 1 Srodowisko .NET 2 Komponenty na platformie .NET 3 Wewnetrzna nomenklatura .Net 4 Podsumowanie Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 4 / 31
  • 5. Srodowisko .NET Wprowadzenie Problemy z przenaszalnoscia (WinAPI) miedzy procesorami miedzy wersjami systemu Rozwiazanie — kod posredni CIL (jak w Javie) kompilacja do kodu maszynowego w momencie wywołania — JIT cache’owanie kodu maszynowego Rozwój platformy 1.0 — 13.02.2002 — VisualStudio .NET ... 4.5.1 — 17.10.2013 — VisualStudio 2013 Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 5 / 31
  • 6. Srodowisko .NET Common Language Runtime Lokalizowanie, kompilowanie i wykonywanie kodu posredniego Zarzadzanie pamiecia i bezpieczenstwem Dostep do systemu opracyjnego System scisłych typów (problemy) Common Language Specification Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 6 / 31
  • 7. Srodowisko .NET Wykonywanie kodu kod zródłowy ! CIL CIL ! kod bajtowy, asemblacja bytecode ! kod natywny (JIT) wykonanie kodu natywnego Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 7 / 31
  • 8. Srodowisko .NET Common Intermediate Language 1 . a s s embl y He l loWor ld 2 . c l a s s auto a n s i HelloWorldApp 3 f 4 . method p u b l i c h i d e b y s i g s t a t i c void Main ( ) c i l managed 5 f 6 . e n t r y p o i n t 7 . maxstack 1 8 l d s t r ” He l l o wor ld . ” 9 c a l l void [ ms c o r l i b ] System . Consol e : : Wr i t eLi n e ( s t r i n g ) 10 r e t 11 g 12 g odpowiednik asemblera tłumaczony na kod bajtowy DLL i EXE Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 8 / 31
  • 9. Srodowisko .NET Assemblacje Odpowiednik na niedogodnosci DLL-i Oddzielenie logicznych atrybutów od fizycznej paczki Wynikowo: DLL lub EXE (mała róznica) Moze zawierac wiele modułów (plików) Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 9 / 31
  • 10. Srodowisko .NET Metadane Wewnatrz asemblacji Generowane automatycznie Opis dostepnych typów nazw widocznosci zaleznosci Mozliwosc odczytu przez refleksje Manifest — opis asemblacji Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 10 / 31
  • 11. Srodowisko .NET Manifest using System.Reflection; using System.Rue.CompilerServices; [assembly: AssemblyTitle("MyAssembly")] [assembly: AssemblyDescription("Assembly containing my .NET components")] [assembly: AssemblyCompany("My Company")] [assembly: AssemblyCopyright("Copyright c My Company 2005")] [assembly: AssemblyTrademark("MyTrademark")] [assembly: AssemblyVersion("1.2.3.4")] Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 11 / 31
  • 12. Srodowisko .NET Kompatybilnosc binarna Metadane w roli głównej IL zawiera odwołania poprzez tokeny (identyfikator i indeks) Odwołania fizyczne obliczane w locie Kazda klasa jest binarnym komponentem Brak ograniczen do interfejsów Binarne dziedziczenie Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 12 / 31
  • 13. Komponenty na platformie .NET Plan wykładu 1 Srodowisko .NET 2 Komponenty na platformie .NET 3 Wewnetrzna nomenklatura .Net 4 Podsumowanie Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 13 / 31
  • 14. Komponenty na platformie .NET Wprowadzenie Mozliwosc tworzenie komponentów w stary sposób COM/COM+, OLE/AcitveX Kazda klasa moze byc komponentem Asemblacje - naturalne komponenty Srodowisko zarzadza łaczeniem komponentów Wiecej czasu na implementacje logiki Mozliwe podejscie „czysto” obiektowe Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 14 / 31
  • 15. Komponenty na platformie .NET Wprowadzenie Mozliwosc tworzenie komponentów w stary sposób COM/COM+, OLE/AcitveX Kazda klasa moze byc komponentem Asemblacje - naturalne komponenty Srodowisko zarzadza łaczeniem komponentów Wiecej czasu na implementacje logiki Mozliwe podejscie „czysto” obiektowe (nie korzystac!) Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 14 / 31
  • 16. Komponenty na platformie .NET Pryncypia programowania komponentowego Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 15 / 31
  • 17. Komponenty na platformie .NET Pryncypia programowania komponentowego Separacja interfejsu od implementacji: interfejsy i klasy Binarna kompatybilnosc miedzy klientem a serwerem: asemblacje Niezaleznosc jezykowa: CLR Transparentnosc lokalizacji kodu: WCF Zarzadzanie wielowatkowoscia: standard, TPL Wsparcie dla wersjonowania: asemblacje (vs. DLL Hell) Bezpieczenstwo na poziomie komponentów: security policy Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 16 / 31
  • 18. Komponenty na platformie .NET Pryncypia programowania komponentowego Separacja interfejsu od implementacji: interfejsy i klasy Binarna kompatybilnosc miedzy klientem a serwerem: asemblacje Niezaleznosc jezykowa: CLR Transparentnosc lokalizacji kodu: WCF Zarzadzanie wielowatkowoscia: standard, TPL Wsparcie dla wersjonowania: asemblacje (vs. DLL Hell) Bezpieczenstwo na poziomie komponentów: security policy Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 16 / 31
  • 19. Komponenty na platformie .NET Pryncypia programowania komponentowego Separacja interfejsu od implementacji: interfejsy i klasy Binarna kompatybilnosc miedzy klientem a serwerem: asemblacje Niezaleznosc jezykowa: CLR Transparentnosc lokalizacji kodu: WCF Zarzadzanie wielowatkowoscia: standard, TPL Wsparcie dla wersjonowania: asemblacje (vs. DLL Hell) Bezpieczenstwo na poziomie komponentów: security policy Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 16 / 31
  • 20. Komponenty na platformie .NET Pryncypia programowania komponentowego Separacja interfejsu od implementacji: interfejsy i klasy Binarna kompatybilnosc miedzy klientem a serwerem: asemblacje Niezaleznosc jezykowa: CLR Transparentnosc lokalizacji kodu: WCF Zarzadzanie wielowatkowoscia: standard, TPL Wsparcie dla wersjonowania: asemblacje (vs. DLL Hell) Bezpieczenstwo na poziomie komponentów: security policy Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 16 / 31
  • 21. Komponenty na platformie .NET Pryncypia programowania komponentowego Separacja interfejsu od implementacji: interfejsy i klasy Binarna kompatybilnosc miedzy klientem a serwerem: asemblacje Niezaleznosc jezykowa: CLR Transparentnosc lokalizacji kodu: WCF Zarzadzanie wielowatkowoscia: standard, TPL Wsparcie dla wersjonowania: asemblacje (vs. DLL Hell) Bezpieczenstwo na poziomie komponentów: security policy Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 16 / 31
  • 22. Komponenty na platformie .NET Pryncypia programowania komponentowego Separacja interfejsu od implementacji: interfejsy i klasy Binarna kompatybilnosc miedzy klientem a serwerem: asemblacje Niezaleznosc jezykowa: CLR Transparentnosc lokalizacji kodu: WCF Zarzadzanie wielowatkowoscia: standard, TPL Wsparcie dla wersjonowania: asemblacje (vs. DLL Hell) Bezpieczenstwo na poziomie komponentów: security policy Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 16 / 31
  • 23. Komponenty na platformie .NET Pryncypia programowania komponentowego Separacja interfejsu od implementacji: interfejsy i klasy Binarna kompatybilnosc miedzy klientem a serwerem: asemblacje Niezaleznosc jezykowa: CLR Transparentnosc lokalizacji kodu: WCF Zarzadzanie wielowatkowoscia: standard, TPL Wsparcie dla wersjonowania: asemblacje (vs. DLL Hell) Bezpieczenstwo na poziomie komponentów: security policy Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 16 / 31
  • 24. Komponenty na platformie .NET Wsparcie dla programowania komponentowego Wspólna klasa bazowa: object Programowanie deklaratywne: atrybuty Szczegółowe zarzadzanie bezpieczenstwem Uproszczone wdrazanie: asemblacje prywantne lub w GAC Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 17 / 31
  • 25. Komponenty na platformie .NET Tworzenie komponentów VS ! Rozwiazanie, Główny projekt: exe, dll, web Rozwiazanie ! Projekty 1 projekt – 1 asemblacja Projekt ! Referencje mozliwosc ustawienia sciezki poszukiwania dll i exe Asemblacje wersje klasy czesciowe (partial) Przestrzenie nazw global aliasowanie Zakres widzialnosci internal (domyslny) protected internal zaprzyjaznianie: [assembly: InternalsVisibleTo("MyClient")] Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 18 / 31
  • 26. Komponenty na platformie .NET Tworzenie komponentów VS ! Rozwiazanie, Główny projekt: exe, dll, web Rozwiazanie ! Projekty 1 projekt – 1 asemblacja Projekt ! Referencje mozliwosc ustawienia sciezki poszukiwania dll i exe Asemblacje wersje klasy czesciowe (partial) Przestrzenie nazw global aliasowanie Zakres widzialnosci internal (domyslny) protected internal zaprzyjaznianie: [assembly: InternalsVisibleTo("MyClient")] Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 18 / 31
  • 27. Komponenty na platformie .NET Tworzenie komponentów VS ! Rozwiazanie, Główny projekt: exe, dll, web Rozwiazanie ! Projekty 1 projekt – 1 asemblacja Projekt ! Referencje mozliwosc ustawienia sciezki poszukiwania dll i exe Asemblacje wersje klasy czesciowe (partial) Przestrzenie nazw global aliasowanie Zakres widzialnosci internal (domyslny) protected internal zaprzyjaznianie: [assembly: InternalsVisibleTo("MyClient")] Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 18 / 31
  • 28. Komponenty na platformie .NET Tworzenie komponentów VS ! Rozwiazanie, Główny projekt: exe, dll, web Rozwiazanie ! Projekty 1 projekt – 1 asemblacja Projekt ! Referencje mozliwosc ustawienia sciezki poszukiwania dll i exe Asemblacje wersje klasy czesciowe (partial) Przestrzenie nazw global aliasowanie Zakres widzialnosci internal (domyslny) protected internal zaprzyjaznianie: [assembly: InternalsVisibleTo("MyClient")] Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 18 / 31
  • 29. Komponenty na platformie .NET Tworzenie komponentów VS ! Rozwiazanie, Główny projekt: exe, dll, web Rozwiazanie ! Projekty 1 projekt – 1 asemblacja Projekt ! Referencje mozliwosc ustawienia sciezki poszukiwania dll i exe Asemblacje wersje klasy czesciowe (partial) Przestrzenie nazw global aliasowanie Zakres widzialnosci internal (domyslny) protected internal zaprzyjaznianie: [assembly: InternalsVisibleTo("MyClient")] Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 18 / 31
  • 30. Komponenty na platformie .NET Tworzenie komponentów VS ! Rozwiazanie, Główny projekt: exe, dll, web Rozwiazanie ! Projekty 1 projekt – 1 asemblacja Projekt ! Referencje mozliwosc ustawienia sciezki poszukiwania dll i exe Asemblacje wersje klasy czesciowe (partial) Przestrzenie nazw global aliasowanie Zakres widzialnosci internal (domyslny) protected internal zaprzyjaznianie: [assembly: InternalsVisibleTo("MyClient")] Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 18 / 31
  • 31. Komponenty na platformie .NET Wskazówki do budowy komponentu Modelowanie abstrakcji za pomoca interfejsów specjalizacja uzywanie ich zamiast konkretnych implementacji rzutowanie za pomoca operatora as Ukrywanie implementacji internal fasada i delegacje implementacja explicite Uzywanie kompatybilnosci binarnej osobne asemblacje do kontraktów i ich implementacji dodawanie funkcjonalnosci (bez usuwania!) Zarzadzanie zasobami — deterministyczna finalizacja Open() / Close() Dispose(), GC.SuppressFinalize(this) IDisposable, using Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 19 / 31
  • 32. Komponenty na platformie .NET Wskazówki do budowy komponentu Modelowanie abstrakcji za pomoca interfejsów specjalizacja uzywanie ich zamiast konkretnych implementacji rzutowanie za pomoca operatora as Ukrywanie implementacji internal fasada i delegacje implementacja explicite Uzywanie kompatybilnosci binarnej osobne asemblacje do kontraktów i ich implementacji dodawanie funkcjonalnosci (bez usuwania!) Zarzadzanie zasobami — deterministyczna finalizacja Open() / Close() Dispose(), GC.SuppressFinalize(this) IDisposable, using Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 19 / 31
  • 33. Komponenty na platformie .NET Wskazówki do budowy komponentu Modelowanie abstrakcji za pomoca interfejsów specjalizacja uzywanie ich zamiast konkretnych implementacji rzutowanie za pomoca operatora as Ukrywanie implementacji internal fasada i delegacje implementacja explicite Uzywanie kompatybilnosci binarnej osobne asemblacje do kontraktów i ich implementacji dodawanie funkcjonalnosci (bez usuwania!) Zarzadzanie zasobami — deterministyczna finalizacja Open() / Close() Dispose(), GC.SuppressFinalize(this) IDisposable, using Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 19 / 31
  • 34. Komponenty na platformie .NET Wskazówki do budowy komponentu Modelowanie abstrakcji za pomoca interfejsów specjalizacja uzywanie ich zamiast konkretnych implementacji rzutowanie za pomoca operatora as Ukrywanie implementacji internal fasada i delegacje implementacja explicite Uzywanie kompatybilnosci binarnej osobne asemblacje do kontraktów i ich implementacji dodawanie funkcjonalnosci (bez usuwania!) Zarzadzanie zasobami — deterministyczna finalizacja Open() / Close() Dispose(), GC.SuppressFinalize(this) IDisposable, using Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 19 / 31
  • 35. Komponenty na platformie .NET Rozwiazywanie zaleznosci Standardowo brak sensownego rozwiazania jedynie bezposrednie powiazanie (przez referencje) zaleznosc binarna koniecznosc wystepowania asemblacji o danej nazwie koniecznosc wystepowania uzywanych typów Mechanizmy introspekcji i refleksji introspekcja typów (odkrywanie interfejsów) replikacja (tworzenie nowych instancji) do zapoznania: Type, Assembly, Activator Wsparcie dla róznych rodzajów zaleznosci bezposrednia / natychmiastowa nowa instancja singleton leniwa (Lazy<T>) fabrykowalna (Func<T>) wyliczeniowa (Enumerable<T>) Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 20 / 31
  • 36. Komponenty na platformie .NET Rozwiazywanie zaleznosci Standardowo brak sensownego rozwiazania jedynie bezposrednie powiazanie (przez referencje) zaleznosc binarna koniecznosc wystepowania asemblacji o danej nazwie koniecznosc wystepowania uzywanych typów Mechanizmy introspekcji i refleksji introspekcja typów (odkrywanie interfejsów) replikacja (tworzenie nowych instancji) do zapoznania: Type, Assembly, Activator Wsparcie dla róznych rodzajów zaleznosci bezposrednia / natychmiastowa nowa instancja singleton leniwa (Lazy<T>) fabrykowalna (Func<T>) wyliczeniowa (Enumerable<T>) Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 20 / 31
  • 37. Komponenty na platformie .NET Rozwiazywanie zaleznosci Standardowo brak sensownego rozwiazania jedynie bezposrednie powiazanie (przez referencje) zaleznosc binarna koniecznosc wystepowania asemblacji o danej nazwie koniecznosc wystepowania uzywanych typów Mechanizmy introspekcji i refleksji introspekcja typów (odkrywanie interfejsów) replikacja (tworzenie nowych instancji) do zapoznania: Type, Assembly, Activator Wsparcie dla róznych rodzajów zaleznosci bezposrednia / natychmiastowa nowa instancja singleton leniwa (Lazy<T>) fabrykowalna (Func<T>) wyliczeniowa (Enumerable<T>) Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 20 / 31
  • 38. Komponenty na platformie .NET Rozwiazywanie zaleznosci Standardowo brak sensownego rozwiazania jedynie bezposrednie powiazanie (przez referencje) zaleznosc binarna koniecznosc wystepowania asemblacji o danej nazwie koniecznosc wystepowania uzywanych typów Mechanizmy introspekcji i refleksji introspekcja typów (odkrywanie interfejsów) replikacja (tworzenie nowych instancji) do zapoznania: Type, Assembly, Activator Wsparcie dla róznych rodzajów zaleznosci bezposrednia / natychmiastowa nowa instancja singleton leniwa (Lazy<T>) fabrykowalna (Func<T>) wyliczeniowa (Enumerable<T>) Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 20 / 31
  • 39. Komponenty na platformie .NET Rozwiazywanie zaleznosci Standardowo brak sensownego rozwiazania jedynie bezposrednie powiazanie (przez referencje) zaleznosc binarna koniecznosc wystepowania asemblacji o danej nazwie koniecznosc wystepowania uzywanych typów Mechanizmy introspekcji i refleksji introspekcja typów (odkrywanie interfejsów) replikacja (tworzenie nowych instancji) do zapoznania: Type, Assembly, Activator Wsparcie dla róznych rodzajów zaleznosci bezposrednia / natychmiastowa nowa instancja singleton leniwa (Lazy<T>) fabrykowalna (Func<T>) wyliczeniowa (Enumerable<T>) Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 20 / 31
  • 40. Komponenty na platformie .NET Rozwiazywanie zaleznosci Standardowo brak sensownego rozwiazania jedynie bezposrednie powiazanie (przez referencje) zaleznosc binarna koniecznosc wystepowania asemblacji o danej nazwie koniecznosc wystepowania uzywanych typów Mechanizmy introspekcji i refleksji introspekcja typów (odkrywanie interfejsów) replikacja (tworzenie nowych instancji) do zapoznania: Type, Assembly, Activator Wsparcie dla róznych rodzajów zaleznosci bezposrednia / natychmiastowa nowa instancja singleton leniwa (Lazy<T>) fabrykowalna (Func<T>) wyliczeniowa (Enumerable<T>) Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 20 / 31
  • 41. Komponenty na platformie .NET Rozwiazywanie zaleznosci Standardowo brak sensownego rozwiazania jedynie bezposrednie powiazanie (przez referencje) zaleznosc binarna koniecznosc wystepowania asemblacji o danej nazwie koniecznosc wystepowania uzywanych typów Mechanizmy introspekcji i refleksji introspekcja typów (odkrywanie interfejsów) replikacja (tworzenie nowych instancji) do zapoznania: Type, Assembly, Activator Wsparcie dla róznych rodzajów zaleznosci bezposrednia / natychmiastowa nowa instancja singleton leniwa (Lazy<T>) fabrykowalna (Func<T>) wyliczeniowa (Enumerable<T>) Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 20 / 31
  • 42. Komponenty na platformie .NET Przykładowy interfejs kontenera 1 p u b l i c i n t e r f a c e ICo n t a i n e r 2 f 3 void Re g i s t e r ( Assembly a s s embl y ) ; 4 void Re g i s t e r (Type t ype ) ; 5 void Re g i s t e r ( o b j e c t impl ) ; 6 void Re g i s t e r <T>(T impl ) where T : c l a s s ; 7 void Re g i s t e r <T>(Func<T> p r o v i d e r ) where T : c l a s s ; 8 9 T Re sol v e<T>() where T : c l a s s ; 10 g Specyfikacja na bitbuckecie Laboratoria Własny kontener dla komponentów .NET (bez koniecznosci implementacji konkretnego interfejsu). Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 21 / 31
  • 43. Komponenty na platformie .NET Przykładowy interfejs kontenera 1 p u b l i c i n t e r f a c e ICo n t a i n e r 2 f 3 void Re g i s t e r ( Assembly a s s embl y ) ; 4 void Re g i s t e r (Type t ype ) ; 5 void Re g i s t e r ( o b j e c t impl ) ; 6 void Re g i s t e r <T>(T impl ) where T : c l a s s ; 7 void Re g i s t e r <T>(Func<T> p r o v i d e r ) where T : c l a s s ; 8 9 T Re sol v e<T>() where T : c l a s s ; 10 g Specyfikacja na bitbuckecie Laboratoria Własny kontener dla komponentów .NET (bez koniecznosci implementacji konkretnego interfejsu). Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 21 / 31
  • 44. Wewnetrzna nomenklatura .Net Plan wykładu 1 Srodowisko .NET 2 Komponenty na platformie .NET 3 Wewnetrzna nomenklatura .Net 4 Podsumowanie Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 22 / 31
  • 45. Wewnetrzna nomenklatura .Net Wewnetrzna nomenklatura .Net Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 23 / 31
  • 46. Wewnetrzna nomenklatura .Net Klasa / Kontrolka / Komponent Zewnetrzne zasoby bez edytora ! IDisposable Edytor wizualny ! IComponent Edytor wizualny i interfejs uzytkownika ! Control Reszta — zwykłe klasy Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 24 / 31
  • 47. Wewnetrzna nomenklatura .Net Komponenty System.ComponentModel.IComponent Kontrola zewnetrznych zasobów — IDisposable Wsparcie dla edytora Przechowywanie w kontenerach Marshaling przez referencje — System.ComponentModel.Component przez wartosc — System.ComponentModel.MarshalByValueComponent Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 25 / 31
  • 48. Wewnetrzna nomenklatura .Net Kontrolki Interfejs uzytkownika Klasy bazowe: System.Windows.Forms.Control System.Web.UI.Control Kazda kontrolka to komponent Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 26 / 31
  • 49. Wewnetrzna nomenklatura .Net Kontenery i parcele Kontenery System.ComponentModel.IContainer zawieraja komponenty Parcele System.ComponentModel.ISite zarzadzanie i komunikacja z komponentami Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 27 / 31
  • 50. Podsumowanie Plan wykładu 1 Srodowisko .NET 2 Komponenty na platformie .NET 3 Wewnetrzna nomenklatura .Net 4 Podsumowanie Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 28 / 31
  • 51. Podsumowanie Podsumowanie Rewolucja w stosunku do dotychczasowego podejscia Niezaleznosc od jezyka i platformy dzieki IL Binarna kompatybilnosc wysokiej jakosci Wsparcie dla programowania komponentowego Wszystko moze byc komponentem Wytyczne dobrego programowania komponentowego Ułatwienia dla kontenerów Komponenty specjalne Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 29 / 31
  • 52. Podsumowanie Do domu Przeczytac rozdziały 2 – 4 „Programming .NET Components” Zapoznac sie z architektura .NET i klasami pomocniczymi Type, Assembly, Activator Lazy<T>, Func<T>, Enumerable<T> Stworzyc własny kontener rozwiazujacy zaleznosci miedzy komponentami wykorzystanie mechanizmów dostarczanych przez .NET (bez koniecznosci implementowania specyficznych interfejsów) zgodnosc ze specyfikacja na bitbuckecie oryginalnosc rozwiazan wersja binarna Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 30 / 31
  • 53. Podsumowanie Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #5 31 / 31