Programowanie 2 - Ćwiczenia 6


Poprzednie Następne
Temat: Pisanie programu obiektowego - od projektu do kodu.


Od tej pory przez kilka kolejnych zajęć będziemy rozwijać projekt oprogramowania symulującego pewną rzeczywistość wybraną podczas zajęć. Poniżej został przedstawiony schemat pracy grupy o 9:45, a po nim schemat pracy grupy o 11:30 (różni się tylko tematem projektu).

Grupa 9:45

Wskutek małej aktywności grupy wybrany został temat projektu Księgarnia

Księgarnia

Podczas zajęć ustalono, że księgarnia ma zawierać pola o następujących typach:
private String adres;
private String nazwa;
private int liczbaKsiazek;
private int rokZalozenia;
private String nazwaWlasciciela;
private int liczbaPracownikow;
Słowa kluczowe private oznaczają, iż wszystkie pola tej klasy będą widoczne tylko wewnątrz jej. W przeciwieństwie do pól i metod oznaczonych słowem kluczowym public, do których można się dostać z każdego miejsca w programie.

Konstruktor

Konstruktor to metoda, przy pomocy której tworzy się nowe obiekty danej klasy. Konstruktor jest zawsze metodą publiczną, gdyż obiekt musi być móc utworzony poza tym obiektem, gdyż inaczej nigdy nie mógłby powstać. Konstruktor to metoda o takiej samej nazwie jak klasa.

W przypadku Księgarni konstruktor powinien na wejściu przybierać tylko te parametry, które trzeba ustalić, aby móc stworzyć nową księgarnię. Są to: adres, nazwa, rok założenia i nazwa właściciela. Przyjmujemy, że podczas tworzenia księgarni liczba książek oraz liczba pracowników wynosi 0. Zatem nagłówek konstruktora może być następujący:
public Ksiegarnia(String adres_in, String nazwa_in, int rokZalozenia_in, String nazwaWlasciciela_in) 

Get'y i Set'y

Ponieważ, jak już zostało wspomniane, wszystkie pola w klasie są prywatne, zatem nie można z zewnątrz zmieniać, ani nawet pobierać wartości atrybutów obiektów. Jest to oczywiście sytuacja, która może być dość uciążliwa i dlatego w paradygmacie programowania obiektowego pojawiają się tzw. metody dostępowe, czyli inaczej nazywa Get'ami i Set'ami. Są to metody przy pomocy których można pobrać lub ustawić wartości pól, nie robiąc z nimi nic poza tym: W klasach może się zdarzyć, że nie wszystkie pola możemy chcieć udostępnić do odczytywania bądź dowolnego ustawiania spoza obiaktu. W przypadku Księgarni chcemy mieć możliwość pobrania akurat wartości wszystkich pól, natomiast dowolnie zmieniać chcemy jedynie pola adres, nazwa i nazwaWlasciciela. Pozostałe rzeczy będą się zmieniać przy pomocy innych metod (liczba książek, liczba pracowników), bądź będą niezmienne (rok założenia).
Eclipse, podobnie jak praktycznie wszystkie edytory do tworzenia oprogramowania, mają wbudowany mechanizm automatycznego tworzenia metod get i set. Aby to zrobić należy kliknąć prawym przyciskiem myszy na nazwę klasy, a potem Source->Getters and Setters. Po wybraniu pojawi się okienko, w którym trzeba wyklikać, do których pól chcemy stworzyć jakie metody dostępowe.

Metody

Podczas zajęć ustalono, że do księgarni, na tym etapie rozwoju aplikacji, potrzebne będą 3 metody, których opis i nagłówki znajdują się poniżej:

Uruchomienie programu

Do tej pory tworzona była rzeczywistość księgarni, która była jedynie opisem tego, co w księgarni jest i co się może w niej dziać. Oczywiście w tej klasie pod żadnym pozorem nie może się znaleźć metoda main, która uruchamia program. Do stworzenia tej metody musi zostać utworzona oddzielna klasa, która będzie odpowiedzialna za uruchamianie programu.

W funkcji main powinny się znaleźć następujące rzeczy: Szkielet kodu może wyglądać następująco:
public static void main(String[] args) throws IOException 
{
  java.io.BufferedReader klawiatura = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
  
  System.out.println("Podaj nazwę Księgarni:");
  String nazwa = klawiatura.readLine();
  System.out.println("Podaj rok założenia:");
  int rok = Integer.parseInt(klawiatura.readLine());
  //(...) sczytanie pozostałych zmiennych
  Ksiegarnia nowaKsiegarnia = new Ksiegarnia(??? parametry wejściowe konstruktora ???);
}

Zadanie 6 (dla osób z grupy o 9:45)

