Paradygmaty programowania/Ćwiczenia 2: Semantyka zmiennych
Zadanie 1
Wymienić momenty, w których mogą następować wiązania różnych rodzajów.
Zadanie 2
Jakie zmienne w C++ są zawsze aliasowane?
Zadanie 3
Napisz funkcję, w której przydatna będzie „zmienna z historią”, czyli zmienna, której wartość nie znika pomiędzy wywołaniami funkcji. Jak powołać do życia taką zmienną w języku C (lub podobnym)?
Zadanie 4
Zapisz przykładową instrukcję podstawienia w paru znanych Ci językach. Określ, jakie wiązania wchodzą tu w grę. Kiedy następują? Czy są różnice pomiędzy językami? Zrób to samo dla przykładowego wywołania funkcji.
Zadanie 5
Podaj przykłady języków, które mają niejawną dealokację pamięci ze sterty.
Zadanie 6*
Obiekty w języku C++ mogą być dynamiczne na stosie lub na stercie. Czy w Javie jest tak samo? Jaki to ma związek z metodami polimorficznymi?
Zadanie 7
Jaki jest związek dynamicznego wiązania typu z niejawną alokacją zmiennych na stercie?
Zadanie 8
Na czym polega różnica między podtypem a typem pochodnym w Adzie?
Zadanie 9
Rozważmy program napisany w składni języka Ada. Jaka wartość zostanie wydrukowana przez Put, jeśli zakresy są ustalane statycznie? Jaka przy dynamicznym ustalaniu zakresów?
procedure Main is X: Integer; procedure PrA is begin Put(X) end; procedure PrB is X: Integer; begin X := 1; PrA end; begin X := 2; PrB end;
Zadanie 10
Rozważmy poniższy program. Co zostanie wypisane, jeśli zakresy są ustalane statycznie? Co przy dynamicznym ustalaniu zakresów?
int x = 2; int y = 1;
void f() { x = x + 1; y = y + 2; print(x, y); }
void g() { int x = 1; x = x + 2; y = y + 1; print(x, y); f(); }
void main() { g(); f(); }
Test
Program może zawierać dwie różne zmienne o tej samej nazwie, gdy są to zmienne:
alokowane dynamicznie
globalne
lokalne w dwóch różnych blokach
lokalne w tym samym bloku
L-wartością nazywamy:
bieżący adres zmiennej
wynik wyrażenia arytmetycznego
indeks tablicy
wartość zmiennej po dokonaniu podstawienia
Wiązanie statyczne:
może zmienić się w trakcie wykonania programu
następuje w trakcie wykonania programu
następuje przed wykonaniem programu
odnosi się tylko do zmiennych globalnych
Wnioskowanie o typie zmiennej jest najczęstsze w językach:
funkcyjnych
logicznych
obiektowych
nie występuje w żadnym przyzwoitym języku
Okres życia zmiennej to:
czas pomiędzy alokacją zmiennej a jej dealokacją
czas od uruchomienia programu do chwili wykonania na tej zmiennej delete, free itp.
obszar kodu pomiędzy deklaracją zmiennej a końcem zawierającego ją bloku
czas od pierwszego podstawienia pod tę zmienną do ostatniego jej użycia w programie
Obiekty w Javie są alokowane:
dynamicznie, na stercie
dynamicznie, na stosie
dynamicznie, na stosie lub na stercie (decyzję podejmuje kompilator)
statycznie
Spośród wymienionych tu języków najbliższy silnemu typowaniu jest:
C
C++
C\#
PHP
Silne typowanie bywa ,,osłabiane przez:
jawne konwersje typów
niejawne konwersje typów
dynamiczne sprawdzanie zgodności typów
statyczne sprawdzanie zgodności typów
Podtyp to:
typ powstały przez ograniczenie zakresu istniejącego typu, zgodny z owym typem
nowy typ oparty na już istniejącym, niezgodny z dotychczasowym
typ tablicowy, w którym ograniczono zakres indeksów
jedno z pól unii
W języku C++ dostęp do przesłoniętej zmiennej nielokalnej można uzyskać za pomocą operatora:
\:\: (dwa dwukropki)
. (kropka)
* (gwiazdka)
-> (strzałka)