Nagłówek podprogramu

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

Nagłówek podprogramu, to fragment kodu źródłowego stanowiący deklaratywny opis podprogramu, poprzedzający definicję bloku podprogramu zawierającego tworzony algorytm. Zawiera on identyfikator podprogramu, ewentualną listę parametrów i jeżeli jest to w danym języku programowania wymagane deklarację ich typów oraz sposobu przekazania skojarzonego z danym parametrem argumentu do podprogramu w jego wywołaniu (np. ByVal, ByRef w Visual Basic; var w Pascalu). Może także obejmować frazy opcjonalne lub wymagane zawierające odpowiednie deklaratory i modyfikatory, w tym między innymi deklarację typu danej zwracanej przez podprogram dla podprogramów funkcyjnych[1][2][3][4][5][6][7][8][9][10]. Jeżeli składnia danego języka przewiduje, to poprzedzony jest także odpowiednim słowem kluczowym (np. procedure: m.in. Icon[11], Pascal[2][3][12], PL/I[4][5]; proc: m.in. Comal[12], PL/I (opcjonalny skrót)[4][5]; function: m.in. Pascal[2][3][12], Visual Basic[10], Fortran[13][14][15]; subroutine: m.in. Fortran[13][14][15]; sub: m.in. późniejsze implementacje języka Basic, Visual Basic[9][10], Pearl[16]; entry: m.in. dodatkowe ingresje do podprogramu w języku PL/I[4][5]; property: m.in. Visual Basic[9][10]; perform: m.in. Cobol[17]; def: m.in. Ruby[18], Python[19]; lub innym przewidzianym w składni konkretnego języka programowania), choć w wielu językach takiego słowa kluczowego nie ma: m.in. C, C++ i pokrewne[1][6][7][8][20].

Nagłówek podprogramu występować może w kodzie źródłowym[2][3][6][7][8]:

Przykłady deklaracji zapowiadających podprogramów w językach programowania
język programowania deklaracja podprogramu
C, C++[6][7][8]
int plus(int a, b);
Pascal[2][3]
function Plus(a, b : Integer):Integer; forward;
  • w definicji podprogramu przed jego blokiem.
Przykłady definicji podprogramów,
nagłówek podprogramu bezpośrednio poprzedzający jego definicję
język programowania definicja podprogramu
C, C++[6][7][8]
int plus(int a, b);
{
  /* treść podprogramu */
}
Pascal[2][3]
function Plus(a, b : Integer):Integer;
begin
  { treść podprogramu }
