Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

PLATFORMY TECHNOLOGICZNE ELEMENTY JĘZYKA C# mgr inż. Tomasz Gawron.

Podobne prezentacje


Prezentacja na temat: "PLATFORMY TECHNOLOGICZNE ELEMENTY JĘZYKA C# mgr inż. Tomasz Gawron."— Zapis prezentacji:

1 PLATFORMY TECHNOLOGICZNE ELEMENTY JĘZYKA C# mgr inż. Tomasz Gawron

2 O mnie  mgr inż Tomasz Gawron  WETI 624  gawron@eti.pg.gda.pl gawron@eti.pg.gda.pl  Zachęcam do wypełniania ankiet 2 Platformy Technologiczne 2014

3 Czym jest.NET  Platforma nie związana z językiem programowania  Środowisko uruchomieniowe (CLR)  Biblioteka klas (BCL)  Jezyk pośredni (MSIL)  Automatyczne zarządzanie:  Kodem  Pamięcią  Wyjątkami  Implementacje OpenSource (Mono, Rotor) 3 Platformy Technologiczne 2014

4 Zadada działania Platformy Technologiczne 2014 4

5 Stos platformy Platformy Technologiczne 2014 5

6 Windows 8 Platformy Technologiczne 2014 6

7 Czym jest C#  Stworzony specjalnie dla.NET  Zbliżony składniowo do C++ i Javy  Posiada IDE (Visual Studio)  Obiektowy, obsługuje zdarzenia (event-driven)  Może współpracować z komponentami stworzonymi w innych językach  Język zarządzany (obsługiwany przez garbage collector) 7 Platformy Technologiczne 2014

8 Struktura programu 8 Platformy Technologiczne 2014

9 Typy zmiennych Platformy Technologiczne 2014 9 TypMożliwe wartości Typ wartościwyWartość zdefiniowanego typu Typ wartościowy „nullable”Wartość zdefiniowanego typu lub null ObiektNull, referencja do obiektu dowolnego typu, referencja do boxowanej wartości dowolnego typu KlasaNull, referencja do instancji klasy, referencja do instancji klasy dziedziczącej Interfejs Null, referencja do instancji klasy implementującej interfejs, referencja do boxowanej wartości typu implementującego interfejs TablicaNull, referencja do instancji tablicy danego lub kompatybilnego typu DelegatNull, referencja do instancji typu delegatu

10 Typy wartościowe Platformy Technologiczne 2014 10  Typy całkowite  (8 bit)byte (0, 2 8 -1), sbyte (-2 7, 2 7 -1)  (16 bit)short (-2 15, 2 15 -1), ushort  (32 bit)int(-2 31, 2 31 -1), uint  (64 bit)long (-2 63, 2 63 -1), ulong  Typy zmiennoprzecinkowe  (32 bit)float (±1,5*10 -45,±3,4*10 38 ) float x = 0.5f;  (64 bit)double (±5,0*10 -324,±1,7*10 308 ) double x = 0.5;  Typy binarne  bool

11 Typy wartościowe „nullowalne” Platformy Technologiczne 2014 11  Oprócz standardowych wartości mogą przyjmować również null  Definicja ze znakiem zapytania:  Dodatkowe właściwości:  HasValue (wartość binarna sprawdzająca czy zmienna nie jest null)  Value  Operator „??”  Gdy pierwsza wartość jest null, przekaż wartość drugą int? i = null; int x = a ?? b;

12 Klasy Platformy Technologiczne 2014 12  Modyfikatory dostępu:  Public  Private  Protected Dostępne dla klasy oraz innych po niej dziedziczących  Internal Dostępne w ramach jednego assembly  Elementy klasy:  Stałe, pola, metody, właściwości, indeksery, zdarzenia, operatory, konstruktory, destruktory  Elementy statyczne / instancji  Typy zagnieżdżone

13 Klasy Platformy Technologiczne 2014 13  Dziedziczenie po jednej klasie  Implementacja wielu interfejsów

14 Konstruktory klas Platformy Technologiczne 2014 14  Konstruktor jest metodą wywoływaną podczas tworzenia nowej instancji klasy  Posiada taką samą nazwę jak klasa  Nie zwraca żadnych wartości  Nie ma potrzeby jawnej deklaracji  Może być przeciążony

15 Klasy wieloplikowe Platformy Technologiczne 2014 15  W C# definicję klasy można podzielić pomiędzy wiele plików (np. WinForms)  Wszystkie pliki muszą być dostępne w czasie kompilacji //Plik1.cs partial class Klasa1 { //częściowa definicja klasy } //Plik2.cs partial class Klasa1 {//częściowa definicja klasy }

