Paradygmaty programowania/Ćwiczenia 2: Semantyka zmiennych: Różnice pomiędzy wersjami
Nie podano opisu zmian |
|||
Linia 60: | Linia 60: | ||
f(); | f(); | ||
} | } | ||
==Test== | |||
<quiz type="exclusive"> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Program może zawierać dwie różne zmienne o tej samej nazwie, gdy są to zmienne: | |||
<wrongoption reply="Źle">alokowane dynamicznie</wrongoption> | |||
<wrongoption reply="Źle">globalne</wrongoption> | |||
<rightoption reply="Dobrze">lokalne w dwóch różnych blokach</rightoption> | |||
<wrongoption reply="Źle">lokalne w tym samym bloku</wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
L-wartością nazywamy: | |||
<rightoption reply="Dobrze">bieżący adres zmiennej</rightoption> | |||
<wrongoption reply="Źle">wynik wyrażenia arytmetycznego</wrongoption> | |||
<wrongoption reply="Źle">indeks tablicy</wrongoption> | |||
<wrongoption reply="Źle">wartość zmiennej po dokonaniu podstawienia</wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Wiązanie statyczne: | |||
<wrongoption reply="Źle">może zmienić się w trakcie wykonania programu</wrongoption> | |||
<wrongoption reply="Źle">następuje w trakcie wykonania programu</wrongoption> | |||
<rightoption reply="Dobrze">następuje przed wykonaniem programu</rightoption> | |||
<wrongoption reply="Źle">odnosi się tylko do zmiennych globalnych</wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Wnioskowanie o typie zmiennej jest najczęstsze w językach: | |||
<rightoption reply="Dobrze">funkcyjnych</rightoption> | |||
<wrongoption reply="Źle">logicznych</wrongoption> | |||
<wrongoption reply="Źle">obiektowych</wrongoption> | |||
<wrongoption reply="Źle">nie występuje w żadnym przyzwoitym języku</wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Okres życia zmiennej to: | |||
<rightoption reply="Dobrze">czas pomiędzy alokacją zmiennej a jej dealokacją</rightoption> | |||
<wrongoption reply="Źle">czas od uruchomienia programu do chwili wykonania na tej zmiennej delete, free itp.</wrongoption> | |||
<wrongoption reply="Źle">obszar kodu pomiędzy deklaracją zmiennej a końcem zawierającego ją bloku</wrongoption> | |||
<wrongoption reply="Źle">czas od pierwszego podstawienia pod tę zmienną do ostatniego jej użycia w programie</wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Obiekty w Javie są alokowane: | |||
<rightoption reply="Dobrze">dynamicznie, na stercie</rightoption> | |||
<wrongoption reply="Źle">dynamicznie, na stosie</wrongoption> | |||
<wrongoption reply="Źle">dynamicznie, na stosie lub na stercie (decyzję podejmuje kompilator)</wrongoption> | |||
<wrongoption reply="Źle">statycznie</wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Spośród wymienionych tu języków najbliższy silnemu typowaniu jest: | |||
<wrongoption reply="Źle">C</wrongoption> | |||
<wrongoption reply="Źle">C++</wrongoption> | |||
<rightoption reply="Dobrze">C\#</rightoption> | |||
<wrongoption reply="Źle">PHP</wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Silne typowanie bywa ,,osłabiane'' przez: | |||
<wrongoption reply="Źle">jawne konwersje typów</wrongoption> | |||
<rightoption reply="Dobrze">niejawne konwersje typów</rightoption> | |||
<wrongoption reply="Źle">dynamiczne sprawdzanie zgodności typów</wrongoption> | |||
<wrongoption reply="Źle">statyczne sprawdzanie zgodności typów</wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Podtyp to: | |||
<rightoption reply="Dobrze">typ powstały przez ograniczenie zakresu istniejącego typu, zgodny z owym typem</rightoption> | |||
<wrongoption reply="Źle">nowy typ oparty na już istniejącym, niezgodny z dotychczasowym</wrongoption> | |||
<wrongoption reply="Źle">typ tablicowy, w którym ograniczono zakres indeksów</wrongoption> | |||
<wrongoption reply="Źle">jedno z pól unii</wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
W języku C++ dostęp do przesłoniętej zmiennej nielokalnej można | |||
uzyskać za pomocą operatora: | |||
<rightoption reply="Dobrze">\:\: (dwa dwukropki)</rightoption> | |||
<wrongoption reply="Źle">. (kropka)</wrongoption> | |||
<wrongoption reply="Źle">* (gwiazdka)</wrongoption> | |||
<wrongoption reply="Źle">-> (strzałka)</wrongoption> | |||
</quiz> |
Wersja z 20:09, 12 wrz 2006
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)