programowanie obiektowe 11

background image

Delegaty

i zdarzenia.

Obsługa

wyjątków

background image

Przegląd zagadnień

Delegaty i zdarzenia
Obsługa wyjątków
Podsumowanie
Pytania sprawdzające
Laboratorium

background image

Delegaty i zdarzenia (1)

Tworząc program, często nie wiemy z

góry, których metod, czy obiektów

chcemy użyć do określonej czynności
Możliwe jest połączenie takiego

elementu z delegatem, a następnie

wywołanie w trakcie programu

odpowiedniej metody
Zdarzenia pozwalają określić, że „coś się

w programie stało”, więc musi to

pociągnąć za sobą reakcję programu
Zdarzenia i delegaty są mocno ze sobą

związane, elastyczna obsługa zdarzenia

wymaga, by reakcje były przekazywane

do odpowiednich metod, a rolę taką

pełnią z reguły w C# właśnie delegaty

background image

Delegaty i zdarzenia (2)

W C# delegaty są obiektami typu

referencyjnego, stanowiącego interfejs

metody o określonej sygnaturze i

zwracanym typie
Składnia:

public

delegate

typ_zwracany Nazwa(object ob_1, object ob_2)

background image

Delegaty – przykład 1

Kod C#:

delegate

void Delegacik();

class Testowa
{

static void jeden()
{

System.Console.WriteLine("Testowa.jeden");

}

static void Main()
{

Delegacik d =

new

Delegacik(jeden);

d();

}

}

background image

Delegaty – przykład 2

Kod C#:

public delegate void Obsluga(object sender, Event e);
public class Button: Control {
public event Obsluga onClick;
public void Reset() {
onClick = null;
}
}
using System;
public class Form1: Form {
public Form1(){
Button Przyc1 = new Button();
Przyc1_Click Przyc1.Click += new Obsluga(Przyc1_Click);
}
void Przyc_Click(object sender, Event e) {
Console.WriteLine(„Przyc1 został naciśnięty");
}
public void Disconnect() {
Przyc1.Click -= new Obsluga(Przyc1_Click);
}
}

background image

Obsługa wyjątków

Wyjątek to obiekt przekazujący informacje

o niezwykłych zdarzeniach w programie
Należy odróżniać błędy programisty i

błędy użytkownika od wyjątków – tym z

dwóch pierwszych grup można zapobiec

przez korektę kodu czy chociażby przez

sprawdzanie poprawności danych
Wyjątkom nie da się zapobiec, można

jednak je obsłużyć, by nie powodowały

zakończenia pracy programu
W C# wszystkie wyjątki są typu

System.Exception lub obiektów pochodnych

od niego

background image

Obsługa wyjątków – podejście

obiektowe

Klasyczne podejście opierało się na

wykorzystaniu instrukcji warunkowych,

co prowadziło do szybkiego

skomplikowania kodu
Nowy pomysł polega na

odseparowaniu części programu

odpowiadającej za zwykłe działanie od

fragmentu opisującego zachowanie w

razie wystąpienia błędu, co w praktyce

realizuje się:

try

{

// kod w normalnym toku, z potencjalnym miejscem
// wystąpienia wyjątku

}

catch

{

// zestaw instrukcji realizowanych w przypadku
// wystąpienia wyjątku

}

background image

Obsługa wyjątków – przykład 1

Kod C#

using System;

namespace PrzechwytywanieWyjatku {
public class Test {
public static void Main() {

try

{

Console.WriteLine("Początek metody Main..");

throw

new System.Exception();

Console.WriteLine("Koniec metody Main...");
}

catch

{

Console.WriteLine("Wyjątek przechwycony i

obsłużony");

}
}
}
}

background image

Obsługa wyjątków – przykład 2

Kod C#

using System;
namespace PrzechwytywanieWyjatku2 {
public class Test {
public static void Main() {
Test t = new Test();
t.TestFunc(); }
public void TestFunc() {

try

{

double a = 5;
double b = 0;
Console.WriteLine("{0} / {1} = {2}", a, b, Dv(a, b)); }

catch

(System.DivideByZeroException) {

Console.WriteLine("Wyjątek DivideByZeroException"); }

catch

(System.ArithmeticException) {

Console.WriteLine("Wyjątek ArithmeticException"); }
}
public double Dv(double a, double b) {
if (b == 0)
throw new System.DivideByZeroException();
if (a == 0)
throw new System.ArithmeticException();
return a / b;
}
}
}

background image

Obsługa wyjątków – dodatkowe

informacje

W programie można kilkakrotnie

wykorzystać blok catch – obsługując

wyjątki od najbardziej

wyspecjalizowanego do najogólniejszego
Możliwe jest także przygotowanie kodu,

który wykona się niezależnie od

wystąpienia wyjątku – służy do tego celu

słowo kluczowe finally, za którym można

umieścić stosowny blok instrukcji
Dzięki powyższemu mechanizmowi

mamy możliwość uniknięcia duplikacji

kodu, a także zamknięcia pliku czy

chociażby zwolnienia stosu

background image

Podsumowanie

Używania wyjątków należy unikać w

zwykłych lub przewidywalnych

przypadkach
Należy zawsze tworzyć i wyrzucać

elementy klas pochodnych od

Exception
Warto dołączać słowny opis problemu

do obsługi wyjątku – pozwoli to się

lepiej zorientować w przyczynie jego

wystąpienia

background image

Pytania sprawdzające

Do czego służą delegaty?
W jaki sposób delegaty mogą obsłużyć

zdarzenia?
Podaj podstawowe różnice pomiędzy

błędem programisty a wyjątkiem.
Czy w programie można umieścić kod,

który wykona się niezależnie od

wystąpienia wyjątku? W jaki sposób?

background image

Laboratorium


Document Outline


Wyszukiwarka

Podobne podstrony:
programowanie obiektowe 11, c c++, c#
Programowanie obiektowe w PHP4 i PHP5 11 2005
Programowanie obiektowe, w8, 11
11 10 2011 programowanie obiektowe wykład
Programowanie obiektowe w PHP4 i PHP5 11 2005
Programowanie obiektowe(ćw) 1
Zadanie projekt przychodnia lekarska, Programowanie obiektowe
Programowanie Obiektowe ZadTest Nieznany
Egzamin Programowanie Obiektowe Głowacki, Programowanie Obiektowe
Jezyk C Efektywne programowanie obiektowe cpefpo
Programowanie Obiektowe Ćwiczenia 5
Programowanie obiektowe(cw) 2 i Nieznany
programowanie obiektowe 05, c c++, c#
Intuicyjne podstawy programowania obiektowego0
Programowanie obiektowe, CPP program, 1
wyklad5.cpp, JAVA jest językiem programowania obiektowego
projekt01, wisisz, wydzial informatyki, studia zaoczne inzynierskie, programowanie obiektowe, projek
przeciazanie metod i operatorow, Programowanie obiektowe

więcej podobnych podstron