Deklaracja (informatyka)
Deklaracja – konstrukcja programistyczna w określonym języku programowania, służąca związaniu z określonym identyfikatorem jego znaczenia i atrybutów.
Elementy podlegające deklarowaniu
[edytuj | edytuj kod]W różnych językach programowania wymagania dotyczące deklaracji określonych obiektów programowych są bardzo zróżnicowane. Deklarowaniu ogólnie podlegać mogą:
- zmienne
- parametry podprogramów
- moduły (biblioteki, pakiety, itp.)
- podprogramy (procedury, funkcje)
- etykiety
- klasy
- stałe
- typy
- literały
- inne elementy, specyficzne dla konkretnego języka programowania
W nomenklaturze informatycznej, czasem od deklaracji rozróżnia się definicję w odniesieniu do takich elementów jak między innymi:
- typów
- stałych
- literałów
- podprogramów
- klas
przy czym deklaracja i definicja może występować razem, lub oddzielnie w różnych miejscach kodu źródłowego.
Miejsce deklaracji
[edytuj | edytuj kod]Deklaracje w kodzie źródłowym, zwykle musi poprzedzać pierwsze użycie danego identyfikatora w definiowanym algorytmie. Deklaracja stanowi więc informację dla translatora, która nie generuje kodu wykonywalnego (lecz często powoduje rezerwację pamięci).
Składnia większości języków programowania narzuca umieszczanie deklaracji w określonym miejscu kodu źródłowego. Jest to albo specjalna sekcja programu (modułu, podprogramu, pakietu), albo początek określonego bloku (czyli wszystkie deklaracje muszą zostać umieszczone w tekście programu przed pierwszą instrukcją danego bloku).
Rodzaje deklaracji
[edytuj | edytuj kod]Deklaracje mogą być:
- niejawne
- jawne
- kompletne
- częściowe
Deklaracje niejawne
[edytuj | edytuj kod]Deklaracje niejawne występują w językach programowania, które umożliwiają użycie identyfikatora bez jego jawnej deklaracji. W tym przypadku translator musi posiadać mechanizm przypisania do identyfikatora atrybutów na podstawie określonych metod:
- domyślnej
- niejawnej
- kontekstowej
Deklaracje niejawne mogą prowadzić do błędów, np. błąd literowy w identyfikatorze spowoduje utworzenie nowej zmiennej, a tym samym błąd w działaniu programu.
Deklaracje jawne
[edytuj | edytuj kod]Deklaracje jawne mogą być kompletne lub częściowe. W przypadku deklaracji częściowych mogą wystąpić następujące przypadki:
- niesymetryczna struktura atrybutów (np. w deklaracji wystąpienie atrybutu EXTERNAL może oznaczać obiekt zewnętrzny (zmienną, procedurę itp.) zdefiniowany w innym module, a brak jego specyfikacji oznacza obiekt wewnętrzny (tworzony daną deklaracją w danym module), przy czym brak jest możliwości jawnej specyfikacji atrybutu przeciwstawnego dla EXTERNAL (np. o nazwie INTERNAL),
- aparat atrybutów domyślnych, obowiązują tu zasady uzupełniania atrybutów według metod jak dla deklaracji niejawnych (np. mogą istnieć atrybuty EXTERNAL i INTERNAL, przy czym brak jawnej specyfikacji któregokolwiek z tych dwóch przeciwstawnych atrybutów oznaczać będzie wystąpienie jednego z nich, np. INTERNAL).
Przykłady deklaracji
[edytuj | edytuj kod]deklaracje zmiennych
[edytuj | edytuj kod]Deklaracja zmiennej może zawierać oprócz samej deklaracji, także inicjalizację zmiennej, tj. nadanie zmiennej wartości początkowej.
C, C++
[edytuj | edytuj kod]Deklaracje występują[1][2][3]:
- poza funkcją, klasą, metodą – dla zmiennych globalnych
- na początku instrukcji blokowej { } dla zmiennych lokalnych.
- jako wyrażenie w dalszych częściach instrukcji blokowej { } dla zmiennych lokalnych (nie w języku C)
int global_var; main() { int y; ... { int z=1; getch(); int x=5; /*nie w języku C*/ ... } ... }
Deklaracje występują w programie lub podprogramie w specyfikacji bloku, zawartej pomiędzy nagłówkiem (program, procedure, function, unit (Turbo Pascal)), a słowem rozpoczynającym instrukcję grupującej danego bloku (begin)[4][5].
program Przykład; var globar_var; ... procedure Licz(); var local_var; begin
end; {procedure} begin
end. {program}
PL/1
[edytuj | edytuj kod]Deklaracja ma postać instrukcji DECLARE (lub skrótowe DCL) I może wystąpić w dowolnym miejscu wnętrza bloku (w PL/1 takim blokiem jest albo procedura od nagłówka PROCEDURE do słowa END albo instrukcja blokowa BEGIN … END) i dotyczy obiektów dostępnych w danym bloku. Język ma bardzo rozbudowaną składnię atrybutów i rozbudowany mechanizm atrybutów domyślnych i deklaracji niejawnych[6][7].
Przykład: PROC; ... /* użyto zmiennej X zadeklarowanej dalej */ X=1; ... /* deklaracja w bloku może wystąpić po użyciu identyfikatora lecz deklarowana zmienna dostępna jest od początku bloku */ DCL X FIXED DECIMAL(5,0); ... END Przykład;
deklaracje etykiet
[edytuj | edytuj kod]{Pascal} program DclLabel; label Etykieta; … begin … Etykieta: …; … goto Etykieta; … end.
deklaracje modułów
[edytuj | edytuj kod]Turbo Pascal[5]:
program DclUnit; uses Crt, Graph, MyUnit; ... begin ... Write('Użyto procedury modułu Crt'); ... end.
Modula 2[8]:
MODULE DclUnit; FROM InOut IMPORT Read, Write, ...; ... Write('Użyto procedury modułu InOut'); ... END DclUnit.
deklaracje podprogramów
[edytuj | edytuj kod]Deklaracja podprogramu ma postać nagłówka podprogramu definiującego oprócz identyfikatora przypisanego podprogramowi, także inne, wymagane przez dany język programowania elementy, jak np. parametry. Może także zawierać opcjonalne frazy i modyfikatory, np. dotyczące rozmieszczenia w pamięci, czy sposobu pobrania podprogramu zewnętrznego z biblioteki.
C, C++
[edytuj | edytuj kod]W języku C[1][2][3], C++[3] deklaracje podprogramów (nazywane prototypem) umieszcza się najczęściej w plikach nagłówkowych, definiujących określone moduły.
/* prototyp funkcji trunc */ int trunc(double x);
Deklaracje podprogramów stosuje się, gdy podprogram ma być wywołany, a nie został jeszcze zdefiniowany[4][5].
{ Pascal } procedure Proc_1; forward; procedure Proc_2; begin … {wywołanie procedury, która nie została jeszcze zdefiniowana, wymagana była deklaracja} Proc_1; … end; … {Późniejsza definicja procedury} procedure Proc_1; begin … end;
Deklarację wyprzedzającą podprogramu stosuje tak jak w Pascalu. W Delphi deklaracje występują także w modułach (stanowiących rozszerzenie Delphi w stosunku do Pascala) w sekcji interface.
{ Delphi } unit Przykład; interface { deklaracja podprogramu dostępnego w innych modułach i programach } function trunc(x : real): integer; implementation { definicja zadeklarowanego wyżej podprogramu ponieważ parametr i wartość zwracana zostały zdefiniowane w deklaracji podporgramu w sekcji interface, nie jest wymagane ich powtórzenie } function trunc; begin …
Przypisy
[edytuj | edytuj kod]- ↑ a b Brian W. Kernighan, Dennis M. Ritche: Język C. Warszawa: Wydawnictwa Naukowo-Techniczne, 1988, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-1067-3. (pol.).
- ↑ a b Jan Bielecki: Turbo C z grafiką na IBM PC. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990, seria: Mikrokomputery. ISBN 83-204-1101-7. (pol.).
- ↑ a b c Jan Bielecki: Od C do C++, programowanie obiektowe w języku C. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990. ISBN 83-204-1332-X. (pol.).
- ↑ a b c Michał Iglewski, Jan Madey, Stanisław Matwin: Pascal. Język wzorcowy – Pascal 360. Wyd. trzecie – zmienione. Warszawa: Wydawnictwa Naukowo-Techniczne, 1984, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-85060-53-7. ISSN 0867-6011. (pol.).
- ↑ a b c d Andrzej Marciniak: Borland Pascal 7.0. Poznań: Nakom, 1994, seria: Biblioteka Użytkownika Mikrokomputerów. ISBN 83-85060-53-7. ISSN 0867-6011. (pol.).
- ↑ Jan Bielecki: Rozszerzony PL/I i JCL w systemie OS/RIAD. Warszawa: Państwowe Wydawnictwo Naukowe, 1986, seria: Biblioteka Informatyki. ISBN 83-01-06146-4. (pol.).
- ↑ M. I. Auguston i inni: Programowanie w języku PL/1 OS JS. Warszawa: Państwowe Wydawnictwo Naukowe, 1988. ISBN 83-01-07463-9. (pol.).
- ↑ Niklaus Wirth: Modula 2. Warszawa: Wydawnictwa Naukowo-Techniczne, 1987, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-0828-8. ISSN 0867-6011. (pol.).
Bibliografia
[edytuj | edytuj kod]- Michael Marcotty, Henry Ledgord, tłumaczenie: Krystyna Jerzykiewicz: W kręgu języków programowania. Warszawa: Wydawnictwa Naukowo-Techniczne, 1980, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-1342-7. (pol.).
- John E. Nicholls: Struktura języków programowania. Warszawa: Wydawnictwa Naukowo-Techniczne, 1980, seria: Informatyka. ISBN 83-204-0246-8. (pol.).