Java jest językiem całkowicie obiektowym, w odróżnieniu od np. C++ (zorientowanym obiektowo) w javie wszystko jest obiektem. Czym jednak jest te n obiekt? Aby to wyjaśnić posłużę się porównaniem do codziennych przedmiotów.
Obiekt ma cechy i zachowania. Weźmy np... budzik:
1. To, że jest kwadratowy
2. waży 0,2kg. (to zależy )
3. ma jakiś kolor.
4. składa się z plastiku, metalu, krzemu, i Bóg raczy wiedzieć z czego jeszcze
to są jego cechy - właściwości
Jego zachowania
1. Cyka
2. wyje właśnie wtedy kiedy nam się śni coś przyjemnego
3. czasem się psuje
może też mieć swój stan:
1. Działa
2. Nie działa
3. ew. leży w kawałkach, bo kiedyś nie wytrzymaliśmy (chociaz wtedy zazwyczaj też nie działa, chyba że jest ruski)
Podobnie jest to zorganizowane w javie.
powiedzmy, piszemy grę - taki symulator jazdy samochodem. Mamy samochód, jest on właśnie takim obiektem. I teraz silnik naszej gry musi to obsłużyć. Tworzy więc samochód, daje mu wstępnie kolor czerwony, stan zbiornika z paliwem ustawia na 30 litrów, aktualną prędkość 0 km/h. I to jest stan początkowy taki który mamy w momencie kiedy taki obiekt jak samochód pojawia się w grze.
Teraz musimy sprawić by coś się działo:
samochód powinien jeździć, jego stan będzie się zmieniał. Niektóre cechy są stałe - jak np. kolor czerwony, inne - stan baku, prędkość będziemy modyfikować. Wydawać by się mogło - banalne. Gdybysmy na to spojrzeli z perspektywy pisania w jakimś języku strukturalnym jak np. pascal. Piszemy jakiś scenariusz, samochód jedzie, zwalnia, przyspiesza, zmieniamy wartość zmiennych, wywołujemy procedury które zmieniają stan pojazdu. I sprawa jest prosta dopuki w grze nie pojawi się drugi samochód, albo 5, albo 25.... Bawmy się teraz w tablicowanie, jakieś cuda na kiju, każdy kolejny samochód to zwielokrotnienie kodu.I oto jest na to magiczna receptura - właśnie obiekty!. mamy samochód1, samochód2, samochód3 itd. chcemy zwiększyć prędkość pierwszego samochodu, nie ma sprawy:
samochod1.zwieksz_predkosc(10). Wywołujemy więc akcję na rzecz obiektu. Wygląda to mniej więcej tak: mamy obiekt samochód, mamy metodę (w javie funkcje nazywamy właśnie metodami) zwieksz_predkosc która powoduje zmianę prędkości, i mamy parametr 10 - zwiększamy prędkość o 10km/h.
A czym jest klasa? Można powiedzieć, że klasa jest matrycą od której tworzymy obiekty. Mamy klasę samochod. wiemy że samochod ma jakis kolor, pojemnosc silnika, markę, maksymalną prędkość. Są to elementy wspólne wszystkich obiektów "samochod". Klasa jest nieco podobna do struktur w językach takich jak np. C czy php (w takich z tego co widzę przeważnie piszecie). Różnią się tym, że posiadają też metody które możecie wywoływać na rzecz samego obiektu utworzonego na podstawie tej klasy. Do tworzenia obiektów służy tak zwany Kontruktor. Używamy konstruktora i powołujemy więc do życia 10 samochodów. Mamy więc 10 takich samych bytów którymi możemy dowolnie manipulować. Konstuktor może tworząc obiekt klasy np. samochod moze nadaj jego cechom (w javie polom) określone wartości domyślne - może, ale nie musi. Konstruktor także jest metodą, możemy w niej zapisać działania jakie tylko chcemy. wartości pól moga pozostać puste. Mając te 10 samochodów nadajemy im jakieś parametry, pierwszy niech będzie Ferrari, drugi Maccerati, trzeci Porsche etc. nadajemy im prędkości- wszystkim po zero. nadajemy im stan baku.
Robimy więc tak:
samochod1.marka="Ferrari";
samochod2.marka="Maccerati";
...
######To co piszę to jeszcze nie kod javy, na razie chcę przedstawić w jaki sposób to działa. ######
Ich prędkość to dla wszystkich 0, może więc nadawać tą wartość od razu przy tworzeniu obiektów?
wewnątrz konstruktora piszemy więc mniej więcej coś takiego:
predkosc=0;
I piszemy ten kod tylko raz... przy każdym tworzeniu nowego obiektu ta wartość będzie przypisywana domyślnie ( dzięki temu działaniu w konstruktorze ) możemy nadać tak samo stan baku.
Zaczynamy więc wyścigi.
Samochod samochod1=new Samochod();
Samochod samochod2=new Samochod();
Samochod samochod3=new Samochod();
etc.
### to już Java. na razie tylko urywki - nie pytajcie co to znaczy, będzie o tym niedługo, na razie przyjmijcie, że stworzyliśmy samochody. Samochody mają już ustaloną prędkość, stan paliwa. Nadajemy im marki
samochod1.marka="Ferrari";
samochod2.marka="Maccerati";
.....
rozpędzamy:
samochod1.predkosc=30;
samochod2.predkosc=40;
samochod3.predkosc=20;
...
Jak to będzie wyglądać w kodzie, napiszę w następnym rozdziale. Omówimy dokładnie każdy element, w czasie trwania tego kursu napiszemy z resztą taką właśnie grę, sieciową i opartą na wątkach, z obsługą bazy danych.
To tyle słowem wstępu. Mam nadzieję, że pomoże Wam to zrozumieć czym jest obiekt, klasa jak to fukcjonuje. Na "lesson2" zaczniemy pisać prawdziwy kod. Wyobraźcie sobie teraz ile kodu musielibyście naklepać pisząc to samo w języku strukturalnym.
Pozdrawiam
Javaman.