16 Struktury Platformy Technologiczne 2014 16  Struktury są zawsze wartościami  Mogą zawierać pola, interfejsy, funkcje składowe i konstruktory z argumentami  Przypisanie kopiuje dane nie referencję  Brak możliwości dziedziczenia (tylko implementacja interfejsów)

17 Struktury vs. klasy  Struktury są wydajniejsze przy lekkich obiektach (np. punkt) – nie wymagana obsługa przez GC  Wydajniejsze zużycie pamięci (zajmują „mniej miejsca” niż analogiczne klasy)  Większe zużycie zasobów przy niektórych operacjach (kopiowanie)  Kiedy korzystać ze struktur zamiast klas:  Tworzony obiekt jest mały  Będziemy tworzyć wiele obiektów (setki, tysiące)  Wartości pól nie zmieniają się w cyklu życia obiektu 17 Platformy Technologiczne 2014

18 Interfejsy Platformy Technologiczne 2014 18  Zbiór funkcji pod wspólną nazwą  Same deklaracje - brak implementacji  Wszystkie składowe publiczne  Wielokrotne dziedziczenie  Elementy:  metody, właściwości, indeksery, zdarzenia

19 Interfejsy Platformy Technologiczne 2014 19  Klasę implementującą jeden lub wiele interfejsów można traktować jako klasę należącą do wielu typów. Może być postrzegana jak instancja typu każdego z implementowanych interfejsów  Możliwość traktowania odmiennych klas w podobny sposób, jeśli implementują ten sam interfejs interface INazwa{ void f(); String Wlasciwosc{ get; set; } event EventHandler zdarzenie; //int i; - błąd } class Klasa : INazwa { String s; public virtual void f(){...} public virtual String Wlasciwosc { get {return s;} set {s = value;} } public virtual event EventHandler zdarzenie; } //Słowo virtual jest opcjonalne

20 Implementacja interfejsu Platformy Technologiczne 2014 20  Niejawna  Jawna interface Interfejs1 { void f(); } class Klasa : Interfejs1 { public void f() { Console.WriteLine("Implementacja w sposób niejawny"); } } interface Interfejs1 { void f(); } class Klasa : Interfejs1 { void Interfejs1.f() { Console.WriteLine("Implementacja w sposób jawny"); } }

21 Enum Platformy Technologiczne 2014 21  Silnie typowane typy wyliczeniowe  Brak jawnej konwersji na int  Zawierające zbiór nazwanych stałych  Nie mogą być deklarowane wewnątrz metody  Można jawnie zadeklarować typ  Kod staje się czytelniejszy

22 Generyczność Platformy Technologiczne 2014 22  Tworzenie kodu, dla którego typ parametrów zostanie określony później  Korzyści  Kod jest bardziej uniwersalny  Unikamy problemów z rzutowaniem/odpowiednim doborem typów  Z mechanizmów generyczności mogą korzystać  Klasy  Metody  Interfejsy  Delegaty  Jednowymiarowe tabele  Najczęstsze wykorzystanie – kolekcje  System.Collections.Generic

23 Generyczność - przykłady Platformy Technologiczne 2014 23  Generyczne metody  Ograniczenia dla generycznych parametrów

24 Tablice Platformy Technologiczne 2014 24  Deklaracja:  Cechy tablic:  Jednorodność  Swobodny dostęp  Stała liczba elementów  Ciągłość pamięciowa int[] tab = new int[4]; float[,,] tab2 = new float[3, 3, 3];

25 Kolekcje Platformy Technologiczne 2014 25  System.Collections oraz System.Collections.Generic NazwaPorządekBezpośredni dostępOpis / Zastosowanie DictionaryBrakKluczKolekcja typu klucz – wartość. Klucze muszą być unikalne. Umożliwia bardzo szybkie wyszukiwanie i wstawianie elementów – O(1) SortedDictionaryPosortowanyKluczPosortowana kolekcja Dictionary oparta na drzewach binarnych. ListBrakIndeksKorzystna przy małych kolekcjach bez konieczniści sortowania. LinkedListBrakIndeksKorzystna przy strukturze często wstawiajacej wartości w środkowe elementy SortedListPosortowanyIndeksPosortowana lista – drzewo binarne przechowywane w tablicy umożliwia szybsze wyszukiwanie HashSetBrakKluczKolekcja klucz – wartość z identycznym typem klucza i wartości SortedSetPosortowanyKluczPosortowany HashSet StackLIFOTylko góraLista przetwarzana w strategii dostępu LIFO QueueFIFOTylko początekLista przetwarzana w strategii dostępu FIFO

26 Kolekcje - przykłady  Dictionary  List 26 Platformy Technologiczne 2014

27 Porównywanie obiektów Platformy Technologiczne 2014 27  IComparable (interfejs dla typów posiadających porządek)  IComparer (interfejs realizujący porównanie i porządkowanie obiektów) public interface IComparable { int CompareTo(object obj); // 0 if this > obj } public interface IComparable { int CompareTo(T obj); // 0 if this > obj } public interface IComparer { int Compare(object x, object y); // 0 if x > y } public interface IComparer { int Compare(T x, T y); // 0 if x > y }

28 Porównywanie obiektów - przykład Platformy Technologiczne 2014 28  Definicja klasy  Sortowanie  A może inaczej?

29 Pętle  For  Foreach  Kolekcja musi implementować interfejs IEnumerable  While  Do… while 29 Platformy Technologiczne 2014 int number = 0; while(number < 5) {number = number + 1;} int number = 0; do { number = number + 1; } while(number < 5); int number = 5; for(int i = 0; i < number; i++) { Console.WriteLine(i); } ArrayList list = new ArrayList(); list.Add(„Jan Kowalski"); list.Add(„Adam Nowak"); foreach(string name in list) { Console.WriteLine(name); }

30 Delegaty Platformy Technologiczne 2014 30  Zorientowane obiektowo wskaźniki na metody  Zastępuje wskaźniki do funkcji  Sygnatura i typ wartości zwracanej delegacji musi być identyczny jak funkcji którą reprezentuje  Pozwala wywołać dowolną metodę z dowolnego obiektu  Dwa typy:  System.Delegate  System.MulticastDelegate

31 Definiowanie i używanie delegatów Platformy Technologiczne 2014 31 Deklaracja delegatu delegate void Notifier (string sender);// ordinary method signature // with the keyword delegate Deklaracja zmiennej delegatu Notifier greetings; Przypisanie metody void SayHello(string sender) { Console.WriteLine("Hello from " + sender); } greetings = new Notifier(SayHello);// or just:greetings = SayHello; Wywołanie delegacji greetings("John");// invokes SayHello("John") => "Hello from John"

32 System.MulticastDelegate Platformy Technologiczne 2014 32  Delegat zawierający referencję do kilku metod Notifier greetings; greetings = SayHello; greetings += SayGoodBye; greetings("John");// "Hello from John" // "Good bye from John" greetings -= SayHello; greetings("John");// "Good bye from John"

33 Metody anonimowe Platformy Technologiczne 2014 33  Metoda jest tworzona dynamicznie  Ma wszystkie funkcjonalności metod „jawnych”  Przykład:  „f” jest delegatem int a = 12; f += delegate(int b) {return a * b; }

34 Wyrażenia lambda Platformy Technologiczne 2014 34  Mogą zastępować anonimowe delegaty  Składnia:  (parametry wejściowe) => (operacje) IEnumerable allJohns = allNames.Where(x => x.Equals("John"));

35 Func Platformy Technologiczne 2014 35  Składnia:  Func Delegate  Pozwala na enkapsulację metody przyjmującej parametry wejściowe T i zwracającej parametr typu TResult

36 Action Platformy Technologiczne 2014 36  Składnia:  Action Delegate  Action nie zwraca wyniku

37 Przesyłanie argumentów do metod Platformy Technologiczne 2014 37  Wartość  Referencja  Parametr wyjściowy static void Nazwa(int x){...} int a = 5; Nazwa(a); static void Nazwa(ref int x){...} int a = 5; Nazwa(ref a); static void Nazwa(out int x){...} int a; Nazwa(out a);

38 Przesyłanie argumentów do metod Platformy Technologiczne 2014 38  Istnieje możliwość wywoływania metod bez podania wszystkich parametrów  Metody mogą posiadać nazwy parametrów w swich wywołaniach

39 Właściwości Platformy Technologiczne 2014 39  Definicja wirtualnego atrybutu  Dostęp definiowany przez „get” oraz „set”  Korzyści:  Pojęcie reprezentuje pewien atrybut klasy, ale w celu jego implementacji trzeba wywołać pewne funkcje  Jedną wartość można w prosty sposób obliczyć na podstawie drugiej  Dostęp do pola klasy musi być kontrolowany w celu zapewnienia spójności (poprawności) obiektu  Ukrycie implementacji (typu)

40 Automatyczne właściwości Platformy Technologiczne 2014 40  Wprowadzone w C# 3.0  Uproszczenie kodowania

41 Indekser Platformy Technologiczne 2014 41  Oferuje sposób dostępu do kolekcji wartości utrzymywanych w ramach pojedynczego obiektu klasy  1 klasa = 1 indekser

42 Inicjalizatory Platformy Technologiczne 2014 42  Pozwalają na uproszczone przypisywanie wartości do publicznych pól klasy  Można z nich korzystać przy inicjalizacji struktur

43 Zmienne niejawnie typowane Platformy Technologiczne 2014 43  Zmienna typu var  Kompilator zawsze generuje statyczną, silnie typowaną referencję na podstawie aktualnej wartości  Ograniczenia:  Wartość musi być zainicjalizowana przy deklaracji  Nie może być zainicjalizowana jako null  Typ musi być dostępnu dla kompilatora  Nie mogą być polami klas  Nie mogą być parametrami metody var f = 3.0f;

44 Zmienne niejawnie typowane Platformy Technologiczne 2014 44  Zmienna typu dynamic  Nowy typ wprowadzony w C# 4.0  Traktowany jak System.Object  Zgodność typów sprawdzana w runtime  Może być polem klasy  Może przyjmować wartości różnego typu  Może być parametrem metody

45 var vs. dynamic Platformy Technologiczne 2014 45  Mniejsze ograniczenia  Dynamiczna zmiana typów

46 Typy anonimowe Platformy Technologiczne 2014 46  Tworzone dynamicznie przy użyciu zmiennych niejawnych  Dobra metoda enkapsulacji właściwości tylko do odczytu  Typy są generowane dynamicznie na poziomie kompilatora  Wykorzystanie w LINQ

47 Metody rozszerzające Platformy Technologiczne 2014 47  Umożliwiają rozszerzanie istniejących klas o nowe metody  Metoda musi być zdefiniowana jako statyczna public static class Extensions { public static int Increment(this int i) { return ++i; } //wywołanie int i = 0; int j = i.Increment();

48 Wyjątki Platformy Technologiczne 2014 48  Wyjątek jest sytuacją, która nie może być rozwiązana w danym kontekście aplikacji (dzielenie przez 0, błąd połączenia z bazą danych)  Zgłoszenie wyjątku oznacza, że wystąpiła błędna sytuacja, której aplikacja nie potrafi sama rozwiązać  Wyjątek powinien być przechwycony w kodzie oraz odpowiednio obsłużony poprzez przekazanie sterowania do właściwego bloku  Standardowym procesem obsługi wyjątków jest zgłoszenie i zalogowanie błędu oraz zakończenie błędnego procesu

49 Wyjątki Platformy Technologiczne 2014 49  Wyjątki mogą pojawiać się na różnych poziomach abstrakcji  Sprzętu / systemu operacyjnego Dzielenie przez 0 Stack overflow  Języka Niepoprawna konwersja Null pointer exception Błędy rzutowania  Programu Wyjątki zdefiniowane przez użytkownika

50 Typy wyjątków Platformy Technologiczne 2014 50 TypOpis ExceptionNajbardziej ogólna klasa, może reprezentować wszystkie wyjątki, dziedziczą po niej wszystkie klasy wyjątków. Dzieli się na 2 podgrupy (ApplicationException, SystemException ) ApplicationExceptionWyjątki specyficzne dla danej aplikacji SystemExceptionKlasa ogólna dla predefiniowanych wyjątków ArithmeticExceptionZgłaszany w razie wystąpienia błędu podczas operacji arytmetycznych lub konwersji FormatExceptionZgłaszany np. przez metody klasy Convert, gdy podany napis nie reprezentuje wartości, do której chcemy go przekonwertować NullReferenceExceptionZgłaszany, kiedy używana jest zmienna referencyjna, która ma wartość null OutOfMemoryExceptionZgłaszany, kiedy występuje niewystarczająca ilość pamięci IndexOutOfRangeExceptionZgłaszany, gdy następuje odwołanie do nieistniejącego elementu tablicy ArgumentExceptionZgłaszany w przypadku, kiedy jeden z argumentów dostarczanych do metody jest nieprawidłowy

51 Obsługa wyjątków Platformy Technologiczne 2014 51

52 Obsługa wyjątków Platformy Technologiczne 2014 52  Powinniśmy zawsze starać się złapać jak najbardziej szczegółowy wyjątek, np ArithmeticException a nie Exception  Mechanizm wyjatków nie może służyc do maskowania błedów – przechwycony wyjątek musi być obsłużony

53 Antywzorce w obsłudze wyjątków  Log and throw  Catch and Ignore  Rzucanie wyjątków w bloku finally  Log and return null  Destructive wrapping 53 Platformy Technologiczne 2014

54 System.IO - Strumienie Platformy Technologiczne 2014 54 FileStreamMemoryStreamNetworkStream Stream BinaryReader BinaryWriter … TextReader StreamReaderStringReader TextWriter StreamWriterStringWriter

55 Strumienie - operacje 55  FileStream  MemoryStream Platformy Technologiczne 2014

56 Operacje na strukturze plików Platformy Technologiczne 2014 56  Wszystkie klasy znajdują się w System.IO  Directory, DirectoryInfo  Operacje na katalogach  File, FileInfo  Operacje na plikach  Path  Operacje na tekście zawierającym informacje o ścieżce dostępu do pliku lub katalogu  FileSystemWatcher  Monitoring systemu plików

57 Operacje na strukturze plików - przykłady Platformy Technologiczne 2014 57

58 System.String Platformy Technologiczne 2014 58  Służy do obsługi ciągów znaków  Porównywane wg wartości  Zmodyfikowane zapisywane są pod innym adresem Metody Opis Compare()porównanie dwóch łańcuchów Concat()utworzenie nowego łańcucha z jednego lub większej liczby Copy()utworzenie nowego łańcucha przez przekopiowanie zawartości Chars[]indekser łańcucha Insert()zwraca nowy łańcuch z dostawionym nowym łańcuchem Remove()usunięcie z łańcucha określonej liczby znaków Split()rozbicie łańcucha na podłańcuchy przy założonym zbiorze ograniczników StartsWith()wskazuje czy łańcuch rozpoczyna się od określonych znaków Substring()wyłuskanie podłańcucha ToLower()zwraca kopię łańcucha składającego się z małych liter Trim()wyrzucenie określonego zbioru znaków z początku i końca łańcucha

59 System.String Platformy Technologiczne 2014 59  Obsługa znaków specjalnych w ciągach (zastosowanie „@”) string rst1 = "Hi there!"; string vst1 = @"Hi there!"; string rst2 = "It started, \"Four score and seven...\""; string vst2 = @"It started, ""Four score and seven..."""; string rst3 = "Value 1 \t 5, Val2 \t 10"; // Interprets tab esc sequence string vst3 = @"Value 1 \t 5, Val2 \t 10"; // Does not interpret tab string rst4 = "C:\\Program Files\\Microsoft\\"; string vst4 = @"C:\Program Files\Microsoft\"; string rst5 = " Print \x000A Multiple \u000A Lines"; string vst5 = @" Print Multiple Lines";

60 StringBuilder Platformy Technologiczne 2014 60  Zastosowanie do tworzenia i przetwarzania ciągów znaków  Ciągi są przechowywane w buforze – operacje zazwyczaj są szybsze i zużywają mniej zasobów  Zaleca się korzystanie ze StringBuilder przy przetwarzaniu stringów w dużych pętlach  Namespace System.Text

61 StringBuilder - wydajność Platformy Technologiczne 2014 61 Źródło: http://www.dotnetperls.com/stringbuilder.png

62 Wyrażenia regularne Platformy Technologiczne 2014 62  Wzorce opisujące łańcuchy / ciągi znaków  Funkcjonalności dostępne w System.Text.RegularExpressions  Przykładowe wyrażenia regularne

63 Wyrażenia regularne Platformy Technologiczne 2014 63  Przydatne symbole SymbolDziałanie \Następny znak jako znak specjalny (\n = nowa linia, \\ = ‘\’) ^Wzorzec musi wystąpić na początku ciągu $Wzorzec musi wystąpić na końcu ciągu *Poprzedzający wzorzec występuje 0-n razy +Poprzedzający wzorzec występuje 1-n razy !Poprzedzający wzorzec występuje 0 lub 1 razy {n, m}Poprzedzający wzorzec występuje od n do m razy

64 Konwersja typów Platformy Technologiczne 2014 64  Do konwersji z ciagów znaków na liczby mogą służyć dwie metody  Parse W przypadku błędnej konwersji działanie kończy się wyjątkiem  TryParse W przypadku błednej konwersji zwraca status operacji  Inne rodzaje konwersji typów udostępnia klasa Convert

65 Konwersja klas Platformy Technologiczne 2014 65  Dwa sposoby na rzutowanie obiektów na inne typy  () Rzutowanie jednego typu na drugi W przypadku niepowodzenia generuje wyjątek  as Konwersja jednego typu na drugi W przypadku niepowodzenia otrzymujemy null Nie wspiera konwersji definiowanych przez użytkownika

66 Wątki Platformy Technologiczne 2014 66  Zapewnienie równoległego wykonania  Prawdziwe zrównoleglanie tylko w instancjach wieloprocesorowych  Wątki a procesy  „tańsza” komunikacja w ramach wątków jednego procesu  wspólna pula adresowa dla wątków

67 System.Threading.Thread Platformy Technologiczne 2014 67  Instancję nowego wątku tworzymy za pomcą delegata ThreadStart  Lista metod MetodaDziałanie StartStartuje wątek AbortKończy wątek, generuje wyjątek ThreadAbortException SleepBlokuje wątek na przekazaną ilość milisekund JoinBlokuje wątek tworzący do czasu zakończenia operacji/wątku Priority(Property)Pozwala na zdefiniowanie ważności wątku (ThreadPriority) FinalizeZwalnia wszystkie zasoby wykorzystywane przez wątek Alpha oAlpha = new Alpha(); Thread oThread = new Thread(new ThreadStart(oAlpha.Beta));

68 Synchronizacja wątków Platformy Technologiczne 2014 68  Sekcja krytyczna – fragment kodu, który może być wykonywany przez jeden wątek  Tworzenie sekcji krytycznych  Lock  Monitory  Przerwania

69 Lock Platformy Technologiczne 2014 69  Blokuje wielowątkowe wykonanie kodu  Zapewnia sekwencyjny dostęp  Wykorzystywany przy dostępie do współdzielonej pamięci public int Increment(ref int x) { lock (this) { return ++x; }

70 Pula wątków Platformy Technologiczne 2014 70  Umożliwia zarządzanie grupą wątków  Wykorzystywana podczas tworzenia wielowątkowych zadań wykonujących zbliżone operacje  Wielowątkowe obliczanie ciągu Fibonacciego  Wątek po zakończeniu wraca do puli  Dodanie wątku do puli:

71 Wielowątkowość w aplikacjach  Thread / ThreadPool  Może być zastosowany w każdego typu aplikacjach  Do stosowania gdy GUI nie wymaga informacji o stanie wątków  BackgroundWorker  Do stosowania w aplikacjach z GUI  Udostępnia zdarzenia pozwalające monitorować wątek z poziomu GUI  Umożliwia interakcję wątku z GUI 71 Platformy Technologiczne 2014

72 Task Parallel Library Platformy Technologiczne 2014 72  „Wielowątkowość dla mas” Scott Hanselmann©  Prostsze API ułatwiające wytwarzanie aplikacji wielowątkowych  Dzieli się na trzy grupy  Data Parallelism  Task Parallelism  Parallel LINQ

73 Zrównoleglanie pętli Platformy Technologiczne 2014 73  Możemy zrównoleglić for lub foreach  Przydatne przy przetwarzaniu niezależnych od siebie zestawów danych  Dane przetwarzane w aktualnym kroku nie mogą być zależne od wyników działania poprzedniej iteracji  Struktura:  Operacje w pętli nie są wykonywane sekwencyjnie

74 Zrównoleglanie pętli - przykłady Platformy Technologiczne 2014 74  Parallel.For  Parallel.ForEach

75 Zrównoleglanie pętli - wyjątki Platformy Technologiczne 2014 75  Po wystąpieniu wyjątku stare iteracje kończą swoją pracę, nowe nie rozpoczynają się  Wyjątki mogą nawarstwiać się  AggregateException  Wyjątki mają wyższy priorytet niż operacje kończące pętlę

76 Zrównoleglanie pętli - wyjście  Parallel.Break  Wykorzystuje ParallelLoopState  Nie zatrzymuje działających iteracji  Wykonają się iteracje z mniejszym indeksem  Parallel.Stop  Nie może być użyty razem z Parallel.Break  Szybszy niż Parallel.Break  Nie wykonują się iteracje z mniejszym indeksem 76 Platformy Technologiczne 2014

77 Zrównoleglanie operacji Platformy Technologiczne 2014 77  Task zamiast Thread  Bardziej rozbudowane API umożliwiające łatwiejsze zarządzanie  Przechwytywanie wyniku

78 Zrównoleglanie operacji Platformy Technologiczne 2014 78  Szeregowanie zadań  Oczekiwanie na ukończenie grupy zadań

79 Asynchroniczność Platformy Technologiczne 2014 79  async i await wprowadzone w C# 5.0  Oparte na metodach  Kod przypomina „zwykły”, ciężar przerzucony na kompilator  Dlaczego warto korzystać:  Lepsze wrażenia użytkownika (zwłaszcza podczas operacji na GUI)  Wydajniejsze przetwarzanie

80 async / await Platformy Technologiczne 2014 80  Sygnatura metody  Przepływ sterowania

81 async / await Platformy Technologiczne 2014 81  Jak to działa? Żródło: http://i.msdn.microsoft.com/dynimg/IC612215.png

82 Wskaźniki i kod niezarządzany Platformy Technologiczne 2014 82  W C# możemy w szczególnych przypadkach korzystać z kodu niezarządzanego (komunikacja z systemem, elementy wymagające zwiększonej wydajności, …)  Słowo kluczowe unsafe  Wymaga zmiany ustawienia kompilatora

83 P/Invoke Platformy Technologiczne 2014 83  Platform Invoke pozwala na wywoływanie z poziomu kodu.NET obiektów niezarządzanych  biblioteki dll, obiekty COM, dostęp do WIN32 API, …  Użycie atrubutu [DllImport]  Kroki:  Zlokalizowanie implementowanej biblioteki  Załadowanie biblioteki do pamieci  Znalezienie adresu funkcji i przesłanie argumentów na stos  Przekazanie kontroli do kodu niezarządzanego

84 P/Invoke Platformy Technologiczne 2014 84 using System; using System.Runtime.InteropServices; class Class1 { [DllImport("user32.dll", CharSet=CharSet.Auto)] static extern int MessageBox(IntPtr hWnd, String text, String caption, int options); [STAThread] static void Main(string[] args) { MessageBox(IntPtr.Zero, "Text", "Caption", 0); }

85 Przetwarzanie XML Platformy Technologiczne 2014 85  System.XML

86 Odczyt XML w C# Platformy Technologiczne 2014 86

87 Zapis XML w C# Platformy Technologiczne 2014 87

88 XPath Platformy Technologiczne 2014 88  Ułatwia wyszukiwanie w XML pozwalając iterować po kolekcji węzłów  Podstawowe elementy (namespace System.Xml.XPath)  XPathDocument – dokument XML  XPathNavigator – przetwarzanie i parsowanie zapytań XPath  XPathNodeIterator – iterator po liście wynikowej

89 Serializacja Platformy Technologiczne 2014 89  Serializacja – proces zamiany obiektów na strumień danych  Deserializacja – zamiana strumienia danych na obiekt  Bazowo dostępne rodzaje serializacji:  Binarna – tworzy binarną reprezentację danych za pomocą klasy BinaryFormatter  SOAP – serializowanie do strumienia XML zgodnego ze standardami SOAP (SoapFormatter)  XML – serializowanie do strumienia XML (XmlSerializer)

90 Serializacja binarna Platformy Technologiczne 2014 90 // Załadowanie obiektu Chair do Hashtable Hashtable ht = new Hashtable(); // Chair i Upholstery muszą mieć atrybut [Serializable] Chair ch = new Chair(100.00D, "Broyhill", "10-09"); ch.myUpholstery = new Upholstery("Cotton"); ht.Add("10-09", ch); // (1) Serializacja // Stworzenie pliku docelowego FileStream fs= new FileStream("c:\\chairs.dat", FileMode.Create); BinaryFormatter bf= new BinaryFormatter(); bf.Serialize(fs,ht); fs.Close(); // (2) Deserializacja pliku do Hashtable ht.Clear(); fs = new FileStream("c:\\chairs.dat", FileMode.Open); ht = (Hashtable) bf.Deserialize(fs); fs.Close();

91 Serializacja binarna - zdarzenia Platformy Technologiczne 2014 91 ZdarzenieAtrybutOpis OnSerializing[Serializing]Wywoływany przed serializacją; Dla każdego obiektu oddzielne wywołanie OnSerialized[Serialized]Wywołanie po serializacji; Dla każdego obiektu oddzielne wywołanie OnDeserializing[Deserializing]Wywoływany przed deserializacją; Dla każdego obiektu oddzielne wywołanie OnDeserialized[Deserialized]Wywołanie po deserializacji; Dla każdego obiektu oddzielne wywołanie public class Chair { [OnDeserialized] void OnDeserialized(StreamingContext context) { /* some logic */ } }

92 Serializacja XML Platformy Technologiczne 2014 92  Elementy tworzone na podstawie serializowanych obiektów klasy domyślnie otrzymują nazwy zgodne z nazwami reprezentowanych właściwości.  Istnieją Atrybuty serializacji, za pomocą których możemy przykrywać domyślne nazwy elementów. XmlElementZmienna lub właściwość zostanie podczas serializacji zapisana jako węzeł XmlAttributeDołączony do pola klasy powoduje wygenerowanie jako atrybutu w elemencie. XmlIgnorePole jest omijane podczas serializacji. XmlTextAtrybut dołączony do pola powoduje serializację jako tekstu. Nazwa pola zostaje ominięta.

93 Serializacja XML - przykład Platformy Technologiczne 2014 93 public class movies { public int movieID {} public string movie_Title {} public int movie_Year {} public string movie_Director {} public string bestPicture {} [XmlElement("AFIRank")] public int rank {} } 5 Citizen Kane 1941 Orson Welles Y 1

94 Garbage Collector Platformy Technologiczne 2014 94  Służy do zarządzania pamięcią  Różne cele na różnych maszynach (serwer / stacja robocza)  Namespace System.GC  Podstawowe techniki:  Zliczanie referencji  Graf osiągalności (reachabiliy graph)  Nie zaleca się manualnego wywoływania

95 Finalizatory Platformy Technologiczne 2014 95  Uruchamiane przez GarbageCollector przed zwolnieniem zasobu  Wywoływane niedeterministycznie  Można wymusić automatyczne wywołanie  GC.SuppressFinalize  Finalizacja wymaga 2 cykli GarbageCollectora  1 – przesuniecie obiektu do kolejki finalizacji, wywołanei finalizatora  2 – zwolnienie zaalokowanej pamięci

96 Destruktory Platformy Technologiczne 2014 96  Wołane, gdy obiekt „ulega zniszczeniu”  Wykorzystywane do zwolnienia zasobów alokowanych przez obiekt  Wykonywane strategią bottom-up

97 Automatyczne zwalnianie zasobów  Interfejs IDisposable  Wykorzystywany do zwalniania zasobów niezarządzanych (np. pliki)  Dostęp przez medotę Dispose()  Można wywoływać z własnego kodu  using  Automatyczne wywołanie metody Dispose() po zakończeniu cyklu życia obiektu  Pozwala na deklarowanie wielu obiektów 97 Platformy Technologiczne 2014 using (SqlConnection connection = new SqlConnection()) { //kod programu } SqlConnection connection; try { connection = new SqlConnection(); } catch (SqlException se) { //obsługa wyjatku } finally { connection.Close(); connection.Dispose(); }

98 LINQ  Language INtegrated Queries  Wprowadzony w.NET 3  Daje możliwość unifikacji dostępu do różnego typu danych  Uproszczone odpytywanie obiektów, daych i XML poprzez integrację zapytań z językiem programownia  Umożliwia odpytywanie kolekcji implementujących IEnumerable<>, przykładowo tablicy, listy, XML DOM, tabel dazy danych  Wprowadza zbliżoną do SQL składnię niezależną od źródła danych  Oferuje sprawdzanie typów oraz dynamiczne tworzenie zapytań.  Namespace System.Linq 98 Platformy Technologiczne 2014

99 Dlaczego LINQ? Platformy Technologiczne 2014 99 class Contact { … }; List contacts = new List (); foreach(Customer c in customers) { if(c.State == “WA”) { Contact ct = new Contact(); ct.Name = c.Name; ct.Phone = c.Phone; contacts.Add(ct); } var contacts = from c in customers where c.State == "WA" select new { c.Name, c.Phone };

100 Style zapytania Platformy Technologiczne 2014 100  W LINQ zapytania możemy tworzyć na 2 sposoby  SQL – like  W oparciu o metody IEnumerable tall = from p in people where p.Height > 200 select p; IEnumerable young = people.Where(p => p.Age p);

101 Elementy zapytania Platformy Technologiczne 2014 101 Każde zapytanie składa się z 3 niezależnych akcji: 1. Pobranie źródła danych. 2. Stworzenie zapytania. 3. Wykonanie zapytania. class IntroToLINQ { static void Main() { // The Three Parts of a LINQ Query: // 1. Data source. int[] numbers = new int[5] { 0, 1, 2, 3, 4}; // 2. Query creation. // numQuery is an IEnumerable var numQuery = from num in numbers where (num % 2) == 0 select num; // 3. Query execution. foreach (int num in numQuery) { Console.Write("{0,1} ", num); }

102 Podstawowe operatory Platformy Technologiczne 2014 102 OperatorDziałanie WhereZwraca elementy, dla których warunek zwraca „true” SelectDla każdego elementu w kolekcji zwraca wartość przekazaną w operatorze FirstZwraca pierwszy element kolekcji LastZwraca ostatni element kolekcji SingleZwraca pojedynczy element kolekcji OrderBySortuje kolekcję wynikową zgodnie z zadanym predykatem DistinctUsuwa z kolekcji wynikowej duplikaty CountZwraca ilość rekordów w kolekcji wynikowej AverageZwraca średnią wartość dla pola kolekcji wynikowej JoinPozwala na złączenie dwóch kolekcji w oparciu o przekazane klucze http://aspnetresources.com/downloads/linq_standard_query_operators.pdf

103 LINQ to Objects Platformy Technologiczne 2014 103 using System; using System.Linq; using System.Collections.Generic; class app { static void Main() { string[] names = { "Burke", "Connor", "Frank", "Everett", "Albert”, "George", "Harris", "David" }; Func filter = s => s.Length == 5; Func extract = s => s; Func project = s => s.ToUpper(); IEnumerable expr = names.Where(filter).OrderBy(extract).Select(project); foreach (string item in expr) Console.WriteLine(item); }


Pobierz ppt "PLATFORMY TECHNOLOGICZNE ELEMENTY JĘZYKA C# mgr inż. Tomasz Gawron."

Podobne prezentacje


Reklamy Google