Object Pascal
Z Wikipedii
Object Pascal – obiektowy język programowania, obiektowe rozszerzenie języka Pascal. Object Pascal został rozwinięty przez firmę Apple Computer przy współpracy Larry'ego Teslera głównego architekta i Niklausa Wirtha wynalazcy Pascala. Object Pascal wywodzi się z wcześniejszej, obiektowo zorientowanej wersji Pascala nazywanej Clascal dostępnej na komputery Lisa. Różne implementacje języka Object Pascal są użyte w środowiskach programistycznych Borland Delphi, CodeGear Delphi, Kylix oraz w środowisku programistycznym Lazarus (kompilator Free Pascal – darmowa implementacja ).
Object Pascal charakteryzuje się głównie prostą składnią i bardzo wysoką efektywnością tworzenia oprogramowania, na co wpływ ma zwłaszcza bardzo szybki kompilator (w porównaniu do innych języków jest kilkakrotnie szybszy). W implementacji obiektowej zachowano większość elementów programowania strukturalnego, przez co osiągnięto narzędzie łączące oba paradygmaty przy zachowaniu zgodności na poziomie kodu (możliwość kompilacji starszego kodu nowymi kompilatorami).
Większość firm zaczyna wycofywać się z nazewnictwa "Object Pascal" dla swoich kompilatorów, gdyż ich implementacje Object Pascal-a coraz bardziej odbiegają od opracowanych dawno standardów języka. Obecnie nazwa "Object Pascal" nie istnieje nawet w oficjalnym spisie TIOBE[1]. Również firma Borland z początku używając tej nazwy dla języka programowania istniejącego w pierwszych wersjach środowiska programistycznego Delphi zrezygnowała z niej, by zacząć używać dla swojej implementacji obiektowego Pascala nazwy "Delphi Programming Language". Obecnie Delphi jest to rozszerzony Object Pascal, wzbogacony o znaczną ilość różnorakich bibliotek, w tym zbiór komponentów wizualnych VCL (dzięki którym język Delphi zyskał dużą popularność) i VCL.NET, które umożliwiają szybkie i łatwe tworzenie aplikacji dla Win32 oraz dla platformy .NET
Spis treści |
[edytuj] Podstawowe elementy języka
[edytuj] Struktura programu
program nazwa_programu (parametry); //nagłówek {część definiująca} begin {część operacyjna} end.
Tworzone programy pracują zasadniczo w dwóch wariantach:
- tekstowy – przeznaczony dla trybu tekstowego Windows, obsługiwane przez bibliotekę modułów RTL (Runtime Library).
- graficzny – przeznaczony dla środowiska graficznego Windows, obsługiwany przez bibliotekę VCL (Visual Component Library).
[edytuj] Komentarze
Komentarz stanowi swobodny tekst w kodzie programu. Ma on znaczenie jedynie dla czytelności kodu źródłowego, gdyż jest ignorowany przez kompilator. W języku Object Pascal występują 3 rodzaje komentarzy:
- nawiasy klamrowe { .. }, występujące w Turbo Pascalu,
- komentarze typu (* .. *) (nawias-gwiazdka), także występujące w Turbo Pascalu,
- komentarze jednowierszowe znane z języka C++, występujące w postaci // (ang. double slash).
[edytuj] Składnia
Kompilator obliczając wartość danego wyrażenia oblicza jego poszczególne części zgodnie z poniższą kolejnością:
- najwyższy priorytet mają wyrażenia "zagnieżdżone" w największej liczbie nawiasów, potem:
- negacja
- operatory multiplikatywne
- operatory addytywne
- relacje
[edytuj] Procedury i funkcje
[edytuj] Procedury
Procedura to podprogram, nie zwracający żadnej wartości. Szkielet deklaracji procedury w języku Object Pascal jest taki sam, jak w standardowym języku Pascal:
procedure NazwaProcedury[(ListaParametrówFormalnych)]; [Dyrektywy;] begin end;
Pierwszy wiersz (z nazwą procedury i opcjonalnymi: listą parametrów formalnych oraz dyrektywami) nosi nazwę nagłówka procedury.
[edytuj] Funkcje
Funkcja to podprogram zwracający wartość. Szkielet deklaracji funkcji w języku Object Pascal jest taki sam, jak w standardowym języku Pascal:
function NazwaFunkcji[(ListaParametrówFormalnych)]: TypZwracanejWartości; [Dyrektywy;] begin end;
Pierwszy wiersz (z nazwą funkcji, typem zwracanej wartości i opcjonalnymi: listą parametrów formalnych i dyrektywami) nosi nazwę nagłówka funkcji.
[edytuj] Zmienne
W języku Pascal (również w Object Pascal) deklaracje zmiennych są umieszczone przed blokiem kodu danego podprogramu lub programu głównego (w przeciwieństwie do C/C++ i Javy). Np. fragment kodu wyglądający w C++ następująco:
void example(void) { int x = 1; x++; float y = 1.5; y+=7; int z; }
w języku Object Pascal powinien wyglądać następująco:
procedure Example; var X, Z: Integer; Y: Real; begin X := 1; Inc(X); Y := 1.5; Y := Y + 7; end;
Istnieje możliwość nadawania wartości zmiennym podczas ich deklaracji (inicjalizacja), np.:
var I: Integer = 13; S: string = 'Ciekawy artykuł w Wikipedii'; D: Double = 3.14159; P: Pointer = nil;
Jest to dopuszczalne tylko dla zmiennych globalnych i statycznych.
Nie jest natomiast konieczne nadawanie zmiennym globalnym wartości początkowej 0 (0, 0.0, nil w przypadku wskaźników lub łańcuch pusty w przypadku zmiennych typu string), gdyż kompilator dokonuje inicjacji wszystkich zmiennych globalnych poprzez wyzerowanie zajmowanej przez nie pamięci.
[edytuj] Typy zmiennych
Każda zmienna oraz stała musi być określonego typu zmiennych, tj. przyjmuje wartości z określonego, dopuszczonego zbioru wartości. Mogą one być zarówno proste jak i złożone. Dostęp do wartości pewnej danej może być pośredni lub bezpośredni. Rozróżnia się trzy zasadnicze rodzaje typów wartości:
- Proste (dostęp bezpośredni)
- Strukturalne (dane złożone, dostęp bezpośredni)
- Referencyjne (dostęp pośredni)
[edytuj] Instrukcje
[edytuj] Instrukcje proste
- przypisania
- skoku (goto)
- pusta
- wywołania procedury lub funkcji
[edytuj] Instrukcje strukturalne
- złożona
- warunkowa
- instrukcja "jeśli" (if)
- instrukcja wyboru (case)
- iteracyjna
- instrukcja for
- instrukcja while
- instrukcja repeat
- wiążąca
- obsługi warunków i stanów wyjątkowych
- wywołania stanów wyjątkowych
- Try except
- Try finally
[edytuj] Różnice obiektowego Pascala w porównaniu z C++
[edytuj] (+)
- (+) składnia łatwiejsza do zrozumienia dla nie–programisty (słowa–polecenia zamiast klamer i nawiasów; co pociąga za sobą większą objętość kodu źródłowego)
- (+) mechanizm modułów wraz z kontrolą widoczności nazw i sekcjami inicjalizacyjnymi / finalizacyjnymi)
- (+) błyskawiczne tworzenie [DLL]-ów
- (+) opcjonalna kontrola zakresów i przepełnień
- (+) wbudowane zbiory i liczne operacje na nich, co znacznie przyspiesza i upraszcza np. porównania
- (+) tablice dynamiczne
- (+) wbudowane typ zmiennych plikowych – także uproszczone tworzenie plików składających się tylko z jednego typu danych
- (+) uproszczony mechanizm mapowania składowych rekordu (intuicyjna instrukcja wyboru Case zamiast unii)
- (+) dyrektywa mapująca (absolute)
- (+) mechanizm zgodności typów
- (+) możliwość tworzenia lokalnych procedur w procedurach
- (+) obiekty posiadają właściwości (Properties), także tablicowe i domyślne, zwiększa to znacznie czytelność kodu.
- (+) istnienie metaklas – ich obiekty zawierają referencje do klas
- (+) wirtualne konstruktory
- (+) oddzielenie części deklaracji od instrukcji zwiększa czytelność kodu i zmusza do porządku
- (+) możliwość programowania generycznego
- (+) obsługa metod anonimowych
- (+) mechanizm przedefiniowania operatorów (jedynie dla rekordów)
[edytuj] (-)
- (-) brak zmiennych referencyjnych (jest tylko przekazanie parametru przez referencje)
- (-) możliwość kompilacji kodu zawierającego instancje klas abstrakcyjnych
[edytuj] (?)
- (+-) odmienne symbole operatorów, nie ma uproszczonych operatorow przypisan, jak np.
+=czy<<=(z wyjątkiem [FPC]) - (+-) uboższa ale łatwiejsza Implementacja obiektów (brak dziedziczenia od dwóch przodków) ale za to są wirtualne konstruktory i nie trzeba ich pokrywać w każdej klasie
- (+) wszystkie klasy maja wspólnego przodka (TObject) – upraszcza to np. implementacje polimorficznych klas kontenerów
- (+-) mniejsza kontrola wykonywania pętli for – zmienna iteracyjna w pętli for zmienia się o 1 automatycznie a w wielu implementacjach jest "chroniona" przed zmianami, umożliwia to tworzenie wydajniejszego kodu wykonalnego(od wersji 17 Delphi pętla for umożliwia enumerację po każdym elemencie zbioru w postaci "for each Zmienna in Zbiór do")
- (+-) funkcje nie zwracające wartości nazwane są procedurami
Przypisy
[edytuj] Bibliografia
- A. Marciniak, Borland Pascal 7.0, Nakom 1995
- A. Grażyński, Z. Zarzycki, Delphi 7, Helion 2003
- J. Zahorski, Turbo Pascal 7.0
|
|||||||||||||||||||||||||||||

