II. Klasy i pakiety

advertisement
II. Klasy i pakiety
Uwaga. Poniższe zadania wykonaj poza środowiskiem programistycznym,
korzystając z narzędzi konsolowych.
Zadanie 1. Zapoznaj się z zawartością pliku StackExample.java. Zaimplementuj klasę Stack, oferującą funkcjonalność stosu. Klasa ta powinna
zawierać następujące atrybuty:
— maxSize typu int, zawierający maksymalny możliwy rozmiar stosu;
wartość tego atrybutu powinna być definiowana przez parametr konstruktora (wykorzystaj słowo kluczowe this),
— tablicę elementów typu long o nazwie stackArray, przechowującą elementy stosu,
— top typu int, przechowujący indeks ostatniego elementu na stosie; jeśli
stos jest pusty, atrybut top powinien przechowywać wartość -1,
oraz następujące metody:
— konstruktor wykonujący wszystkie niezbędne operacje inicjujące w oparciu o jedyny argument będący maksymalną wielkością stosu,
— push zwracającą wartość typu boolean, przyjmującą argument typu
long i umieszczającą go na stosie oraz zwracającą true, jeśli na stosie
jest jeszcze miejsce i umieszczono tam element oraz false, jeśli stos jest
już pełny,
— pop zwracającą wartość typu long, zdejmującą ostatni element ze stosu,
— peek zwracającą wartość typu long — wartość ostatniego elementu na
stosie bez zdejmowania go ze stosu,
— isEmpty zwracającą wartość typu boolean — true, jeśli stos jest
pusty i false w przeciwnym przypadku,
— isFull zwracającą wartość typu boolean — true, jeśli stos jest pełny
i false w przeciwnym przypadku,
Skompiluj plik i sprawdź działanie otrzymanego programu. Które elementy
składowe powinny być prywatne, a które publiczne? Co by się stało, gdyby
klasa Stack była prywatna?
Zadanie 2. Przeciąż konstruktor klasy Stack tak, aby można go było wykonać z dwoma argumentami – pierwszym określającym maksymalny rozmiar stosu i drugim, będącym tablicą wartości typu long, które mają być
umieszczone na stosie zaraz po jego utworzeniu. Wewnątrz nowego konstruktora odwołaj się do starego konstruktora przez wywołanie this(maxSize),
a następnie umieść elementy na stosie, korzystając z metody push.
1
Zadanie 3. Zapoznaj się z zawartością katalogu stack. Uzupełnij zawartość pliku Stack.java klasą, którą skonstruowałeś w poprzednim zadaniu.
Aby skompilować pakiet (zbiór plików źródłowych), wykonaj następujące polecenia:
$ cd stack # przejdź do katalogu stack
$ javac StackExample.java Stack.java
Sprawdź, czy możesz skompilować pliki źródłowe osobno. Spróbuj uruchomić
program odowłując się do głównej klasy
$ java StackExample
Czy udało się? Spróbuj zrobić to samo, wykonując polecenia
$ cd .. # przejdź do katalogu nadrzędnego
względem stack
$ java stack.StackExample
Co oznacza ostatnie polecenie? Dlaczego argument programu java ma taką
postać? Czy cała procedura zadziała, jeśli z któregokolwiek z plików źródłowych usuniemy deklarację pakietu?
Zadanie 4. Zapoznaj się z plikiem StackPackage.java. Odwołuje się
on (za pośrednictwem instrukcji import) do klasy Stack z pakietu utworzonego w poprzednim zadaniu. Sprawdź, czy uda się skompilować ten plik
i uruchomić program. Co należy zrobić, aby było to możliwe? Czy po wprowadzeniu zmiany w pliku Stack.java trzeba go kompilować osobno, czy
też dzieje się to automatycznie przy próbie kompilacji pliku StackPackage.java, który się do niego odwołuje? Czy kompilacja pliku Stack.java
dokonywana jest za każdym razem, czy tylko w przypadku, gdy jego zawartość się zmieniła?
Uwaga. W kolejnych zadaniach operuj na klasie Stack w pakiecie stack
oraz na klasie StackPackage.
Zadanie 5. Do klasy Stack dodaj statyczny i prywatny atrybut noOfElements, zawierający liczbę elementów przechowywanych we wszystkich utworzonych stosach. Aby ustalić początkową wartość tego atrybutu, skorzystaj
z możliwości bloku static. Zaimplementuj też statyczną metodę count
zwracającą bieżącą wartość tego atrybutu. Utwórz kilka stosów i umieść na
nich różne liczby elementów. Sprawdź, jakie wartości zwraca metoda count.
Zadanie 6. Sprawdź, co się stanie, jeśli spróbujesz wypisać na ekranie zmienną typu Stack, korzystając z metody toString. Dlaczego możesz skorzystać z tej metody, chociaż nie została zaimplementowana? Co się dzieje, jeśli
pominiesz wywołanie metody toString?
Zadanie 7. Zaimplementuj w klasie Stack metody toString i equals,
które, odpowiednio, zwracają zawartość stosu w postaci ciągu znaków i weryfikują równość dwóch obiektów typu Stack. Przyjmujemy, że dwa obiekty
typu Stack są równe, jeśli ciągi znaków je reprezentujące są identyczny.
Porównaj efekt z tym z poprzedniego zadania.
2
Download