Podprogram zagnieżdżony

Podprogram zagnieżdżony (podprogram lokalny[a], podprogram wewnętrzny[b]) – w programowaniu konstrukcja programistyczna umożliwiająca tworzenie podprogramów zawartych w innych podprogramach, a więc o ograniczonym zasięgu widoczności. Podprogramy takie są więc podprogramami lokalnymi w stosunku do podprogramu nadrzędnego. Podprogram zagnieżdżony może zostać wywołany wyłącznie w bloku podprogramu, w którym został zagnieżdżony. Wszystkie podprogramy zagnieżdżone mają dostęp do obiektów zdefiniowanych lokalnie w podprogramie nadrzędnym (tj. elementów takich jak np. zmienne, stałe, typy lub inne, które może w danym języku programowania deklarować i definiować lokalnie).

W wielu językach programowania taka konstrukcja jest niedostępna i wszystkie podprogramy są deklarowane oraz definiowane na tym samym poziomie programu (modułu). Tak jest m.in. w języku C[1][2][3], C++[3] i podobnych. Istnieje jednak grupa języków programowania, w których zrealizowano zagnieżdżanie podprogramów. Takimi językami są między innymi: Ada[4][5], Pascal[6][7], PL/1[8][9], PL/SQL[10].

Przykład w języku Pascal[6][7]:

procedure A;
  var localA:integer;
  function AB:integer;
  begin
    { treść funkcji zagnieżdżonej AB }
  end;
  procedure AA;
  begin
    { treść procedury zagnieżdżonej AA }
    { zmienna lokalna localA zadeklarowana w procedurze nadrzędnej A
      jest także dostępna w podprogramach zagnieżdżonych }
    localA:=AB;
  end;
begin
  { wywołanie procedury zagnieżdżonej }
  AA
end;

Uwagi

  1. Analogicznie do pojęcia: zmienna lokalna.
  2. Użycie terminu podprogram wewnętrzny może być niejednoznaczne, gdyż część autorów publikacji używa takiego terminu w odniesieniu do zupełnie innej konstrukcji – typu inline.

Przypisy

  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. 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 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. Nico Habermann, Dewayne E. Perry: Ada dla zaawansowanych. Warszawa: Wydawnictwa Naukowo-Techniczne, 1989, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-1058-4. (pol.)
  5. Michał Morawski, Antoni M. Zajączkowski: Wstęp do programowania w języku Ada’95. Wyd. drugie. Łódź: 2004. [dostęp 2011-01-29]. (pol.)
  6. a b 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. ISBN 83-85060-53-7. ISSN 0867-6011. (pol.)
  7. a b Andrzej Marciniak: Borland Pascal 7.0. Poznań: Nakom, 1994, seria: Biblioteka Użytkownika Mikrokomputerów. ISBN 83-85060-53-7. ISSN 0867-6011. (pol.)
  8. 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.)
  9. 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.)
  10. Piotr Różnicki: PL/SQL ORACLE'a. 2000. [dostęp 2011-03-02]. [zarchiwizowane z tego adresu (2010-06-09)].

Bibliografia

  • 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.)