You are on page 1of 18

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE

Visual Basic .NET.


wiczenia
Autor: Marcin Szeliga
ISBN: 83-7361-432-X
Format: B5, stron: 176

ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Kolejna, sidma ju wersja jzyka Visual Basic (Visual Basic .NET) to prawdziwa
rewolucja firma Microsoft opracowaa jednolite rodowisko programistyczne,
a jednym z jego podstawowych jzykw (oprcz Visual C++ i Visual C#) jest wanie
Visual Basic. Dziki wsparciu potnej firmy, jak jest Microsoft i rozpowszechnieniu
systemu Windows, Visual Basic .NET sta si jednym z najczciej uywanych
jzykw programowania na wiecie.
Ksika Visual Basic .NET. wiczenia adresowana jest do osb, ktre chc pozna
podstawowe zasady tworzenia w jzyku VB .NET programw sterowanych zdarzeniami.
Jak wszystkie ksiki z tej serii jest ona skonstruowana w formie praktycznych
wicze, pozwalajcych stopniowo zagbia si w niuanse programowania bez
zbdnych rozwaa teoretycznych.
Poznasz:
Platform .NET
Programowanie sterowane zdarzeniami
Zmienne i stae
Sterowanie przebiegiem wykonywania programu
Podstawy programowania obiektowego
Korzystanie z baz danych
Obsug bdw w Visual Basic .NET

Spis treci
Wstp.............................................................................................................................................................. 5
Rozdzia 1.

Microsoft Visual Studio .NET............................................................................................................... 9


Platforma .NET ............................................................................................................................9
.NET Framework ...................................................................................................................9
Serwery .NET ......................................................................................................................10
Visual Studio .NET ..............................................................................................................11
Visual Basic .NET ...............................................................................................................19

Rozdzia 2. Programy sterowane zdarzeniami ................................................................................................20


Klasy...........................................................................................................................................20
Obiekty .......................................................................................................................................21
Konwencje nazewnicze ..............................................................................................................37
Zasady ..................................................................................................................................37
Wskazwki...........................................................................................................................38
Jak czytelnie zapisywa kod programu? ....................................................................................38

Rozdzia 3. Zmienne....................................................................................................................................................... 41
Zmienne i stae ...........................................................................................................................41
Stae......................................................................................................................................45
Operatory....................................................................................................................................46
Typy danych...............................................................................................................................49
Zmienne ...............................................................................................................................50
Wskaniki ............................................................................................................................50
Konwersja typw .................................................................................................................51
Poprawno wprowadzanych przez uytkownikw danych................................................54
Zakres zmiennych ......................................................................................................................55
Czas ycia zmiennych ................................................................................................................59
Struktury.....................................................................................................................................60
Tablice ........................................................................................................................................62
Konwencje nazewnicze ..............................................................................................................64
Zasady ..................................................................................................................................64
Wskazwki...........................................................................................................................65

Visual Basic .NET. wiczenia

Rozdzia 4. Procedury i funkcje.............................................................................................................................. 66


Procedury ...................................................................................................................................66
Funkcje .......................................................................................................................................73

Rozdzia 5. Sterowanie wykonaniem programu............................................................................................. 78


Instrukcje warunkowe ................................................................................................................78
Instrukcja If Then............................................................................................................79
Instrukcja Select Case ..........................................................................................................81
Ptle............................................................................................................................................84
Instrukcja For Next .........................................................................................................84
Instrukcja For Each Next ................................................................................................87
Instrukcja Do Loop .........................................................................................................91

Rozdzia 6. Programowanie obiektowe.............................................................................................................. 93


Podejcie proceduralne...............................................................................................................93
Podejcie obiektowe...................................................................................................................94
Klasa ....................................................................................................................................94
Obiekt...................................................................................................................................95
Abstrakcja ............................................................................................................................95
Dziedziczenie .......................................................................................................................95
Hermetyzacja .......................................................................................................................96
Interfejs ................................................................................................................................96
Polimorfizm .........................................................................................................................98
Projektowanie programw zbudowanych z obiektw ...............................................................98
Projekt klas...........................................................................................................................99
Tworzenie programw zbudowanych z niezalenych obiektw..............................................101
Podstawowe techniki programowania obiektowego..........................................................101
Skadowe wspdzielone....................................................................................................112
Zaawansowane techniki programowania obiektowego .....................................................114

Rozdzia 7.

Dane ............................................................................................................................................................120
Relacyjny model baz danych....................................................................................................120
XML .........................................................................................................................................121
ADO .NET ...............................................................................................................................122
Przestrzenie nazw...............................................................................................................122
Klasy ..................................................................................................................................122
Obiekt Connection .............................................................................................................123
Obiekt Command ...............................................................................................................127
Kreatory danych.................................................................................................................132
Lokalne kopie danych ........................................................................................................136

Rozdzia 8. Sprawdzanie poprawnoci danych ............................................................................................146


Uniemoliwianie uytkownikom programu wpisania niepoprawnych danych .......................147
Korzystamy z kontrolek .....................................................................................................147
Korzystamy ze zdarze ......................................................................................................154
Sprawdzanie poprawnoci poszczeglnych danych.................................................................154
Sprawdzanie poprawnoci wszystkich danych ........................................................................158

Rozdzia 9. Wyszukiwanie i programowe przechwytywanie bdw ............................................... 160


Wyszukiwanie bdw .............................................................................................................160
Przechwytywanie bdw.........................................................................................................171
Klasa Exception .................................................................................................................172
Instrukcja Try Catch Finally ....................................................................................172

Rozdzia 9.  Wyszukiwanie i programowe przechwytywanie bdw

161

wiczenie 9.1.

Wyszukujemy bdy syntaktyczne


Bd syntaktyczny polega na nieprzestrzeganiu regu jzyka, w ktrym tworzony jest
program. Na przykad, prba uycia instrukcji For bez odpowiadajcej jej instrukcji Next
jest bdem syntaktycznym.
1. Utwrz nowy projekt typu Windows Application i nazwij go .
2. Zmie nazw formularza Form1 na
 , jego etykiet na  

  , a rozmiar na  !!.
3. W oknie zada wywietlony zostanie komunikat bdu po zmianie nazwy

formularza nie istnieje obiekt startowy projektu. Okno zada nie tylko informuje
o bdach, ale rwnie uatwia ich wyszukanie i naprawienie. Aby naprawi bd:
a. dwukrotnie kliknij lewym przyciskiem myszy opis bdu,
b. wywietlone zostanie okno dialogowe pozwalajce na wybranie nowego obiektu

startowego projektu (rysunek 9.1) zaznacz formularz frmBledy i kliknij


przycisk OK.
Rysunek 9.1.
W tym projekcie
jest tylko jeden
formularz
i nie ma procedury
o nazwie Main

4. Po zmianie obiektu startowego okno zada nie bdzie zawiera adnych komunikatw.

Dodaj do formularza przycisk polecenia i ustaw nastpujce wartoci jego atrybutw:


Name  "#, Text "#, Location !$ !$.
5. Wywietl okno edytora kodu.
6. Zadeklaruj zmienn formularza decWynik typu Decimmal: %  #&%  .
7. Poniewa przy deklaracji zmiennej popenilimy bd, niewaciwe sowo zostao

podkrelone niebiesk, falist lini aby dowiedzie si, na czym polega nasz
bd, ustaw kursor myszy nad zaznaczonym sowem (rysunek 9.2).
8. Zauwa, e ten sam komunikat Type Decimmal is not definied. wywietlany
jest w oknie zada. Napraw bd przez podanie prawidowej nazwy typu %  .
9. Utwrz procedur zdarzenia Click przycisku cmdSilnia.
10. W ramach procedury zdarzenia:

162

Visual Basic .NET. wiczenia

Rysunek 9.2.
W Visual Studio
wywietlony zostanie
krtki opis
bdw syntaktycznych

a. zadeklaruj zmienn intLiczba typu Integer: % #'&(# )


,
b. przypisz zadeklarowanej zmiennej liczb podan przez uytkownika (zwr
uwag na bdn nazw funkcji): #'*(#
+,-./0

# 1#-//!2.
11. Zadeklaruj funkcj SilniaIteracja oczekujc na argument liczba typu Integer
i zwracajc dane typu Double: 3##"#(
, 4
&(# )
2&% .
12. Usu z sekcji deklaracji formularza deklaracj zmiennej decWynik.
13. W ramach funkcji SilniaIteracja:
a. zadeklaruj zmienn dblWynik typu Double: % #&% ,
b. zadeklaruj zmienn licznik typu Integer: % #&(# )
,
c. w ptli powtarzanej przekazan jako argument liczb razy wylicz warto

zmiennej decWynik mnoc j za kadym razem przez warto zmiennej licznik:


 
   
 
  

d. zwr wyliczon silni:  


# #.
14. W procedurze zdarzenia cmdSilnia_Click wywoaj funkcj SilniaIteracja

z argumentem pobranym od uytkownika i wywietl na ekranie otrzymany wynik:


5) +,-"##-6"#(
,#'22.
15. W oknie zada wywietlone zostan dwa komunikaty o bdach:
a. pierwszy informuje o prbie odwoania si do nieistniejcej funkcji InpurBox,
b. drugi o brakujcej instrukcji Next (rysunek 9.3).
Rysunek 9.3.
Lista bdw
syntaktycznych
(skadniowych)

Rozdzia 9.  Wyszukiwanie i programowe przechwytywanie bdw

163

16. Dwukrotnie kliknij pierwszy komunikat bdu kursor zostanie ustawiony


w miejscu wystpowania bdu. Popraw nazw funkcji na (# +.
17. W ten sam sposb zlokalizuj drugi bd tym razem zaznaczona zostanie instrukcja

For, ktra nie zostaa zakoczona sowem kluczowym Next. Dopisz je przed
zwracajc wynik dziaania funkcji instrukcj Return:
     !
!" 
!
!" 
 
 
   
 
  

#$
%  

&  

18. Zapisz projekt.


wiczenie 9.2.

Wyszukujemy bdy konwersji typu


To, e w programie nie ma bdw syntaktycznych, nie oznacza, e bdzie on dziaa.
Wynika to std, e prba wykonania poprawnie zapisanych instrukcji moe spowodowa
wystpienie bdu wykonania, a bdy tego typu nie s zaznaczane podczas tworzenia
programu.
1. Uruchom projekt .
2. Po podaniu liczby, ktrej silni chcemy obliczy, i klikniciu przycisku OK,

na ekranie wywietlony zostanie komunikat o bdzie pokazany na rysunku 9.4.


Rysunek 9.4.
Uruchomienie
poprawnego skadniowo
programu moe
zakoczy si bdem

3. W tym przypadku bd spowodowaa prba poczenia cigu znakw "Silnia

wynosi" z liczb typu Double. Jeeli w programie wystpi bd, jego dziaanie
zostaje przerywane, a na ekranie uytkownika wywietlony jest niewiele mu
mwicy komunikat o wystpieniu bdu.
4. Kliknij przycisk Break. Wywietlone zostanie okno edytora kodu z zaznaczon

na zielono instrukcj, ktrej prba wykonania spowodowaa bd.


5. W tym momencie program znajduje si w specjalnym trybie diagnostycznym,

nazywanym trybem przerwania. Opis tego trybu znajduje si w dalszej czci


rozdziau, na razie zatrzymaj dziaanie tego trybu klikajc znajdujc si na pasku
narzdzi Debug ikon Stop Debugging albo wybierajc z menu Debug opcj Stop
Debugging. W obu przypadkach tryb przerwania zostanie wyczony i zniknie
zaznaczenie bdnej instrukcji.

164

Visual Basic .NET. wiczenia

6. Popraw bd przez skonwertowanie na dane tekstowe zwracanego przez funkcj

SilniaIteracja wyniku:
5) +,-"##-6"#(
,#'278"
#)2.
7. Uruchom program i przetestuj jego dziaanie. Jak wida, wyeliminowanie bdw

wykonania nie oznacza, e program bdzie dziaa prawidowo.


8. Zakocz dziaanie programu i zapisz wprowadzone w nim zmiany.

wiczenie 9.3.

Wyszukujemy bdy zwizane z przekazaniem nieprawidowych danych


1. Wywietl projekt formularza frmBledy.
2. Utwrz now funkcj SilniaRekurencja wywoywan z jednym parametrem liczba

typu Integer i zwracajc dane typu Double.


3. W ramach funkcji:
a. zadeklaruj zmienn dblWynik typu Double,
b. sprawd, czy warto parametru liczba jest mniejsza od zera i, jeeli tak, zwr
warto !, w przeciwnym razie wywoaj funkcj SilniaRekurencja z parametrem

o jeden wikszym przypisujc wynik jej wywoania do zmiennej dblWynik,


Wywoanie funkcji przez siebie sam jest charakterystyczne dla algorytmw rekurencyjnych.
c. zwr obliczon warto zmiennej dblWynik:
   %
   !
!" 
!
'() *
% 
&
 
  %
 +
& '
%  

&  

4. W procedurze zdarzenia cmdSilnia_Click wywoaj funkcj SilniaRekurencja

z argumentem pobranym od uytkownika i wywietl na ekranie otrzymany wynik:


5) +,-"##-6"# 
#,#'278"
#)2.
5. Uruchom program. Po chwili jego dziaanie zostanie przerwane, a na ekranie

