You are on page 1of 17

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE

ABC Delphi 7
Autor: Andrzej Daniluk
ISBN: 83-7361-269-6
Format: B5, stron: okoo 168

ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Delphi 7 jest kolejn wersj najpopularniejszego zintegrowanego rodowiska


programowania typu RAD dla platformy Windows. Delphi 7, wsppracujc z Kyliksem
firmy Borland - pierwszym rodowiskiem programistycznym RAD dla Linuksa - sprawia,
e moliwoci wykorzystania Delphi przez osoby znajce jzyk Object Pascal znacznie
wzrastaj. Dziki prostocie obsugi i zaletom wzorowanego na Pascalu jzyka Object
Pascal, Delphi jest doskonaym narzdziem dla pocztkujcych programistw, take
dla tych, ktrzy nie mieli wczeniej wiele wsplnego z programowaniem obiektowym.
Ksika omawia:
Podstawy programowania w jzyku Object Pascal
Projektowanie zorientowane obiektowo (OOD)
Zintegrowane rodowisko programistyczne Delphi
Object Pascal w wydaniu Delphi 6
Biblioteki VCL i CLX
Tworzenie i instalowanie wasnych komponentw
W porwnaniu z poprzednim wydaniem tej ksiki rozbudowano rozdziay traktujce
o podstawach programowania w jzyku Object Pascal. Znacznie poszerzono te rozdzia
powicony programowaniu obiektowemu.
Pomoc w zgbianiu tajnikw Delphi 7 bdzie 28 kompletnych, przykadowych
projektw doczonych do ksiki, ilustrujcych najwaniejsze poruszane zagadnienia.

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

Rozdzia 2. Zmienne o typie modyfikowalnym w czasie wykonywania programu... 45


Rekord TVarData ..............................................................................................................45
Tablice wariantowe ...........................................................................................................47
Podsumowanie ..................................................................................................................50

Rozdzia 3. Projektowanie obiektowe OOD ......................................................... 51


Klasy..................................................................................................................................51
Metody ..............................................................................................................................54
Obiekty ..............................................................................................................................54
Widoczno obiektw .......................................................................................................56
Wspdziaanie obiektw ..................................................................................................56
Implementacja obiektu ......................................................................................................56
Wasnoci ..........................................................................................................................57
Dziedziczenie ....................................................................................................................59
Klasy abstrakcyjne ............................................................................................................62
Podsumowanie ..................................................................................................................63

Rozdzia 4. rodowisko programisty IDE ........................................................ 65


Biblioteka VCL .................................................................................................................67
Karta Standard ............................................................................................................68
Karta Additional..........................................................................................................69
Karta Win32................................................................................................................72
Karta System...............................................................................................................74
Karta Dialogs ..............................................................................................................75
Biblioteka CLX .................................................................................................................76
Karta Additional..........................................................................................................76
Karta System...............................................................................................................77
Karta Dialogs ..............................................................................................................77
Podsumowanie ..................................................................................................................77

Rozdzia 5. Object Pascal w wydaniu Delphi ....................................................... 79


Formularz ..........................................................................................................................79
Zdarzenia...........................................................................................................................81
Wykorzystujemy wasne funkcje i procedury...................................................................86
Metody przeciane...........................................................................................................88
Wyjtki ..............................................................................................................................91
Operacje na plikach cz I..........................................................................................95
Operacje na plikach cz II.........................................................................................98
Operacje na plikach cz III .....................................................................................101
Strukturalna obsuga wyjtkw.......................................................................................107
Tablice otwarte................................................................................................................108
Tablice dynamiczne.........................................................................................................109
Typ OleVariant................................................................................................................109
Drukowanie .....................................................................................................................112
Rekordy w Delphi ...........................................................................................................114
Podsumowanie ................................................................................................................121

Spis treci

Rozdzia 6. Biblioteka VCL............................................................................... 123


Komponenty TActionList, TImageList, TOpenDialog, TSaveDialog i TMainMenu ....123
Komponenty TActionManager i TActionMainMenuBar ...............................................129
Klasa TMediaPlayer........................................................................................................134
Podsumowanie ................................................................................................................137

Rozdzia 7. Biblioteka CLX............................................................................... 139


Komponenty TTimer i TLCDNumber ............................................................................139
Pliki i katalogi .................................................................................................................143
Znaki wielobajtowe...................................................................................................144
Komponenty klas TDirectoryTreeView i TFileListView ...............................................144
Podsumowanie ................................................................................................................147

