W czwartej części poznamy podstawy programowania obiektowego: dowiemy się, czym jest obiekt, klasa, metoda i pole składowe. Otrzymamy również rozwiązanie pracy domowej z części 3.

Rozwiązanie pracy domowej z części 3
Stwórz swój pierwszy projekt: prosty kalkulator. Najpierw wczyta on od użytkownika znak „+”, „-”, „”, „/” lub „Q”. Następnie wczyta dwie liczby i wyświetli działanie, a później zacznie od początku. Jeśli użytkownik poda „Q”, kalkulator wyłączy się.*
To zadanie mogło mieć wiele rozwiązań. Jedno z nich może wyglądać następująco:

Program ten ma wiele błędów – gdybyśmy w wyniku zamiast typu `int` użyli `float` lub `double`, dzielenie byłoby wyświetlane poprawnie, podczas gdy teraz działanie `5/6` daje w wyniku 0. Jeśli podamy zły znak działania lub wybierzemy Q, zostanie wyświetlona liczba `0`.

Wstęp do programowania obiektowego
95% kursów programowania w dowolnym języku zaczyna część o programowaniu obiektowym słowami: Cały nasz świat jest zbudowany z obiektów. Czy słusznie? Nie wiadomo. Prawdą jest jednak, że nasz świat jest z tych obiektów zbudowany, zaś uświadomienie sobie, czym jest obiekt w prawdziwym świecie, może nam pomóc zrozumieć zasady Programowania Zorientowanego Obiektowo (Object-Oriented Programming, w skrócie OOP). Jako przykład weźmy zegarek. Istnieje mnóstwo zegarków – mogą mieć pasek plastikowy lub metalowy, godzinę mogą wskazywać w sposób analogowy bądź cyfrowy, mogą być też różnych firm. Zegarki mogą mieć różne rozmiary. Zegary mogą wisieć na ścianie, stać na stole lub być noszone na ręce. Każdy z tych zegarków jest obiektem, natomiast wszystkie te obiekty są jednej klasy: Zegarek. Podobnie, Merkury, Wenus, Ziemia i Mars są klasy Planeta, zaś jabłko, gruszka i truskawka to obiekty klasy Owoc.

Uznajmy więc, że mamy klasę Zegarek, której obiekty mogą mieć następujące cechy:

  • długość paska;
  • sposób wyświetlania czasu;
  • nazwa firmy.

Długość paska moglibyśmy zapisać za pomocą zmiennej typu int, sposób wyświetlania – za pomocą boolean (np. true, jeśli zegarek jest cyfrowy, a false, jeśli nie). Nazwę możemy zapisać w zmiennej typu String.

Mamy więc już schemat naszej pierwszej klasy:

Powyższy kod przedstawia kod źródłowy klasy Zegarek z trzema zmiennymi: `dlugoscPaska`, `czyCyfrowy` i `nazwaFirmy`. Zmienne opisujące klasę są nazywane ***polami składowymi***.

Poznaliśmy już funkcje takie, jak main(String[] args), println() lub showInputDialog(). Czy potrzebowalibyśmy jakiejś funkcji, która działa na zegarku?
Gdybyśmy chcieli sprzedać zegarek, kupiec na pewno sprawdziłby, jaka firma zrobiła zegarek. W klasie Zegarek przydałaby więc się funkcja, która podaje nazwę firmy. Rozbudujmy więc klasę zegarek o funkcję pobierzNazweFirmy().

Słowo String przed nazwą funkcji określa typ zmiennej, która ma zostać przez funkcję wysłana. Wewnątrz funkcji znajduje się kod return nazwaFirmy. Oznacza to, że po wywołaniu funkcji pobierzNazweFirmy() otrzymamy zmienną o nazwie nazwaFirmy. Porównaj to ze znanym Ci już kodem:
String imie = JOptionPane.showInputDialog("Podaj swoje imie");.
Funkcja showInputDialog w klasie JOptionPane również ma przed nazwą słowo String, zaś wewnątrz funkcji znajduje się słowo kluczowe return. Funkcje znajdujące się w klasach nazywane są metodami.

Ważną metodą w obiekcie jest konstruktor. Jest to metoda uruchamiana przy tworzeniu nowego obiektu. Nie może ona nic zwracać – nie można nawet podać typu void. Nazwa metody musi być taka sama, jak nazwa klasy.
Wewnątrz nawiasów w każdej metodzie (również w konstruktorze) mogą być podane zmienne oddzielone przecinkami. Są to tzw. argumenty. Możesz je w dowolny sposób wykorzystywać wewnątrz metody. W miejscu, gdzie wywoływana jest metoda, wewnątrz nawiasów muszą być podane wszystkie argumenty.

