Obiektowość Javy 2


Zadanie 3 (3p)

Zaprojektować klasę Osoba z polami opisującymi nazwisko i wiek. Klasa powinna być wyposażona w konstruktory, metody ustalające/pobierające dane osoby oraz metodę toString() zwracającą informacje o danej osobie. Następnie, zdefiniować klasę Student rozszerzającą klasę Osoba z dodatkowym polem opisującym numer grupy, do której należy student. Klasę Student wyposażyć w potrzebne konstruktory i metody, które korzystają, tam gdzie jest to możliwe, z konstruktorów oraz metod nadklasy. Każdy student powinien mieć swój unikalny numer (zaczynając od 1), nadany automatycznie przy jego tworzeniu.


Zadanie 4 (3p)

Zaprojektować klasę abstrakcyjną Figura oraz dwie klasy Kolo, Prostokat:

Klasa abstrakcyjna Figura:
    Pola:        protected int x, y;                                                        // określają położenie figury
                     protected String fig = "Jeszcze nie wiadomo";         // określa nazwę figury z wartością początkową
    Konstruktor: public Figura(int x, int y)                              // konstruuje figurę na podstawie podanego położenia
    Metoda: public void pokaz()                                               // wypisuje nazwę figury i położenie
    Metoda abstrakcyjna: public abstract void pozycja(int x, int y)  // wypisuje komunikat, czy punkt (x, y) leży wewnątrz figury

Klasy Kolo, Prostokat rozszerzają klasę Figura:

Kolo:
    Dodatkowe pole: private int promien;
    Konstruktor: public Kolo(int x, int y, int r)              // konstruuje koło o środku w punkcie (x, y) i  promieniu r
    Implementacja metody abstrakcyjnej: public void pozycja(int x, int y)
    Przedefiniowanie metody: public void pokaz()        // wypisuje dodatkowo promień koła

Prostokat:
    Dodatkowe pola: private int szer, wys;                           // szerokość i wysokość prostokąta
    Konstruktor: public Prostokat(int x, int y, int s, int w)   // konstruuje prostokąt (o bokach równoległych do osi układu współrzędnych)
                                                                                              // z podanym położeniem lewego
górnego wierzchołka (x, y), szerokością s, wysokością w
    Implementacja metody abstrakcyjnej: public void pozycja(int x, int y)
    Przedefiniowanie metody: public void pokaz()                // wypisuje dodatkowo parametry szer, wys

Testowanie:

Funkcja główna publicznej klasy

public static void main(String[] args)
{
     Figura fig[] = new Figura[2];
    
     fig[0] = new Kolo(200, 200, 50);
          // polimorficzne wywołanie metod z klasy Kolo, a nie z klasy Figura 
     fig[0].pokaz();                 
     fig[0].pozycja(200, 200);     
    
     fig[1] = new Prostokat(200, 200, 50, 50);
          // polimorficzne wywołanie metod z klasy Prostokat, a nie z klasy Figura
     fig[1].pokaz();
     fig[1].pozycja(210, 300);
}

Wynik działania programu powinien wyglądać następująco:

Kolo
Srodek - (200, 200)
Promien - 50
Punkt (200, 200) lezy wewnatrz kola

Prostokat
Lewy gorny - (200, 200)
Szerokosc: 50, Wysokosc: 50
Punkt (210, 300) lezy na zewnatrz prostokata


Zadanie 5 (2p)
(Rozbudować zadanie 4)

Zdefiniować interfejs
Obliczenie zawierający metody obliczające pole i obwód figury. Zaimplementować interfejs Obliczenie w klasach Figura, Kolo, Prostokat oraz testować w/w metody.
 

Zadanie 6 (7p)

Rozbudować zadanie 2 o dodatkowe klasy obsługujące banki oraz bankomaty:

Każdy bank ma m. in. nazwę, unikalny identyfikator, listę kont oraz aktualną stopę procentową - wspólną dla wszystkich kont.
Każde konto ma m. in. właściciela, unikalny idenyfikator, stan konta, limit debetu oraz bank, do którego należy konto. Dostępne są trzy operacje na koncie: wpłata, wypłata oraz obliczenie stanu konta po dodaniu odsetek (w skali rocznej).
Każda transakcja bankowa (przelew) posiada m. in. informację o kontach w niej uczestniczących oraz kwotę.  
Bankomat obsługuje konta niektórych banków. Użytkownik powinien mieć możliwość
zmodyfikowania listy obsługiwanych banków przez dany bankomat. Bankomat wydaje pieniądze z konta, o ile stan konta na to pozwala, w banknotach o określonych nominałach. Użytkownik powinien mieć możliwość zmodyfikowania stanu bankomatu, dotyczy to ilości pieniędzy dostępnych w bankomacie, w jakich nominałach oraz dla każdego nominału w jakiej ilości.

Dla uproszczenia można założyć, że każda w/w operacja, o ile możliwe jest jej wykonanie w danym momencie, powinna mieć skutek natychmiastowy. Dotyczy to aktualnych stanów wszystkich "podmiotów" uczestniczących w operacji.