zostanie wywietlony komunikat o bdzie z informacj o przepenieniu stosu.


Nacinij klawisz Break.
6. Tym razem na to zaznaczona zostaa deklaracja funkcji, ktrej wywoanie

spowodowao wystpienie bdu. W naszym przypadku funkcja wywoywaa sam


siebie bez koca (rysunek 9.5).
7. Przerwij tryb diagnostyczny i popraw wywoanie funkcji SilniaRekurencja
na nastpujce: #*9"# 
#,:!2.

Rozdzia 9.  Wyszukiwanie i programowe przechwytywanie bdw

165

Rysunek 9.5.
Korzystajc
z rekurencji musimy
tak sformuowa
warunek wywoywania
funkcji przez sam
siebie, aby proces
zagniedania zosta
kiedy zakoczony

8. Uruchom program i przetestuj jego dziaanie. Po raz kolejny okazuje si, e dziaajcy

program nie musi by dobrze dziaajcym programem.


9. Zakocz dziaanie programu i zapisz wprowadzone w nim zmiany.

wiczenie 9.4.

Uruchamiamy tryb przerwania


Najatwiejsze jest znalezienie i poprawienie bdw syntaktycznych w tym przypadku
przewaajc cz pracy wykona za nas Visual Studio. Znalezienie i poprawienie bdw
wykonania jest ju trudniejsze i wymaga uruchamiania programu z rnymi zestawami
testowymi danych wejciowych. Najtrudniejsze jest jednak znalezienie i poprawienie
bdw logicznych, poniewa ich wystpienie nie powoduje przerwania dziaania programu, ale jego nieprawidowe dziaanie. Wyszukiwanie bdw tego typu uatwia specjalny tryb przerwania (tryb diagnostyczny) i dostpne w tym trybie narzdzia.
Tryb przerwania jest dostpny tylko wtedy, gdy program zosta skompilowany w wersji Debug.
Po zmianie trybu na Release kompilator wygeneruje kod wynikowy, z ktrego usunite zostan
wszystkie informacje diagnostyczne. Ta wersja programu przeznaczona jest dla uytkownikw
kocowych.
1. Wywietl okno edytora kodu formularza frmBledy.
2. Moemy przej w tryb przerwania na kilka sposobw. Po pierwsze, wstawiajc