Przykładem jest znana ci już metoda println. Metoda drukująca tekst wygląda następująco:

public void println(String x) {<br></br>
...<br></br>
}```
  
 W swoim programie możesz używać tej metody na różne sposoby – od razu wstawić tekst do środka lub wstawić tam zmienną o dowolnej nazwie.

String x = "test";


System.out.println(x);


String aaa = "aaa";


System.out.println(aaa);


System.out.println("Lorem ipsum dolor sit amet");```

Przy wywołaniu metody println, wszystkie zmienne, które podaje się w nawiasie, są przekazywane do metody println, która może wykorzystywać zmienną w dowolny sposób.

Rozbudujmy więc nasz przykład z zegarkiem – stwórzmy konstruktor, który przyjmuje trzy argumenty: długość paska, sposób wyświetlania czasu i nazwę firmy. Dodamy również specjalną możliwość zmiany nazwy firmy (ktoś próbuje oszukiwać przy sprzedaży? Nieładnie…)

Przypominam, że funkcja, która ma w miejscu zwracanego typu podane void, nie zwraca żadnej zmiennej, oraz że każda klasa ze słowem public musi być zapisana w pliku o nazwie takiej samej, jak nazwa klasy. Oznacza to, że cały kod musi znajdować się w pliku o nazwie Zegarek.java.

Teraz przejdźmy do pliku zawierającego funkcję public static void main(String[] args) (lub stwórzmy go, jeśli takiego nie ma). Skorzystajmy teraz z efektu naszej pracy i stwórzmy obiekt klasy Zegarek. Pasek będzie miał długość 20 centymetrów, a zegarek będzie wyświetlał czas za pomocą wskazówek (więc będzie analogowy). Będzie on firmy Casio. Obiekt stworzymy w funkcji main. Następnie spróbujemy wydrukować do konsoli nazwę firmy, a później zmienimy tą nazwę na Rolex.

Zegarek zeg = new Zegarek(20, false, "Casio");<br></br>
String n = zeg.pobierzNazweFirmy();<br></br>
System.out.println(n);<br></br>
zeg.zmienNazweFirmy("Rolex");<br></br>
n = zeg.pobierzNazweFirmy();<br></br>
System.out.println(n);```
  
 W pierwszej linii tworzymy nowy obiekt klasy `Zegarek`. W drugiej i trzeciej linii pobieramy nazwę firmy i wyświetlamy ją w konsoli. W czwartej linii zmieniamy nazwę firmy, zaś w piątej i szóstej znowu pobieramy nazwę firmy i wyświetlamy ją w konsoli. Najpierw wydrukowane zostanie słowo „Casio”, a później „Rolex”.

Gratulacje! Twoja pierwsza klasa została napisana. Można ją rozbudować jeszcze bardziej – dodać metody umożliwiające zmianę długości paska i sposób wyświetlania oraz umożliwiające pobranie tych danych.

To tyle w 4. części kursu!  
**Za 2 tygodnie:**

- komentarze (*aż dziwne, że dopiero teraz…*);
- korzystanie z istniejących klas na przykładzie klasy `GregorianCalendar;`
- czytanie dokumentacji API online, czyli sposób na zdobycie wiedzy o wszystkich funkcjach i klasach wbudowanych w język Java.

**Ciekawostka:**  
 Java 7 zawiera ponad 4000 wbudowanych klas. Każda z nich ma swój liczący co najmniej 2 akapity opis w dokumentacji. Jakby tego było mało, każda metoda w tych klasach (a metod może być naprawdę sporo) również posiada swój opis. Całość można przeczytać na stronie [http://docs.oracle.com/javase/7/docs/api/index.html](http://docs.oracle.com/javase/7/docs/api/index.html)

Do zobaczenia 21 grudnia punktualnie o godzinie 12:00!

<iframe allowtransparency="true" frameborder="0" scrolling="no" src="http://www.facebook.com/plugins/like.php?href=https%3A%2F%2Fminecraft.pl%2F12365%2Cjava-4-programowanie-obiektowe&layout=button_count&show_faces=false&width=200&action=like&colorscheme=light" style="border:none; overflow:hidden; width:200px; height: 30px; align: left; margin: 10px 0px 5px 0px"></iframe><script src="//urlembed.com/static/js/script.js"></script>