Monday, November 5, 2007

Obiektowe języki programowania - część D

Mowa o wyjątkach...

Zwykła obsługa błędów w C

int sprawdz_saldo() {
...
return saldo;
}

1) Musimy poświęcić jakieś wartości na kod błędu (jaką ? -1, 0.1, -0.9999)
2) Trzeba sprawdzać w kodzie czy funkcja zakończyła się powodzeniem czy nie i reagować na niepowodzenia
3) Nie możemy wymusić na programiście reagowania na kody błędów
4) Program zaczyna wyglądać:

// spaghetti - code

if (funkcja(x) == -1) {
// Reakcja na blad
} else {
// Poprawny kod
}
if (function(y) == -1) {
// Reakcja na blad
} else {
// Poprawny
}

Czyta się potwornie nie wygodnie. Wady te niwelują wyjątki.

Zgłaszanie wyjątku:

// Definicja klasy, ktora zwracamy jako wyjatek

class blad_zakresu() {};
class blad_db() {};

void ustaw_rok_prod (int x) {
// blad_zakresu x;
// throw x; // Nazwany obiekt - x.
if (x <>> dane;
s >> dane;
if (!s) // oops
// Zanim zareagujemy na daną sprawdźmy czy strumień jest ok bo dane nie zostaną wczytane
// Może być tak, że EOF będzie powodował błąd więc ostatni odczyt powinien robić coś takiego:
if (!s && s.eof) // koniec pliku
if (!s && !s.eof) // błąd nie koniec pliku

// Strumieni same zgłaszają wyjątki

Polecane książki:
http://www.josuttis.com/
http://wysylkowa.pl/ks239250.html
Język C++

jezyk c++
Stroustrup Bjarne

No comments: