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(); }