Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ABC Delphi 7
Autor: Andrzej Daniluk
ISBN: 83-7361-269-6
Format: B5, stron: okoo 168
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
Spis treci
Wstp ............................................................................................... 7
Rozdzia 1. Elementarz Object Pascala................................................................. 9
Moduy ................................................................................................................................9
Program gwny ................................................................................................................10
Stae...................................................................................................................................12
Zmienne.............................................................................................................................13
Typy cakowite..................................................................................................................14
Typy rzeczywiste...............................................................................................................15
Typ Currency.....................................................................................................................16
Typy logiczne....................................................................................................................16
Typy znakowe ...................................................................................................................17
Typy acuchowe ..............................................................................................................17
Literay acuchowe ..........................................................................................................18
Typ okrojony .....................................................................................................................18
Typ mnogociowy .............................................................................................................19
Typ wyliczeniowy .............................................................................................................19
Tablice...............................................................................................................................20
Rekordy .............................................................................................................................21
Operatory...........................................................................................................................23
Wskazania i adresy............................................................................................................24
Instrukcje sterujce przebiegiem programu ......................................................................26
Instrukcja warunkowa IfThen .................................................................................26
Instrukcja warunkowa CaseOf................................................................................27
Instrukcja iteracyjna RepeatUntil ...........................................................................28
Instrukcja iteracyjna WhileDo ................................................................................29
Instrukcja iteracyjna ForToDo............................................................................29
Procedura przerwania programu Break ......................................................................30
Procedura przerwania programu Exit .........................................................................31
Procedura wyjcia z programu Halt............................................................................31
Procedura zatrzymania programu RunError ...............................................................31
Procedura kontynuacji programu Continue ................................................................32
Rekordy z wariantami .......................................................................................................32
Procedury ..........................................................................................................................34
Parametry formalne.....................................................................................................34
ABC Delphi 7
Funkcje ..............................................................................................................................36
Operacje zmiennoprzecinkowe .........................................................................................37
Moduy na powanie .........................................................................................................41
Podsumowanie ..................................................................................................................43
Spis treci
Skorowidz...................................................................................... 161
Rozdzia 3.
Projektowanie
obiektowe OOD
Programowanie oparte na zasadach projektowania obiektowego OOD (ang. Object
Oriented Design) stanowi zesp metod i sposobw, pozwalajcych elementom skadowym aplikacji sta si odpowiednikiem obiektu lub klasy obiektw rzeczywicie
istniejcych w otaczajcym nas wiecie. Wszystkie aplikacje tworzone s po to, aby
w sposb mniej lub bardziej prawdziwy odzwierciedlay lub modeloway otaczajc
nas rzeczywisto. Kada aplikacja jest zbiorem wspdziaajcych ze sob rnych
elementw. Przed rozpoczciem projektowania aplikacji naley:
1. Zdefiniowa nowy (lub zaimplementowa istniejcy) typ danych klas.
2. Zdefiniowa obiekty oraz ich atrybuty.
3. Zaprojektowa operacje, jakie kady z obiektw ma wykonywa.
4. Ustali zasady widocznoci obiektw.
5. Ustali zasady wspdziaania obiektw.
6. Zaimplementowa kady z obiektw na potrzeby dziaania aplikacji.
7. Ustali mechanizmy dziedziczenia obiektw.
Klasy
Klasa, definiujc nowy typ (wzorzec) danych, moe by rdem definicji innych klas
pochodnych. Klasa jest jednym z podstawowych poj jzyka Object Pascal. Za pomoc
sowa kluczowego definiujemy nowy typ danych, bdcy w istocie poczeniem
danych i instrukcji, ktre wykonuj na nich dziaania, umoliwiajcych tworzenie
nowych (lub wykorzystanie istniejcych) elementw, bdcych reprezentantami klasy.
W najwikszym przyblieniu konstrukcja klasy umoliwia deklarowanie elementw
prywatnych (ang. private), publicznych (ang. public), chronionych (ang. protected)
52
ABC Delphi 7
Jeszcze kilkanacie lat temu, przed pojawieniem si wizualnych rodowisk programistycznych, sowo obiekt (ang. object) byo jednoznacznie utosamiane z klas. Obecnie
sytuacja nieco si skomplikowaa, gdy sowo obiekt ma o wiele szersze znaczenie. Z tego
wzgldu wygodniej jest posugiwa si szeroko stosowanym w anglojzycznej literaturze
sformuowaniem egzemplarz klasy (ang. class instance). Ot po zdefiniowaniu klasy,
tworzymy egzemplarz jej typu o nazwie takiej samej, jak nazwa klasy wystpujca po
sowie . Jednak klasy tworzymy po to, by stay si specyfikatorami typw danych.
Jeeli po instrukcji definicji klasy (koczcej si sowem kluczowym ), po sowie
kluczowym podamy pewn nazw, utworzymy tym samym okrelony egzemplarz
klasy, ktry od tej chwili traktowany jest jako nowy, penoprawny typ danych.
Jako przykad zaprojektujemy bardzo prost w budowie klas
, za pomoc
ktrej bdziemy mogli odczyta wybrane informacje o pewnej osobie.
Deklaracja klasy
, skadajcej si z czci publicznej i prywatnej, moe wyglda nastpujco:
%&
'&(!)*+
!)*
53
54
ABC Delphi 7
-
(,",+
(
,',+
-
(, ,+
-
(,",+
888888888888888888888888888888888888888888888888888888888
&
%&
&!%&
&!)*
&!
,',
&'&( &+
95
Metody
Kady wykorzystywany w programie egzemplarz klasy (lub obiekt) wykonuje (lub
my wykonujemy na nim) pewne czynnoci operacje, zwane potocznie metodami.
Metodami nazywamy funkcje lub procedury, bdce elementami klasy i obsugujce
obiekt przynaleny do danej klasy. W przykadzie pokazanym na listingu 3.1 procedura
jest wanie tak metod.
Obiekty
Obiekt jest dynamicznym egzemplarzem (reprezentantem) macierzystej klasy. Stanowi
te pewien element rzeczywistoci, ktr charakteryzuje okrelony stan, tzn. obiekt
jest aktywny lub nie. W odrnieniu od zwykych egzemplarzy klas, obiekty s zawsze
alokowane dynamicznie w pewnym obszarze pamici, zwanej stert. Jedn z najwaniejszych cech odrniajcych obiekty od normalnych egzemplarzy klas jest to, e za
tworzenie i zwalnianie obiektw w trakcie dziaania programu odpowiedzialny jest
programista. Kady obiekt tworzony jest za pomoc funkcji skadowej klasy, zwanej
konstruktorem. Definicja konstruktora rozpoczyna si od sowa kluczowego
.
W Delphi domyln nazw konstruktora pozostaje sowo . W celu zwolnienia
(zniszczenia) obiektu w momencie, gdy nie jest on ju potrzebny, uywamy jego destruktora. Definicja destruktora rozpoczyna si od sowa kluczowego
. Powszechnie
stosowan nazw destruktora jest sowo . Naley jednak pamita, i jawne
wywoywanie w programie destruktora klasy wie si z do powanymi konsekwencjami i wymaga pewnej wprawy, dlatego duo bezpieczniejsze jest uywanie prostej
funkcji (metody) w celu zniszczenia danego obiektu.
55
Na listingu 3.2 zaprezentowano zmodyfikowan wersj poprzednio omawianego programu. W obecnej wersji tworzony jest dynamicznie egzemplarz (obiekt) klasy
.
Listing 3.2. Idea tworzenia i zwalniania dynamicznego egzemplarza klasy
).//
012))%3)*4&456
&7
%&
*
'&(!)*+
!)*
888888888888888888888888888888888888888888888888888888888
%&'&(!)*+
!
(
,-,+
-
(,",+
(
,',+
-
(, ,+
-
(,",+
888888888888888888888888888888888888888888888888888888888
%&*
#
888888888888888888888888888888888888888888888888888888888
&!%&
&!)*
(+
&
%&
& #
%&
&!
%&*
&!
,',
&'&( &+
95
(+&
:# ;
&;
56
ABC Delphi 7
Widoczno obiektw
Jeeli uznamy to za konieczne, moemy ustali zakres widocznoci obiektw w odniesieniu do fragmentu programu. Obiekt taki bdzie korzysta ze zmiennych dostpnych
jedynie dla metod klasy, w ktrej je zdefiniowano.
Wspdziaanie obiektw
Jeeli obiekt lub grup obiektw uczynimy widocznymi w caej aplikacji, naley ustali
zasady porozumiewania si obiektw, czyli relacje pomidzy nimi. Dla kadego z obiektw ustanawiamy cile okrelony zbir regu i funkcji, dziki ktrym korzysta z niego
mog inne obiekty.
Implementacja obiektu
Implementacja, czyli oprogramowanie obiektu, oznacza stworzenie kodu rdowego,
obsugujcego metody z nim zwizane. Korzystajc z zasad programowania obiektowozdarzeniowego, z poszczeglnymi obiektami kojarzymy odpowiadajce im zdarzenia.
57
Wasnoci
Nowoczesny Object Pascal wprowadza bardziej oglne pojcie klasy poprzez implementacj wasnoci. Wasno podobna jest do pola w klasie, ale moe zachowywa
si jak metoda. Wasnoci peni rol metod dostpu i modyfikacji (nazywanych metodami i ) i maj szczeglne znaczenie w zintegrowanym rodowisku programisty IDE, chocia ich uycie nie jest ograniczone tylko do niego (co wykaemy za
chwil). Waciwo posiada mechanizmy odczytu ( ) i zapisu ( ), suce do
pobierania i ustawiania wartoci waciwoci. Mechanizmem odczytu moe by nazwa pola lub metoda zwracajca warto wasnoci, natomiast mechanizmem zapisu
nazwa pola lub metoda ustawiajca warto pola. Zaniedbujc mechanizm zapisywania, tworzy si wasno tylko do odczytu. Dopuszczalne jest rwnie stworzenie
wasnoci tylko do zapisu, jednak celowo takiego tworu jest bardzo wtpliwa. Wikszo mechanizmw zapisujcych i odczytujcych stanowi nazwy pl lub metod,
chocia mog to by rwnie czci pl agregujcych, takich jak struktury lub tablice.
Jeeli dyrektywa lub odwouje si do elementu tablicy, indeks tablicy musi
by stay, a typ pola nie moe by tablic dynamicznie alokowan w pamici.
Wasnoci mog by definiowane przy uyciu dyrektyw
lub . Informacja ta nie ma adnego znaczenia dla Delphi, jednak uywa si jej podczas wykonywania opisw formularzy w pliku .dfm lub .xfm. Wartoci dyrektywy
jest staa
o typie takim samym, jak typ waciwoci. Warto domyln mog posiada jedynie
waciwoci typu wyliczeniowego, cakowitego lub zbiorowego. Dyrektywa
posiada znaczenie tylko w przypadku waciwoci publikowanych. Brak dyrektywy
rwnoznaczny jest nadaniu wasnoci dyrektywy
. Wartoci dyrektywy jest staa boolowska, pole typu boolowskiego lub bezargumentowa
metoda, zwracajca wynik typu . Warto pamita, i nadanie wasnoci za
pomoc dyrektywy wartoci
(wartoci domylnej) nie powoduje, i taka
wanie warto domylna zostanie zapisana do pliku .dfm (ewentualnie .xfm). Mona
jedynie pomin warto wasnoci w pliku .dfm (.xfm), nadajc dyrektywie
warto .
W celu zilustrowania metod posugiwania si wasnociami zbudujemy prost klas,
ktrej wykorzystanie w programie umoliwi w bardzo elegancki i przejrzysty sposb
odczytywane i zapisywanie danych w postaci nazwisk wybranych osb. W tym celu
skorzystamy z definicji wasnoci. Poniewa oglnie przyjt konwencj jest, aby w tego
typu programach posugiwa si pewnymi standardowymi przedrostkami dla zmiennych
oraz funkcji, w dalszej czci opisu bdziemy wykorzystywa nazewnictwo angielskie po to, by nie tworzy mieszanki nazw polskich i angielskich (np. SetNazwisko).
W pierwszej kolejnoci okrelimy wasno, za pomoc ktrej bdziemy w stanie odczytywa i przypisywa odpowiednie wartoci (w tym wypadku acuchy znakw reprezentujce nazwiska i imiona osb). Kada wasno suy do przechowywania
wartoci, zatem naley zadeklarowa zwizan z ni zmienn (tzw. pole w klasie).
Oglnie przyjt konwencj jest to, e zmienne maj takie same nazwy, jak zwizane
z nimi wasnoci, ale poprzedzone s liter F. W naszym programie w sekcji prywatnej
definicji klasy
zadeklarujemy jedn tak zmienn typu , reprezentujc
tablic indeksujc nazwiska studentw. Dodatkowo w tej samej sekcji zadeklarujemy
58
ABC Delphi 7
funkcj (metod) !, ktra w przyszoci bdzie odczytywaa za pomoc indeksu imi i nazwisko wybranej osoby, oraz procedur !, za pomoc ktrej
bdzie mona przypisa odpowiedni acuch znakw (imi i nazwisko) do odpowiedniego
indeksu w tablicy:
; !</=>&
? (!@+!&
& (!@ !&+
Przechodzimy teraz do deklaracji samej wasnoci. W tym celu naley uy sowa kluczowego . Dla potrzeb programu wystarczy, by wasno suya wycznie
do przekazywania danych (imion i nazwisk osb) za pomoc indeksu. Wasno zadeklarujemy w sekcji publicznej definicji klasy. Zdefiniowana wasno ! bdzie odczytywa aktualny stan tablicy ! za pomoc dyrektywy , a nastpnie przekazywa (zapisywa) j do procedury !, korzystajc z dyrektywy :
*
#:
<!@>!&?
&
Kompletny kod projektu Projekt_12.dpr, wykorzystujcego wasno w klasie, pokazany jest na listingu 3.3.
Listing 3.3. Praktyczny sposb posugiwania si wasnociami w klasie
)./A
012))%3)*4&456
&7
%&
; !</=>&
? (!@+!&
& (!@ !&+
59
*
#:
<!@>!&?
&
888888888888888888888888888888888888888888888888888888888
%&? (!@+!&
9
!
; <>
888888888888888888888888888888888888888888888888888888888
%&& (!@ !&+
; <>!
888888888888888888888888888888888888888888888888888888888
%&*
#
888888888888888888888888888888888888888888888888888888888
&!%&
!@
&!
%&*
#&&
& </>!
,-',
& <A>!
,'-,
& <B>!
,'
CD,
#&?
!
/B
-
(& <>+
95
&;
Dziedziczenie
Dziedziczenie jest jednym z najwaniejszych mechanizmw programowania zorientowanego obiektowo. Pozwala na przekazywanie waciwoci klasy bazowej (ang. base
class) klasom pochodnym (ang. derived classes). Oznacza to, e w prosty sposb mona
zbudowa pewn hierarchi klas, uporzdkowan od najbardziej oglnej do najbardziej
szczegowej. Na takiej wanie hierarchii klas zbudowana jest w Delphi zarwno biblioteka komponentw wizualnych VCL, jak i biblioteka midzyplatformowa CLX.
60
ABC Delphi 7
61
888888888888888888888888888888888888888888888888888888888
%4'4
(;
,'-,+
-
(;F,! @ !G,+
(;
,-',+
-
(;F,! @ !AG,+
-
(,",+
888888888888888888888888888888888888888888888888888888888
%4*(!&+
;!
#
%4
:H :
H
;
%&
H
888888888888888888888888888888888888888888888888888888888
&!%4
(+
&
%4
&!
%4*(,-',+
&'4
&'&
95
(+&
:# ;
&;
62
ABC Delphi 7
Klasy abstrakcyjne
W przeciwiestwie do omawianych wczeniej metod statycznych, metody deklarowane
ze sowem kluczowym
(tzw. metody wirtualne) w klasie bazowej musz by
zastpione now definicj w klasie pochodnej poprzez wykorzystanie dyrektywy .
Cech charakterystyczn metod wirtualnych jest to, i s czone przez Delphi w trakcie
wykonywania programu. Metoda wirtualna moe zosta w klasie bazowej zadeklarowana
ze sowem , co oznacza, i nie moe by definiowana przez t klas. Metoda
abstrakcyjna zadeklarowana w klasie bazowej musi by przedefiniowana (przesonita)
przez klas potomn. Klas deklarujc jedn lub wicej metod abstrakcyjnych nazywamy klas abstrakcyjn. Na listingu 3.5 zamieszczono przykad projektu wykorzystujcego klas abstrakcyjn.
Listing 3.5. Zmodyfikowany Projekt_13.dpr, posugujcy si klas abstrakcyjn
)./B
012))%3)*4&456
&7
%&
'&
;!&
888888888888888888888888888888888888888888888888888888888
%4
%&
%4
(%&+
*(!&+
'&
'4
888888888888888888888888888888888888888888888888888888888
2 '&
%&
%4
%4'&
(;
,'-,+
-
(,",+
(;
,-',+
-
(, ,+
-
(,",+
888888888888888888888888888888888888888888888888888888888
%4'4
(;
,'-,+
-
(;F,! @ !G,+
63
(;
,-',+
-
(;F,! @ !AG,+
-
(,",+
888888888888888888888888888888888888888888888888888888888
%4*(!&+
;!
888888888888888888888888888888888888888888888888888888888
&!%4
&!
%4*(,-',+
&'4
&'&
95
&;
Podsumowanie
W rozdziale tym przypomniano podstawowe terminy, z ktrymi spotykamy si w trakcie
projektowania aplikacji. Przedstawione tu podstawowe wiadomoci na temat budowy
klas oraz praktycznego wykorzystania ich elementw oka si bardzo pomocne w trakcie
studiowania dalszej czci ksiki.