Rozdzia 8. Komponentowy model Delphi.......................................................... 149


Tworzenie i instalacja wasnego komponentu ................................................................149
Modyfikacja istniejcego komponentu z biblioteki VCL/CLX ......................................156
Podsumowanie ................................................................................................................160

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

oraz publikowanych (ang. published). Domylnie w standardowym jzyku Object


Pascal wszystkie elementy klasy traktowane s jako prywatne, co oznacza, e dostp do
nich jest cile kontrolowany i adna funkcja, nienaleca do klasy, nie moe z nich
korzysta. Jeeli w definicji klasy pojawi si elementy publiczne, oznacza to, e mog
one uzyskiwa dostp do innych czci programu. Chronione elementy klasy dostpne
s jedynie w danej klasie lub w klasach potomnych. Ogln posta definicji klasy mona
przedstawi w sposb nastpujcy:


  


   

   



   

 

   



 

 ! 
 
"
  #$


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:

%& 



 '&( ! )*+

 ! )*


W sekcji publicznej (rozpoczynajcej si od sowa kluczowego  ) deklaracji


klasy
 umiecilimy prototyp jedynej procedury skadowej klasy, natomiast
w prywatnej (rozpoczynajcej si od sowa kluczowego   ) umiecilimy deklaracj

Rozdzia 3. Projektowanie obiektowe OOD

53

jednej zmiennej (dokadniej wskanika) skadowej klasy. Mimo e istnieje moliwo


deklarowania zmiennych publicznych w klasie, to jednak zalecane jest, aby dy do
tego, by ich deklaracje byy umieszczane w sekcji prywatnej, za dostp do nich by
moliwy poprzez funkcje z sekcji publicznej. Jak ju si zapewne domylamy, dostp
do wskanika  z sekcji prywatnej bdzie moliwy wanie poprzez procedur
  , ktrej jedynym parametrem jest wanie wskanik. Tego typu technika
programowania nosi nazw enkapsulacji danych, co oznacza, e dostp do prywatnych
danych jest zawsze cile kontrolowany.
Enkapsulacja (ang. encapsulation) jest mechanizmem wicym instrukcje z danymi
i zabezpieczajcym je przed ingerencj z zewntrz i bdnym uyciem.

W ciele procedury    dokonujemy porwnania dwch cigw znakw,


czyli acucha wskazywanego przez  oraz drugiego, odpowiadajcego ju
konkretnemu nazwisku danej osoby. Jeeli oba acuchy s identyczne, procedura
wywietli odpowiedni komunikat. Poniewa omawiana procedura jest czci klasy

 , to przy jej zapisie w programie musimy poinformowa kompilator, i wanie


do niej naley. W Object Pascalu suy temu celowi operator w postaci kropki (),
zwany te niekiedy operatorem rozrniania zakresu.
 %&'&( ! )*+

 !  
 (  ,- ,+ 
-
(,"  ,+


 (  ,' ,+ 
-
(,   ,+


-
(,"  ,+


Kompletny kod moduu projektu Projekt_11.dpr, korzystajcego z omawianej klasy,


przedstawiono na listingu 3.1.
Listing 3.1. Kod projektu Projekt_11.dpr
 ).//
012))%3) *4&456
 
& 7


%& 



 '&( ! )*+

 ! )*

