Paradygmaty programowania wyk 3


Paradygmaty
Paradygmaty
programowania
programowania
Wykład 3  Zmienne
Pamięć
Pamięć
Pamięć  kolekcja komórek, z których każda posiada:
1024
" unikalny adres 7
1040
 A
" stan
1048
" zaalokowana
?
" niezalokowana
" niezalokowana
?
" zawartość
" wartość przechowywalna
" niezdefiniowana
Wartość przechowywalna  wartość, która może być
przechowywana w pojedynczej komórce pamięci
Zmienne
Zmienne
Zmienna  kontener dla wartości, która może być
sprawdzany i modyfikowany dowolną ilość razy
zmienne
zmienne
proste złożone
Zmienne proste
Zmienne proste
Zmienna prosta  zmienna, która może zawierać
wartość przechowywalną. Każda zmienna prosta zajmuje
jedną komórkę pamięci
int funkcja()
int funkcja()
{
int x;
5
?
6
x = 5;
x = x+1;
return x;
}
Zmienne złożone
Zmienne złożone
Zmienna złożona  zmienna typu złożonego, zajmująca
kilka sąsiadujących komórek pamięci
struct Data
Data dzis; Data daty[3];
{
{
int dzien;
dzien
11 11
int miesiac;
daty[0]
miesiac
dzis
3 3
int rok;
};
rok
2009 2009
12
daty[1]
3
2009
?
daty[2]
?
?
Kopiowanie przez wartość i przez referencje
Kopiowanie przez wartość i przez referencje
11 11
dateA dateA
3 3
kopiowanie
2009 2009
dateB = dateA
przez
? 11
wartość
dateB
dateB 3
?
? 2009
dateA dateA
11 11
3 3
kopiowanie
dateB = dateA
2009 2009
przez
dateB dateB
referencje
? ?
? ?
? ?
Czas życia zmiennej
Czas życia zmiennej
Czas życia zmiennej jest przedziałem pomiędzy stworzeniem,
a zniszczeniem zmiennej
zmienne
zmienne
na
globalne
lokalne
stercie
Zmienne lokalne i globalne
Zmienne lokalne i globalne
Zmienna globalna  zmienna dostępna w dowolnym
miejscu w programie.
Czas jej życia jest równy czasowi działania aplikacji
Zmienna lokalna  zmienna zadeklarowana wewnątrz
procedury lub funkcji i dostępna tylko w wewnątrz tej
procedury lub funkcji.
Czas jej życia jest równy czasowi aktywacji
procedury lub funkcji
Zmienne lokalne i globalne
Zmienne lokalne i globalne
int globalna;
start
void funkcja1() {
funkcja2()
int zmiennaLok1;
funkcja1()
&
}
powrót funkcja1
void funkcja2() {
int zmiennaLok2;
int zmiennaLok2;
&
powrót funkcja2
powrót funkcja2
funkcja1();
&
} funkcja1()
int main() {
int x1, x2; powrót funkcja1
funkcja2();
funkcja1();
return 0;
stop
}
zmiennaLok1
zmiennaLok2
x1, x2
x1, x2
globalna
globalna
zmiennaLok1
Zmienne na stercie
Zmienne na stercie
Zmienna na stercie  zmienna anonimowa, tworzona
i niszczona w dowolnym momencie działania aplikacji.
Dostęp do zmiennej na stercie jest możliwy za pomocą
wskazników
" tworzone są za pomocą alokatorów:
" tworzone są za pomocą alokatorów:
" C: malloc()
" C++, C#, Java, ADA: new
" niszczone są za pomocą delokatorów
" C: free()
martwe wskazniki !!!
" C++: delete
" C#, Java: garbage collector
Wiązanie
Wiązanie
Wiązanie  stałe przypisanie identyfikatora do jednostki
tj. wartość, zmienna, procedura, typ itd.
Środowisko  zbiór dostępnych wiązań.
int globalna;
int globalna;
void funkcja1() {
globalna zmienna typu int
float x1 = 3.14;
funkcja1 funkcja
x1++;
x1 liczba rzeczywista 3.14
&
}
globalna zmienna typu int
funkcja1 funkcja
int main() {
int x1, x2;
main funkcja
funkcja1();
x1 zmienna typu int
return 0;
x2 zmienna typu int
}
Zakres widoczności
Zakres widoczności
Zakres widoczności deklaracji  fragment programu,
w którym deklaracja jest dostępna.
Blok  jest to konstrukcja programu, ograniczająca
zakres widoczności dowolnej deklaracji wewnątrz niego
Struktura monolityczna Struktura płaska Struktura zagnieżdżona
deklaracja x1 deklaracja x1
deklaracja x1
deklaracja x2
deklaracja x2
deklaracja x2
deklaracja x3
deklaracja x3
deklaracja x3
Zakres widoczności
Zakres widoczności
Zakrywanie
Zakresy statyczne i dynamiczne
void funkcja1() {
const int s = 2;
int zmiennaLok1 = 0;
printf( %d , zmiennaLok1);
int f(int x) {
for(int i=0; i<10; i++)
return s*x;
{
}
float zmiennaLok1 = 3.14;
printf( %f , zmiennaLok1);
void p(int y) {
}
}
printf( %d , f(y));
printf( %d , f(y));
printf( %d , zmiennaLok1);
}
}
void q(int z) {
const int s = 3;
printf( %d , f(z));
}
void r(int z) {
const char s[] =  ALA ;
printf( %d , f(z));
}
Reprezentacja zmiennych w pamięci
Reprezentacja zmiennych w pamięci
void funkcja1() {
int zmiennaLok1;
ramka aktywacji
}
ramka aktywacji
sterta
void funkcja2() {
int *wsk; ramka aktywacji
int zmiennaLok2;
ramka aktywacji
ramka aktywacji
wsk = new int[10];
wsk = new int[10];
dane porządkowe
funkcja1();
ramka aktywacji
delete wsk;
zmienna lokalna
}
ramka aktywacji
dane
zmienna lokalna
int main() {
ramka aktywacji statyczne
zmienna lokalna
int x1, x2;
funkcja2();
ramka aktywacji zmienna lokalna
funkcja1();
return 0;
}
stos
Reprezentacja zmiennych na stosie
Reprezentacja zmiennych na stosie
funkcja2() funkcja1() powrót powrót funkcja1()
void funkcja1() {
funkcja1 funkcja2
int zl1;
}
x1 x1 x1 x1 x1 x1
void funkcja2() {
x2 x2 x2 x2 x2 x2
int *wsk;
int zl2;
wsk = new int[10]; wsk wsk wsk zl1
wsk = new int[10]; wsk wsk wsk zl1
funkcja1();
zl2 zl2 zl2
delete wsk;
}
zl1
int main() {
int x1, x2;
funkcja2();
funkcja1();
return 0;
}
Reprezentacja zmiennych na stercie
Reprezentacja zmiennych na stercie
stos
sterta
int main() {
int *x1, *x2, *x3;
x1
x1 = new int;
x2
x2 = new int;
x3 = new int;
x3
delete x2;
delete x2;
delete x1;
return 0;
}


Wyszukiwarka

Podobne podstrony:
Paradygmaty programowania wyk 4
Paradygmaty programowania wyk 2
Paradygmaty programowania wyk 5
Paradygmaty programowania wyk 5
Paradygmaty programowania wyk 1
zestawy cwiczen przygotowane na podstawie programu Mistrz Klawia 6
Międzynarodowy Program Badań nad Zachowaniami Samobójczymi
Wyk ad 02
CSharp Introduction to C# Programming for the Microsoft NET Platform (Prerelease)
Instrukcja Programowania Zelio Logic 2 wersja polska
Program wykładu Fizyka II 14 15
Mat Bud wyk
wyk(Ia) wstęp PBiID
roprm ćwiczenie 6 PROGRAMOWANIE ROBOTA Z UWZGLĘDNIENIEM ANALIZY OBRAZU ARLANG

więcej podobnych podstron