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 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) 2 Platformy Technologiczne 2013

3 Struktura programu 3 Platformy Technologiczne 2012

4 Typy zmiennych Platformy Technologiczne TypMożliwe wartości Typ wartościwyWartość zdefiniowanego typu Typ wartościowy nullableWartość 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

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

6 Typy wartościowe nullowalne Platformy Technologiczne 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;

7 Boxing i unboxing Platformy Technologiczne Wykorzystywane przy przejściach pomiędzy typami wartościowymi a referencyjnymi Boxing: Alokacja pudełka na stercie, skopiowanie wartości do pudełka Unboxing: Sprawdzenie typu pudełka, skopiowanie wartości z pudełka na stos Korzyści: Nie są potrzebne klasy – wrappery Kolekcje są uniwersalne – współpracują z każdym typem

8 Boxing i unboxing Platformy Technologiczne i o j System.Int32 int i = 123; object o = i; int j = (int)o;

9 Co się stanie? Platformy Technologiczne F a = new F(5); //konstruktor przypisuje przekazaną wartość zmiennej a F b = a; b.X= 10; Console.WriteLine(a.X); //wynik? int a = 1; int b = a; b = 2; Console.WriteLine(a); //wynik?

10 Klasy Platformy Technologiczne Dziedziczenie po jednej klasie Implementacja wielu interfejsów Modyfikatory dostępu: Public Private Protected Internal Elementy klasy: Stałe, pola, metody, właściwości, indeksery, zdarzenia, operatory, konstruktory, destruktory Elementy statyczne / instancji Typy zagnieżdżone

11 Konstruktory klas Platformy Technologiczne 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

12 Klasy wieloplikowe Platformy Technologiczne 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 }

13 Struktury Platformy Technologiczne 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)

14 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 14 Platformy Technologiczne 2012

15 Interfejsy Platformy Technologiczne 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

16 Interfejsy Platformy Technologiczne 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

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

18 Enum Platformy Technologiczne 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

19 Kompilacja warunkowa Platformy Technologiczne #define, #undef #if, #elif, #else, #endif Logika bool - owska Można implementować metody warunkowe Wykonanie zależne od trybu wywołania programu

20 Generyczność Platformy Technologiczne 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

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

22 Tablice Platformy Technologiczne 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];

23 Kolekcje Platformy Technologiczne 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

24 Kolekcje - przykłady Dictionary List 24 Platformy Technologiczne 2012

25 Porównywanie obiektów Platformy Technologiczne 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 }

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

27 Pętle For Foreach Kolekcja musi implementować interfejs IEnumerable While Do… while 27 Platformy Technologiczne 2012 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); }

28 Atrybuty Platformy Technologiczne Służą dołączaniu metadanych do kodu

29 Atrybuty Platformy Technologiczne Mogą być dołączane do klas, typów oraz metod Dostęp uzyskujemy za pomocą refleksji W pełni konfigurowalne Klasy dziedziczące po System.Attribute Bezpieczne (typ sprawdzany jest podczas kompilacji) Przykłady użycia: Web Services, XML, serializacja, konfiguracja kodu

30 Delegaty Platformy Technologiczne 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 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 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 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 Mogą zastępować anonimowe delegaty Składnia: (parametry wejściowe) => (operacje) IEnumerable allJohns = allNames.Where(x => x.Equals("John"));

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

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

37 Zdarzenia Platformy Technologiczne Zdarzenia (event) w C# są specjalnym typem delegatów Dwóch uczestników: Źródło zdarzeń - ten który publikuje Odbiorca – subskrybent (może być wielu subskrybentów) Deklarowane wewnątrz klas

