Typ obiektowy. Obiektem w Pascalu nazywa się złożoną strukturę danych o ustalonej liczbie elementów składowych, z których każdy może być polem lub metodą (m.in. procedurą lub funkcją), tj. elementem opisującym operację wykonywaną na danym obiekcie. W definicji typu obiektowego, podobnie jak w definicji typu rekordowego, dla każdego pola specyfikuje się jego typ i identyfikator. Opis metody składa się z nagłówka procedury, funkcji, konstruktora lub destruktora, przy czym definicja pojedynczego typu obiektowego może zawierać opisy wielu metod. Opis typu obiektowego rozpoczyna się od słowa kluczowego object, a kończy słowem kluczowym end. Definicja pojedynczego typu obiektowego ma postać:
TYPE Identyfikator_typu = object dziedzictwo Lista_deklaracji_pól Lista_deklaracji_metod end;
lub
TYPE Identyfikator_typu = object dziedzictwo Lista_deklaracji_pól Lista_deklaracji_metod Sekcje_list end;
przy czym elementy wyszczególnione pomiędzy słowami object i end są opcjonalne, a każda z sekcji list może mieć jedną z poniższych postaci:
private Lista_deklaracji_pól Lista_deklaracji_metod
lub
public Lista_deklaracji_pól Lista_deklaracji_metod
przy czym w sekcjach tych oba elementy są także opcjonalne.
Dziedzictwo
oznacza ujęty w nawiasy okrągłe identyfikator innego, zdefiniowanego wcześniej,
typu obiektowego. Jeśli w definicji typu obiektowego wystąpi ten element, oznacza
to, że dany typ obiektowy zawiera (dziedziczy) wszystkie elementy podane w definicji
typu obiektowego o wyspecyfikowanej nazwie.
Każda z deklaracji pól ma postać:
Lista_nazw_pól : opis_typu;
a każda deklaracja metody jest następująca:
nagłowek_metody;
lub
nagłowek_metody; virtual;
gdzie nagłowek metody oznacza nagłowek funkcji, procedurey, konstruktora
lub destruktora. Słowo kluczowe virtual określa daną metodę jako wirtualną (?).
Definicję poszczególnych metod podaje się poza definicją typu obiektowego. Każda
definicja metody zawiera w nagłówku nazwę funkcji, procedury, konstruktora lub
destruktora, poprzedzoną kropką i nazwą odnośnego typu obiektowego.
Jeśli definicja typu obiektowego zawiera dyrektywę private, oznacza to,
że zakres ważności pól i (lub) metod podanych po tej dyrektywie jest ograniczony
do modułu (lub programu), który zawiera definicję danego typu obiektowego.
Tego typu pola i metody nazywami polami i metodami prywatnymi. Użycie po sekcji
z dyrektywą private dyrektywy public powoduje anulowanie
ograniczenia zakresu ważności dla dalszych pól i (lub) metod.
Przykłady:
TYPE punkt = object X, Y:Integer; end; TYPE piksel = object (punkt) Kolor:Byte; end;
Typ obiektowy piksel zawiera elementy typu obiektowego punkt.
TYPE odcinek = object X, Y:Byte; procedure zaznacz(dx, dy: Byte); end;
Dla powyższego typu konieczne jest podanie w dalszej części programu definicji procedury zaznacz:
procedure odcinek.zaznacz(dx, dy: Byte); begin ... Jakieś_instrukcje end;