SlideShare a Scribd company logo
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TRE CI   ABC Delphi 7
                                         Autor: Andrzej Daniluk
           KATALOG KSI¥¯EK               ISBN: 83-7361-269-6
                                         Format: B5, stron: oko³o 168
                      KATALOG ONLINE

       ZAMÓW DRUKOWANY KATALOG


              TWÓJ KOSZYK                Delphi 7 jest kolejn¹ wersj¹ najpopularniejszego zintegrowanego rodowiska
                                         programowania typu RAD dla platformy Windows. Delphi 7, wspó³pracuj¹c z Kyliksem
                    DODAJ DO KOSZYKA
                                         firmy Borland - pierwszym rodowiskiem programistycznym RAD dla Linuksa - sprawia,
                                         ¿e mo¿liwo ci wykorzystania Delphi przez osoby znaj¹ce jêzyk Object Pascal znacznie
         CENNIK I INFORMACJE             wzrastaj¹. Dziêki prostocie obs³ugi i zaletom wzorowanego na Pascalu jêzyka Object
                                         Pascal, Delphi jest doskona³ym narzêdziem dla pocz¹tkuj¹cych programistów, tak¿e
                                         dla tych, którzy nie mieli wcze niej wiele wspólnego z programowaniem obiektowym.
                   ZAMÓW INFORMACJE
                     O NOWO CIACH        Ksi¹¿ka omawia:
                                            • Podstawy programowania w jêzyku Object Pascal
                       ZAMÓW CENNIK         • Projektowanie zorientowane obiektowo (OOD)
                                            • Zintegrowane rodowisko programistyczne Delphi
                                            • Object Pascal w wydaniu Delphi 6
                 CZYTELNIA                  • Biblioteki VCL i CLX
                                            • Tworzenie i instalowanie w³asnych komponentów
          FRAGMENTY KSI¥¯EK ONLINE       W porównaniu z poprzednim wydaniem tej ksi¹¿ki rozbudowano rozdzia³y traktuj¹ce
                                         o podstawach programowania w jêzyku Object Pascal. Znacznie poszerzono te¿ rozdzia³
                                         po wiêcony programowaniu obiektowemu.
                                         Pomoc¹ w zg³êbianiu tajników Delphi 7 bêdzie 28 kompletnych, przyk³adowych
                                         projektów do³¹czonych do ksi¹¿ki, ilustruj¹cych najwa¿niejsze poruszane zagadnienia.




Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treści
               Wstęp ............................................................................................... 7
Rozdział 1. Elementarz Object Pascala................................................................. 9
               Moduły ................................................................................................................................9
               Program główny ................................................................................................................10
               Stałe...................................................................................................................................12
               Zmienne.............................................................................................................................13
               Typy całkowite..................................................................................................................14
               Typy rzeczywiste...............................................................................................................15
               Typ Currency.....................................................................................................................16
               Typy logiczne....................................................................................................................16
               Typy znakowe ...................................................................................................................17
               Typy łańcuchowe ..............................................................................................................17
               Literały łańcuchowe ..........................................................................................................18
               Typ okrojony .....................................................................................................................18
               Typ mnogościowy .............................................................................................................19
               Typ wyliczeniowy .............................................................................................................19
               Tablice...............................................................................................................................20
               Rekordy .............................................................................................................................21
               Operatory...........................................................................................................................23
               Wskazania i adresy............................................................................................................24
               Instrukcje sterujące przebiegiem programu ......................................................................26
                   Instrukcja warunkowa If…Then .................................................................................26
                   Instrukcja warunkowa Case…Of................................................................................27
                   Instrukcja iteracyjna Repeat…Until ...........................................................................28
                   Instrukcja iteracyjna While…Do ................................................................................29
                   Instrukcja iteracyjna For…To…Do............................................................................29
                   Procedura przerwania programu Break ......................................................................30
                   Procedura przerwania programu Exit .........................................................................31
                   Procedura wyjścia z programu Halt............................................................................31
                   Procedura zatrzymania programu RunError ...............................................................31
                   Procedura kontynuacji programu Continue ................................................................32
               Rekordy z wariantami .......................................................................................................32
               Procedury ..........................................................................................................................34
                   Parametry formalne.....................................................................................................34
4                                                                                                                                ABC Delphi 7


               Funkcje ..............................................................................................................................36
               Operacje zmiennoprzecinkowe .........................................................................................37
               Moduły na powa nie .........................................................................................................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ść obiektów .......................................................................................................56
               Współdziałanie obiektów ..................................................................................................56
               Implementacja obiektu ......................................................................................................56
               Własności ..........................................................................................................................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 własne funkcje i procedury...................................................................86
               Metody przecią ane...........................................................................................................88
               Wyjątki ..............................................................................................................................91
               Operacje na plikach — część I..........................................................................................95
               Operacje na plikach — część II.........................................................................................98
               Operacje na plikach — część III .....................................................................................101
               Strukturalna obsługa wyjątków.......................................................................................107
               Tablice otwarte................................................................................................................108
               Tablice dynamiczne.........................................................................................................109
               Typ OleVariant................................................................................................................109
               Drukowanie .....................................................................................................................112
               Rekordy w Delphi ...........................................................................................................114
               Podsumowanie ................................................................................................................121
Spis treści                                                                                                                                       5


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 własnego komponentu ................................................................149
                Modyfikacja istniejącego 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 sposobów, pozwalających elementom skła-
   dowym aplikacji stać się odpowiednikiem obiektu lub klasy obiektów rzeczywiście
   istniejących w otaczającym nas świecie. Wszystkie aplikacje tworzone są po to, aby
   w sposób mniej lub bardziej prawdziwy odzwierciedlały lub modelowały otaczającą
   nas rzeczywistość. Ka da aplikacja jest zbiorem współdziałających ze sobą ró nych
   elementów. Przed rozpoczęciem projektowania aplikacji nale y:
     1. Zdefiniować nowy (lub zaimplementować istniejący) typ danych — klasę.
     2. Zdefiniować obiekty oraz ich atrybuty.
     3. Zaprojektować operacje, jakie ka dy z obiektów ma wykonywać.
     4. Ustalić zasady widoczności obiektów.
     5. Ustalić zasady współdziałania obiektów.
     6. Zaimplementować ka dy z obiektów na potrzeby działania aplikacji.
     7. Ustalić mechanizmy dziedziczenia obiektów.




Klasy
   Klasa, definiując nowy typ (wzorzec) danych, mo e być źródłem definicji innych klas
   pochodnych. Klasa jest jednym z podstawowych pojęć języka Object Pascal. Za pomocą
   słowa kluczowego ENCUU definiujemy nowy typ danych, będący w istocie połączeniem
   danych i instrukcji, które wykonują na nich działania, umo liwiających tworzenie
   nowych (lub wykorzystanie istniejących) elementów, będących reprezentantami klasy.
   W największym przybli eniu konstrukcja klasy umo liwia deklarowanie elementów
   prywatnych (ang. private), publicznych (ang. public), chronionych (ang. protected)