Napisz program realizujący wszystko, co zostało do tej pory opisane

Grupa 11:30

Podczas zajęć grupa na temat projektu wybrała symulację życia Żachwy (tutaj nieco więcej na ich temat). Cechą charakterystyczną żachw jest to, że jako larwa pływają sobie swobodnie w morzu, a po znalezieniu odpowiedniego miejsca przytwierdzają się do podłoża, po czym zjadają własny mózg i zaczynają się rozmnażać.

Żachwa

Podczas zajęć ustalono, że Żachwa ma zawierać pola o następujących typach:
private int wysokosc;
private int szerokosc;
private String nazwaWlasciciela;
private boolean przytwierdzenie; // true = przytwierdzony, false = nieptrzytwierdzony
private double iloscMozgu; //0 = brak mózgu, 1 = cały mózg
private int liczbaDzieci;
Słowa kluczowe private oznaczają, iż wszystkie pola tej klasy będą widoczne tylko wewnątrz jej. W przeciwieństwie do pól i metod oznaczonych słowem kluczowym public, do których można się dostać z każdego miejsca w programie.

Konstruktor

Konstruktor to metoda, przy pomocy której tworzy się nowe obiekty danej klasy. Konstruktor jest zawsze metodą publiczną, gdyż obiekt musi być móc utworzony poza tym obiektem, gdyż inaczej nigdy nie mógłby powstać. Konstruktor to metoda o takiej samej nazwie jak klasa.

W przypadku Żachwy konstruktor powinien na wejściu przybierać tylko te parametry, które trzeba ustalić, aby móc stworzyć nową Żachwę. Są to: wysokość, szerokość i nazwa właściciela. Przyjmujemy, że podczas tworzenia Żachwy jest ona nieprzytwierdzona, ma cały mózg oraz nie ma dzieci. Zatem nagłówek konstruktora może być następujący:
public Zachwa(int wysokosc_in, int szerokosc_in, String nazwaWlasciciela_in) 

Get'y i Set'y

Ponieważ, jak już zostało wspomniane, wszystkie pola w klasie są prywatne, zatem nie można z zewnątrz zmieniać, ani nawet pobierać wartości atrybutów obiektów. Jest to oczywiście sytuacja, która może być dość uciążliwa i dlatego w paradygmacie programowania obiektowego pojawiają się tzw. metody dostępowe, czyli inaczej nazywa Get'ami i Set'ami. Są to metody przy pomocy których można pobrać lub ustawić wartości pól, nie robiąc z nimi nic poza tym: W klasach może się zdarzyć, że nie wszystkie pola możemy chcieć udostępnić do odczytywania bądź dowolnego ustawiania spoza obiaktu. W przypadku Żachwy chcemy mieć możliwość pobrania akurat wartości wszystkich pól, natomiast dowolnie zmieniać chcemy jedynie pola wysokość, szerokość i nazwę właściciela. Pozostałe rzeczy będą się zmieniać przy pomocy innych metod (przytwierdzenie, ilość mózgu, liczba dzieci).
Eclipse, podobnie jak praktycznie wszystkie edytory do tworzenia oprogramowania, mają wbudowany mechanizm automatycznego tworzenia metod get i set. Aby to zrobić należy kliknąć prawym przyciskiem myszy na nazwę klasy, a potem Source->Getters and Setters. Po wybraniu pojawi się okienko, w którym trzeba wyklikać, do których pól chcemy stworzyć jakie metody dostępowe.

Metody

Podczas zajęć ustalono, że do Żachwy, na tym etapie rozwoju aplikacji, potrzebne będą 3 metody, których opis i nagłówki znajdują się poniżej:

Uruchomienie programu

Do tej pory tworzona była rzeczywistość Żachwy, która była jedynie opisem tego, czym jest Żachwa i co się z nią może dziać. Oczywiście w tej klasie pod żadnym pozorem nie może się znaleźć metoda main, która uruchamia program. Do stworzenia tej metody musi zostać utworzona oddzielna klasa, która będzie odpowiedzialna za uruchamianie programu.

W funkcji main powinny się znaleźć następujące rzeczy: Szkielet kodu może wyglądać następująco:
public static void main(String[] args) throws IOException
{
  java.io.BufferedReader klawiatura = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));

  System.out.println("Podaj wysokość żachwy");
  int wysokosc = Integer.parseInt(klawiatura.readLine());
  System.out.println("Podaj właściciela żachwy");
  String nazwa = klawiatura.readLine();
  //(...) sczytanie pozostałych zmiennych
  Zachwa nowaZachwa = new Zachwa(??? parametry wejściowe konstruktora ???);
}

Zadanie 6 (dla osób z grupy o 11:30)

Napisz program realizujący wszystko, co zostało do tej pory opisane