Deklaracja (informatyka)

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

Deklaracja (w informatyce) to 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ą:

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

Pascal[edytuj | edytuj kod]

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 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 | edytuj kod]

Pascal[4][5]:

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

deklaracje modułów[edytuj | edytuj kod]

Turbo Pascal[edytuj | edytuj kod]

Turbo Pascal[5]:

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

Modula 2[edytuj | edytuj kod]

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

Pascal[edytuj | edytuj kod]

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 | edytuj kod]

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

  1. 1,0 1,1 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. 2,0 2,1 Jan Bielecki: Turbo C z grafiką na IBM PC. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990, seria: Mikrokomputery. ISBN 83-204-1101-7. (pol.)
  3. 3,0 3,1 3,2 Jan Bielecki: Od C do C++, programowanie obiektowe w języku C. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990. ISBN 83-204-1332-X. (pol.)
  4. 4,0 4,1 4,2 Michał Iglewski, Jan Madey, Stanisław Matwin: Pascal. Język wzorcowy – Pascal 360. Wyd. wydanie trzecie – zmienione. Warszawa: Wydawnictwa Naukowo-Techniczne, 1984, seria: Biblioteka Inżynierii Oprogramowania. ISSN 0867-6011. ISBN 83-85060-53-7. (pol.)
  5. 5,0 5,1 5,2 5,3 Andrzej Marciniak: Borland Pascal 7.0. Poznań: Nakom, 1994, seria: Biblioteka Użytkownika Mikrokomputerów. ISSN 0867-6011. ISBN 83-85060-53-7. (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. ISSN 0867-6011. ISBN 83-204-0828-8. (pol.)

Bibliografia[edytuj | edytuj kod]

  1. 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.)
  2. John E. Nicholls: Struktura języków programowania. Warszawa: Wydawnictwa Naukowo-Techniczne, 1980, seria: Informatyka. ISBN 83-204-0246-8. (pol.)