APP 06 Podprogramy 2010

background image

Podprogramy 1

W Adzie mamy dwa rodzaje podprogramów:

funkcje i procedury

1.

Deklaracja i treść funkcji

 

function_declaration ::=

function_specification;

function_specification ::=

function

designator [parameter_list]

return

subtype_mark

designator ::= function_identifier |

operator_symbol

background image

Podprogramy 2

function_body ::=

function_specification

is

[declarative_part]

begin

sequence_of_statements

end

designator;

2.

Deklaracja i treść procedury

procedure_declaration ::=

procedure_specification;

procedure_specification ::=

procedure

identifier [parameter_list]

 

background image

Podprogramy 3

parameter_list ::=

(parameter_specification

{; parameter_specification})

parameter_specification ::=

identifier: mode subtype_mark

mode ::=

in

|

out

|

in out

procedure_body ::=

procedure_specification

is

[declarative_part]

begin

sequence_of_statements

end

procedure_identifier;

background image

Podprogramy 4

Słowniczek

designator

– desygnator – miano funkcji,

procedure_declaration

– deklaracja

procedury,

procedure_specification

– definicja

procedury – nagłówek procedury,

parameter_list

– lista parametrów formalnych,

parameter_specification

– definicja

parametru formalnego,

mode

– rodzaj parametru formalnego,

procedure_body

– treść procedury.

background image

Podprogramy 5

Podprogramy definiuje się w dwóch

częściach:

1. Pierwszą część nazywamy deklaracją

podprogramu i ta część mówi jak
używać podprogramu,

2. Drugą część nazywamy treścią

podprogramu i w tej części podana jest
informacja jak działa podprogram

Zarówno deklaracja jak i treść zawierają

nagłówek podprogramu (

subprogram

specification

)

background image

Podprogramy 6

3. Projektowanie podprogramów
Określenie tego co robi podprogram i jak należy go

wywołać nazywamy interfejsem podprogramu.

Definicja 1.

Interfejsem podprogramu

nazywamy formalne określenie celu działania
podprogramu i mechanizmu komunikowania się
z podprogramem

Definicja 2.

Ukrywaniem informacji nazywamy

ukrywanie szczegółów implementacyjnych
modułu programowego.

Uwaga.

Modułem programowym nazywamy tu

procedurę, funkcję, albo podprogram główny.

background image

Podprogramy 7

Projektowanie podprogramu powinno być

podzielone na dwie części:

1. Projektowanie interfejsu,
2. Projektowanie implementacji.
W celu zaprojektowania interfejsu należy

określić funkcje podprogramu i
sposób komunikowania się z
projektowanym podprogramem.

W celu zaprojektowania implementacji

musimy określić algorytm wg którego
podprogram wykonuje swoje funkcje.

background image

Podprogramy 8

Przy projektowaniu interfejsu

zaleca się

sporządzenie listy następujących
elementów:

1. Wartości, które procedura otrzymuje z

podprogramu wywołującego,

2. Wartości, które procedura oblicza i

przekazuje do podprogramu
wywołującego,

3. Wartości, które procedura otrzymuje z

podprogramu wywołującego, zmienia
je i następnie przekazuje
do
podprogramu wywołującego.

background image

Podprogramy 9

Jeżeli mamy taką listę, to możemy utworzyć

listę parametrów formalnych, przy czym
parametry pierwszej grupy są rodzaju

in

,

parametry drugiej grupy są rodzaju

out

, a

parametry trzeciej grupy są rodzaju

in out

.

4.

Parametry procedur

Parametry służą do przesyłania informacji do

i z procedury.

procedure

Get (Item :

out

Num;

Width :

in

Field := 0);

background image

Podprogramy 10

Następujące wywołanie:

Ada.Integer_Text_IO.Get (Item =>

Liczba);

powoduje przesłanie wartości z procedury do

zmiennej Liczba.

Podobnie jak zmienne, parametry są

nazwami obszarów pamięci używanymi

do przechowywania danych.

Item jest nazwą innego obszaru pamięci niż

obszar przypisany do Liczba. Po

pomyślnym zakończeniu procedury Get

wartość z Item jest skopiowana do Liczba.

background image

Podprogramy 11

Definicja 3.

Parametrem formalnym nazywamy

zmienną deklarowaną w nagłówku podprogramu.

Definicja 4.

Parametrem aktualnym nazywamy

zmienną, albo wyrażenie związane z nazwą
parametru formalnego przy wywołaniu
podprogramu.

Określenie parametru formalnego musi zawierać

identyfikator i typ danych.

Typ parametru aktualnego musi odpowiadać

typowi parametru formalnego.

Nie można używać zakresów w definicjach

parametrów formalnych.

background image

Podprogramy 12

Rodzaje parametrów
Każda
definicja parametru formalnego

obejmuje informację o jego rodzaju.

Mamy trzy rodzaje parametrów:

in

– wejściowy

Wartość parametru aktualnego jest

kopiowana do parametru formalnego
przy wywołaniu procedury
. Wartość jest
przekazywana do wnętrza procedury.

Uwaga.

To samo dotyczy funkcji.

background image

