wydział elektroniki kierunek: air

23
Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 5

Upload: ember

Post on 08-Feb-2016

74 views

Category:

Documents


0 download

DESCRIPTION

Wydział Elektroniki Kierunek: AiR. Zaawansowane metody programowania Wykład 5. Język C# Składowe klasy. Język C# Składowe klasy / właściwości i akcesory. Właściwości ( property ) to składowe umożliwiające dostęp do cechy obiektu lub klasy - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Wydział Elektroniki Kierunek: AiR

Wydział ElektronikiKierunek: AiR

Zaawansowane metody programowania

Wykład 5

Page 2: Wydział Elektroniki Kierunek: AiR

Język C#Składowe klasy

Nazwa OpisStałe Stałe wartości związane z klasą

Pola Zmienne klasy

Metody Obliczenia i działania, które mogą być przeprowadzone przez klasę

Właściwości Działania związane z odczytywaniem i zapisywaniem nazwanych właściwości klasy

Indeksatory Działania związane z indeksowanymi instancjami klasy, takimi jak tablice

Zdarzenia Zgłoszenia generowane przez klasę

Operatory Konwersje i operatory wyrażeń obsługiwane przez klasę

Konstruktory Działania wymagane do inicjalizacji instancji klasy lub klasy samej w sobie

Destruktory Działania przeprowadzane przed permanentnym usunięciem instancji klasy

Typy Zagnieżdżone typy zadeklarowane przez klasę

Page 3: Wydział Elektroniki Kierunek: AiR

Język C#Składowe klasy / właściwości i akcesory

• Właściwości (property) to składowe umożliwiające dostęp do cechy obiektu lub klasy

• Właściwości posiadają akcesory (accessors) określające instrukcje, które mają być wykonane gdy ich wartości są odczytywane lub zapisywane.

• Z punktu widzenia programisty właściwości to metody a z punktu widzenia klienta klasy to pola typu dane.

• Akcesory: set oraz get.

Page 4: Wydział Elektroniki Kierunek: AiR

Properties and accessors• Properties combine aspects of both fields and methods. To

the user of an object, a property appears to be a field, accessing the property requires the same syntax. To the implementer of a class, a property is one or two code blocks, representing a get accessor and/or a set accessor.

• The code block for the get accessor is executed when the property is read.

• The code block for the set accessor is executed when the property is assigned a new value.

• A property without a set accessor is considered read-only. • A property without a get accessor is considered write-only. • A property that has both accessors is read-write.

Page 5: Wydział Elektroniki Kierunek: AiR

Properties and accessors• Unlike fields, properties are not classified as

variables. • Properties have many uses:

– they can validate data before allowing a change; – they can transparently expose data on a class where that

data is actually retrieved from some other source, such as a database;

– they can take an action when data is changed, such as raising an event, or changing the value of other fields.

• Properties are declared in the class block by specifying the access level of the field, followed by the type of the property, followed by the name of the property, and followed by a code block that declares a get-accessor and/or a set accessor.

Page 6: Wydział Elektroniki Kierunek: AiR

Przykład 1• In this example, Month is

declared as a property so that the set accessor can make sure that the Month value is set between 1 and 12. The Month property uses a private field to track the actual value. The real location of a property's data is often referred to as the property's "backing store." It is common for properties to use private fields as a backing store. The field is marked private in order to make sure that it can only be changed by calling the property.

public class Date {

private int month = 7; //"backing store" public int Month {

get {

return month; } set {

if ((value > 0) && (value < 13)) {

month = value; }

} }

}

Page 7: Wydział Elektroniki Kierunek: AiR

Przykład 2

• This example demonstrates instance, static, and read-only properties.

• It:– accepts the name of the employee from

the keyboard, – increments NumberOfEmployees by 1,

and – displays the Employee name and number.

Page 8: Wydział Elektroniki Kierunek: AiR

