Transcript wyklad_00

Programowanie zaawansowane
Wprowadzenie
[email protected]
Waldemar Bartyna
1
Plan wykładu
1. Zagadnienia
2. Literatura
3. Filozofia platformy .NET
4. Elementy składowe platformy .NET
[email protected]
Waldemar Bartyna
2
Wprowadzenie
Pytania egzaminacyjne
[email protected]
Waldemar Bartyna
3
Zestaw_01
Platforma .NET
1.
Co to jest takiego ta cała platforma .NET?
2.
Jakie są jej najważniejsze cechy?
3.
Jakie elementy składają się na platformę .NET?
4.
Co to jest CLR?
5.
Co to jest CTS?
6.
Co to jest CLS?
7.
Co to jest CIL?
8.
Co to jest CLI?
[email protected]
Waldemar Bartyna
4
Zestaw_01 c. d.
Platforma .NET
9. Co to są pakiety?
10. Co to są typy i co do nich zaliczamy?
11. Jaka jest zależność między pakietami, przestrzeniami
nazw
i typami?
12. W jaki sposób wykonywane są programy na platformie
.NET?
[email protected]
Waldemar Bartyna
5
Zestaw_02
Filary OOP
13. Na czym polega OOP i jakie są jego trzy podstawowe
filary?
14. Na czym polega dziedziczenie?
15. Do czego wykorzystujemy słowa kluczowe protected,
base, sealed?
16. Na czym polega agregacja?
17. Na czym polega zagnieżdżanie?
Bartyna
18. Na czym polega Waldemar
delegacja?
[email protected]
6
Zestaw_03
Plimorfizm
19. Na czym polega polimorfizm?
20. Co to są abstrakcyjne klasy bazowe?
21. Co to jest interfejs polimorficzny?
22. Na czym polega nadpisywanie i zasłanianie składowych?
[email protected]
Waldemar Bartyna
7
Zestaw_04
Obsługa wyjątków
23. Czym charakteryzuje się klasa System.Object?
24. Na czym polega obsługa wyjątków?
25. Jakie są bloki i słowa kluczowe związane z obsługą
wyjątków?
26. Jak realizujemy przechwytywanie wielu wyjątków?
[email protected]
Waldemar Bartyna
8
Zestaw_05
Interfejsy
27. Co to jest interfejs?
28. Czym interfejs różni się od interfejsu polimorficznego?
29. W jaki sposób implementujemy interfejsy?
30. Do czego służą słowa kluczowe as i is?
31. Czym się różni jawna i niejawna implementacja interfejsów?
32. Co trzeba zrobić, aby po zawartości naszej klasy można było iterować za pomocą pętli
foreach
33. Czym się różnie płytkie i głębokie klonowanie?
34. Co trzeba zrobić, aby kolekcję naszych obiektów można było posortować?
[email protected]
Waldemar Bartyna
9
Typy generyczne
Zestaw_06
35. Co to są typy generyczne?
36. Na czym polega o/wypakowywanie i gdzie jest
wykorzystywane?
37. Wymień znane Ci kolekcje generyczne.
38. Co to są indeksery?
39. Na jakiej zasadzie działają metody generyczne?
[email protected]
Waldemar Bartyna
10
Zestaw_07
Delegaty
40. Co to są delegaty?
41. Co to są zdarzenia?
42. Co to są metody anonimowe?
43. Co to są wyrażenia lambda?
44. Na czym polega multicasting?
45. Na czym polega kowariancja i kontrkowariancja?
46. Co to są predykaty?
[email protected]
Waldemar Bartyna
11
Zestaw_08
Zaawans. konstrukcje w C#
47. Na czym polega niejawne typowanie zmiennych?
48. Co to są właściwości automatyczne?
49. Co to są metody rozszerzeniowe?
50. Co to są klasy i metody częściowe?
51. W jaki sposób wykorzystujemy inicjalizator obiektów?
52. Co to są typy anonimowe?
[email protected]
Waldemar Bartyna
12
LINQ
Zestaw_09
53. Co to jest LINQ?
54. Co mają wspólnego z LINQ metody rozszerzeniowe?
55. Na czym polega natychmiastowe i odroczone wykonanie
zapytań?
56. Na jakich obiektach może działać LINQ?
57. Jak dostosować kolekcje niegeneryczne do LINQ?
58. Na jakie trzy sposoby możemy definiować zapytania?
[email protected]
Waldemar Bartyna
13
Zestaw_10
ADO.NET
59. Co to jest ADO.NET?
60. Co to są dostawcy danych?
61. Wymień i opisz obiekty wspólne dla dostawców danych.
62. Opisz znaczenie dwóch warst technologii ADO.NET.
63. Wymień i omów typy związane z warstwą
bezpołączeniową.
64. W jaki sposób kontrolowana jest wersja rekordów?
[email protected]
Waldemar Bartyna
14
LINQ to ADO.NET
Zestaw_11
65. Jaka jest rola metody AsEnumerable() i Field<>()?
66. Co to są klasy encji?
67. Jaka jest rola typu DataContext?
68. Co otrzymujemy po automatycznym wygenerowaniu
DataSet?
69. Co jest rezulattem wykorzystania narzędzia LINQ to SQL?
[email protected]
Waldemar Bartyna
15
Zestaw_12
Refleksja
70. Co to są metadane? Jakie informacje zawierają?
71. Co to jest refleksja?
72. W jaki sposób można pobrać obiekt klasy Type?
73. Na czym polega dynamiczne ładowanie pakietów?
74. Na czym polega późne wiązanie?
75. Co to są atrybuty?
76. W jaki sposób można utworzyć rozszerzalną apikację?
[email protected]
Waldemar Bartyna
16
Serializacja
Zestaw_13
77. Na czym polega serializacja?
78. Co to są grafy obiektów?
79. Jakie znasz formaty serializacji? Czym się różnią?
80. Czym różni się API DOM od API LINQ to XML?
81. Na czym polega funkcyjne konstruowanie drzewa XML?
82. Jak wygląda hierarchia zależności klas w LINQ to XML
i co z niej wynika?
83. W jaki sposób pozyskujemy wartości węzłów w dokumencie?
[email protected]
Waldemar Bartyna
17
Wprowadzenie
Literatura
[email protected]
Waldemar Bartyna
18
Literatura
• Pro C# 5.0 and the .NET 4.5 Framework, 6th Editio
Andrew Troelsen
Apress 2012
• Professional ASP.NET MVC 5
Jon Galloway, Brad Wilson, K. Scott Allen, David Matson
Wiley Publishing, Inc. 2014
[email protected]
Waldemar Bartyna
19
Wprowadzenie
Filozofia platformy .NET
[email protected]
Waldemar Bartyna
20
Programowanie w C/Win32 API
• Programowanie w surowym API Win32
• Ręczne zarządzanie pamięcią
• Brzydka arytmetyka składników i konstrukcje
składniowe,
• Brak zalet związanych z projektowaniem obiektowym
• Tysiące funkcji globalnych i typów danych
zdefiniowanych w API Win32
[email protected]
Waldemar Bartyna
21
Programowanie w C++/MFC
• MFC (Microsoft Fundation Classes) stanowi zbiór klas
w języku C++, będących pośrednikiem do surowego API
Win32
• C++ można, pod wieloma względami, uznać za
obiektową górną warstwę języka C
• Można w nim wykorzystywać filary programowania
obiektowego
• Programiści nadal muszą się zmagać z takimi aspektami
języka C, jak ręczne zarządzanie pamięcią, itd.
[email protected]
Waldemar Bartyna
22
Programowanie w Visual Basic 6.0
• VB6 pozwala na budowanie skomplikowanego interfejsu
użytkownika, bibliotek kodu i logikę dostępu do danych
przy minimalnym nakładzie pracy.
• Jeszcze bardziej niż MFC ukrywa surowe API WIN32
• VB6 nie jest jednak językiem w pełni obiektowym,
• Brakuje klasycznego dziedziczenia,
• Nie daje możliwości budowy aplikacji wielowątkowych
[email protected]
Waldemar Bartyna
23
Programowanie w Java/J2EE
• Java to obiektowy język programowania, którego
składnia sięga korzeniami do języka C++
• Niezależność od platformy
• Duża liczba predefiniowanych pakietów
• Cel Javy: jeden język programowania spełniający
wszystkie wymagania
• Java pozwala na ograniczony dostęp do API innych
języków
• Obsługa prawdziwej integracji międzyjęzykowej jest
niewielka
[email protected]
Waldemar Bartyna
24
Wykorzystywanie COM
• COM (Component Object Model) - poprzednia rama
projektowa aplikacji Microsoft
• Jeżeli budujemy klasy zgodnie z zasadami COM,
uzyskamy blok kodu binarnego wielokrotnego użytku
• Dostęp do binarnego serwera COM można uzyskać
niezależnie od języka i lokalizacji
• Nie obsługuje klasycznego dziedziczenia
• Zmaganie się z bardzo podatnymi na błędy wpisami do
rejestru i licznymi problemami związanymi z wdrożeniem
(zbiorczo zwanymi piekłem DLLi)
[email protected]
Waldemar Bartyna
25
Programowanie w Windows DNA
• DNA (Distributed interNet Applications Architecture) –
oparta na COM architektura do tworzenia aplikacji
sieciowych
• Architektura jeszcze bardziej złożona niż COM
• Wymaga używania licznych technologii i języków, które,
ze składniowego punktu widzenia, mogą się od siebie
bardzo różnić
• Każdy język i/lub technologia ma własny system typów,
który może kompletnie się różnić od pozostałych
[email protected]
Waldemar Bartyna
26
Rozwiązanie .NET
• .NET Framework to kompletnie nowy model budowania
systemów w rodzinie systemów operacyjnych Windows,
Mac Os X i dystrybucjach Uniksa/Linuksa
• Platforma ta nie ma już nic wspólnego z architekturą
COM
• Jedyną możliwością interakcji między typami .NET
i COM jest użycie warstwy współpracy
[email protected]
Waldemar Bartyna
27
Najważniejsze funkcje .NET (1/3)
• Pełna współpraca z istniejącym kodem. Istniejące binarki
COM można mieszać z nowszymi binarkami .NET;
binarki w języku C (w tym bazowe API systemu
operacyjnego) można wywoływać z kodu .NET za
pomocą Pinvoke (Platform Invocation Service)
• Kompletna integracja języka. .NET obsługuje
międzyjęzykowe dziedziczenie, międzyjęzykową obsługę
wyjątków i międzyjęzykowe debugowanie kodu
[email protected]
Waldemar Bartyna
28
Najważniejsze funkcje .NET (2/3)
• Wspólny silnik uruchomieniowy, współużytkowany przez
wszystkie języki przeznaczone dla .NET. Jednym
z aspektów tego silnika jest dobrze zdefiniowany zbiór
typów, „rozumianych” przez każdy język działający na
platformie .NET.
• Pełna biblioteka klas bazowych. Stanowi ochronę przed
złożonością wywołań API i oferuje spójny model
obiektowy, używany przez wszystkie języki działające na
platformie .NET.
[email protected]
Waldemar Bartyna
29
Najważniejsze funkcje .NET (3/3)
• Koniec problemów z wewnętrzną strukturą COM.
• Uproszczony model wdrażania. W .NET nie trzeba
rejestrować jednostki binarnej w rejestrze systemowym.
Co więcej, .NET pozwala na istnienie w harmonii na
jednym komputerze wielu wersji tej samej biblioteki.
[email protected]
Waldemar Bartyna
30
Wprowadzenie
Elementy składowe platformę .NET
[email protected]
Waldemar Bartyna
31
Bloki tworzące platformę .NET
• Wspólne środowisko uruchomieniowe
• Wspólny system typów
• Specyfikacja wspólnego języka
• Biblioteka klas bazowych
[email protected]
Waldemar Bartyna
32
Wspólne środowisko uruchomieniowe (CLR)
• Wspólne środowisko uruchomieniowe (ang. Common
Language Runtime, CLR) ma przede wszystkim
znajdować i ładować typy .NET i zarządzać nimi
w imieniu programisty.
• Zajmuje się ono również wieloma szczegółami niskiego
poziomu:
–
–
–
–
–
zarządzanie pamięcią
tworzenie domen aplikacji
wątkami
granicami kontekstów obiektów
kwestiami związanymi z bezpieczeństwem.
[email protected]
Waldemar Bartyna
33
Wspólny system typów (CTS)
• Wspólny system typów (ang. Common Type System,
CTS) w pełni opisuje wszystkie możliwe typy danych
i konstrukcje programistyczne obsługiwane przez
środowisko .NET
• Określa, w jaki sposób typy te mogą się ze sobą
komunikować (na jakich zasadach)
• Szczegółowo omawia, jak typy są reprezentowane
w formacie metadanych
[email protected]
Waldemar Bartyna
34
Specyfikacja wspólnego języka (CLS)
• Specyfikacja wspólnego języka (ang. Common Language
Specification, CLS) definiuje podzbiór wspólnych typów
i konstrukcji programistycznych, co do których zgodne są
wszystkie języki programowania .NET
• Budując typy, które udostępniają wyłącznie funkcje
zgodne z CLS, możemy mieć pewność, że wszystkie
języki działające na platformie .NET będą mogły je
wykorzystywać
[email protected]
Waldemar Bartyna
35
Biblioteka klas bazowych
• Biblioteka klas bazowych jest dostępna dla wszystkich
języków programowania .NET
• Hermetyzuje funkcje pierwotne, takie jak wątki, plikowe
operacje wejścia/wyjścia, renderowanie grafiki,
komunikację z różnymi zewnętrznymi urządzeniami
• Zapewnia obsługę wielu usług wymaganych przez
większość aplikacji:
–
–
–
–
Dostęp do bazy danych
Manipulowanie dokumentami XML
Kwestie bezpieczeństwa
Tworzenie interfejsów graficznych
[email protected]
Waldemar Bartyna
36
CLR, CTS, CLS i biblioteka klas bazowych
Biblioteki klas bazowych
Dostęp do baz
danych
API pulpitowych
interfejsów graficznych
Bezpieczeństwo
API zdalnego dostępu
Tworzenie
wątków
Operacje
wejścia/wyjścia plików
Internetowe API
(i inne)
Wspólne środowisko uruchomieniowe (CLR)
Wspólny system typów (CTS)
Specyfikacja wspólnego języka (CLS)
[email protected]
Waldemar Bartyna
37
Język C#
• Nowy język programowania stworzony specjalnie
z myślą o platformie .NET
• Wiele konstrukcji składniowych jest modelowanych
– na podstawie VB6:
• Obsługa formalnych właściwości typu (w przeciwieństwie do
tradycyjnych metod odczytywania i ustaiania)
• Deklarowanie metod przyjmujących zmienną liczbę argumentów
– na podstawie C++:
• Przeciążanie operatorów
• Tworzenie struktur i typów wyliczeniowych
• Funkcje wywołań zwrotnych (za pomocą delegatów).
[email protected]
Waldemar Bartyna
38
Dodatkowe języki programowania .NET
• Platforma .NET została po raz pierwszy przedstawiona
w trakcie PDC 2000 (Microsoft Professional Developers
Conference)
• Od tamtej pory wielu producentów stworzyło wersje
swoich kompilatorów obsługujące tą platformę.
• Pięć jeżyków obecnych w Microsoft .NET Framework
3.5 SDK to C#, Visual Basic .NET, J#, C++/CLI i JScript
.NET
• Kolejno dodawane języki to Smalltalk, COBOL, Pascal i
wiele innych
• http://www.dotnetlanguages.net
[email protected]
Waldemar Bartyna
39
Wspólny język pośredni (CIL)
Kod źródłowy
C#
Kompilator C#
Kod źródłowy
Perl .NET
Kompilator Perl .NET
Kod źródłowy
COBOL .NET
Kompilator COBOL .NET
Kod źródłowy
C++/CLI
Kompilator C++/CLI
[email protected]
Waldemar Bartyna
Język pośredni
i metadane
(.dll lub .exe)
40
Pakiety (Assemblies)
• Po utworzeniu za pomocą kompilatora .NET pliku .dll lub
.exe, wynikowy moduł otrzymuje postać pakietu. Zawiera
on:
– Kod CIL (ang. Common Intermediate Language); pod
względem założeń jest on podobny do kodu bajtowego
Javy
– Metadane precyzyjnie opisujące cechy charakterystyczne
każdego typu
– Manifest – metadane opisujące sam pakiet, w tym
informacje o wersji, lokalizacji, listę zewnętrznych
pakietów niezbędnych do prawidłowego działania pakietu
[email protected]
Waldemar Bartyna
41
Typy
• Klasa; może się składać z dowolnej liczby składowych
(takich jak właściwości, metody i zdarzenia) oraz
punktów danych (pól)
• Interfejsy; nazwany zbiór deklaracji abstrakcyjnych
składowych, które mogą być implementowane przez
klasę lub strukturę
• Struktura; klasa wagi lekkiej z semantyką opartą na
wartościach
• Wyliczenie; pozwala na grupowanie par nazwa/wartość
• Delegat; odpowiednik wskaźników funkcji w C
[email protected]
Waldemar Bartyna
42
Silnik uruchomieniowy .NET
Kod źródłowy
.NET
Kompilator .NET
Pakiet .dll lub .exe
(CIL, metadane, manifest)
Silnik uruchomieniowy .NET
(mscoree.dll)
Biblioteka klas
bazowych
(mscorlib.dll
Itd.)
Moduł ładujący klasę
Kompilator JIT
Instrukcje dla
konkretnej platformy
Wykonanie
[email protected]
Waldemar Bartyna
43
Wprowadzenie
Dziękuję za uwagę
[email protected]
Waldemar Bartyna
44