w wykonywalnym wierszu programu puapk (ang. Breakpoint) najprociej


wstawi j przez kliknicie lewego marginesu okna edytora kodu. Kliknij lewy
margines na wysokoci instrukcji #'*(# +,-./0

# 1#-//!2. Wybrany wiersz zostanie zaznaczony.

166

Visual Basic .NET. wiczenia

3. Uruchom program. Po klikniciu przycisku Silnia jego dziaanie zostanie wstrzymane,

a na ekranie wywietlone zostanie okno edytora kodu z zaznaczon na to


wykonywan wanie instrukcj.
4. Skasuj ustawion puapk przez kliknicie jej znaku wywietlanego na lewym

marginesie.
5. Wznw dziaanie programu (np. naciskajc klawisz F5 lub klikajc ikon paska

narzdzi Debug Contine).


6. Przerwij dziaanie programu. Innym sposobem na przejcie w tryb przerwania

jest wykonanie instrukcji Stop. Wpisz t instrukcj przed wywoaniem funkcji


SilniaIteracja i uruchom program.
7. Tym razem jego dziaanie zostao przerwane po zamkniciu okna dialogowego

umoliwiajcego podanie liczby i ponownie zaznaczona na to jest ostatnio


wykonywania instrukcja instrukcja Stop.
8. W trybie przerwania nie jest moliwa zmiana kodu programu. Przerwij jego

