2. Cechy programowania obiektowego

Hermetyzacja to zgrupowanie pól i metod w klasach.

Użycie dyrektywy private pozwala zabezpieczyć dane obiektu przed przypadkowymi zmianami.
 

2.1. Dziedziczenie

Dziedziczenie (ang. inheritance) to wykorzystanie istniejących klas do tworzenia nowych (klas pochodnych, „potomków”), wykorzystujących pola i metody „przodka” (klasy bazowej). Dziedziczenie pozwala na dostosowanie gotowych klas do własnych potrzeb poprzez wzbogacanie ich o dodatkowe pola i metody. Tak utworzona klasa może korzystać ze wszystkich pól i metod swojego przodka.

Dziedziczenie powoduje powstanie hierarchii klas. Odpowiednie zaprojektowanie struktury klas pozwala na skrócenie kodu.

W TP deklaracja klasy pochodnej jest podobna do deklaracji bazowej, z tą tylko różnicą, że po słowie object w nawiasach podajemy nazwę klasy bazowej.

TKlasaPochodna = object (TKlasaBazowa)

PoleDodatkowe1:typ1; PoleDodatkowe2:typ2; procedure MetodaDodatkowa1; function MetodaDodatkowa2:typ_funkcji; end;

2.2. Metody wirtualne

Polimorfizm to możliwość zdefiniowania w klasach pochodnych metod i o takich samych nazwach, co w klasie bazowej, lecz wykonujących różne czynności.

Metody klas pochodnych przesłaniają metody klasy bazowej o tych samych nazwach.

Metoda wirtualna to metoda powiązana z obiektem dynamicznie. Metody wirtualne pozwalają na korzystanie z polimorfizmu.

We wszystkich trzech klasach mamy trzy metody (Narysuj, Pole i Obwod) o tych samych nazwach lecz różnym działaniu. Metody mają wiele postaci. Taką wielopostaciowość metod nazywamy polimorfizmem. Aby korzystać z polimorfizmu (przesłaniania metod) metody muszą zostać zadeklarowane jako wirtualne. Oznacza się je słowem kluczowym virtual umieszczonym po nagłówku metody.

Procedure Narysuj;virtual;

 

Klasa zawierająca chociaż jedną metodę wirtualną musi posiadać tzw. konstruktor. Konstruktor to specjalna metoda wywoływana po utworzeniu obiektu. Jest ona deklarowana podobnie jak procedura, tyle, że przy użyciu słowa constructor zamiast słowa kluczowego procedure. Wywołanie metody wirtualnej musi być poprzedzone wywołaniem konstruktora, w przeciwnym wypadku może dość do wystąpienia błędów wykonania programu. Oprócz konstruktorów klasa może posiadać także destruktory.