38 Zdarzenia - źródło Platformy Technologiczne Zdefiniowanie delegatu Zdefiniowanie logiki public delegate void EventHandler(object sender, EventArgs e); public class Button { public event EventHandler Click; protected void OnClick(EventArgs e) { // This is called when button is clicked if (Click != null) Click(this, e); } }

39 Zdarzenia - subskrybent Platformy Technologiczne Definicja i zarejestrowanie obsługi public class MyForm : Form { Button okButton; static void OkClicked(object sender, EventArgs e) { ShowMessage("You pressed the OK button"); } public MyForm() { okButton = new Button(...); okButton.Caption = "OK"; okButton.Click += new EventHandler(OkClicked); }

40 Przesyłanie argumentów do metod Platformy Technologiczne 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);

41 Właściwości Platformy Technologiczne 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) [modyfikator dostępu] typ Nazwa { get{...} set{...} }

42 Automatyczne właściwości Platformy Technologiczne Wprowadzone w C# 3.0 Uproszczenie kodowania //C# 2.0 private int age; public int Age { get { return age; } set { age = value; } } //C# 3.0 public int MyAge { get; set; }

43 Indekser Platformy Technologiczne Oferuje sposób dostępu do kolekcji wartości utrzymywanych w ramach pojedynczego obiektu klasy – parametry jak indeks kolekcji public class SkyScraper { Story[] stories; public Story this [int index] { get { return stories[index]; } set { if (value!=null) { stories[index] = value; } SkyScraper searsTower = new SkyScraper(); searsTower[155] = new Story(Observation Deck); searsTower[0] = new Story(Entrance);

44 Inicjalizatory Platformy Technologiczne Pozwalają na uproszczone przypisywanie wartości do publicznych pól klasy Można z nich korzystać przy inicjalizacji struktur public class Human { public int Age { get; set; } public int Height { get; set; } } Human h1 = new Human(); h1.Age = 24; h1.Height = 175; Human h2 = new Human() { Age = 18, Height = 168 };

45 Zmienne niejawnie typowane Platformy Technologiczne 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;

46 Zmienne niejawnie typowane Platformy Technologiczne 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

47 var vs. dynamic Platformy Technologiczne Mniejsze ograniczenia Dynamiczna zmiana typów

48 Typy anonimowe Platformy Technologiczne 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 var v = new { Price = 200, Quantity = 5 };

49 Metody rozszerzające Platformy Technologiczne 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();

50 Przekazywanie parametrów Platformy Technologiczne Istnieje możliwość wywoływania metod bez podania wszystkich parametrów Metody mogą posiadać nazwy parametrów w swich wywołaniach

51 Wyjątki Platformy Technologiczne 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

52 Wyjątki Platformy Technologiczne 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

53 Typy wyjątków Platformy Technologiczne 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

54 Obsługa wyjątków Platformy Technologiczne

55 Obsługa wyjątków Platformy Technologiczne 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

56 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 56 Platformy Technologiczne 2012

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

58 System.IO.Stream Platformy Technologiczne public abstract class Stream : MarshalByRefObject, IDisposable { public abstract bool CanRead { get; } public abstract bool CanSeek { get; } public abstract bool CanWrite { get; } public abstract int Read(out byte[] buff, int offset, int count); public abstract void Write(byte[] buff, int offset, int count); public virtual int ReadByte(); public virtual void WriteByte(byte value); public virtual IAsyncResult BeginRead(…); public virtual IAsyncResult BeginWrite(…); public virtual int EndRead(…); public virtual int EndWrite(…); public abstract long Length { get; } public abstract long Position { get; set; } public abstract long Seek(long offset, SeekOrigin origin); public abstract void Flush(); public virtual void Close();... } Bazowe właściwości strumienia Synchroniczny odczyt i zapis Asynchroniczny odczyt i zapis Długość i aktualna pozycja Pozycjonowanie Wysłanie danych i zamknięcie strumienia

59 Strumienie - operacje 59 FileStream MemoryStream

60 Operacje na strukturze plików Platformy Technologiczne 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

61 Operacje na strukturze plików Platformy Technologiczne

62 System.String Platformy Technologiczne 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

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

64 StringBuilder Platformy Technologiczne 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

65 StringBuilder - wydajność Platformy Technologiczne Źródło:

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

67 Wyrażenia regularne Platformy Technologiczne 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

68 Konwersja typów Platformy Technologiczne 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

69 Konwersja klas Platformy Technologiczne 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

70 Wątki Platformy Technologiczne 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

71 System.Threading.Thread Platformy Technologiczne 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));

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

73 Lock Platformy Technologiczne 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; }

74 Pula wątków Platformy Technologiczne 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:

75 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 75 Platformy Technologiczne 2012

76 Task Parallel Library Platformy Technologiczne 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

77 Zrównoleglanie pętli Platformy Technologiczne 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

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

79 Zrównoleglanie pętli - wyjątki Platformy Technologiczne 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ę

80 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 80 Platformy Technologiczne 2012

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

82 Zrównoleglanie operacji Platformy Technologiczne Szeregowanie zadań Oczekiwanie na ukończenie grupy zadań

83 Asynchroniczność Platformy Technologiczne 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

84 async / await Platformy Technologiczne Sygnatura metody Przepływ sterowania

85 Async / await Platformy Technologiczne Jak to działa? Żródło:

86 Wskaźniki i kod niezarządzany Platformy Technologiczne 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 zmieny ustawienia kompilatora

87 P/Invoke Platformy Technologiczne 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

88 P/Invoke Platformy Technologiczne 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); }