end;
PL/I[4][5]
PLUS: PROC(FIXED(5,0) A, B) RETURNS(FIXED(5,0)
  /* treść podprogramu */
END;
  • w definicji typu proceduralnego, np. Turbo Pascal[3]:
type idf_type_p=procedure({parametry});
type idf_type_f=function({parametry}):result_type;

Nagłówek podprogramu, jeżeli występuje wcześniejsza, odrębna jego deklaracja (za pomocą prototypu), może w definicji[2][3][6][7][8]:

  • mieć postać identyczną z prototypem zawartym w deklaracji (przy czym identyczność ta może nie dotyczyć nazw identyfikatorów poszczególnych parametrów podprogramu),
  • mieć postać inną – uproszczoną, a pominięte szczegóły nagłówka pobierane są przez translator z deklaracji.

Przykład w Turbo Pascalu[3]:

unit m01;
interface
  { Pełna postać nagłówka podprogramu - deklaracja w interfejsie modułu }
  procedure pr_1(var a : integer; b : char);
implementation
  { Uproszczona postać nagłówka podprogramu w jego definicji }
  procedure pr_1;
    { deklaracja obiektów lokalnych }
  begin
    { treść podprogramu }
  end;
end.

Specjalne pliki deklaracji stosowane w takich językach programowania jak C, C++ i pochodnych, noszą w nomenklaturze informatycznej i w literaturze przedmiotu nazwę plików nagłówkowych, gdyż są stosowane do definiowania między innymi bibliotek podprogramów. Plik taki składa się właśnie z deklaracji podprogramów w postaci nagłówków podprogramów (prototypów)[6][7][8].

Information icon.svg Osobny artykuł: Plik nagłówkowy.

Również w niektórych językach, w których istnieje możliwość programowania obiektowego, nagłówek (prototyp) metody, stosuje się do definicji określonej klasy, podczas gdy sama definicja danej metody znajduje się zupełnie w innym miejscu kodu źródłowego (poza definicją klasy rozumianą jako określony fragment – wyodrębniony za pomocą zdefiniowanych ograniczników bloku – tekstu kodu źródłowego). W tych językach nagłówek metody w jej definicji umieszczonej poza definicją klasy, jest zmodyfikowany zgodnie z konwencją stosowaną w danym języku programowania, o stosowny zapis selekcji klasy, tak aby definicja metody została przypisana do właściwej klasy (różne metody w rożnych klasach mogą posiadać ten sam identyfikator)[3][8].

Borland/Turbo Pascal[3]:

type TOb=object
        procedure m1(a : integer);
        function f1(a:integer): integer;
     end;
procedure TOb.m1;
begin
  { treść metody m1 klasy TOb }
end;
function TOb.f1;
begin
  { treść metody f1 klasy TOb }
end;

W innych językach cała definicja metody, obejmująca nagłówek i blok kodu, zawarta jest w definicji klasy[8].

Python[19]:

class TOb:
  u"defincja klasy zawiera także definicję metod"
  def m1(a):
    u"treść metody m1 klasy TOb"
  def f1(a):
    u"treść metody f1 klasy TOb"

Jak wyżej zaznaczono nagłówek podprogramu w pewnych sytuacjach może zawierać pewne opcjonalne frazy zawierające wybrane deklaratory bądź modyfikatory definicji.

Przykłady rozszerzeń nagłówka podprogramu o opcjonalne frazy w Turbo Pascalu[3]
opis przykład
definicja podprogramu, nagłówek bez fraz dodatkowych
procedure pr({parametry});
begin
  { treść podprogramu }
end;
deklaracja wyprzedzająca
procedure pr({parametry}); forward;
podprogram zewnętrzny
{$L nazwa_pliku}
procedure pr({parametry}); external;
podprogram zewnętrzny z biblioteki DLL
procedure pr({parametry}); far; external biblioteka_dll;
procedure new_name({parametry}); far; external biblioteka_dll; name pr;
procedure new_name({parametry}); far; external biblioteka_dll; index n;

Przypisy

  1. 1,0 1,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. 2,0 2,1 2,2 2,3 2,4 2,5 2,6 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.)
  3. 3,00 3,01 3,02 3,03 3,04 3,05 3,06 3,07 3,08 3,09 3,10 3,11 Andrzej Marciniak: Borland Pascal 7.0. Poznań: Nakom, 1994, seria: Biblioteka Użytkownika Mikrokomputerów. ISSN 0867-6011. ISBN 83-85060-53-7. (pol.)
  4. 4,0 4,1 4,2 4,3 4,4 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.)
  5. 5,0 5,1 5,2 5,3 5,4 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.)
  6. 6,0 6,1 6,2 6,3 6,4 6,5 6,6 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.)
  7. 7,0 7,1 7,2 7,3 7,4 7,5 7,6 Jan Bielecki: Turbo C z grafiką na IBM PC. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990, seria: Mikrokomputery. ISBN 83-204-1101-7. (pol.)
  8. 8,0 8,1 8,2 8,3 8,4 8,5 8,6 8,7 8,8 Jan Bielecki: Od C do C++, programowanie obiektowe w języku C. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990. ISBN 83-204-1332-X. (pol.)
  9. 9,0 9,1 9,2 John Walkenbach: Excel 2003 PL. Programowanie w VBA.. HELION, 2004. ISBN 837361-504-0. (pol.)
  10. 10,0 10,1 10,2 10,3 b:Visual Basic
  11. Ralph E. Griswold, Madge T. Griswold: Icon. Warszawa: Wydawnictwa Naukowo-Techniczne, 1987, seria: Biblioteka Inżynierii Oprogramowania. ISBN ISBN 83-204-0871-7. (pol.)
  12. 12,0 12,1 12,2 Mike Ducka, tłumaczenie: Marcin Turski: Języki mikrokomputerów. Przewodnik dla początkujących. Basic, Pascal, Logo, Prolog, Comal, Forth. Warszawa: Wydawnictwa Naukowo-Techniczne, 1988. ISBN 83-204-0966-7. (pol.)
  13. 13,0 13,1 Ryszard K. Kott, Krzysztof Walczak: Programowanie w języku Fortran 77. Warszawa: Wydawnictwa Naukowo-Techniczne, 1991. ISBN 83-204-1362-1. (pol.)
  14. 14,0 14,1 Kazimierz Orlicz: Język konwersacyjny JEAN z elementami programowania w Fortranie. Wrocław: Wydawnictwo Politechniki Wrocławskiej, 1977, seria: Skrypt wydany w serii Biblioteka WASC. (pol.)
  15. 15,0 15,1 b:Fortran
  16. b:Perl
  17. Eugeniusz Kurzydrem, Andrzej Macieliński, Urszula Szmidt, Eugeniusz Więcek: COBOL. Język programowania.. Wyd. drugie. Warszawa: Państwowe Wydawnictwo Ekonomiczne, 1978. (pol.)
  18. b:Ruby
  19. 19,0 19,1 b:Python
  20. b:D