52                                                                            ABC Delphi 7


     oraz publikowanych (ang. published). Domyślnie w standardowym języku Object
     Pascal wszystkie elementy klasy traktowane są jako prywatne, co oznacza, e dostęp do
     nich jest ściśle kontrolowany i adna funkcja, nienale ąca do klasy, nie mo e z nich
     korzystać. Je eli w definicji klasy pojawią się elementy publiczne, oznacza to, e mogą
     one uzyskiwać dostęp do innych części programu. Chronione elementy klasy dostępne
     są jedynie w danej klasie lub w klasach potomnych. Ogólną postać definicji klasy mo na
     przedstawić w sposób następujący:
       V[RG
       0CYC-NCU[  ENCUU
         RTKXCVG
           RT[YCVPG FCPG K HWPMELG
         RTQVGEVGF
           EJTQPKQPG FCPG K HWPMELG
         RWDNKE
           RWDNKEPG FCPG K HWPMELG
         RWDNKUJGF
           RWDNKMQYCPG FCPG K HWPMELG
       GPF
       
       XCT
         'IGORNCT-NCU[ 0CYC-NCU[
       $GIKP
        RTQITCO I ÎYP[
       'PF

     Jeszcze kilkanaście lat temu, przed pojawieniem się wizualnych środowisk programi-
     stycznych, słowo obiekt (ang. object) było jednoznacznie uto samiane z klasą. Obecnie
     sytuacja nieco się skomplikowała, gdy słowo obiekt ma o wiele szersze znaczenie. Z tego
     względu wygodniej jest posługiwać się szeroko stosowanym w anglojęzycznej literaturze
     sformułowaniem egzemplarz klasy (ang. class instance). Otó po zdefiniowaniu klasy,
     tworzymy egzemplarz jej typu o nazwie takiej samej, jak nazwa klasy występująca po
     słowie ENCUU. Jednak klasy tworzymy po to, by stały się specyfikatorami typów danych.
     Je eli po instrukcji definicji klasy (kończącej się słowem kluczowym GPF), po słowie
     kluczowym XCT podamy pewną nazwę, utworzymy tym samym określony egzemplarz
     klasy, który od tej chwili traktowany jest jako nowy, pełnoprawny typ danych.

     Jako przykład zaprojektujemy bardzo prostą w budowie klasę 65VWFGPV, za pomocą
     której będziemy mogli odczytać wybrane informacje o pewnej osobie.

     Deklaracja klasy 65VWFGPV, składającej się z części publicznej i prywatnej, mo e wy-
     glądać następująco:
       V[RG
         65VWFGPV  ENCUU
           RWDNKE
             RTQEGFWTG ,CMK5VWFGPV
LU 2%JCT
           RTKXCVG
             0CYKUMQ 2%JCT
         GPF

     W sekcji publicznej (rozpoczynającej się od słowa kluczowego RWDNKE) deklaracji
     klasy 65VWFGPV umieściliśmy prototyp jedynej procedury składowej klasy, natomiast
     w prywatnej (rozpoczynającej się od słowa kluczowego RTKXCVG) umieściliśmy deklarację
Rozdział 3. ♦ Projektowanie obiektowe OOD                                                     53


        jednej zmiennej (dokładniej wskaźnika) składowej klasy. Mimo e istnieje mo liwość
        deklarowania zmiennych publicznych w klasie, to jednak zalecane jest, aby dą yć do
        tego, by ich deklaracje były umieszczane w sekcji prywatnej, zaś dostęp do nich był
        mo liwy poprzez funkcje z sekcji publicznej. Jak ju się zapewne domyślamy, dostęp
        do wskaźnika 0CYKUMQ z sekcji prywatnej będzie mo liwy właśnie poprzez procedurę
        ,CMK5VWFGPV
, której jedynym parametrem jest właśnie wskaźnik. Tego typu technika
        programowania nosi nazwę enkapsulacji danych, co oznacza, e dostęp do prywatnych
        danych jest zawsze ściśle kontrolowany.

            Enkapsulacja (ang. encapsulation) jest mechanizmem wiążącym instrukcje z danymi
            i zabezpieczającym je przed ingerencją z zewnątrz i błędnym użyciem.

        W ciele procedury ,CMK5VWFGPV
 dokonujemy porównania dwóch ciągów znaków,
        czyli łańcucha wskazywanego przez 0CYKUMQ oraz drugiego, odpowiadającego ju
        konkretnemu nazwisku danej osoby. Je eli oba łańcuchy są identyczne, procedura
        wyświetli odpowiedni komunikat. Poniewa omawiana procedura jest częścią klasy
        65VWFGPV, to przy jej zapisie w programie musimy poinformować kompilator, i właśnie
        do niej nale y. W Object Pascalu słu y temu celowi operator w postaci kropki (),
        zwany te niekiedy operatorem rozró niania zakresu.
           RTQEGFWTG 65VWFGPV,CMK5VWFGPV
LU 2%JCT
             DGIKP
               PCYKUMQLU
               KH 
0CYKUMQ  9CEMQYUMK  VJGP
                 9TKVGNP
 $CTFQ FQDT[ UVWFGPV 
                 GNUG
                   KH 
0CYKUMQ  ,CPMQYUMK  VJGP
                     9TKVGNP
 -KGRUMK UVWFGPV 
                     GNUG
                       9TKVGNP
 $TCM VCMKGIQ UVWFGPVC 
             GPF

        Kompletny kod modułu projektu Projekt_11.dpr, korzystającego z omawianej klasy,
        przedstawiono na listingu 3.1.

Listing 3.1. Kod projektu Projekt_11.dpr
           RTQITCO 2TQLGMVA
           ] #226;2' %1051.'_
           WUGU
             5[U7VKNU

           V[RG
             65VWFGPV  ENCUU
               RWDNKE
                 RTQEGFWTG ,CMK5VWFGPV
LU 2%JCT
               RTKXCVG
                 0CYKUMQ 2%JCT
             GPF
           
           RTQEGFWTG 65VWFGPV,CMK5VWFGPV
LU 2%JCT
             DGIKP
               PCYKUMQLU
               KH 
0CYKUMQ  9CEMQYUMK  VJGP
54                                                                          ABC Delphi 7


             9TKVGNP
 $CTFQ FQDT[ UVWFGPV 
             GNUG
               KH 
0CYKUMQ  ,CPMQYUMK  VJGP
                 9TKVGNP
 -KGRUMK UVWFGPV 
                  GNUG
                    9TKVGNP
 $TCM VCMKGIQ UVWFGPVC 
         GPF
       
       XCT
          GIGORNCT 5VWFGPV MNCU[ 65VWFGPV
         5VWFGPV 65VWFGPV
         -VQT[5VWFGPV 2%JCT
       DGIKP
         -VQT[5VWFGPV ,CPMQYUMK 
         5VWFGPV,CMK5VWFGPV
-VQT[5VWFGPV
         4GCF.0
       GPF




Metody
     Ka dy wykorzystywany w programie egzemplarz klasy (lub obiekt) wykonuje (lub
     my wykonujemy na nim) pewne czynności — operacje, zwane potocznie metodami.
     Metodami nazywamy funkcje lub procedury, będące elementami klasy i obsługujące
     obiekt przynale ny do danej klasy. W przykładzie pokazanym na listingu 3.1 procedura
     ,CMK5VWFGPV
 jest właśnie taką metodą.




Obiekty
     Obiekt jest dynamicznym egzemplarzem (reprezentantem) macierzystej klasy. Stanowi
     te pewien element rzeczywistości, którą charakteryzuje określony stan, tzn. obiekt
     jest aktywny lub nie. W odró nieniu od zwykłych egzemplarzy klas, obiekty są zawsze
     alokowane dynamicznie w pewnym obszarze pamięci, zwanej stertą. Jedną z najwa -
     niejszych cech odró niających obiekty od normalnych egzemplarzy klas jest to, e za
     tworzenie i zwalnianie obiektów w trakcie działania programu odpowiedzialny jest
     programista. Ka dy obiekt tworzony jest za pomocą funkcji składowej klasy, zwanej
     konstruktorem. Definicja konstruktora rozpoczyna się od słowa kluczowego EQPUVTWEVQT.
     W Delphi domyślną nazwą konstruktora pozostaje słowo %TGCVG. W celu zwolnienia
     (zniszczenia) obiektu w momencie, gdy nie jest on ju potrzebny, u ywamy jego destruk-
     tora. Definicja destruktora rozpoczyna się od słowa kluczowego FGUVWEVQT. Powszechnie
     stosowaną nazwą destruktora jest słowo GUVTQ[. Nale y jednak pamiętać, i jawne
     wywoływanie w programie destruktora klasy wią e się z dość powa nymi konsekwen-
     cjami i wymaga pewnej wprawy, dlatego du o bezpieczniejsze jest u ywanie prostej
     funkcji (metody) (TGG w celu zniszczenia danego obiektu.
Rozdział 3. ♦ Projektowanie obiektowe OOD                                              55


        Na listingu 3.2 zaprezentowano zmodyfikowaną wersję poprzednio omawianego progra-
        mu. W obecnej wersji tworzony jest dynamicznie egzemplarz (obiekt) klasy 65VWFGPV.

Listing 3.2. Idea tworzenia i zwalniania dynamicznego egzemplarza klasy
           RTQITCO 2TQLGMVA
           ] #226;2' %1051.'_
           WUGU
             5[U7VKNU

           V[RG
             65VWFGPV  ENCUU
               RWDNKE
                  FGMNCTCELC DGRCTCOGVTQYGIQ MQPUVTWMVQTC
                 EQPUVTWEVQT %TGCVG
                 RTQEGFWTG ,CMK5VWFGPV
LU 2%JCT
               RTKXCVG
                 0CYKUMQ 2%JCT
             GPF
           
           RTQEGFWTG 65VWFGPV,CMK5VWFGPV
LU 2%JCT
             DGIKP
               PCYKUMQLU
               KH 
0CYKUMQ  9CEMQYUMK  VJGP
                 9TKVGNP
 $CTFQ FQDT[ UVWFGPV 
                 GNUG
                   KH 
0CYKUMQ  ,CPMQYUMK  VJGP
                     9TKVGNP
 -KGRUMK UVWFGPV 
                     GNUG
                       9TKVGNP
 $TCM VCMKGIQ UVWFGPVC 
             GPF
           
           EQPUVTWEVQT 65VWFGPV%TGCVG
           DGIKP
              QRELQPCNPKG EKC Q MQPUVTWMVQTC
           GPF
           
           XCT
             5VWFGPV 65VWFGPV
             -VQT[5VWFGPV 2%JCT
           DGIKP
              VYQTGPKG F[PCOKEPGIQ GIGORNCTC 
QDKGMVW
              5VWFGPV MNCU[ 65VWFGPV
              QDKGMV 5VWFGPV VYQTQP[ LGUV CYUG  RQKQOW QFYQ CPKC
              FQ PCY[ MNCU[ 65VWFGPV
             5VWFGPV65VWFGPV%TGCVG
             -VQT[5VWFGPV ,CPMQYUMK 
             5VWFGPV,CMK5VWFGPV
-VQT[5VWFGPV
             4GCF.0
              YCNPKCPKG 
PKUEGPKG QDKGMVW 5VWFGPV
              RQRTG DGRQ TGFPKG Y[YQ CPKG OGVQF[ (TGG
             5VWFGPV(TGG
           GPF
56                                                                            ABC Delphi 7


        Często początkujący programiści Delphi popełniają dość poważny błąd, polegający
        na próbie utworzenia obiektu poprzez bezpośrednie odwołanie się do konstruktora
        %TGCVG:
          5VWFGPV%TGCVG
        Zawsze należy pamiętać, iż obiekty tworzymy wyłącznie z poziomu odwołania się
        do nazwy macierzystej klasy, a dopiero potem wywołujemy jej konstruktor:
          5VWFGPV65VWFGPV%TGCVG
        Zwalnianie tak utworzonego obiektu odbywa się poprzez bezpośrednie wywołanie
        metody (TGG:
          5VWFGPV(TGG
        Podczas niszczenia obiektu nie korzystamy już z odwołania do nazwy macierzystej
        klasy.




Widoczność obiektów
     Je eli uznamy to za konieczne, mo emy ustalić zakres widoczności obiektów w odnie-
     sieniu do fragmentu programu. Obiekt taki będzie korzystał ze zmiennych dostępnych
     jedynie dla metod klasy, w której je zdefiniowano.



Współdziałanie obiektów
     Je eli obiekt lub grupę obiektów uczynimy widocznymi w całej aplikacji, nale y ustalić
     zasady porozumiewania się obiektów, czyli relacje pomiędzy nimi. Dla ka dego z obiek-
     tów ustanawiamy ściśle określony zbiór reguł i funkcji, dzięki którym korzystać z niego
     mogą inne obiekty.



Implementacja obiektu
     Implementacja, czyli oprogramowanie obiektu, oznacza stworzenie kodu źródłowego,
     obsługującego metody z nim związane. Korzystając z zasad programowania obiektowo-
     zdarzeniowego, z poszczególnymi obiektami kojarzymy odpowiadające im zdarzenia.
Rozdział 3. ♦ Projektowanie obiektowe OOD                                                 57



Własności
       Nowoczesny Object Pascal wprowadza bardziej ogólne pojęcie klasy poprzez imple-
       mentację własności. Własność podobna jest do pola w klasie, ale mo e zachowywać
       się jak metoda. Własności pełnią rolę metod dostępu i modyfikacji (nazywanych me-
       todami )GV i 5GV) i mają szczególne znaczenie w zintegrowanym środowisku progra-
       misty IDE, chocia ich u ycie nie jest ograniczone tylko do niego (co wyka emy za
       chwilę). Właściwość posiada mechanizmy odczytu (TGCF) i zapisu (YTKVG), słu ące do
       pobierania i ustawiania wartości właściwości. Mechanizmem odczytu mo e być na-
       zwa pola lub metoda zwracająca wartość własności, natomiast mechanizmem zapisu
       — nazwa pola lub metoda ustawiająca wartość pola. Zaniedbując mechanizm zapisy-
       wania, tworzy się własność tylko do odczytu. Dopuszczalne jest równie stworzenie
       własności tylko do zapisu, jednak celowość takiego tworu jest bardzo wątpliwa. Więk-
       szość mechanizmów zapisujących i odczytujących stanowią nazwy pól lub metod,
       chocia mogą to być równie części pól agregujących, takich jak struktury lub tablice.
       Je eli dyrektywa TGCF lub YTKVG odwołuje się do elementu tablicy, indeks tablicy musi
       być stały, a typ pola nie mo e być tablicą dynamicznie alokowaną w pamięci.

       Własności mogą być definiowane przy u yciu dyrektyw FGHCWNV lub UVQTGF. Informa-
       cja ta nie ma adnego znaczenia dla Delphi, jednak u ywa się jej podczas wykonywa-
       nia opisów formularzy w pliku .dfm lub .xfm. Wartością dyrektywy FGHCWNV jest stała
       o typie takim samym, jak typ właściwości. Wartość domyślną mogą posiadać jedynie
       właściwości typu wyliczeniowego, całkowitego lub zbiorowego. Dyrektywa FGHCWNV
       posiada znaczenie tylko w przypadku właściwości publikowanych. Brak dyrektywy
       FGHCWNV równoznaczny jest nadaniu własności dyrektywy PQFGHCWNV. Wartością dy-
       rektywy UVQTGF jest stała boolowska, pole typu boolowskiego lub bezargumentowa
       metoda, zwracająca wynik typu DQQNGCP. Warto pamiętać, i nadanie własności za
       pomocą dyrektywy UVQTGF wartości VTWG (wartości domyślnej) nie powoduje, i taka
       właśnie wartość domyślna zostanie zapisana do pliku .dfm (ewentualnie .xfm). Mo na
       jedynie pominąć wartość własności w pliku .dfm (.xfm), nadając dyrektywie UVQTGF
       wartość HCNUG.

       W celu zilustrowania metod posługiwania się własnościami zbudujemy prostą klasę,
       której wykorzystanie w programie umo liwi w bardzo elegancki i przejrzysty sposób
       odczytywane i zapisywanie danych w postaci nazwisk wybranych osób. W tym celu
       skorzystamy z definicji własności. Poniewa ogólnie przyjętą konwencją jest, aby w tego
       typu programach posługiwać się pewnymi standardowymi przedrostkami dla zmiennych
       oraz funkcji, w dalszej części opisu będziemy wykorzystywać nazewnictwo angiel-
       skie po to, by nie tworzyć mieszanki nazw polskich i angielskich (np. SetNazwisko).

       W pierwszej kolejności określimy własność, za pomocą której będziemy w stanie od-
       czytywać i przypisywać odpowiednie wartości (w tym wypadku łańcuchy znaków re-
       prezentujące nazwiska i imiona osób). Ka da własność słu y do przechowywania
       wartości, zatem nale y zadeklarować związaną z nią zmienną (tzw. pole w klasie).
       Ogólnie przyjętą konwencją jest to, e zmienne mają takie same nazwy, jak związane
       z nimi własności, ale poprzedzone są literą F. W naszym programie w sekcji prywatnej
       definicji klasy 65VWFGPV zadeklarujemy jedną taką zmienną typu 5VTKPI, reprezentującą
       tablicę indeksującą nazwiska studentów. Dodatkowo w tej samej sekcji zadeklarujemy
58                                                                            ABC Delphi 7


        funkcję (metodę) )GV0COG
, która w przyszłości będzie odczytywała za pomocą in-
        deksu imię i nazwisko wybranej osoby, oraz procedurę 5GV0COG
, za pomocą której
        będzie mo na przypisać odpowiedni łańcuch znaków (imię i nazwisko) do odpowiedniego
        indeksu w tablicy:
           RTKXCVG
                 (0COG CTTC[=? QH 5VTKPI
                 HWPEVKQP )GV0COG
K +PVGIGT 5VTKPI
                 RTQEGFWTG 5GV0COG
K +PVGIGT PCOGU 5VTKPI

        Przechodzimy teraz do deklaracji samej własności. W tym celu nale y u yć słowa klu-
        czowego RTQRGTV[. Dla potrzeb programu wystarczy, by własność słu yła wyłącznie
        do przekazywania danych (imion i nazwisk osób) za pomocą indeksu. Własność zade-
        klarujemy w sekcji publicznej definicji klasy. Zdefiniowana własność 0COG będzie od-
        czytywać aktualny stan tablicy (0COG za pomocą dyrektywy TGCF, a następnie przeka-
        zywać (zapisywać) ją do procedury 5GV0COG
, korzystając z dyrektywy YTKVG:
           RWDNKE
                  FGMNCTCELC MQPUVTWMVQTC
                 EQPUVTWEVQT %TGCVG
                  FGMNCTCELC Y CUPQ EK VCDNKEQYGL
                 RTQRGTV[ 0COG=K +PVGIGT? 5VTKPI TGCF )GV0COG
                                                    YTKVG 5GV0COG

        Jednoparametrowa funkcja składowa klasy (metoda) )GV0COG
 ma bardzo prostą budowę
        i słu yć będzie do odpowiedniego indeksowania nazwisk:
           HWPEVKQP 65VWFGPV)GV0COG
K +PVGIGT 5VTKPI
             DGIKP
               4GUWNV(0COG=K?
             GPF

        Dwuparametrowa procedura 5GV0COG
 równie nie jest skomplikowana i przypisuje
        odpowiedniemu indeksowi tablicy ciąg znaków, określony przez zmienną PCOGU:
           RTQEGFWTG 65VWFGPV5GV0COG
K +PVGIGT PCOGU 5VTKPI
             DGIKP
               (0COG=K?PCOGU
             GPF

        Kompletny kod projektu Projekt_12.dpr, wykorzystującego własność w klasie, poka-
        zany jest na listingu 3.3.

Listing 3.3. Praktyczny sposób posługiwania się własnościami w klasie
           RTQITCO 2TQLGMVA
           ] #226;2' %1051.'_
           WUGU
             5[U7VKNU

           V[RG
             65VWFGPV  ENCUU
               RTKXCVG
                 (0COG CTTC[=? QH 5VTKPI
                 HWPEVKQP )GV0COG
K +PVGIGT 5VTKPI
                 RTQEGFWTG 5GV0COG
K +PVGIGT PCOGU 5VTKPI
Rozdział 3. ♦ Projektowanie obiektowe OOD                                              59


              RWDNKE
                 FGMNCTCELC MQPUVTWMVQTC
                EQPUVTWEVQT %TGCVG
                 FGMNCTCELC Y CUPQ EK VCDNKEQYGL
                RTQRGTV[ 0COG=K +PVGIGT? 5VTKPI TGCF )GV0COG
                                                   YTKVG 5GV0COG
            GPF
          
          HWPEVKQP 65VWFGPV)GV0COG
K +PVGIGT 5VTKPI
            DGIKP
              4GUWNV(0COG=K?
            GPF
          
          RTQEGFWTG 65VWFGPV5GV0COG
K +PVGIGT PCOGU 5VTKPI
            DGIKP
              (0COG=K?PCOGU
            GPF
          
          EQPUVTWEVQT 65VWFGPV%TGCVG
          DGIKP
             QRELQPCNPKG EKC Q MQPUVTWMVQTC
          GPF
          
          XCT
            5VWFGPV 65VWFGPV
            K +PVGIGT
          DGIKP
            5VWFGPV65VWFGPV%TGCVG

             Y[YQ WLG 5VWFGPV5GV0COG
            5VWFGPV0COG=? 9CEGM ,CPMQYUMK 
            5VWFGPV0COG=? ,CPGM 9CEMQYUMK 
            5VWFGPV0COG=? ,QNC QDWK UMC 

             Y[YQ WLG 5VWFGPV)GV0COG
            HQT K VQ  FQ
              9TKVGNP
5VWFGPV0COG=K?

            4GCF.0
            5VWFGPV(TGG
          GPF




Dziedziczenie
       Dziedziczenie jest jednym z najwa niejszych mechanizmów programowania zorien-
       towanego obiektowo. Pozwala na przekazywanie właściwości klasy bazowej (ang. base
       class) klasom pochodnym (ang. derived classes). Oznacza to, e w prosty sposób mo na
       zbudować pewną hierarchię klas, uporządkowaną od najbardziej ogólnej do najbardziej
       szczegółowej. Na takiej właśnie hierarchii klas zbudowana jest w Delphi zarówno bi-
       blioteka komponentów wizualnych VCL, jak i biblioteka międzyplatformowa CLX.
60                                                                             ABC Delphi 7


            Dziedziczenie (ang. inheritance) jest procesem przejmowania przez jeden obiekt
            właściwości innego, umożliwiającym tym samym klasyfikowanie obiektów.


         Ogólną postać definicji klasy pochodnej zapisujemy z reguły w sposób następujący:
            0CYC0QYGL-NCU[  ENCUU
0CYC-NCU[KGFKEQPGL
            ]
              FGMNCTCELG UGMELK Y PQYGL MNCUKG
            GPF

         Jako przykład zdefiniujemy klasę o nazwie 61EGPC, dziedziczącą po pewnej klasie ba-
         zowej 65VWFGPV, która zawierać będzie zmienną prywatną (0CYKUMQ, przechowującą
         nazwisko wybranej osoby. Ze względu na to, i klasa 61EGPC dziedziczy po klasie
         65VWFGPV, procedura ,CMC1EGPC z klasy 61EGPC będzie miała bezpośredni dostęp do
         pola (0CYKUMQ klasy bazowej. Osoby będziemy rozró niać poprzez ich imię i nazwi-
         sko oraz ocenę z wybranego przedmiotu. W ten oto sposób wszystkie interesujące nas
         informacje uzyskamy, wywołując w głównym programie jedynie procedury składowe
         obiektu 5VWFGPV klasy 61EGPC, tak jak pokazano to na listingu 3.4. Chocia program
         nasz składa się z dwóch ró nych klas, zawierających szereg odrębnych elementów skła-
         dowych, to jedynymi obiektami, do których jawnie odwołujemy się w programie głów-
         nym, są procedury składowe ,CMK5VWFGPV oraz ,CMC1EGPC obiektu 5VWFGPV klasy 61EGPC.

Listing 3.4. Przykład dziedziczenia klas
            RTQITCO 2TQLGMVA
            ] #226;2' %1051.'_
            WUGU
              5[U7VKNU

            V[RG
              65VWFGPV  ENCUU
                RWDNKE
                  RTQEGFWTG ,CMK5VWFGPV
                RTKXCVG
                  (0CYKUMQ 5VTKPI
              GPF
            
               -NCUC 61EGPC FKGFKE[ RQ MNCUKG 65VWFGPV
              61EGPC  ENCUU
65VWFGPV
                RWDNKE
                   FGMNCTCELC MQPUVTWMVQTC
                  EQPUVTWEVQT %TGCVG
0CYKUMQ 5VTKPI
                  RTQEGFWTG ,CMC1EGPC
              GPF
            
            RTQEGFWTG 65VWFGPV,CMK5VWFGPV
              DGIKP
                KH 
(0CYKUMQ  ,CPGM 9CEMQYUMK  VJGP
                  9TKVGNP
 $CTFQ FQDT[ UVWFGPV 
                  GNUG
                    KH 
(0CYKUMQ  9CEGM ,CPMQYUMK  VJGP
                      9TKVGNP
 -KGRUMK UVWFGPV 
                       GNUG
                         9TKVGNP
 $TCM VCMKGIQ UVWFGPVC 
              GPF
Rozdział 3. ♦ Projektowanie obiektowe OOD                                                     61


          
          RTQEGFWTG 61EGPC,CMC1EGPC
            DGIKP
              KH 
(0CYKUMQ  ,CPGM 9CEMQYUMK  VJGP
                9TKVGNP
(0CYKUMQ  'ICOKP +PHQTOCV[MC  
                GNUG
                  KH 
(0CYKUMQ  9CEGM ,CPMQYUMK  VJGP
                    9TKVGNP
(0CYKUMQ  'ICOKP +PHQTOCV[MC  
                    GNUG
                      9TKVGNP
 $TCM QEGP[ 
            GPF
          
          EQPUVTWEVQT 61EGPC%TGCVG
0CYKUMQ 5VTKPI
            DGIKP
              (0CYKUMQ 0CYKUMQ
               QRELQPCNPKG EKC Q MQPUVTWMVQTC MNCU[ 61EGPC
                YCTVQ EKæ FQO[ NPæ RQNC (0CYKUMQ MNCU[ 65VWFGPV
               RTGMC[YCPæ LCMQ CTIWOGPV MQPUVTWMVQTC
            GPF
          
          XCT
            5VWFGPV 61EGPC
          DGIKP
             VYQTGPKG F[PCOKEPGIQ GIGORNCTC 
QDKGMVW
             5VWFGPV MNCU[ 61EGPC
            5VWFGPV61EGPC%TGCVG
 9CEGM ,CPMQYUMK 
            5VWFGPV,CMC1EGPC
            5VWFGPV,CMK5VWFGPV
            4GCF.0
             YCNPKCPKG 
PKUEGPKG QDKGMVW 5VWFGPV
             RQRTG DGRQ TGFPKG Y[YQ CPKG OGVQF[ (TGG
            5VWFGPV(TGG
          GPF


       Analizując przedstawione powy ej zapisy, warto te zwrócić uwagę na sposób definicji
       konstruktora klasy 61EGPC. Otó konstruktor został definiowany z parametrem for-
       malnym w postaci zmiennej 0CYKUMQ. W ciele konstruktora wartość tego parametru
       została przypisana zamiennej (0CYKUMQ, zdefiniowanej w części prywatnej klasy
       65VWFGPV. Taka definicja konstruktora zapewnia mo liwość wywołania go w programie
       głównym, z parametrem aktualnym w postaci nazwiska interesującej nas osoby. Wszystkie
       metody wykorzystywane przez powy szy program są metodami statycznymi. Oznacza to,
       i kompilator Delphi łączy ich wywołanie z implementacją metody.

          Programując hierarchiczną strukturę klas, zawsze należy pamiętać, że klasa bazowa
          tworzona jest tylko wówczas, gdy konstruktor klasy potomnej wywoła konstruktor
          klasy bazowej. Delphi zawsze w pierwszej kolejności wywołuje konstruktor klasy
          potomnej. Każda klasa potomna musi posiadać swojego przodka (swoją klasę
          bazową). Przodek może być dowolną inną klasą bazową, występującą w łańcuchu
          dziedziczenia, aż po klasę 61DLGEV. Jeżeli klasa bazowa nie zostanie jawnie okre-
          ślona, Delphi jako domyślną klasę bazową przyjmie 61DLGEV.
62                                                                              ABC Delphi 7



Klasy abstrakcyjne
        W przeciwieństwie do omawianych wcześniej metod statycznych, metody deklarowane
        ze słowem kluczowym XKTVWCN (tzw. metody wirtualne) w klasie bazowej muszą być
        zastąpione nową definicją w klasie pochodnej poprzez wykorzystanie dyrektywy QXGTTKFG.
        Cechą charakterystyczną metod wirtualnych jest to, i są łączone przez Delphi w trakcie
        wykonywania programu. Metoda wirtualna mo e zostać w klasie bazowej zadeklarowana
        ze słowem CDUVTCEV, co oznacza, i nie mo e być definiowana przez tę klasę. Metoda
        abstrakcyjna zadeklarowana w klasie bazowej musi być przedefiniowana (przesłonięta)
        przez klasę potomną. Klasę deklarującą jedną lub więcej metod abstrakcyjnych nazy-
        wamy klasą abstrakcyjną. Na listingu 3.5 zamieszczono przykład projektu wykorzystu-
        jącego klasę abstrakcyjną.

Listing 3.5. Zmodyfikowany Projekt_13.dpr, posługujący się klasą abstrakcyjną
           RTQITCO 2TQLGMVA
           ] #226;2' %1051.'_
           WUGU
             5[U7VKNU

           V[RG
             65VWFGPV  ENCUU
               RWDNKE
                 RTQEGFWTG ,CMK5VWFGPV XKTVWCN CDUVTCEV
               RTKXCVG
                 (0CYKUMQ 5VTKPI
             GPF
           
              -NCUC 61EGPC FKGFKE[ RQ MNCUKG CDUVTCME[LPGL 65VWFGPV
             61EGPC  ENCUU
65VWFGPV
               RWDNKE
                 EQPUVTWEVQT %TGCVG
0CYKUMQ 5VTKPI
                 RTQEGFWTG ,CMK5VWFGPV QXGTTKFG
                 RTQEGFWTG ,CMC1EGPC
             GPF
           
            #DUVTCME[LPC OGVQFC ,CMK5VWFGPV  MNCU[ 65VWFGPV
            RTGFGHKPKQYCPC LGUV K CKORNGOGPVQYCPC Y
            MNCUKG RQVQOPGL 61EGPC
           RTQEGFWTG 61EGPC,CMK5VWFGPV
             DGIKP
               KH 
(0CYKUMQ  ,CPGM 9CEMQYUMK  VJGP
                 9TKVGNP
 $CTFQ FQDT[ UVWFGPV 
                 GNUG
                   KH 
(0CYKUMQ  9CEGM ,CPMQYUMK  VJGP
                     9TKVGNP
 -KGRUMK UVWFGPV 
                      GNUG
                        9TKVGNP
 $TCM VCMKGIQ UVWFGPVC 
             GPF
           
           RTQEGFWTG 61EGPC,CMC1EGPC
             DGIKP
               KH 
(0CYKUMQ  ,CPGM 9CEMQYUMK  VJGP
                 9TKVGNP
(0CYKUMQ  'ICOKP +PHQTOCV[MC
Rozdział 3. ♦ Projektowanie obiektowe OOD                                                63


                GNUG
                  KH 
(0CYKUMQ  9CEGM ,CPMQYUMK  VJGP
                    9TKVGNP
(0CYKUMQ  'ICOKP +PHQTOCV[MC  
                     GNUG
                       9TKVGNP
 $TCM QEGP[ 
            GPF
          
          EQPUVTWEVQT 61EGPC%TGCVG
0CYKUMQ 5VTKPI
            DGIKP
              (0CYKUMQ 0CYKUMQ
            GPF
          
          XCT
            5VWFGPV 61EGPC
          DGIKP
            5VWFGPV61EGPC%TGCVG
 9CEGM ,CPMQYUMK 
            5VWFGPV,CMC1EGPC
            5VWFGPV,CMK5VWFGPV
            4GCF.0
            5VWFGPV(TGG
          GPF




Podsumowanie
       W rozdziale tym przypomniano podstawowe terminy, z którymi spotykamy się w trakcie
       projektowania aplikacji. Przedstawione tu podstawowe wiadomości na temat budowy
       klas oraz praktycznego wykorzystania ich elementów oka ą się bardzo pomocne w trakcie
       studiowania dalszej części ksią ki.

More Related Content

PDF
ABC Delphi 6
PDF
Delphi. Szybki start
PDF
ABC Delphi 2006
PDF
RS 232C - praktyczne programowanie. Od Pascala i C++ do Delphi i Buildera. Wy...
PDF
Delphi 2007 dla WIN32 i bazy danych
PDF
Java. Kompendium programisty
PDF
Delphi 7 dla każdego
PDF
Efektywne programowanie w języku Java
ABC Delphi 6
Delphi. Szybki start
ABC Delphi 2006
RS 232C - praktyczne programowanie. Od Pascala i C++ do Delphi i Buildera. Wy...
Delphi 2007 dla WIN32 i bazy danych
Java. Kompendium programisty
Delphi 7 dla każdego
Efektywne programowanie w języku Java

What's hot (20)

PDF
ActionScript. Receptury
PDF
Delphi 7. Ćwiczenia zaawansowane
PDF
Delphi 7. Kompendium programisty
PDF
Aplikacje w Delphi. Przykłady. Wydanie II
PDF
C#. Ćwiczenia
PDF
C# i ASP.NET. Szybki start
PDF
Po prostu QuarkXPress 5
PDF
Kylix. Vademecum profesjonalisty
PDF
Java 2. Podstawy
PDF
Mandrake Linux. Ćwiczenia zaawansowane
PDF
Delphi 2005. Ćwiczenia praktyczne
PDF
CorelDRAW 11. Vademecum profesjonalisty. Tom 1
PDF
Linux. Niezbędnik programisty
PDF
Java. Potrzaski
PDF
Prolog. Programowanie
PDF
Perl. Zaawansowane programowanie. Wydanie II
PDF
CorelDraw X3 PL. Kurs
PDF
C++Builder 6. Ćwiczenia
PDF
eXtreme programming
PDF
Praktyczny kurs Delphi
ActionScript. Receptury
Delphi 7. Ćwiczenia zaawansowane
Delphi 7. Kompendium programisty
Aplikacje w Delphi. Przykłady. Wydanie II
C#. Ćwiczenia
C# i ASP.NET. Szybki start
Po prostu QuarkXPress 5
Kylix. Vademecum profesjonalisty
Java 2. Podstawy
Mandrake Linux. Ćwiczenia zaawansowane
Delphi 2005. Ćwiczenia praktyczne
CorelDRAW 11. Vademecum profesjonalisty. Tom 1
Linux. Niezbędnik programisty
Java. Potrzaski
Prolog. Programowanie
Perl. Zaawansowane programowanie. Wydanie II
CorelDraw X3 PL. Kurs
C++Builder 6. Ćwiczenia
eXtreme programming
Praktyczny kurs Delphi
Ad

Viewers also liked (9)

PDF
Linux. Bezpieczeństwo. Receptury
PDF
Windows Server 2003. Rejestr systemu
PDF
Windows XP PL. Kurs
PDF
HP Software rozwiązania dla biznesu
PDF
BRE-CASE Seminarium 56 - Does it Make Sense to Calculate Core Inflation
PDF
Ramowanie w telewizyjnej reklamie politycznej
PDF
Raport E-commerce w Polsce
PDF
Krajowy program operacyjny efs 2014 2020
Linux. Bezpieczeństwo. Receptury
Windows Server 2003. Rejestr systemu
Windows XP PL. Kurs
HP Software rozwiązania dla biznesu
BRE-CASE Seminarium 56 - Does it Make Sense to Calculate Core Inflation
Ramowanie w telewizyjnej reklamie politycznej
Raport E-commerce w Polsce
Krajowy program operacyjny efs 2014 2020
Ad

Similar to ABC Delphi 7 (20)

PDF
Delphi 2005. 303 gotowe rozwiązania
PDF
Delphi 2005
PDF
Delphi 2006. Ćwiczenia praktyczne
PDF
Delphi 8 .NET. Kompendium programisty
PDF
Visual Basic .NET. Ćwiczenia
PDF
Programuję w Delphi i C++ Builder cz. ii ebook
PDF
Nowoczesny obiektowy Pascal (1) - kurs BSC
PDF
Programuję W Delphi I C Builder
PDF
Programuje w Delphi i C Builder
PDF
darmowe ebooki Programuje W Delphi I C Builder
PDF
C++Builder 6 i bazy danych
PDF
C++Builder Borland Developer Studio 2006. Kompendium programisty
PDF
Programowanie w języku C. Szybki start
PDF
Programuje W Delphi I C Builder
PDF
Programuje W Delphi I C Builder
PDF
Turbo Pascal. Ćwiczenia praktyczne. Wydanie II
PDF
C++BuilderX. Ćwiczenia
PDF
Win32ASM. Asembler w Windows
PDF
Visual Basic 2005. Od podstaw
PDF
Programowanie obiektowe w Visual Basic .NET dla każdego
Delphi 2005. 303 gotowe rozwiązania
Delphi 2005
Delphi 2006. Ćwiczenia praktyczne
Delphi 8 .NET. Kompendium programisty
Visual Basic .NET. Ćwiczenia
Programuję w Delphi i C++ Builder cz. ii ebook
Nowoczesny obiektowy Pascal (1) - kurs BSC
Programuję W Delphi I C Builder
Programuje w Delphi i C Builder
darmowe ebooki Programuje W Delphi I C Builder
C++Builder 6 i bazy danych
C++Builder Borland Developer Studio 2006. Kompendium programisty
Programowanie w języku C. Szybki start
Programuje W Delphi I C Builder
Programuje W Delphi I C Builder
Turbo Pascal. Ćwiczenia praktyczne. Wydanie II
C++BuilderX. Ćwiczenia
Win32ASM. Asembler w Windows
Visual Basic 2005. Od podstaw
Programowanie obiektowe w Visual Basic .NET dla każdego

More from Wydawnictwo Helion (20)

PDF
Tworzenie filmów w Windows XP. Projekty
PDF
Blog, więcej niż internetowy pamiętnik
PDF
Access w biurze i nie tylko
PDF
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
PDF
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
PDF
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
PDF
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
PDF
Makrofotografia. Magia szczegółu
PDF
Windows PowerShell. Podstawy
PDF
Java. Efektywne programowanie. Wydanie II
PDF
JavaScript. Pierwsze starcie
PDF
Ajax, JavaScript i PHP. Intensywny trening
PDF
PowerPoint 2007 PL. Seria praktyk
PDF
Excel 2007 PL. Seria praktyk
PDF
Access 2007 PL. Seria praktyk
PDF
Word 2007 PL. Seria praktyk
PDF
Serwisy społecznościowe. Budowa, administracja i moderacja
PDF
AutoCAD 2008 i 2008 PL
PDF
Bazy danych. Pierwsze starcie
PDF
Inventor. Pierwsze kroki
Tworzenie filmów w Windows XP. Projekty
Blog, więcej niż internetowy pamiętnik
Access w biurze i nie tylko
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Makrofotografia. Magia szczegółu
Windows PowerShell. Podstawy
Java. Efektywne programowanie. Wydanie II
JavaScript. Pierwsze starcie
Ajax, JavaScript i PHP. Intensywny trening
PowerPoint 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
Serwisy społecznościowe. Budowa, administracja i moderacja
AutoCAD 2008 i 2008 PL
Bazy danych. Pierwsze starcie
Inventor. Pierwsze kroki

ABC Delphi 7

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TRE CI ABC Delphi 7 Autor: Andrzej Daniluk KATALOG KSI¥¯EK ISBN: 83-7361-269-6 Format: B5, stron: oko³o 168 KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK Delphi 7 jest kolejn¹ wersj¹ najpopularniejszego zintegrowanego rodowiska programowania typu RAD dla platformy Windows. Delphi 7, wspó³pracuj¹c z Kyliksem DODAJ DO KOSZYKA firmy Borland - pierwszym rodowiskiem programistycznym RAD dla Linuksa - sprawia, ¿e mo¿liwo ci wykorzystania Delphi przez osoby znaj¹ce jêzyk Object Pascal znacznie CENNIK I INFORMACJE wzrastaj¹. Dziêki prostocie obs³ugi i zaletom wzorowanego na Pascalu jêzyka Object Pascal, Delphi jest doskona³ym narzêdziem dla pocz¹tkuj¹cych programistów, tak¿e dla tych, którzy nie mieli wcze niej wiele wspólnego z programowaniem obiektowym. ZAMÓW INFORMACJE O NOWO CIACH Ksi¹¿ka omawia: • Podstawy programowania w jêzyku Object Pascal ZAMÓW CENNIK • Projektowanie zorientowane obiektowo (OOD) • Zintegrowane rodowisko programistyczne Delphi • Object Pascal w wydaniu Delphi 6 CZYTELNIA • Biblioteki VCL i CLX • Tworzenie i instalowanie w³asnych komponentów FRAGMENTY KSI¥¯EK ONLINE W porównaniu z poprzednim wydaniem tej ksi¹¿ki rozbudowano rozdzia³y traktuj¹ce o podstawach programowania w jêzyku Object Pascal. Znacznie poszerzono te¿ rozdzia³ po wiêcony programowaniu obiektowemu. Pomoc¹ w zg³êbianiu tajników Delphi 7 bêdzie 28 kompletnych, przyk³adowych projektów do³¹czonych do ksi¹¿ki, ilustruj¹cych najwa¿niejsze poruszane zagadnienia. Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl
  • 2. Spis treści Wstęp ............................................................................................... 7 Rozdział 1. Elementarz Object Pascala................................................................. 9 Moduły ................................................................................................................................9 Program główny ................................................................................................................10 Stałe...................................................................................................................................12 Zmienne.............................................................................................................................13 Typy całkowite..................................................................................................................14 Typy rzeczywiste...............................................................................................................15 Typ Currency.....................................................................................................................16 Typy logiczne....................................................................................................................16 Typy znakowe ...................................................................................................................17 Typy łańcuchowe ..............................................................................................................17 Literały łańcuchowe ..........................................................................................................18 Typ okrojony .....................................................................................................................18 Typ mnogościowy .............................................................................................................19 Typ wyliczeniowy .............................................................................................................19 Tablice...............................................................................................................................20 Rekordy .............................................................................................................................21 Operatory...........................................................................................................................23 Wskazania i adresy............................................................................................................24 Instrukcje sterujące przebiegiem programu ......................................................................26 Instrukcja warunkowa If…Then .................................................................................26 Instrukcja warunkowa Case…Of................................................................................27 Instrukcja iteracyjna Repeat…Until ...........................................................................28 Instrukcja iteracyjna While…Do ................................................................................29 Instrukcja iteracyjna For…To…Do............................................................................29 Procedura przerwania programu Break ......................................................................30 Procedura przerwania programu Exit .........................................................................31 Procedura wyjścia z programu Halt............................................................................31 Procedura zatrzymania programu RunError ...............................................................31 Procedura kontynuacji programu Continue ................................................................32 Rekordy z wariantami .......................................................................................................32 Procedury ..........................................................................................................................34 Parametry formalne.....................................................................................................34
  • 3. 4 ABC Delphi 7 Funkcje ..............................................................................................................................36 Operacje zmiennoprzecinkowe .........................................................................................37 Moduły na powa nie .........................................................................................................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ść obiektów .......................................................................................................56 Współdziałanie obiektów ..................................................................................................56 Implementacja obiektu ......................................................................................................56 Własności ..........................................................................................................................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 własne funkcje i procedury...................................................................86 Metody przecią ane...........................................................................................................88 Wyjątki ..............................................................................................................................91 Operacje na plikach — część I..........................................................................................95 Operacje na plikach — część II.........................................................................................98 Operacje na plikach — część III .....................................................................................101 Strukturalna obsługa wyjątków.......................................................................................107 Tablice otwarte................................................................................................................108 Tablice dynamiczne.........................................................................................................109 Typ OleVariant................................................................................................................109 Drukowanie .....................................................................................................................112 Rekordy w Delphi ...........................................................................................................114 Podsumowanie ................................................................................................................121
  • 4. Spis treści 5 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 własnego komponentu ................................................................149 Modyfikacja istniejącego komponentu z biblioteki VCL/CLX ......................................156 Podsumowanie ................................................................................................................160 Skorowidz...................................................................................... 161
  • 5. Rozdział 3. Projektowanie obiektowe OOD Programowanie oparte na zasadach projektowania obiektowego OOD (ang. Object Oriented Design) stanowi zespół metod i sposobów, pozwalających elementom skła- dowym aplikacji stać się odpowiednikiem obiektu lub klasy obiektów rzeczywiście istniejących w otaczającym nas świecie. Wszystkie aplikacje tworzone są po to, aby w sposób mniej lub bardziej prawdziwy odzwierciedlały lub modelowały otaczającą nas rzeczywistość. Ka da aplikacja jest zbiorem współdziałających ze sobą ró nych elementów. Przed rozpoczęciem projektowania aplikacji nale y: 1. Zdefiniować nowy (lub zaimplementować istniejący) typ danych — klasę. 2. Zdefiniować obiekty oraz ich atrybuty. 3. Zaprojektować operacje, jakie ka dy z obiektów ma wykonywać. 4. Ustalić zasady widoczności obiektów. 5. Ustalić zasady współdziałania obiektów. 6. Zaimplementować ka dy z obiektów na potrzeby działania aplikacji. 7. Ustalić mechanizmy dziedziczenia obiektów. Klasy Klasa, definiując nowy typ (wzorzec) danych, mo e być źródłem definicji innych klas pochodnych. Klasa jest jednym z podstawowych pojęć języka Object Pascal. Za pomocą słowa kluczowego ENCUU definiujemy nowy typ danych, będący w istocie połączeniem danych i instrukcji, które wykonują na nich działania, umo liwiających tworzenie nowych (lub wykorzystanie istniejących) elementów, będących reprezentantami klasy. W największym przybli eniu konstrukcja klasy umo liwia deklarowanie elementów prywatnych (ang. private), publicznych (ang. public), chronionych (ang. protected)
  • 6. 52 ABC Delphi 7 oraz publikowanych (ang. published). Domyślnie w standardowym języku Object Pascal wszystkie elementy klasy traktowane są jako prywatne, co oznacza, e dostęp do nich jest ściśle kontrolowany i adna funkcja, nienale ąca do klasy, nie mo e z nich korzystać. Je eli w definicji klasy pojawią się elementy publiczne, oznacza to, e mogą one uzyskiwać dostęp do innych części programu. Chronione elementy klasy dostępne są jedynie w danej klasie lub w klasach potomnych. Ogólną postać definicji klasy mo na przedstawić w sposób następujący: V[RG 0CYC-NCU[ ENCUU RTKXCVG RT[YCVPG FCPG K HWPMELG RTQVGEVGF EJTQPKQPG FCPG K HWPMELG RWDNKE RWDNKEPG FCPG K HWPMELG RWDNKUJGF RWDNKMQYCPG FCPG K HWPMELG GPF XCT 'IGORNCT-NCU[ 0CYC-NCU[ $GIKP RTQITCO I ÎYP[ 'PF Jeszcze kilkanaście lat temu, przed pojawieniem się wizualnych środowisk programi- stycznych, słowo obiekt (ang. object) było jednoznacznie uto samiane z klasą. Obecnie sytuacja nieco się skomplikowała, gdy słowo obiekt ma o wiele szersze znaczenie. Z tego względu wygodniej jest posługiwać się szeroko stosowanym w anglojęzycznej literaturze sformułowaniem egzemplarz klasy (ang. class instance). Otó po zdefiniowaniu klasy, tworzymy egzemplarz jej typu o nazwie takiej samej, jak nazwa klasy występująca po słowie ENCUU. Jednak klasy tworzymy po to, by stały się specyfikatorami typów danych. Je eli po instrukcji definicji klasy (kończącej się słowem kluczowym GPF), po słowie kluczowym XCT podamy pewną nazwę, utworzymy tym samym określony egzemplarz klasy, który od tej chwili traktowany jest jako nowy, pełnoprawny typ danych. Jako przykład zaprojektujemy bardzo prostą w budowie klasę 65VWFGPV, za pomocą której będziemy mogli odczytać wybrane informacje o pewnej osobie. Deklaracja klasy 65VWFGPV, składającej się z części publicznej i prywatnej, mo e wy- glądać następująco: V[RG 65VWFGPV ENCUU RWDNKE RTQEGFWTG ,CMK5VWFGPV LU 2%JCT RTKXCVG 0CYKUMQ 2%JCT GPF W sekcji publicznej (rozpoczynającej się od słowa kluczowego RWDNKE) deklaracji klasy 65VWFGPV umieściliśmy prototyp jedynej procedury składowej klasy, natomiast w prywatnej (rozpoczynającej się od słowa kluczowego RTKXCVG) umieściliśmy deklarację
  • 7. Rozdział 3. ♦ Projektowanie obiektowe OOD 53 jednej zmiennej (dokładniej wskaźnika) składowej klasy. Mimo e istnieje mo liwość deklarowania zmiennych publicznych w klasie, to jednak zalecane jest, aby dą yć do tego, by ich deklaracje były umieszczane w sekcji prywatnej, zaś dostęp do nich był mo liwy poprzez funkcje z sekcji publicznej. Jak ju się zapewne domyślamy, dostęp do wskaźnika 0CYKUMQ z sekcji prywatnej będzie mo liwy właśnie poprzez procedurę ,CMK5VWFGPV , której jedynym parametrem jest właśnie wskaźnik. Tego typu technika programowania nosi nazwę enkapsulacji danych, co oznacza, e dostęp do prywatnych danych jest zawsze ściśle kontrolowany. Enkapsulacja (ang. encapsulation) jest mechanizmem wiążącym instrukcje z danymi i zabezpieczającym je przed ingerencją z zewnątrz i błędnym użyciem. W ciele procedury ,CMK5VWFGPV dokonujemy porównania dwóch ciągów znaków, czyli łańcucha wskazywanego przez 0CYKUMQ oraz drugiego, odpowiadającego ju konkretnemu nazwisku danej osoby. Je eli oba łańcuchy są identyczne, procedura wyświetli odpowiedni komunikat. Poniewa omawiana procedura jest częścią klasy 65VWFGPV, to przy jej zapisie w programie musimy poinformować kompilator, i właśnie do niej nale y. W Object Pascalu słu y temu celowi operator w postaci kropki (), zwany te niekiedy operatorem rozró niania zakresu. RTQEGFWTG 65VWFGPV,CMK5VWFGPV LU 2%JCT DGIKP PCYKUMQLU KH 0CYKUMQ 9CEMQYUMK VJGP 9TKVGNP $CTFQ FQDT[ UVWFGPV GNUG KH 0CYKUMQ ,CPMQYUMK VJGP 9TKVGNP -KGRUMK UVWFGPV GNUG 9TKVGNP $TCM VCMKGIQ UVWFGPVC GPF Kompletny kod modułu projektu Projekt_11.dpr, korzystającego z omawianej klasy, przedstawiono na listingu 3.1. Listing 3.1. Kod projektu Projekt_11.dpr RTQITCO 2TQLGMVA ] #226;2' %1051.'_ WUGU 5[U7VKNU V[RG 65VWFGPV ENCUU RWDNKE RTQEGFWTG ,CMK5VWFGPV LU 2%JCT RTKXCVG 0CYKUMQ 2%JCT GPF RTQEGFWTG 65VWFGPV,CMK5VWFGPV LU 2%JCT DGIKP PCYKUMQLU KH 0CYKUMQ 9CEMQYUMK VJGP
  • 8. 54 ABC Delphi 7 9TKVGNP $CTFQ FQDT[ UVWFGPV GNUG KH 0CYKUMQ ,CPMQYUMK VJGP 9TKVGNP -KGRUMK UVWFGPV GNUG 9TKVGNP $TCM VCMKGIQ UVWFGPVC GPF XCT GIGORNCT 5VWFGPV MNCU[ 65VWFGPV 5VWFGPV 65VWFGPV -VQT[5VWFGPV 2%JCT DGIKP -VQT[5VWFGPV ,CPMQYUMK 5VWFGPV,CMK5VWFGPV -VQT[5VWFGPV 4GCF.0 GPF Metody Ka dy wykorzystywany w programie egzemplarz klasy (lub obiekt) wykonuje (lub my wykonujemy na nim) pewne czynności — operacje, zwane potocznie metodami. Metodami nazywamy funkcje lub procedury, będące elementami klasy i obsługujące obiekt przynale ny do danej klasy. W przykładzie pokazanym na listingu 3.1 procedura ,CMK5VWFGPV jest właśnie taką metodą. Obiekty Obiekt jest dynamicznym egzemplarzem (reprezentantem) macierzystej klasy. Stanowi te pewien element rzeczywistości, którą charakteryzuje określony stan, tzn. obiekt jest aktywny lub nie. W odró nieniu od zwykłych egzemplarzy klas, obiekty są zawsze alokowane dynamicznie w pewnym obszarze pamięci, zwanej stertą. Jedną z najwa - niejszych cech odró niających obiekty od normalnych egzemplarzy klas jest to, e za tworzenie i zwalnianie obiektów w trakcie działania programu odpowiedzialny jest programista. Ka dy obiekt tworzony jest za pomocą funkcji składowej klasy, zwanej konstruktorem. Definicja konstruktora rozpoczyna się od słowa kluczowego EQPUVTWEVQT. W Delphi domyślną nazwą konstruktora pozostaje słowo %TGCVG. W celu zwolnienia (zniszczenia) obiektu w momencie, gdy nie jest on ju potrzebny, u ywamy jego destruk- tora. Definicja destruktora rozpoczyna się od słowa kluczowego FGUVWEVQT. Powszechnie stosowaną nazwą destruktora jest słowo GUVTQ[. Nale y jednak pamiętać, i jawne wywoływanie w programie destruktora klasy wią e się z dość powa nymi konsekwen- cjami i wymaga pewnej wprawy, dlatego du o bezpieczniejsze jest u ywanie prostej funkcji (metody) (TGG w celu zniszczenia danego obiektu.
  • 9. Rozdział 3. ♦ Projektowanie obiektowe OOD 55 Na listingu 3.2 zaprezentowano zmodyfikowaną wersję poprzednio omawianego progra- mu. W obecnej wersji tworzony jest dynamicznie egzemplarz (obiekt) klasy 65VWFGPV. Listing 3.2. Idea tworzenia i zwalniania dynamicznego egzemplarza klasy RTQITCO 2TQLGMVA ] #226;2' %1051.'_ WUGU 5[U7VKNU V[RG 65VWFGPV ENCUU RWDNKE FGMNCTCELC DGRCTCOGVTQYGIQ MQPUVTWMVQTC EQPUVTWEVQT %TGCVG RTQEGFWTG ,CMK5VWFGPV LU 2%JCT RTKXCVG 0CYKUMQ 2%JCT GPF RTQEGFWTG 65VWFGPV,CMK5VWFGPV LU 2%JCT DGIKP PCYKUMQLU KH 0CYKUMQ 9CEMQYUMK VJGP 9TKVGNP $CTFQ FQDT[ UVWFGPV GNUG KH 0CYKUMQ ,CPMQYUMK VJGP 9TKVGNP -KGRUMK UVWFGPV GNUG 9TKVGNP $TCM VCMKGIQ UVWFGPVC GPF EQPUVTWEVQT 65VWFGPV%TGCVG DGIKP QRELQPCNPKG EKC Q MQPUVTWMVQTC GPF XCT 5VWFGPV 65VWFGPV -VQT[5VWFGPV 2%JCT DGIKP VYQTGPKG F[PCOKEPGIQ GIGORNCTC QDKGMVW 5VWFGPV MNCU[ 65VWFGPV QDKGMV 5VWFGPV VYQTQP[ LGUV CYUG RQKQOW QFYQ CPKC FQ PCY[ MNCU[ 65VWFGPV 5VWFGPV65VWFGPV%TGCVG -VQT[5VWFGPV ,CPMQYUMK 5VWFGPV,CMK5VWFGPV -VQT[5VWFGPV 4GCF.0 YCNPKCPKG PKUEGPKG QDKGMVW 5VWFGPV RQRTG DGRQ TGFPKG Y[YQ CPKG OGVQF[ (TGG 5VWFGPV(TGG GPF
  • 10. 56 ABC Delphi 7 Często początkujący programiści Delphi popełniają dość poważny błąd, polegający na próbie utworzenia obiektu poprzez bezpośrednie odwołanie się do konstruktora %TGCVG: 5VWFGPV%TGCVG Zawsze należy pamiętać, iż obiekty tworzymy wyłącznie z poziomu odwołania się do nazwy macierzystej klasy, a dopiero potem wywołujemy jej konstruktor: 5VWFGPV65VWFGPV%TGCVG Zwalnianie tak utworzonego obiektu odbywa się poprzez bezpośrednie wywołanie metody (TGG: 5VWFGPV(TGG Podczas niszczenia obiektu nie korzystamy już z odwołania do nazwy macierzystej klasy. Widoczność obiektów Je eli uznamy to za konieczne, mo emy ustalić zakres widoczności obiektów w odnie- sieniu do fragmentu programu. Obiekt taki będzie korzystał ze zmiennych dostępnych jedynie dla metod klasy, w której je zdefiniowano. Współdziałanie obiektów Je eli obiekt lub grupę obiektów uczynimy widocznymi w całej aplikacji, nale y ustalić zasady porozumiewania się obiektów, czyli relacje pomiędzy nimi. Dla ka dego z obiek- tów ustanawiamy ściśle określony zbiór reguł i funkcji, dzięki którym korzystać z niego mogą inne obiekty. Implementacja obiektu Implementacja, czyli oprogramowanie obiektu, oznacza stworzenie kodu źródłowego, obsługującego metody z nim związane. Korzystając z zasad programowania obiektowo- zdarzeniowego, z poszczególnymi obiektami kojarzymy odpowiadające im zdarzenia.
  • 11. Rozdział 3. ♦ Projektowanie obiektowe OOD 57 Własności Nowoczesny Object Pascal wprowadza bardziej ogólne pojęcie klasy poprzez imple- mentację własności. Własność podobna jest do pola w klasie, ale mo e zachowywać się jak metoda. Własności pełnią rolę metod dostępu i modyfikacji (nazywanych me- todami )GV i 5GV) i mają szczególne znaczenie w zintegrowanym środowisku progra- misty IDE, chocia ich u ycie nie jest ograniczone tylko do niego (co wyka emy za chwilę). Właściwość posiada mechanizmy odczytu (TGCF) i zapisu (YTKVG), słu ące do pobierania i ustawiania wartości właściwości. Mechanizmem odczytu mo e być na- zwa pola lub metoda zwracająca wartość własności, natomiast mechanizmem zapisu — nazwa pola lub metoda ustawiająca wartość pola. Zaniedbując mechanizm zapisy- wania, tworzy się własność tylko do odczytu. Dopuszczalne jest równie stworzenie własności tylko do zapisu, jednak celowość takiego tworu jest bardzo wątpliwa. Więk- szość mechanizmów zapisujących i odczytujących stanowią nazwy pól lub metod, chocia mogą to być równie części pól agregujących, takich jak struktury lub tablice. Je eli dyrektywa TGCF lub YTKVG odwołuje się do elementu tablicy, indeks tablicy musi być stały, a typ pola nie mo e być tablicą dynamicznie alokowaną w pamięci. Własności mogą być definiowane przy u yciu dyrektyw FGHCWNV lub UVQTGF. Informa- cja ta nie ma adnego znaczenia dla Delphi, jednak u ywa się jej podczas wykonywa- nia opisów formularzy w pliku .dfm lub .xfm. Wartością dyrektywy FGHCWNV jest stała o typie takim samym, jak typ właściwości. Wartość domyślną mogą posiadać jedynie właściwości typu wyliczeniowego, całkowitego lub zbiorowego. Dyrektywa FGHCWNV posiada znaczenie tylko w przypadku właściwości publikowanych. Brak dyrektywy FGHCWNV równoznaczny jest nadaniu własności dyrektywy PQFGHCWNV. Wartością dy- rektywy UVQTGF jest stała boolowska, pole typu boolowskiego lub bezargumentowa metoda, zwracająca wynik typu DQQNGCP. Warto pamiętać, i nadanie własności za pomocą dyrektywy UVQTGF wartości VTWG (wartości domyślnej) nie powoduje, i taka właśnie wartość domyślna zostanie zapisana do pliku .dfm (ewentualnie .xfm). Mo na jedynie pominąć wartość własności w pliku .dfm (.xfm), nadając dyrektywie UVQTGF wartość HCNUG. W celu zilustrowania metod posługiwania się własnościami zbudujemy prostą klasę, której wykorzystanie w programie umo liwi w bardzo elegancki i przejrzysty sposób odczytywane i zapisywanie danych w postaci nazwisk wybranych osób. W tym celu skorzystamy z definicji własności. Poniewa ogólnie przyjętą konwencją jest, aby w tego typu programach posługiwać się pewnymi standardowymi przedrostkami dla zmiennych oraz funkcji, w dalszej części opisu będziemy wykorzystywać nazewnictwo angiel- skie po to, by nie tworzyć mieszanki nazw polskich i angielskich (np. SetNazwisko). W pierwszej kolejności określimy własność, za pomocą której będziemy w stanie od- czytywać i przypisywać odpowiednie wartości (w tym wypadku łańcuchy znaków re- prezentujące nazwiska i imiona osób). Ka da własność słu y do przechowywania wartości, zatem nale y zadeklarować związaną z nią zmienną (tzw. pole w klasie). Ogólnie przyjętą konwencją jest to, e zmienne mają takie same nazwy, jak związane z nimi własności, ale poprzedzone są literą F. W naszym programie w sekcji prywatnej definicji klasy 65VWFGPV zadeklarujemy jedną taką zmienną typu 5VTKPI, reprezentującą tablicę indeksującą nazwiska studentów. Dodatkowo w tej samej sekcji zadeklarujemy
  • 12. 58 ABC Delphi 7 funkcję (metodę) )GV0COG , która w przyszłości będzie odczytywała za pomocą in- deksu imię i nazwisko wybranej osoby, oraz procedurę 5GV0COG , za pomocą której będzie mo na przypisać odpowiedni łańcuch znaków (imię i nazwisko) do odpowiedniego indeksu w tablicy: RTKXCVG (0COG CTTC[=? QH 5VTKPI HWPEVKQP )GV0COG K +PVGIGT 5VTKPI RTQEGFWTG 5GV0COG K +PVGIGT PCOGU 5VTKPI Przechodzimy teraz do deklaracji samej własności. W tym celu nale y u yć słowa klu- czowego RTQRGTV[. Dla potrzeb programu wystarczy, by własność słu yła wyłącznie do przekazywania danych (imion i nazwisk osób) za pomocą indeksu. Własność zade- klarujemy w sekcji publicznej definicji klasy. Zdefiniowana własność 0COG będzie od- czytywać aktualny stan tablicy (0COG za pomocą dyrektywy TGCF, a następnie przeka- zywać (zapisywać) ją do procedury 5GV0COG , korzystając z dyrektywy YTKVG: RWDNKE FGMNCTCELC MQPUVTWMVQTC EQPUVTWEVQT %TGCVG FGMNCTCELC Y CUPQ EK VCDNKEQYGL RTQRGTV[ 0COG=K +PVGIGT? 5VTKPI TGCF )GV0COG YTKVG 5GV0COG Jednoparametrowa funkcja składowa klasy (metoda) )GV0COG ma bardzo prostą budowę i słu yć będzie do odpowiedniego indeksowania nazwisk: HWPEVKQP 65VWFGPV)GV0COG K +PVGIGT 5VTKPI DGIKP 4GUWNV(0COG=K? GPF Dwuparametrowa procedura 5GV0COG równie nie jest skomplikowana i przypisuje odpowiedniemu indeksowi tablicy ciąg znaków, określony przez zmienną PCOGU: RTQEGFWTG 65VWFGPV5GV0COG K +PVGIGT PCOGU 5VTKPI DGIKP (0COG=K?PCOGU GPF Kompletny kod projektu Projekt_12.dpr, wykorzystującego własność w klasie, poka- zany jest na listingu 3.3. Listing 3.3. Praktyczny sposób posługiwania się własnościami w klasie RTQITCO 2TQLGMVA ] #226;2' %1051.'_ WUGU 5[U7VKNU V[RG 65VWFGPV ENCUU RTKXCVG (0COG CTTC[=? QH 5VTKPI HWPEVKQP )GV0COG K +PVGIGT 5VTKPI RTQEGFWTG 5GV0COG K +PVGIGT PCOGU 5VTKPI
  • 13. Rozdział 3. ♦ Projektowanie obiektowe OOD 59 RWDNKE FGMNCTCELC MQPUVTWMVQTC EQPUVTWEVQT %TGCVG FGMNCTCELC Y CUPQ EK VCDNKEQYGL RTQRGTV[ 0COG=K +PVGIGT? 5VTKPI TGCF )GV0COG YTKVG 5GV0COG GPF HWPEVKQP 65VWFGPV)GV0COG K +PVGIGT 5VTKPI DGIKP 4GUWNV(0COG=K? GPF RTQEGFWTG 65VWFGPV5GV0COG K +PVGIGT PCOGU 5VTKPI DGIKP (0COG=K?PCOGU GPF EQPUVTWEVQT 65VWFGPV%TGCVG DGIKP QRELQPCNPKG EKC Q MQPUVTWMVQTC GPF XCT 5VWFGPV 65VWFGPV K +PVGIGT DGIKP 5VWFGPV65VWFGPV%TGCVG Y[YQ WLG 5VWFGPV5GV0COG 5VWFGPV0COG=? 9CEGM ,CPMQYUMK 5VWFGPV0COG=? ,CPGM 9CEMQYUMK 5VWFGPV0COG=? ,QNC QDWK UMC Y[YQ WLG 5VWFGPV)GV0COG HQT K VQ FQ 9TKVGNP 5VWFGPV0COG=K? 4GCF.0 5VWFGPV(TGG GPF Dziedziczenie Dziedziczenie jest jednym z najwa niejszych mechanizmów programowania zorien- towanego obiektowo. Pozwala na przekazywanie właściwości klasy bazowej (ang. base class) klasom pochodnym (ang. derived classes). Oznacza to, e w prosty sposób mo na zbudować pewną hierarchię klas, uporządkowaną od najbardziej ogólnej do najbardziej szczegółowej. Na takiej właśnie hierarchii klas zbudowana jest w Delphi zarówno bi- blioteka komponentów wizualnych VCL, jak i biblioteka międzyplatformowa CLX.
  • 14. 60 ABC Delphi 7 Dziedziczenie (ang. inheritance) jest procesem przejmowania przez jeden obiekt właściwości innego, umożliwiającym tym samym klasyfikowanie obiektów. Ogólną postać definicji klasy pochodnej zapisujemy z reguły w sposób następujący: 0CYC0QYGL-NCU[ ENCUU 0CYC-NCU[KGFKEQPGL ] FGMNCTCELG UGMELK Y PQYGL MNCUKG GPF Jako przykład zdefiniujemy klasę o nazwie 61EGPC, dziedziczącą po pewnej klasie ba- zowej 65VWFGPV, która zawierać będzie zmienną prywatną (0CYKUMQ, przechowującą nazwisko wybranej osoby. Ze względu na to, i klasa 61EGPC dziedziczy po klasie 65VWFGPV, procedura ,CMC1EGPC z klasy 61EGPC będzie miała bezpośredni dostęp do pola (0CYKUMQ klasy bazowej. Osoby będziemy rozró niać poprzez ich imię i nazwi- sko oraz ocenę z wybranego przedmiotu. W ten oto sposób wszystkie interesujące nas informacje uzyskamy, wywołując w głównym programie jedynie procedury składowe obiektu 5VWFGPV klasy 61EGPC, tak jak pokazano to na listingu 3.4. Chocia program nasz składa się z dwóch ró nych klas, zawierających szereg odrębnych elementów skła- dowych, to jedynymi obiektami, do których jawnie odwołujemy się w programie głów- nym, są procedury składowe ,CMK5VWFGPV oraz ,CMC1EGPC obiektu 5VWFGPV klasy 61EGPC. Listing 3.4. Przykład dziedziczenia klas RTQITCO 2TQLGMVA ] #226;2' %1051.'_ WUGU 5[U7VKNU V[RG 65VWFGPV ENCUU RWDNKE RTQEGFWTG ,CMK5VWFGPV RTKXCVG (0CYKUMQ 5VTKPI GPF -NCUC 61EGPC FKGFKE[ RQ MNCUKG 65VWFGPV 61EGPC ENCUU 65VWFGPV RWDNKE FGMNCTCELC MQPUVTWMVQTC EQPUVTWEVQT %TGCVG 0CYKUMQ 5VTKPI RTQEGFWTG ,CMC1EGPC GPF RTQEGFWTG 65VWFGPV,CMK5VWFGPV DGIKP KH (0CYKUMQ ,CPGM 9CEMQYUMK VJGP 9TKVGNP $CTFQ FQDT[ UVWFGPV GNUG KH (0CYKUMQ 9CEGM ,CPMQYUMK VJGP 9TKVGNP -KGRUMK UVWFGPV GNUG 9TKVGNP $TCM VCMKGIQ UVWFGPVC GPF
  • 15. Rozdział 3. ♦ Projektowanie obiektowe OOD 61 RTQEGFWTG 61EGPC,CMC1EGPC DGIKP KH (0CYKUMQ ,CPGM 9CEMQYUMK VJGP 9TKVGNP (0CYKUMQ 'ICOKP +PHQTOCV[MC GNUG KH (0CYKUMQ 9CEGM ,CPMQYUMK VJGP 9TKVGNP (0CYKUMQ 'ICOKP +PHQTOCV[MC GNUG 9TKVGNP $TCM QEGP[ GPF EQPUVTWEVQT 61EGPC%TGCVG 0CYKUMQ 5VTKPI DGIKP (0CYKUMQ 0CYKUMQ QRELQPCNPKG EKC Q MQPUVTWMVQTC MNCU[ 61EGPC YCTVQ EKæ FQO[ NPæ RQNC (0CYKUMQ MNCU[ 65VWFGPV RTGMC[YCPæ LCMQ CTIWOGPV MQPUVTWMVQTC GPF XCT 5VWFGPV 61EGPC DGIKP VYQTGPKG F[PCOKEPGIQ GIGORNCTC QDKGMVW 5VWFGPV MNCU[ 61EGPC 5VWFGPV61EGPC%TGCVG 9CEGM ,CPMQYUMK 5VWFGPV,CMC1EGPC 5VWFGPV,CMK5VWFGPV 4GCF.0 YCNPKCPKG PKUEGPKG QDKGMVW 5VWFGPV RQRTG DGRQ TGFPKG Y[YQ CPKG OGVQF[ (TGG 5VWFGPV(TGG GPF Analizując przedstawione powy ej zapisy, warto te zwrócić uwagę na sposób definicji konstruktora klasy 61EGPC. Otó konstruktor został definiowany z parametrem for- malnym w postaci zmiennej 0CYKUMQ. W ciele konstruktora wartość tego parametru została przypisana zamiennej (0CYKUMQ, zdefiniowanej w części prywatnej klasy 65VWFGPV. Taka definicja konstruktora zapewnia mo liwość wywołania go w programie głównym, z parametrem aktualnym w postaci nazwiska interesującej nas osoby. Wszystkie metody wykorzystywane przez powy szy program są metodami statycznymi. Oznacza to, i kompilator Delphi łączy ich wywołanie z implementacją metody. Programując hierarchiczną strukturę klas, zawsze należy pamiętać, że klasa bazowa tworzona jest tylko wówczas, gdy konstruktor klasy potomnej wywoła konstruktor klasy bazowej. Delphi zawsze w pierwszej kolejności wywołuje konstruktor klasy potomnej. Każda klasa potomna musi posiadać swojego przodka (swoją klasę bazową). Przodek może być dowolną inną klasą bazową, występującą w łańcuchu dziedziczenia, aż po klasę 61DLGEV. Jeżeli klasa bazowa nie zostanie jawnie okre- ślona, Delphi jako domyślną klasę bazową przyjmie 61DLGEV.
  • 16. 62 ABC Delphi 7 Klasy abstrakcyjne W przeciwieństwie do omawianych wcześniej metod statycznych, metody deklarowane ze słowem kluczowym XKTVWCN (tzw. metody wirtualne) w klasie bazowej muszą być zastąpione nową definicją w klasie pochodnej poprzez wykorzystanie dyrektywy QXGTTKFG. Cechą charakterystyczną metod wirtualnych jest to, i są łączone przez Delphi w trakcie wykonywania programu. Metoda wirtualna mo e zostać w klasie bazowej zadeklarowana ze słowem CDUVTCEV, co oznacza, i nie mo e być definiowana przez tę klasę. Metoda abstrakcyjna zadeklarowana w klasie bazowej musi być przedefiniowana (przesłonięta) przez klasę potomną. Klasę deklarującą jedną lub więcej metod abstrakcyjnych nazy- wamy klasą abstrakcyjną. Na listingu 3.5 zamieszczono przykład projektu wykorzystu- jącego klasę abstrakcyjną. Listing 3.5. Zmodyfikowany Projekt_13.dpr, posługujący się klasą abstrakcyjną RTQITCO 2TQLGMVA ] #226;2' %1051.'_ WUGU 5[U7VKNU V[RG 65VWFGPV ENCUU RWDNKE RTQEGFWTG ,CMK5VWFGPV XKTVWCN CDUVTCEV RTKXCVG (0CYKUMQ 5VTKPI GPF -NCUC 61EGPC FKGFKE[ RQ MNCUKG CDUVTCME[LPGL 65VWFGPV 61EGPC ENCUU 65VWFGPV RWDNKE EQPUVTWEVQT %TGCVG 0CYKUMQ 5VTKPI RTQEGFWTG ,CMK5VWFGPV QXGTTKFG RTQEGFWTG ,CMC1EGPC GPF #DUVTCME[LPC OGVQFC ,CMK5VWFGPV MNCU[ 65VWFGPV RTGFGHKPKQYCPC LGUV K CKORNGOGPVQYCPC Y MNCUKG RQVQOPGL 61EGPC RTQEGFWTG 61EGPC,CMK5VWFGPV DGIKP KH (0CYKUMQ ,CPGM 9CEMQYUMK VJGP 9TKVGNP $CTFQ FQDT[ UVWFGPV GNUG KH (0CYKUMQ 9CEGM ,CPMQYUMK VJGP 9TKVGNP -KGRUMK UVWFGPV GNUG 9TKVGNP $TCM VCMKGIQ UVWFGPVC GPF RTQEGFWTG 61EGPC,CMC1EGPC DGIKP KH (0CYKUMQ ,CPGM 9CEMQYUMK VJGP 9TKVGNP (0CYKUMQ 'ICOKP +PHQTOCV[MC
  • 17. Rozdział 3. ♦ Projektowanie obiektowe OOD 63 GNUG KH (0CYKUMQ 9CEGM ,CPMQYUMK VJGP 9TKVGNP (0CYKUMQ 'ICOKP +PHQTOCV[MC GNUG 9TKVGNP $TCM QEGP[ GPF EQPUVTWEVQT 61EGPC%TGCVG 0CYKUMQ 5VTKPI DGIKP (0CYKUMQ 0CYKUMQ GPF XCT 5VWFGPV 61EGPC DGIKP 5VWFGPV61EGPC%TGCVG 9CEGM ,CPMQYUMK 5VWFGPV,CMC1EGPC 5VWFGPV,CMK5VWFGPV 4GCF.0 5VWFGPV(TGG GPF Podsumowanie W rozdziale tym przypomniano podstawowe terminy, z którymi spotykamy się w trakcie projektowania aplikacji. Przedstawione tu podstawowe wiadomości na temat budowy klas oraz praktycznego wykorzystania ich elementów oka ą się bardzo pomocne w trakcie studiowania dalszej części ksią ki.