dziaanie i usu instrukcj Stop.


9. Sposobem na warunkowe przejcie w tryb przerwania jest wywoanie metody

Assert obiektu specjalnego Debug. Dziaanie programu zostanie wstrzymane, jeeli


wynikiem testu logicznego bdzie fasz. W miejsce usunitej instrukcji Stop wpisz:
% )7&
,#';!2.
10. Uruchom program i podaj liczb wiksz ni 1. Poniewa warunek zosta speniony,

dziaanie programu nie zostao wstrzymane. Raz jeszcze kliknij przycisk Silnia,
ale nie zmieniaj domylnej liczby 1. Tym razem warunek nie zosta speniony
(1 nie jest wiksze ni 1) i wywietlone zostao okno umoliwiajce wstrzymanie
dziaania programu (rysunek 9.6).

Rysunek 9.6. Wyjtkowo nieeleganckie rozwizanie na pasku tytuu okna wywietlone zostao zmienione
znaczenie przyciskw. W tym przypadku kliknicie przycisku Przerwij koczy dziaanie programu (uruchamia
tryb projektowania), kliknicie przycisku Ponw prb uruchamia tryb diagnostyczny, a kliknicie przycisku
Ignoruj kontynuuje wykonywanie programu
11. Kliknij przycisk Ponw prb wywietlone zostanie okno edytora kodu

z zaznaczon ostatnio wykonywan instrukcj.

Rozdzia 9.  Wyszukiwanie i programowe przechwytywanie bdw

167

12. Zatrzymaj dziaanie trybu przerwania i skasuj dodany wiersz.


13. Moemy w kadej chwili wstrzyma dziaanie programu naciskajc kombinacj

klawiszy Ctr+Break lub klikajc ikon paska narzdzi Debug Break All.
wiczenie 9.5.