Podprogramy 13

out

– wyjściowy

Wartość parametru formalnego jest

kopiowana do parametru aktualnego po
wykonaniu ostatniej instrukcji procedury
.
Wartość jest przekazywana na zewnątrz
procedury.

in out

– wejściowo-wyjściowy

Wartość parametru aktualnego jest

kopiowana do parametru formalnego przy
wywołaniu procedury. Po wykonaniu
ostatniej instrukcji procedury
wartość
parametru formalnego jest kopiowana do
parametru aktualnego
. Dokonywane są dwa
różne transfery danych.

background image

Podprogramy 14

Zalecenia

Należy wybrać rodzaj

in

w przypadku, gdy

wywołanie procedury wymaga przesłania
danych do jej wnętrza.

Używaj rodzaju

out

w celu wyprowadzenia

na zewnątrz wyników działania procedury.

Należy używać rodzaju

in out

, gdy

wywołanie procedury wymaga przesłania
do jej wnętrza danych, które są w niej
modyfikowane i wynik ma być dostępny na
zewnątrz.

background image

Podprogramy 15

Przykład 1.

procedure

Oblicz_Srednia (Pierwszy :

in

Float; Drugi :

in

Float;

Srednia :

out

Float)

is

begin

Srednia := (Pierwszy + Drugi)/2.0;

end

Oblicz_Srednia;

Rodzaj parametru formalnego jaki wybieramy

ma wpływ na sposób wykorzystania.
Parametry formalny

in

jest ostatecznie

stałą w podprogramie – podprogram nie
może
zmienić jej wartości.

background image

Podprogramy 16

W przypadku parametru formalnego rodzaju

in

parametr aktualny może być

wyrażeniem. Przed przekazaniem
sterowania do podprogramu wyrażenie jest
obliczane i wynik kopiowany jest do
parametru formalnego.

Przykład 2.

Oblicz_Srednia (Pierwszy =>
0.6*Wynik_Egzaminu,
Drugi => 0.4*Wynik_Cwiczen,
Srednia => Ocena_W_Indeksie);

background image

Podprogramy 17

Parametry aktualne rodzaju

out

i

in out

nie

mogą być wyrażeniami, natomiast muszą być
zmiennymi, do których kopiowane są wyniki
działania procedury.

Parametr rodzaju

out

jest zmienną, do której

powinien zostać podstawiony wynik procedury.
Stosuje się tu instrukcję podstawienia, albo
wywołanie innej procedury.

Nie należy używać parametrów rodzaju

in out

tylko po to, aby ominąć ograniczenia nałożone
na pozostałe rodzaje parametrów.

Dobieraj parametry wyłącznie na podstawie

kierunku przesyłania informacji.

background image

Podprogramy 18

5.

Umiejscowienie podprogramów

Podprogramy mogą znajdować się w osobnych

plikach, w pakietach, albo w naszym programie.

W ostatnim przypadku nie musimy podawać

oddzielnej deklaracji podprogramu. Treść

podprogramu służy również za jej deklarację.

Treść podprogramu umieszczamy w części

deklaracyjnej programu.

Zasada.

Identyfikator musi być zdefiniowany

przed jego użyciem.

Przykład 3.

Musimy zadeklarować typ

wyliczeniowy przed konkretyzacją pakietu do

obsługi wejścia-wyjścia tego typu

wyliczeniowego.

background image

Podprogramy 19

Zalecenie kolejności deklaracji w programie

1. Deklaracje typów określanych przez programistę,
2. Deklaracje stałych,
3. Konkretyzacja pakietów ogólnych,
4. Treści procedur i funkcji,
5. Deklaracje zmiennych.

Zalecenia stylistyczne

Identyfikator procedury powinien być czasownikiem

Oblicz_Srednia (X1, X2, Srednia);

Podprogram powinien zawierać komentarze

wyjaśniające sposób jego wywołania i ewentualnie

źródło lub opis algorytmu wg którego

podprogram realizuje obliczenia.

background image

Podprogramy 20

Komentarz opisujący parametr formalny można

umieścić bezpośrednio po definicji parametru.

6.

Związanie parametrów aktualnych z

parametrami formalnymi

Definicja 5.

Związaniem nazywanym (przez

nazwy) nazywamy związanie parametrów
aktualnych z formalnymi przez jawne podanie
nazw parametrów formalnych przy wywołaniu
podprogramu.

W tym przypadku porządek parametrów nie

musi być taki sam jak na liście parametrów
formalnych w nagłówku podprogramu.

background image

Podprogramy 21

Definicja 6.

Związaniem pozycyjnym nazywamy

związanie parametrów aktualnych z formalnymi

przez ich pozycje na listach parametrów aktualnych i

formalnych.

W tym przypadku na liście parametrów aktualnych

znajdują się tylko ich desygnatory, przy czym ich

kolejność musi być taka sama jak odpowiednich

parametrów formalnych na liście w nagłówku

podprogramu.

Związanie pozycyjne jest w wielu przypadkach

gorsze od związania przez nazwę. Przy stosowaniu

związania pozycyjnego łatwo pomylić porządek

