Deklaracja (informatyka)

konstrukcja programistyczna

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

W różnych językach programowania wymagania dotyczące deklaracji określonych obiektów programowych są bardzo zróżnicowane. Deklarowaniu ogólnie podlegać mogą:

W nomenklaturze informatycznej, czasem od deklaracji rozróżnia się definicję w odniesieniu do takich elementów jak między innymi:

przy czym deklaracja i definicja może występować razem, lub oddzielnie w różnych miejscach kodu źródłowego.

Miejsce deklaracji edytuj

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

Deklaracje mogą być:

  • niejawne
  • jawne
    • kompletne
    • częściowe

Deklaracje niejawne edytuj

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

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

deklaracje zmiennych edytuj

Deklaracja zmiennej może zawierać oprócz samej deklaracji, także inicjalizację zmiennej, tj. nadanie zmiennej wartości początkowej.

C, C++ edytuj

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*/
       ...
    }
    ...
  }

Pascal edytuj

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

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 BEGINEND) 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

Pascal[4][5]:

 {Pascal}
 program DclLabel;
   label Etykieta;
   …
 beginEtykieta: …;
   …
   goto Etykieta;
   …
 end.

deklaracje modułów edytuj

Turbo Pascal edytuj

Turbo Pascal[5]:

 program DclUnit;
   uses Crt, Graph, MyUnit;
   ...
 begin
   ...
    Write('Użyto procedury modułu Crt');
   ...
 end.

Modula 2 edytuj

Modula 2[8]:

 MODULE DclUnit;
   FROM InOut IMPORT
     Read, Write, ...;
   ...
   Write('Użyto procedury modułu InOut');
   ...
 END DclUnit.

deklaracje podprogramów edytuj

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

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);

Pascal edytuj

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;
 beginend;

Delphi edytuj

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

  1. 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.).
  2. a b Jan Bielecki: Turbo C z grafiką na IBM PC. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990, seria: Mikrokomputery. ISBN 83-204-1101-7. (pol.).
  3. 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.).
  4. 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.).
  5. 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.).
  6. 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.).
  7. 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.).
  8. 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