licencjat - opracowania (wszystkie


12. Podprogramy. Przekazywanie parametrów podprogramu.

Podprogram (inaczej funkcja lub procedura) - wydzielona część programu wykonująca jakieś operacje. Podprogramy stosuje się, aby uprościć program główny i zwiększyć czytelność kodu.

Metody wywołania podprogramu

Wartościową cechą podprogramu jest możliwość wielokrotnego jego wywołania. Wywołanie

podprogramu może być:

funkcyjne - w wyrażeniu, do którego podprogram zwraca obliczoną wartość, np. A=B+Func(C), L=Trim(Copy(Delete(` Ala `,3,1),3)). Taka forma wywołania dotyczy tylko podprogramów mających cechy funkcji, tzn. zwracających wartość,

proceduralne:

o poprzez nazwę z listą argumentów, np.: Proc(A, 5)

o po słowie kluczowym np.: CALL Proc(A, 5)

Podprogram nie będący metodą ma dostęp do danych na dwa sposoby: przez zmienne nielokalne (zgodnie z zasadami zakresu widoczności) oraz przez przekazane parametry. Drugi

sposób jest znacznie lepszy, gdyż pozwala na jasne zdefiniowanie sprzężenia podprogramu z

otoczeniem, bez polegania na trudnych często do uchwycenia efektach ubocznych. Metoda ma dodatkowo dostęp do danych obiektu, z którego jest wołana.

Pod względem technicznym, procedury i funkcje różnią się jedynie zwracaniem wartości, tzn. procedury jej nie zwracają. Semantycznie jednak różnica jest istotna.

Procedury są zestawem instrukcji, które definiują sparametryzowane obliczenia. Są one uruchamiane poprzez pojedyncze wywołanie. Można zatem powiedzieć, że procedury definiują nowe instrukcje.

Funkcje natomiast przypominają funkcje matematyczne. Są wywoływane poprzez użycie ich nazwy w wyrażeniu. Nie powinny dawać żadnych efektów ubocznych (typowych w przypadku procedur). Funkcje definiują zatem nowe operatory.

Języki programowania oparte na języku C formalnie nie posiadają procedur, ale funkcje typu void zachowują się tak jak procedury.

Parametry formalne - parametry w nagłówku.

Parametry aktualne - parametry w instrukcji wywołania podprogramu, które zostaną przypisane parametrom formalnym.

Parametry pozycyjne odpowiedniość pomiędzy parametrami formalnymi a aktualnymi ustalana jest poprzez zestawienie ich położenia w liście.

Parametry z kluczemwiązanie parametrów formalnych z aktualnymi na podstawie nazw podanych wraz z parametrami aktualnymi.

Parametry z wartością domyślną (Ada, C++, PHP) - liczba parametrów aktualnych może być mniejsza niż liczba parametrów formalnych.

Sposoby przekazywania parametrów

Parametr formalny charakteryzuje jeden z trzech modeli semantycznych:

o Może otrzymać dane poprzez odpowiadający mu parametr aktualny (tryb wejściowy, in).

o Może przekazywać dane do parametru aktualnego (tryb wyjściowy, out).

o Może też używać obu trybów (tryb wejściowo-wyjściowy, in-out).

Przekazanie danych może następować na dwa sposoby:

o Kopiowana jest faktyczna wartość (do wywoływanego podprogramu, do programu

wołającego lub w obie strony).

o Dostęp do danych przekazywany jest pośrednio (np. przez wskaźnik).

Modele przekazywania parametrów można implementować jako:

 Przekazywanie przez wartość.

 Przekazywanie przez wynik.

 Przekazywanie przez wartość i wynik.

 Przekazywanie przez referencję.

 Przekazywanie przez nazwę.

Przekazywanie przez wartość

 Wartość parametru aktualnego jest używana do zainicjowania odpowiadającego mu parametru formalnego.

 Parametr formalny funkcjonuje następnie w podprogramie jako zmienna lokalna.

 Tak implementujemy semantykę trybu wejściowego.

 Dane przekazuje się zwykle przez kopiowanie wartości, ale można też użyć dostępu pośredniego (z dodatkowym zabezpieczeniem przed zmianą wartości parametru aktualnego).

 Przekazywanie przez wartość jest kosztowne, gdy trzeba przekazać duże struktury danych.

Przekazywanie przez wynik

Nie przekazujemy wartości do podprogramu.

 Parametr formalny działa jak zmienna lokalna.

 Tuż przez przekazaniem sterowania z powrotem do wywołującego, wartość parametru

formalnego jest przesyłana do parametru aktualnego w programie wywołującym.

 Parametr aktualny musi zatem być zmienną (a nie np. wyrażeniem arytmetycznym).

 Tak implementujemy semantykę trybu wyjściowego.

 Dane przekazuje się zwykle przez kopiowanie.

 Przy przekazywaniu przez wynik może dojść do kolizji parametrów aktualnych, np. przy

wywołaniu subp(x, x). Załóżmy, że formalne parametry podprogramu subp to a i b. Jaka powinna być wartość x, jeśli subp zawiera podstawienia a := 1; b := 2? Załóżmy, że parametr aktualny to T[i]. Jeśli podprogram zmieni wartość zmiennej i, gdzie powinna znaleźć się zwrócona wartość, tzn. czy powinniśmy użyć starej czy nowej wartości indeksu?

Przekazywanie przez wartość i wynik

 Jest to kombinacja dwóch wcześniejszych sposobów implementacji, dająca semantykę trybu wejściowo-wyjściowego.

 Zwane niekiedy przekazywaniem przez kopiowanie, jako że parametr aktualny jest kopiowany do parametru formalnego, a następnie kopiowany z powrotem przy zakończeniu podprogramu.

Przekazywanie przez referencję

 Jest to alternatywna implementacja semantyki trybu wejściowo-wyjściowego.

 Dostęp do danych przekazywany jest pośrednio, czyli przekazywany jest w istocie wskaźnik do wartości a nie sama wartość.

 Podprogram zyskuje więc faktyczny dostęp do parametru aktualnego.

 Taki sposób przekazania jest efektywny.

 Przekazywanie przez referencję może powodować aliasowanie, np. w przypadku wywołań subp(x, x) lub subp(T[i], T[j]) przy i = j. Aliasowanie może również się pojawić na skutek kolizji między parametrami formalnymi a zmiennymi nielokalnymi. Zauważmy, że rzecz jest podobna do kolizji parametrów aktualnych przy przekazywaniu przez wynik.

Przekazywanie przez nazwę

 Ten sposób implementuje semantykę trybu wejściowo-wyjściowego.

 Parametr aktualny jest wstawiany (tekstowo) w miejsce odpowiadającego mu parametru

formalnego, we wszystkich wystąpieniach w podprogramie. W poprzednio omówionych sposobach było inaczej — parametry formalne były wiązane z aktualnymi wartościami (lub adresami) w chwili wywołania podprogramu. Parametr formalny jest wiązany z metodą dostępu do danych w chwili wywołania podprogramu, ale właściwe wiązanie z wartością lub adresem następuje dopiero w momencie odwołania lub przypisania do owego parametru formalnego.

 Jest kosztowne.



Wyszukiwarka

Podobne podstrony:
licencjat - opracowania (wszystkie
licencjat - opracowania (wszystkie
licencjat - opracowania (wszystkie
licencjat - opracowania (wszystkie
licencjat - opracowania (wszystkie
licencjat - opracowania (wszystkie
licencjat - opracowania (wszystkie
licencjat - opracowania (wszystkie
licencjat - opracowania (wszystkie
licencjat - opracowania (wszystkie
licencjat - opracowania (wszystkie
licencjat - opracowania (wszystkie

więcej podobnych podstron