888888888888888888888888888888888888888888888888888888888
 %&'&( ! )*+

 !  
 (  ,- ,+ 

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.

Rozdzia 3. Projektowanie obiektowe OOD

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

Czsto pocztkujcy programici Delphi popeniaj do powany bd, polegajcy


na prbie utworzenia obiektu poprzez bezporednie odwoanie si do konstruktora
  :
&*

Zawsze naley pamita, i obiekty tworzymy wycznie z poziomu odwoania si


do nazwy macierzystej klasy, a dopiero potem wywoujemy jej konstruktor:
&! %&*

Zwalnianie tak utworzonego obiektu odbywa si poprzez bezporednie wywoanie


metody  :
&;

Podczas niszczenia obiektu nie korzystamy ju z odwoania do nazwy macierzystej


klasy.

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.

Rozdzia 3. Projektowanie obiektowe OOD

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   :


 
  
  *
 
 # : 

  <! @>! &  ? 
 & 

Jednoparametrowa funkcja skadowa klasy (metoda)  ! ma bardzo prost budow


i suy bdzie do odpowiedniego indeksowania nazwisk:
 %&? (! @+! &

9 
! ; <>


Dwuparametrowa procedura  ! rwnie nie jest skomplikowana i przypisuje


odpowiedniemu indeksowi tablicy cig znakw, okrelony przez zmienn !:
 %&& (! @   ! &+

; <>!   


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


%& 


; ! </=>  &
 ? (! @+! &
 & (! @   ! &+

Rozdzia 3. Projektowanie obiektowe OOD

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

Dziedziczenie (ang. inheritance) jest procesem przejmowania przez jeden obiekt


waciwoci innego, umoliwiajcym tym samym klasyfikowanie obiektw.

Ogln posta definicji klasy pochodnej zapisujemy z reguy w sposb nastpujcy:



  
 (
 E+
0
 
    
 


Jako przykad zdefiniujemy klas o nazwie


", dziedziczc po pewnej klasie bazowej
 , ktra zawiera bdzie zmienn prywatn , przechowujc
nazwisko wybranej osoby. Ze wzgldu na to, i klasa
" dziedziczy po klasie

 , procedura " z klasy


" bdzie miaa bezporedni dostp do
pola  klasy bazowej. Osoby bdziemy rozrnia poprzez ich imi i nazwisko oraz ocen z wybranego przedmiotu. W ten oto sposb wszystkie interesujce nas
informacje uzyskamy, wywoujc w gwnym programie jedynie procedury skadowe
obiektu  klasy
", tak jak pokazano to na listingu 3.4. Chocia program
nasz skada si z dwch rnych klas, zawierajcych szereg odrbnych elementw skadowych, to jedynymi obiektami, do ktrych jawnie odwoujemy si w programie gwnym, s procedury skadowe   oraz " obiektu  klasy
".
Listing 3.4. Przykad dziedziczenia klas
 )./B
012))%3) *4&456
 
& 7


%& 



 '&

; ! &

888888888888888888888888888888888888888888888888888888888

  %4   
  %&
%4 
 (%&+


 
  
  *( ! &+
 '4

888888888888888888888888888888888888888888888888888888888
 %&'&

 (;  ,' - ,+ 
-
(,"  ,+


 (;  ,- ' ,+ 
-
(,   ,+


-
(,"  ,+


Rozdzia 3. Projektowanie obiektowe OOD

61

888888888888888888888888888888888888888888888888888888888
 %4'4

 (;  ,' - ,+ 
-
(; F,!   @ ! G,+


 (;  ,- ' ,+ 
-
(; F,!   @ ! AG,+


-
(," ,+

888888888888888888888888888888888888888888888888888888888
  %4*( ! &+

; !  
 
 #   
  %4
  :H  :
H 
 ;  
  %&
 H     

888888888888888888888888888888888888888888888888888888888

&! %4

     
 (+
 & 
  %4
&! %4*(,- ' ,+
&'4
&'&
95
 
 ( +  &
  : #  ;
&;


Analizujc przedstawione powyej zapisy, warto te zwrci uwag na sposb definicji


konstruktora klasy
". Ot konstruktor zosta definiowany z parametrem formalnym w postaci zmiennej . W ciele konstruktora warto tego parametru
zostaa przypisana zamiennej , zdefiniowanej w czci prywatnej klasy

 . Taka definicja konstruktora zapewnia moliwo wywoania go w programie


gwnym, z parametrem aktualnym w postaci nazwiska interesujcej nas osoby. Wszystkie
metody wykorzystywane przez powyszy program s metodami statycznymi. Oznacza to,
i kompilator Delphi czy ich wywoanie z implementacj metody.
Programujc hierarchiczn struktur klas, zawsze naley pamita, e klasa bazowa
tworzona jest tylko wwczas, gdy konstruktor klasy potomnej wywoa konstruktor
klasy bazowej. Delphi zawsze w pierwszej kolejnoci wywouje konstruktor klasy
potomnej. Kada klasa potomna musi posiada swojego przodka (swoj klas
bazow). Przodek moe by dowoln inn klas bazow, wystpujc w acuchu
dziedziczenia, a po klas
"# . Jeeli klasa bazowa nie zostanie jawnie okrelona, Delphi jako domyln klas bazow przyjmie
"# .

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,+

Rozdzia 3. Projektowanie obiektowe OOD

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.

You might also like