89 Refleksja Platformy Technologiczne Umożliwia odnoszenie się do systemu typów podczas wykonania programu Tworzenie typów z przekazanych nazw (stringów) Dynamiczne pobieranie właściwości klas oraz wywoływanie metod Namespace System.Reflection Przykład działania:

90 Przetwarzanie XML Platformy Technologiczne System.XML

91 Odczyt XML w C# Platformy Technologiczne XmlTextReader xtr = new XmlTextReader("Sample1.xml"); while (xtr.Read()) { Console.WriteLine(xtr.NodeType.ToString() + ":" + xtr.Name + ":" + xtr.Value); if (xtr.HasAttributes) { for (int i = 0; i < xtr.AttributeCount; i++) { xtr.MoveToAttribute(i); Console.WriteLine(xtr.NodeType.ToString() + ":" + xtr.Name + ":" + xtr.Value); } xtr.MoveToElement(); }

92 Zapis XML w C# Platformy Technologiczne XmlTextWriter xtw = new XmlTextWriter("Sample2.xml", null); xtw.Formatting = Formatting.Indented; xtw.WriteStartDocument(); xtw.WriteComment("to plik utworzony poprzez obiekt XmlTextWriter"); xtw.WriteStartElement("Książki"); xtw.WriteStartElement("Ksiązka"); xtw.WriteAttributeString("wydawnictwoId", "3"); xtw.WriteStartElement("ISBN"); xtw.WriteString(" "); xtw.WriteEndElement(); xtw.WriteEndDocument(); xtw.Close();

93 Struktura dokumentu DOM Platformy Technologiczne DocumentElement – wierzchołek drzewa dokumentu Node – każdy z węzłów (w tym elementy) Rodzaje węzłów: Węzły elementowe: zwykle zawierają węzły potomne: elementowe, tekstowe lub obu rodzajów Węzły atrybutowe: informacja podległa konkretnemu węzłowi elementowemu. Nie są określane jako potomkowie Węzeł dokumentu: rodzic dla wszystkich pozostałych węzłów CData: odpowiada sekcji znakowej, zawierającej zawartość nie przeznaczoną do przetwarzania Comment: (komentarz); ProcessingInstruction (instr. przetwarzania) DocumentFragment: stosowany jako węzeł roboczy przy budowaniu lub rekonstruowaniu dokumentu XML Entity, EntityReference, Notation

94 XPath Platformy Technologiczne 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 XPathDocument doc = new XPathDocument("test.xml"); XPathNavigator nav = doc.CreateNavigator(); XPathNodeIterator iterator = nav.Select("/items/compact-disc[1]/artist | /items/compact-disc[1]/title"); iterator.MoveNext(); Console.WriteLine("Artysta={0}", iterator.Current); iterator.MoveNext(); Console.WriteLine("Tytuł={0}", iterator.Current);

95 Serializacja Platformy Technologiczne 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)

96 Serializacja binarna Platformy Technologiczne // 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();

97 Serializacja binarna - zdarzenia Platformy Technologiczne 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 */ } }

98 Serializacja XML Platformy Technologiczne 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.

99 Serializacja XML - przykład Platformy Technologiczne 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

100 Garbage Collector Platformy Technologiczne 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

101 Finalizatory Platformy Technologiczne 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

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

103 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 103 Platformy Technologiczne 2012 using (SqlConnection connection = new SqlConnection()) { //kod programu } SqlConnection connection; try { connection = new SqlConnection(); } catch (SqlException se) { //obsługa wyjatku } finally { connection.Close(); connection.Dispose(); }


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

Podobne prezentacje


Reklamy Google