Programowanie obiektowe - laboratorium

[up]
Zadania na 3.06
Bardziej zaawansowany przykład: demomvc.zip z tej strony

Zasady zaliczania laboratorium

Na laboratorium będą dwa duże zadania po 10 punktów. Maksymalną liczbę punktów można dostać tylko oddając zadanie w terminie. Za rozpoczęty tydzień opóźnienia uzyskana liczba punktów jest mnożona przez 0.8, a za rozpoczęty drugi tydzień opóźnienia przez 0.6. Rozwiązania spóźnione więcej niż pełne dwa tygodnie nie będą sprawdzane. Do obu zadań będzie wraz z treścią podany prosty test (dane i wynik), programy, które nie będą spełniać tego testu, nie będą w ogóle oceniane. Dodatkowo prowadzący grupę według swojego uznania rozdziela do 10 punktów za małe zadania zadawane na poszczególnych zajęciach.

Małe zadania

Poniższe zadania są warte 1 punkt. Łącznie będzie nieco więcej niż 10 zadań, więc nie trzeba oddawać wszystkich, aby zdobyć 10 punktów (jednocześnie nie można dostać więcej niż 10 punktów). Rozwiązanie zadania można przedstawić na zajęciach, na których zostało ono zadane, lub na kolejnych.
  1. (4.03-11.03) Napisz program, który wczyta z wejścia dwie liczby całkowite a,b oraz wypisze na wyjście wszystkie liczby całkowite od a do b.
  2. (11.03-18.03) Do wyboru jedno z dwóch zadań:
  3. (18.03-25.03) Przygotuj klasę implementującą duże liczby naturalne (najlepiej dowolnego rozmiaru - gdy tablica się przepełni należy zaalokować większą). Operacje (co najmniej): konwersja z napisu, na napis, dodawanie.
  4. (25.03-1.04) Klasa Student z kilkoma atrybutami: konstruktorami: metodami: Dla chętnych: stwórz także klasę Osoba, z której będzie dziedziczyć klasa Student. Odpowiednio podziel odpowiedzialności między te dwie klasy.
  5. (1.04-8.04) Proszę zaimplementować jedno z dwóch zadań z ostatnich ćwiczeń:
  6. (8.04-22.04) Dziś proste zadanie na polimorfizm. Napisz hierarchię klas Zwierząt zawierającą Psa i Kota. Każde zwierzę ma mieć imię. Dodaj metodę odezwijSię. Stwórz tablicę różnych zwierząt (co najmniej pięć), różnych rodzajów (psy i koty) oraz funkcję, która dostawszy taką tablicę wypisuje dla każdego zwierzęcia jego imię oraz to co miało ono do powiedzenia.
  7. (22.04-29.04) Implementujemy zadanie o wyrażeniach, które było na ćwiczeniach (nie trzeba pisać wszystkiego - raczej jakąś część rozsądnej wielkości): Chcemy zdefiniować klasę obiektów reprezentujących wyrażenia arytmetyczne jednej zmiennej rzeczywistej (x). Interesują nas następujące operacje: Wyrażenia mogą zawierać:
  8. (29.04-6.05) Przetestować konstrukcję try-with-resources. Co się dzieje, gdy close w zasobie rzuca wyjątek (gdy wewnątrz try jest / nie jest rzucany wyjątek)? Co się dzieje, gdy konkstruktor zasobu rzuca wyjątek? Czy jeśli close jednego zasobu rzuca wyjątek, to close drugiego zostanie wywołany?
  9. (6.05-13.05) Stworzyć własną implementację listy Lista<T> umożliwiającą co najmniej wstawianie elementów oraz implementującą interfejs Iterable<T>.
  10. (13.05-20.05) Zaproponuj interfejs ImmutableSet<E> reprezentujący niezmienialny zbiór (operacje wstawiania i usuwania mają tworzyć nowy zbiór). Przygotuj implementację tego interfejsu za pomocą drzew BST (niech wszystkie używane pola będą zadeklarowane jako final, wtedy na pewno struktura będzie niezmienialna). Niech operacje takie jak size() i isEmpty() działają w czasie stałym, natomiast wstawianie, wyszukiwanie i usuwanie w czasie proporcjonalnym do wysokości (a nie do rozmiaru) drzewa. (Usuwanie opcjonalnie).
  11. (20.05-27.05) Spróbujmy zaimplementować kalkulator. Wczytuje on wyrażenie (jedną linię) ze standardowego wejścia i wylicza je. Wyrażenie może zawierać liczby (rzeczywiste), dodawanie, odejmowanie, mnożenie, dzielenie; można dodać coś jeszcze. Przykładowe wyrażenie: (10+9*8)*7. Dobrze gdyby program obsługiwał wyrażanie zarówno z jak i bez spacji oddzielających poszczególne elementy. Proszę zwrócić uwagę na liczby ujemne / minus jednoargumentowy.
  12. (27.05-3.06) Napisać jakiś ciekawy program korzystający z GUI.