Przykład 2, c.d.public class Employee{ public static int NumberOfEmployees; private static int counter; private string name; public string Name // A read-write instance property: { get { return name; } set { name = value; } } public static int Counter // A read-only static property: { get { return counter; } } public Employee() // A Constructor: { // Calculate the employee's number: counter = ++counter + NumberOfEmployees; }}

Page 9: Wydział Elektroniki Kierunek: AiR

Przykład 2, c.d.class TestEmployee{ static void Main() { Employee.NumberOfEmployees = 100; Employee e1 = new Employee(); e1.Name = "Jerzy F. Kotowski";

System.Console.WriteLine("Employee number: {0}", Employee.Counter);

System.Console.WriteLine("Employee name: {0}",

e1.Name); System.Console.ReadKey(); }}

Page 10: Wydział Elektroniki Kierunek: AiR

Properties

• Properties – własności? właściwości? • get i set są to akcesory• Akcesor set automatycznie podczas

próby przypisania wartości otrzymuje ją w parametrze o nazwie value

• Akcesor get musi zwrócić jakąś wartość

Page 11: Wydział Elektroniki Kierunek: AiR

Przykład 3class Pokaz{ private int l; public int liczba { get // Zwraca wartość { return l / 2; } set // Nadaje wartość { l = value; } }}

class Program{ public static void Main() { Pokaz p = new Pokaz(); p.liczba = 100; Console.WriteLine(p.liczba); Console.ReadKey(); }}

Page 12: Wydział Elektroniki Kierunek: AiR

Przykład 3 - komentarz• Tworzymy klasę o nazwie Pokaz, która to zawiera prywatną

zmienną typu int o nazwie l• Klasa zawiera własność o nazwie liczba, która to zawiera

dwa akcesory get i set• Akcesor get zwraca l/2 (podzieloną przez dwa)• Uwaga! Typ zwracany musi być taki sam jak typ własności. • Akcesor set służy do zapisu (ustawiania) wartości. Ustala on

miejsce do którego ma być przypisana wartość parametru value

• Własności nie przechowują danych. Określają tylko miejsce ich przechowywania.

• Z tego względu własności nie mogą korzystać z ref ani out• Własność może być zadeklarowana jako static, virtual lub

abstract • ZADANIE: CO NAPISZE TEN PROGRAM?

Page 13: Wydział Elektroniki Kierunek: AiR

Indexers – indeksatory? Indeksery?• Indexers are a syntactic convenience that enable you to

create a class, struct, or interface that client applications can access just as an array.

• Indeksery są podobne do własności. • Pozwalają po utworzeniu obiektu indeksować go jak tablicę,

czyli za pomocą operatora [ ]. • Indeksery są jedno i dwu wymiarowe, podobnie jak tablice. • Ogólna składnia indeksera:specyfikator_dostępu typ this[int index]{

get{…}set{….}

}

public int this[int index]{

// get and set accessors }

Page 14: Wydział Elektroniki Kierunek: AiR

Indeksery - komentarze• Parametr index musi być typu int. • Reszta elementów jest taka sama, jak we

własności.• Są dwa akcesory get i set, zatem indeksery jak i

własności mogą być tylko do odczytu lub zapisu albo do odczytu i zapisu równocześnie.

• Indekser nie przechowuje żadnych wartości on tylko określa miejsce przechowywania wartości.

• Przykład: – Utworzenie klasy, której instancje można będzie indeksować jak

tablice;– Będzie można zapisać wartości tylko podzielne przez trzy;– Tablica będzie odporna na błąd przekroczenia indeksu.

Page 15: Wydział Elektroniki Kierunek: AiR

Przykład 4class dane{ int[] tab; public dane(int rozmiar) // konstruktor {tab = new int[rozmiar];} public int this[int index] // indekser { get { return tab[index]; } set { if (value % 3 == 0) { if (index <= (tab.Length) - 1) tab[index] = value; }} } public void Wyswietl_elementy() { foreach(int x in tab){ Console.WriteLine(x); } }}

class Pokaz{ public static void Main() { dane a = new dane(10); a[0] = 9; a[1] = 34; a[2] = 3; a[3] = 7; a[4] = 4356; a[19] = 15; a.Wyswietl_elementy(); Console.ReadKey(); }}

Page 16: Wydział Elektroniki Kierunek: AiR

Przykład 4 - komentarze• W programie znajduje się definicja klasy o nazwie liczba• Klasa zawiera indekser• Akcesor set indeksera zapisuje tylko liczby podzielne przez 3• Dodatkowo akcesor set sprawdza czy parametr index jest

zgodny z rozmiarem tablicy tab.• Po utworzeniu instancji obiektu jest do niego dostęp przez

[ ]. • Przekroczenie indeksu nie wywołuje błędu gdyż nie trafia on

do tablicy. • W przykładzie indekser został wykorzystany do zarządzania

miejscem zapisu wartości do tablicy. Tę wartość niekoniecznie trzeba zapisywać do tablicy, parametr index może być wykorzystany inaczej.

• Indekser nie przechowuje wartości. Indekser określa tylko miejsce przechowywania tej wartości.

Page 17: Wydział Elektroniki Kierunek: AiR

Exceptions - Wyjątki• An exception is any error condition or unexpected behavior

encountered by an executing program.• In the .NET Framework an exception

is an object that inherits from the Exception Class class.

• W C#.NET wyjątkiem jest na przykład błąd przekroczenia indeksu, wyjątkiem (błędem) jest też przypisanie do zmiennej int zmiennej typu char.

• Wychwycenie tych wyjątków w programie pozwala uchronić program przed ewentualnymi błędami.

• Ogólna deklaracja wychwytywania wyjątku:

try{…}catch(nazwa_wyjątku1){…}catch(nazwa_wyjątku2){…}finally{…}

Page 18: Wydział Elektroniki Kierunek: AiR

Wyjątki - komentarze• W bloku kodu try umieszcza się kod w którym

może wystąpić jakiś wyjątek (na przykład przepełnienie indeksu), lub kod który ma zostać poddany kontroli.

• W blokach catch wypisuje się co ma być wykonane po wychwyceniu jakiegoś wyjątku.

• W nawiasach podaje jaki wyjątek ma być wychwycony.

• Istnieje instrukcja catch, która to wyłapuje wszystkie wyjątki, zapisujemy ją bez nawiasów.

• Instrukcja finally jest opcjonalna, wykonuje się ona zawsze na końcu niezależnie od tego czy wystąpił wyjątek czy nie.

• Prosty przykład: przepełnienie indeksu.

Page 19: Wydział Elektroniki Kierunek: AiR

Przykład 5class Pokaz{ public static void Main() { int[] tablica = new int[10]; try { for (int i = 0; ; i++){ tablica[i] = i; Console.WriteLine(i);} } catch(IndexOutOfRangeException) { Console.WriteLine("Nastąpiło właśnie przepełnienie

indeksu"); Console.ReadKey(); }}}

Page 20: Wydział Elektroniki Kierunek: AiR

Przykład 5 - komentarze• Deklaracja tablicy o rozmiarze 10.• Pętla ma specjalnie przekroczyć ten indeks. • Ten kod jest umieszczony w bloku try.• W bloku catch piszemy jaki rodzaj wyjątku chcemy

wychwycić (czyli przepełnienie indeksu).• Kolejny przykład: Należy wyświetlić wiadomość o

rodzaju błędu, to znaczy IndexOutOfRangeException.

Page 21: Wydział Elektroniki Kierunek: AiR

Przykład 6class Pokaz{ public static void Main() { int[] tablica = new int[10]; try { for (int i = 0; ; i++){ tablica[i] = i; Console.WriteLine(i);} } catch(IndexOutOfRangeException e) { Console.WriteLine("Nastąpiło właśnie przepełnienie

indeksu\n\nTreść błędu:\n"); Console.WriteLine(e.ToString()); Console.ReadKey(); }}}

Page 22: Wydział Elektroniki Kierunek: AiR

Wyjątki – najczęściej spotykane• ArraryTypeMismatchException – Typ wartości jaki

chcemy przypisać jest niezgodny z typem docelowym

• DivideByZeroException – Próba dzielenia przez zero

• IndexOutOfRangeException – Przekroczenie indeksu

• InvalidCastException – Niepoprawne rzutowanie w czasie rzeczywistym

• OutOfMemoryException – Porażka wywołania new z powodu braku wolnej pamięci

• OverflowException – Arytmetyczne przepełnienie

Page 23: Wydział Elektroniki Kierunek: AiR

Wyjątki – słowo kluczowe throw• Ogólna deklaracja zgłoszenia wyjątku:throw new nazwa_wyjątku();

• Przykładowothrow new IndexOutOfRangeException();

• Przykład: Poprawiony przykład 4 z indekserami