Modyfikujemy puapki
Visual Studio pozwala na warunkowe wstrzymywanie dziaania programu za pomoc
ustawionych w nim puapek, dziki czemu niektre bdy mog zosta wykryte bez
koniecznoci krokowego uruchamiania programu (uruchamiania programu wiersz po
wierszu). Wykonujc biece wiczenie, nauczymy si konfigurowa ustawione puapki.
1. Wywietl okno edytora kodu formularza frmBledy.
2. Ustaw puapk w wierszu ( <=8 # funkcji SilniaRekurencja.
3. Przywr poprzednie, bdne wywoanie funkcji:
#*9"# 
#,6!2.
4. Kliknij prawym przyciskiem myszy symbol koa oznaczajcy ustawion puapk

i z menu kontekstowego wybierz opcj Breakpoint Properties.


5. Wywietlone zostanie okno dialogowe pokazane na rysunku 9.7. Pozwala ono

na warunkowe wstrzymanie programu oraz na wstrzymanie programu po ktrym


z kolei wykonaniu instrukcji, dla ktrej ustawiono puapk.
Rysunek 9.7.
Okno waciwoci
ustawionej puapki

6. Kliknij przycisk Hit Count.


7. Wywietlone zostanie okno dialogowe pozwalajce okreli, kiedy (po ilu wykonaniach

instrukcji) wstrzyma dziaanie programu. Skonfiguruj puapk tak, aby dziaanie


programu zostao wstrzymane po 5 lub wicej wywoaniach (rysunek 9.8).

168

Visual Basic .NET. wiczenia

Rysunek 9.8.
Czsto pojedyncze
wykonanie instrukcji
jest poprawne,
a wielokrotne
jej wykonanie wiadczy
o bdzie programu

8. Uruchom program i oblicz silni liczby 4.


9. Dziaanie programu zostao wstrzymane. Poniewa obliczenie silni liczby 4 nie

wymaga piciu lub wicej wywoa funkcji SilniaRekurencja (4! = 1 2 3 4)


bdu naley szuka albo w le okrelonym warunku brzegowym, albo w sposobie
wywoania funkcji SilniaRekurencja.
10. Ustaw kursor nad nazw zmiennej liczba. Zostanie wywietlona aktualna warto
zmiennej (). Aby dowiedzie si, ile razy instrukcja zostaa wykonana, wywietl

okienko Breakpoints. Mona to zrobi klikajc znajdujc si na pasku narzdzi


Debug ikon Breakpoints.
11. Licznik puapki wskazuje warto >, czyli warunek If liczba < 0 Then sprawdzany
jest po raz pity. Skoro warto zmiennej licznik wynosi , a warunek sprawdzany

jest pity raz przy obliczaniu silni liczby 4 bd znajduje si w sposobie wywoania
funkcji, a nie w sposobie sprawdzania warunku brzegowego rekurencji. Rzeczywicie
tak jest zamiast przy kolejnych wywoaniach zmniejsza liczb o jeden,
my dodajemy do niej jeden, co powoduje, e warunek brzegowy nigdy nie zostanie
speniony.
12. Popraw znaleziony bd i usu puapk.
13. Ustaw puapk w wierszu #9*# funkcji SilniaIteracja.
14. Wywietl waciwoci puapki i kliknij przycisk Condition.
15. Zostanie wywietlone okno dialogowe pozwalajce na okrelenie warunku

logicznego, ktrego spenienie spowoduje wyzwolenie puapki (rysunek 9.9).


Rysunek 9.9.
Warunkowe
wywoywanie
ustawionej puapki

16. Wpisz warunek, ktrego spenienie spowoduje wywoanie puapki: #;*.

W ten sposb dziaanie programu zostanie wstrzymane, jeeli ptla bdzie wykonana
tyle samo lub wicej razy, ni podana przez uytkownika liczba, ktrej silnia
ma zosta wyliczona.
17. Uruchom program. Po chwili jego dziaanie zostanie wstrzymane.

Rozdzia 9.  Wyszukiwanie i programowe przechwytywanie bdw

169

18. Odczytujc (przez ustawienie kursora myszy) wartoci zmiennych licznik i dblWynik

dowiemy si, e niezalenie od tego, ile razy wykonywane jest mnoenie, warto
zmiennej dblWynik zawsze jest rwna 0.
19. Pewnie ju domylasz si, gdzie znajduje si bd w tej funkcji. Nie poprawiaj go na

razie wykorzystamy go w nastpnym wiczeniu.


20. Skasuj ustawion puapk.

wiczenie 9.6.

Poznajemy tryb przerwania


Tryb przerwania pozwala na:
 wykonywanie programu wiersz po wierszu,
 ledzenie wynikw wykonania poszczeglnych instrukcji wykonania,
 odczytywanie i modyfikowanie wartoci zmiennych,
 natychmiastowe wykonanie dowolnej instrukcji, procedury lub funkcji.
Operacje te moemy wykonywa za pomoc paska narzdzi Debug (rysunek 9.10).
Poszczeglne ikony (zaczynajc od lewej) umoliwiaj:
Rysunek 9.10.
Pasek narzdzi
diagnostycznych
1. Uruchomienie programu.
2. Wczenie trybu przerwania.
3. Zatrzymanie wykonywania programu.
4. Wznowienie wykonywania programu.
5. Ustawienie kursora w wierszu instrukcji, ktra wanie bdzie wykonana.
6. Trzy kolejne przyciski su do sterowania wykonaniem programu:
a. wybranie opcji Step Into powoduje wykonanie programu instrukcja po instrukcji;

jeeli wywoana zostanie procedura lub funkcja, jej wykonanie rwnie bdzie
odbywao si instrukcja po instrukcji,
b. kliknicie ikony Step Over take spowoduje wykonanie programu instrukcja po

instrukcji; jeeli jednak zostanie wywoana podprocedura lub funkcja, zostanie


ona wykonana w caoci, tak jakby bya pojedyncz instrukcj,
c. wybranie opcji Step Out spowoduje wykonanie caej podprocedury

lub wywoywanej funkcji i ustawienie kursora w nastpnym wierszu procedury


nadrzdnej.
7. Wywietlanie danych w postaci heksadecymalnej.

170

Visual Basic .NET. wiczenia

8. Wywietlenie okna Breakpoints oraz, po klikniciu skierowanej w d strzaki, m.in.

okienek:
a. Locals zawierajcego nazw, aktualn warto i typ wszystkich zmiennych

zdefiniowanych dla procedury, w ktrej nastpio przerwanie wykonywania


programu,
b. Immediate pozwalajcego na wykonywanie dowolnych instrukcji jzyka Visual

Basic lub dyrektyw kompilatora,


c. Autos pozwalajcego na ledzenie aktualnych wartoci wybranych zmiennych,
d. Call Stack zawierajcego hierarchi nazw wszystkich procedur lub funkcji,

z ktrych wywoany zosta zaznaczony fragment podprogramu.


1. Ustaw puapk w wierszu #9*# funkcji SilniaIteracja.
2. Uruchom program i podaj liczb .
3. Dziaanie programu zostanie wstrzymane i wywietlone zostanie okno edytora kodu.
4. Wywietl na ekranie okno Autos (rysunek 9.11).
Rysunek 9.11.
Okno Autos
pozwala odczytywa
i modyfikowa wartoci
zmiennych w trybie
przerwania programu
5. W tym momencie wynik rwna si 0, ptla jest wykonywana po raz pierwszy,

a przekazan liczb jest 8. Wykonaj nastpn instrukcj naciskajc klawisz F8


lub klikajc ikon paska narzdzi Debug Step Into.
6. Po wykonaniu mnoenia dblWynik *= licznik warto zmiennej dblWynik nadal

wynosi zero. Przekonaj si, wykonujc kilka kolejnych instrukcji, e jej warto
nigdy si nie zmienia.
7. W tym przypadku bd polega na braku przypisania wartoci pocztkowej ! zmiennej

dblWynik. Domylnie, po zadeklarowaniu zmiennej liczbowej uzyskuje ona warto


0, a poniewa zero pomnoone przez dowoln liczb daje zero, nasza funkcja zwraca
zero niezalenie od wartoci argumentu jej wywoania. Przekonaj si, czy nasze
podejrzenia s suszne zmieniajc w oknie Autos warto zmiennej dblWynik na !
i wykonujc kilka kolejnych iteracji.
8. Zatrzymaj tryb przerwania i zmie deklaracj zmiennej dblWynik: % #
&% *!. Dobr praktyk programowania jest jawne nadawanie

zmiennym, podczas ich deklarowania, wartoci pocztkowych.


9. Ponownie uruchom program.
10. Przeled aktualne wartoci zmiennych w trakcie wykonywania kolejnych iteracji.
11. Zatrzymaj dziaanie programu, skasuj ustawion puapk i raz jeszcze przetestuj

jego dziaanie.

Rozdzia 9.  Wyszukiwanie i programowe przechwytywanie bdw

171

12. Pierwsza funkcja dziaa ju poprawnie, druga nadal zwraca zero. W jej przypadku

bd nie jest spowodowany brakiem nadania wartoci pocztkowej zmiennej.


13. Ustaw puapk w wierszu ( <=8 # funkcji SilniaRekurencja i uruchom

program.
14. Oblicz silni liczby 3. Pierwsza funkcja zwrci wynik, a nastpnie dziaanie programu

zostanie wstrzymane.
15. Tym razem do wyszukania bdu posuymy si oknem Call Stack. Skoro algorytmy

rekurencyjne polegaj na wielokrotnym wywoywaniu danej procedury lub funkcji


(zagniedaniu wywoa a do osignicia warunku brzegowego, po czym nastpuje
cykliczne przekazywanie obliczonych wartoci zewntrznym wywoaniom), ledzenie
ich dziaania umoliwi wanie to okno.
16. Wykonuj krok po kroku funkcj ledzc jednoczenie w oknie Call Stack poziom jej

zagniedenia (rysunek 9.12).

Rysunek 9.12. Dziki oknie Call Stack dowiedzielimy si, e funkcja SilniaRekurencja wywoywana jest
o jeden raz za duo do obliczenia silni 3 powinna zosta wywoana 4 razy (jedno wywoanie zewntrzne
i trzy rekurencyjne: 3! = 1 2 3)
17. Przekonaj si, w jaki sposb, po osigniciu warunku brzegowego, kolejno obliczone

wartoci przekazywane s zewntrznym wywoaniom funkcji i zatrzymaj dziaanie


programu. Wykorzystaj do tego celu moliwo wykonywania programu instrukcja
po instrukcji.
18. Popraw definicj warunku brzegowego rekurencji: ( *=8 #.
19. Usu puapk i uruchom program.
20. Wylicz silni kilku liczb.
21. Zakocz dziaanie programu i zapisz wprowadzone w nim zmiany.

Przechwytywanie bdw
Program, ktry doskonale dziaa w przypadku 95% danych, moe nie dziaa albo dziaa
niepoprawnie (zwraca faszywe wyniki) dla nietypowych danych wejciowych lub
w nietypowych sytuacjach. Tworzc program, powinnimy zabezpieczy si przed takimi
bdami.

172

Visual Basic .NET. wiczenia

Klasa Exception
Visual Basic po raz pierwszy, dziki zaimplementowaniu bazowej klasy platformy .NET
Exception (wyjtek), pozwala na strukturaln obsug bdw. Wyjtek jest wywoywany
z tego miejsca programu, w ktrym wystpi bd wykonania. W rezultacie, tworzony
jest obiekt specjalny Exception, ktrego wartoci atrybutw moemy programowo odczyta.
Najwaniejsze atrybuty obiektu Exception to:
 Message zwraca komunikat bdu,
 Source zwraca oraz pozwala ustawi nazw programu, w ramach ktrego
wystpi bd,
 StackTrace zwraca list metod, ktrych wywoanie spowodowao wystpienie bdu.

Instrukcja Try Catch Finally


Strukturalna obsuga bdw polega na ich przechwytywaniu i reagowaniu na bdy wykonania programu. Po przechwyceniu moemy sprawdzi, jaki wyjtek zosta wywoany
(jaki bd wystpi) i sprbowa programowo go naprawi.
Jeeli w programie wystpi nieprzechwycony bd wykonania, dziaanie programu zostaje
zatrzymane, a na ekranie uytkownika wywietlany jest systemowy komunikat o bdzie.
wiczenie 9.7.

Odczytujemy komunikaty o bdach


Instrukcje, ktrych wykonanie moe spowodowa wystpienie bdu, naley zabezpiecza
umieszczajc je w bloku Try instrukcji Try Catch Finally. Nastpnie, w ramach bloku
Catch naley sprawdzi, jaki wyjtek zosta wywoany i prawidowo na niego zareagowa.
1. Wywietl okno edytora kodu formularza frmBledy.
2. Instrukcj, ktrej wykonanie moe spowodowa wystpienie bdu, jest przypisanie

do zmiennej liczbowej podanej przez uytkownika wartoci. Dodaj nowy wiersz


powyej instrukcji: #'*(# +,-./0
#
1#-//!2.
3. Wpisz 8
 i nacinij Enter.
4. Zostan dodane klauzule Catch oraz End Try. Przenie do sekcji Try instrukcj,

ktrej wykonanie powinno zosta zabezpieczone.


5. W klauzuli Catch wywietl uytkownikowi opis bdu i miejsca jego wystpienia:

 ,  -$./01
2 "34 .11
5*$&$-
6$.7-8879.+$:6+;5,'<
+.48 -9.+$:

&  

Rozdzia 9.  Wyszukiwanie i programowe przechwytywanie bdw

173

Jeeli planujesz jedynie przechwyci bd i zapobiec w ten sposb przerwaniu dziaania


programu, pozostaw pust klauzul Catch.
6. Uruchom program i przetestuj jego dziaanie przez podanie nieprawidowych danych

wejciowych. Zwr uwag, e dziaanie programu nie jest duej przerywane, a po


podaniu nieprawidowych danych przyjmowana jest domylna warto 1.
7. Zakocz dziaanie programu i zapisz wprowadzone w nim zmiany.

wiczenie 9.8.

Sprawdzamy typ bdw


Klasa Exception jest klas bazow dla nastpujcych klas:
 System.ApplicationException,
 System.IO.IsolatedStorage.IsolatedStorageException,
 System.Runtime.Remoting.MetadataServices.SUDSGeneratorException,
 System.Runtime.Remoting.MetadataServices.SUDSParserException,
 System.SystemException,
 System.Windows.Forms.AxHost.InvalidActiveXStateException.
Najciekawsza z naszego punktu widzenia klasa SystemException jest z kolei klas bazow
dla kilkudziesiciu klas definiujcych konkretne typy bdw, np.:
 System.ArithmeticException,
 System.IndexOutOfRangeException,
 System.InvalidCastException,
 System.NullReferenceException,
 System.OutOfMemoryException,
 System.UnauthorizedAccessException.
Umoliwiaj nam one dokadne sprawdzenie typu bdu wykonania i odpowiednie zareagowanie.
1. Wywietl projekt formularza frmBledy.
2. Dodaj do formularza przycisk polecenia i ustaw nastpujce wartoci jego atrybutw:
Name  ?
, Text ?0
, Location !$ >$.
3. Utwrz procedur zdarzenia Click przycisku cmdOtwrz.
4. W ramach procedury zdarzenia sprbujemy otworzy plik tekstowy. W trakcie

wykonywania tej operacji moe wystpi kilka bdw: plik o podanej nazwie moe
nie istnie, niewaciwie moe zosta podana jego lokalizacja, sam plik moe
zwiera niepoprawne dane itp. Dlatego pierwsz instrukcj procedury powinna by
instrukcja Try.

174

Visual Basic .NET. wiczenia

5. W ramach bloku Try otwrz do odczytu plik tekstowy:


%  &@ " 7(?73 "
 ,-AB7+-/(?73 5 7? #2.
6. Po pierwsze, sprawdzimy, czy wykonanie tej instrukcji nie spowodowao wywoania

bdu zwizanego z odwoaniem si do nieistniejcego pliku:


5*$":=:# &$-
6$.# 8"
> -
.

7. W drugiej kolejnoci zweryfikujmy poprawno lokalizacji pliku:


5*$":=:!# &$-
6$.#--4 
-
.

8. Nastpnie sprawdzimy, czy dostp do pliku nie zosta zablokowany:


5*$":? *&$-
6$.="40-.

9. I wreszcie sprawdzimy, czy plik nie zosta uszkodzony:


5*$":=:,&$-
6$.?
 -
 ".

10. Poniewa nieprzechwycony bd spowoduje zatrzymanie programu, na kocu

wywietlimy komunikat pozostaych bdw:


5*$&$-
6$.#
4 879.+$:6

Wyjtki s sprawdzane w okrelonej przez programist kolejnoci, a po spenieniu pierwszego


warunku kolejne nie s ju sprawdzane. Wynika z tego, e najoglniejszy warunek powinien
by sprawdzany jako ostatni.
11. Uruchom program i przetestuj jego dziaanie. Wywoaj kolejno wyjtek klasy

FileNotFoundException wystarczy wpisa w wierszu Dim fs As New


System.IO.FileStream("c:\plik.txt", IO.FileMode.Open) nazw nieistniejcego pliku;
DirectoryNotFoundException np. wpisujc liter nieistniejcego napdu
i UnauthorizedAccessException np. podajc poprawn nazw i lokalizacj pliku
z ustawionym atrybutem Tylko do odczytu.
12. Zakocz dziaanie programu i zapisz wprowadzone w nim zmiany.

wiczenie 9.9.

Wywoujemy wasne wyjtki


Chocia lista klas predefiniowanych wyjtkw jest do duga, piszc zorientowane
obiektowo programy bdziemy chcieli wywoa wasne, odpowiadajce logice programu, bdy. W naszym przypadku prba wywoania funkcji SilniaRekurencja z ujemnym
argumentem spowoduje bd.
1. Wywietl okno edytora kodu formularza frmBledy.
2. Umie wywoanie funkcji SilniaRekurencja w utworzonym bloku Try.
3. W bloku Catch wywietl uytkownikowi komunikat o bdzie.

Rozdzia 9.  Wyszukiwanie i programowe przechwytywanie bdw

175

4. Przed instrukcj End Try dodaj blok Finally. Instrukcje umieszczone w tym bloku

wykonywane s zawsze, niezalenie od tego, czy wystpi jakikolwiek bd.


5. W ramach bloku Finally:
a. zadeklaruj zmienn statyczn licznikWywolan typu Integer,
b. zwiksz warto tej zmiennej o jeden,
c. wywietl biec warto zmiennej na ekranie.
6. Zmodyfikowane wywoanie funkcji powinno wyglda nastpujco:

6$. 4 .+ %
  , :  
5*$&$-
6$$:6
 
 
4  
 
4 + 
6$., 
4 9.+ 
4 :  
&  

7. Znajd definicj funkcji SilniaRekurencja.


8. W pierwszym wierszu funkcji dodaj warunek sprawdzajcy, czy warto
przekazanego argumentu jest ujemna: ( <=8 #.
9. Moemy wywoa wyjtek za pomoc instrukcji Throw podajc typ wyjtku

i ewentualnie komunikat o bdzie wywoaj wyjtek klasy


ArgumentOutOfRangeException:
'() *
 *4#4" =='% &$- .?" " 448 .
& '

10. Uruchom program i przetestuj jego dziaanie. Zwr uwag, e bd, ktry wystpi

w wywoanej funkcji, zosta przekazany do procedury wywoujcej i tam


dopiero zosta przechwycony.
11. Zakocz dziaanie programu i zapisz wprowadzone w nim zmiany.

You might also like