Paradygmaty
Paradygmaty
programowania
programowania
Wykład 5 – Przepływ sterowania,
procedury i funkcje
procedury i funkcje
Przepływ sterowania
Przepływ sterowania
C
E
F
E
T
F
Komendy o pojedynczym wejściu i wyjściu
C
C
1
C
2
C
1
E
T
F
C
1
C
2
E
T
F
Przepływ sterowania
Przepływ sterowania –
– sekwensery
sekwensery
Sekwenser
– konstrukcja, która pozwala na przeniesienie
kontroli w inne miejsce programu, nazywane
celem
sekwensera
.
Sekwensery
nisko-poziomowe
Skoki
wysoko-poziomowe
Komendy ucieczki
Wyjątki
Przepływ sterowania
Przepływ sterowania –
– skoki
skoki
Skok
–
sekwenser,
który
pozwala
na
przeniesienie
kontroli
w
określone
miejsce
programu.
Najczęściej
przyjmuje postać komendy goto L;, gdzie L jest etykietą
oznaczającą miejsce docelowe.
int main()
C
int main()
{
C
1
;
if(E
1
) goto A;
if(E
2
) goto B;
C
2
;
A:
C
3
;
B:
C
4
;
C
5
;
}
C
1
1
E
1
2
E
2
C
2
C
3
C
4
Komenda ucieczki
– sekwenser, który przerywa wykonanie
komendy blokowej lub procedury. Pozwala na przepływ
sterowania typu: jedno-wejście wiele-wyjść
Przepływ sterowania
Przepływ sterowania –
– komenda ucieczki
komenda ucieczki
int sumuj(int tab[])
C
1
int sumuj(int tab[])
{
int suma = 0;
for(int i=0; i<10; i++)
{
suma += tab[i];
if(suma > 10)
break;
}
return suma;
}
C
2
1
E
1
T
F
C
1
2
E
2
T
F
Przepływ sterowania
Przepływ sterowania –
– wyjątki
wyjątki
Sytuacja nietypowa (wyjątkowa)
– jest to sytuacja, w której
program nie może działać normalnie.
Wyjątki
– są techniką pozwalającą na obsługę sytuacji
wyjątkowych.
Wyjątek
– jednostka reprezentująca sytuację wyjątkową lub
rodzinę takich sytuacji.
Przepływ sterowania
Przepływ sterowania –
– wyjątki
wyjątki
Wyjątki
Rzucanie wyjątku
Przechwytywanie
wyjątku
Rzucanie wyjątku:
Rzucanie wyjątku:
…
if(E) throw new Ex;
…
Przechwytywanie wyjątku:
try
C
a
; C
b
;
catch(T
1
I
1
) C
1
;
…
catch(T
n
I
n
) C
n
;
finally C
f
double funkcja(double a, double b) {
if (b == 0)
throw new DivideByZeroException("Nie dzieli się przez zero");
else
return a / b;
}
static void Main(string[] args){
double wartosc=0;
Przepływ sterowania
Przepływ sterowania –
– wyjątki (przykład C#)
wyjątki (przykład C#)
double wartosc=0;
try
{
wartosc = Funkcja(3, 0);
…
}
catch (DivideByZeroException e) {
Console.WriteLine(e.Message);
wartosc = 0;
}
finally {
wartosc = 1;
}
}
Abstrakcja w programowaniu
Abstrakcja w programowaniu
W języku programowania abstrakcja pozwala na rozróżnienie
co
jednostka programu robi i
jak
jednostka programu pracuje.
Procedura
– jednostka obejmująca instrukcje programu.
Procedury
Procedury
właściwe
Procedury
funkcyjne (funkcje)
Procedura
– jednostka obejmująca instrukcje programu.
Procedury właściwe
Procedury właściwe
Procedura właściwa
obejmuje komendy do wykonania
i podczas działania modyfikuje wartości zmiennych.
C++:
Pascal:
C++:
void I(P
1
,…,P
N
)
{
B
}
Pascal:
procedure I(P
1
,…,P
N
)
var
D
begin
B
end;
Procedury funkcyjne
Procedury funkcyjne
Procedura funkcyjne (funkcje)
obejmują wyrażenia, których
wartość powinna zostać obliczona. Kiedy funkcja jest
wywoływana zwraca wyznaczoną wartość zawartego w niej
wyrażenia.
C++:
Pascal:
C++:
T I(P
1
,…,P
N
)
{
B
}
Pascal:
function I(P
1
,…,P
N
) : T
var
D
begin
B
end;
Parametry i argumenty funkcji
Parametry i argumenty funkcji
Argument
jest wartością lub jednostką przekazywaną do
procedury.
Parametr aktualny
jest wyrażeniem, które zwraca nam
Parametr aktualny
jest wyrażeniem, które zwraca nam
argument.
Parametr formalny
jest identyfikatorem, za pomocą którego
może mieć dostęp do argumentu.
Parametry i argumenty funkcji
Parametry i argumenty funkcji
int suma ( int a, int b )
{
return a + b;
}
int main()
parametry formalne
{
int a = 3;
int b = 4;
cout<<suma( a, b );
return 0;
}
parametry aktualne
Mechanizm przekazywania parametrów
Mechanizm przekazywania parametrów
Machanizm przekazywania parametrów
- forma skojarzenia
wartości atrybutu z odpowiednim parametrem formalnym.
mechanizm
przekazywania atrybutów
przekazywania atrybutów
przekazywanie przez
wartość
przekazywanie przez
referencję
Przekazywanie parametrów przez wartość
Przekazywanie parametrów przez wartość
Przekazywanie parametrów przez wartość
- pozwala aby
wartość była kopiowana do i/lub z procedury.
Przekazywanie parametrów
przez wartość
przez wartość
Przekazywanie
do funkcji
Przekazywanie
z funkcji
Przekazywanie
do i z funkcji
Przekazywanie parametrów przez wartość do funkcji
Przekazywanie parametrów przez wartość do funkcji
Podczas wywoływania funkcji tworzona jest zmienna lokalna
i inicjalizowana wartością odpowiadającego jej argumentu.
Wszelkie modyfikacje tej zmiennej lokalnej
nie są widoczne
poza funkcją.
ADA:
C++:
ADA:
procedure Dodaj(a, b: in Integer)
is
suma : Integer := 0;
begin
a := a + 5;
suma := a + b;
end;
…
x := 5;
Dodaj(x, 5);
C++:
void Dodaj(int a, int b)
{
int suma = 0;
a += 5;
suma = a + b;
}
…
x = 5;
Dodaj(x, 5);
Przekazywanie parametrów przez wartość z funkcji
Przekazywanie parametrów przez wartość z funkcji
Podczas wywoływania funkcji tworzona jest zmienna lokalna
ale
nie inicjalizowana
.
Kiedy następuje powrót z procedury
wartość tej zmiennej jest przypisana do argumentu
.
ADA:
ADA:
procedure Dodaj(a, b: in Integer, suma : out Integer) is
begin
a := a + 5;
suma := a + b;
end;
…
x: Integer;
…
Dodaj(3, 4, x);
Przekazywanie parametrów przez wartość do i z funkcji
Przekazywanie parametrów przez wartość do i z funkcji
Jest to połączenie dwóch poprzednich metod.
Podczas wywoływania funkcji tworzona jest zmienna lokalna
i
inicjalizowana
wartością odpowiadającego jej argumentu.
Kiedy następuje powrót z procedury wartość tej zmiennej jest
przypisana do argumentu
.
ADA:
procedure PodzielPrzez2(a: in out Float) is
begin
a := a / 2;
end;
…
x : Float := 5.0;
…
PodzielPrzez2(x);
Przekazywanie parametrów przez wartość
Przekazywanie parametrów przez wartość -- podsumowanie
podsumowanie
Rodzaj
Argument
Rozpoczęcie
procedury
Zakończenie
procedury
Przekazywanie do
wartość
PF = WA
-
Przekazywanie z
zmienna
-
ZA = PF
Przekazywanie do i z
zmienna
PF = WA
ZA = PF
PF – parametr formalny
WA – wartość argumentu
ZA – zmienna argumentu
Przekazywanie parametrów przez referencję
Przekazywanie parametrów przez referencję
Przekazywanie parametrów przez referencję
- pozwala aby
parametr formalny był przypisany bezpośrednio do argumentu
Przekazywanie parametrów
przez referencje
przez referencje
Przekazywanie
stałych
Przekazywanie
zmiennych
Przekazywanie
funkcji
Aliasing
Aliasing
Alising
– występuje przy przekazywaniu parametrów przez
referencję gdy, dwa lub więcej parametrów formalnych jest
bezpośrednio przypisanych do tej samej zmiennej.
void funkcja(int &v1, int &v2, int &v3)
{
{
v1 -= v3;
v2 += v3;
}
…
funckja(x,y,z);
funkcja(x,y,x);
Zmienna liczba parametrów funkcji
Zmienna liczba parametrów funkcji
#include<stdarg.h> //
C++
int funkcja(int zmiennaNazwana, …) {
va_list args;
va_start(args, zmiennaNazwana);
…
char ch = va_arg(args, char);
…
char dp = va_arg(args, char);
…
…
va_end(args);
}
void funkcja(params string[] vars) //
C#
{
for (int i = 0; i < vars.Length; i++)
Console.WriteLine(vars[i].ToString());
}