parametrów, a błędy wynikające z tego powodu mogą

być trudne do wykrycia. Poza tym związanie przez

nazwę daje bardziej czytelną formę programu.

background image

Podprogramy 22

Są jednak przypadki kiedy związanie nazywane

wydaje się przesadą - podprogramy
jednoparametrowe
.

7.

Zagnieżdżanie podprogramów

Definicja 7.

Obszarem deklaracji jest

deklaracja podprogramu razem z jego treścią.

Definicja 8.

Identyfikatory zadeklarowane

wewnątrz obszaru deklaracji nazywamy
lokalnymi w tym obszarze.

Jeżeli podprogramy są zagnieżdżone, to

dostaniemy zagnieżdżone obszary
deklaracji.

background image

Podprogramy 23

Definicja 9.

Deklaracje występujące w

najbardziej zewnętrznym obszarze deklaracji
nazywamy globalnymi w stosunku do
wewnętrznych obszarów deklaracji.

Można używać tych samych identyfikatorów w

deklaracjach pod warunkiem, że
identyfikatory te występują w różnych
obszarach deklaracji.

Definicja 10.

Identyfikatory takie nazywamy

homografami.

Mimo że nazwy są takie same, to związane są z

różnymi obszarami pamięci.

background image

Podprogramy 24

8.

Reguły zasięgu.

Reguły zgodnie z którymi można używać identyfikatora

nazywamy regułami zasięgu identyfikatorów.

I.

Zasięg identyfikatora nie obejmuje

zagnieżdżonego obszaru deklaracji, w którym

umieszczono deklarację odpowiedniego

homografu.

II. Zasięgiem identyfikatora nazywamy wszystkie

instrukcje występujące po definicji identyfikatora i

znajdujące się w obszarze deklaracji zawierającym

definicję identyfikatora z wyłączeniem wg. reguły

I

Druga reguła nazywana jest czasami priorytetem

identyfikatorów.

background image

Podprogramy 25

Przykład .

Kwalifikacja_Procedur

9.

Efekty uboczne

Definicja 11.

Wpływ jednego modułu

programowego na inny moduł wywołany

poza jawnie określonym interfejsem

modułów nazywamy efektem ubocznym.

Typowym przykładem jest zmiana wartości

zmiennej globalnej wewnątrz podprogramu.

Aby uniknąć trudnych do wykrycia błędów

wywoływanych przez efekty uboczne,

przesyłanie informacji pomiędzy

podprogramem, a podprogramem

wywołującym powinno odbywać się

wyłącznie poprzez interfejs

background image

Podprogramy 26

Jeżeli procedury zmieniają jedynie wartości

zmiennych lokalnych lub parametrów,

efekty uboczne nie powstaną.

Deklarując zmienne po treściach

podprogramów zapewniamy brak dostępu

do tych zmiennych w podprogramach.

Zalecenia kiedy używać funkcji.

1.

Jeżeli moduł programowy ma obliczyć więcej

niż jedną wartość, albo zmienić wartości

parametrów aktualnych nie stosuj funkcji,

2.

Jeżeli moduł programowy ma wykonać

operację We-Wy, nie stosuj funkcji,

background image

Podprogramy 27

3. Jeżeli moduł oblicza jedną wartość typu

logicznego, stosuj funkcję,

4. Jeżeli moduł programowy oblicza jedną

wartość, którą zamierzamy wykorzystać jako
argument wyrażenia, stosuj funkcję,

5. Jeżeli masz wątpliwości, co stosować, stosuj

procedurę. Każdą funkcję można zamienić
na procedurę, przy czym nazwa funkcji staje
się wtedy parametrem rodzaju

out

.

6. Jeżeli obydwa rodzaje podprogramów są

równie dobre, wybierz ten rodzaj, który
zapewnia Ci większą wygodę przy wywołaniu.

background image

Literatura podstawowa

Literatura podstawowa
Morawski, M., Zajączkowski, A. M.

(2003).
Wstęp do programowania w języku
Ada’95
.
Rozdział 6.

Użyteczne materiały dydaktyczne:

zskl.zsk.p.lodz.pl/~zajaczko


Document Outline


Wyszukiwarka

Podobne podstrony:
APP Zadania 06 Podprogramy
APP Zadania 06 Podprogramy
Rewolucja Na Talerzu s01e02 Kotlet schabowy 06 05 2010
06 OOS 2010
Paczka Nutek Disco Polo Nowości (06 01 2010)
Portfolio projektu 06 12 2010
PPiW W 06 02 2010 przedszkolna
podstawy finansow i rachunkowosci cw 06.03.2010, GWSH, podstawy finansów i rachunkowości
P Społeczna TreściWord, 1. p społeczna 06.10.2010
VI 06.05.2010, STUDIA, na studia, psychologia wykłady, psychologia wyklady
podtsawy edycji w word, do uczenia, materialy do nauczania, rok2009 2010, semII, 06.02.2010, word II
Patrologia 06 11 2010
PSYCHOLOGIA SPOŁECZNA wykład1 06.10.2010 drW.Kozłowski, Pedagogika, psychologia społeczna

więcej podobnych podstron