Site icon Java blog

Java #4: klasy i obiekty. Czym są?

java class object

Klasy i obiekty

Klasa to taki kontener w programie, zawierający odpowiednie struktury i implementacje algorytmów (sposoby ich działania) z nimi związanych, które łączą się w logiczną całość. Skomplikowane? Tak tylko Ci się wydaje. Klasą może być wszystko, co w rzeczywistym świecie, odzwierciedla potrzeby biznesowe. Jeśli byśmy chcieli zaprogramować giełdę samochodów, prawdopodobnie potrzebowalibyśmy takich klas jak: samochód, klient, sprzedawca, zamówienie, itp. Obiektem z kolei nazywamy każdy utworzony egzemplarz na podstawie klasy, np. obiektem klasy samochód będzie FIAT, Audi lub Toyota.

Stylistyka nazw własnych

W Javie nazwy własne piszemy notacją zwaną Camel Case. Oznacza to, że zlepiamy ze sobą nazwy, tak że przypominają trochę garb wielbłąda. Na przykład obiekt, który będzie reprezentował Audi Mariusza można zapisać jako: mariuszNewAudi. Zasady pisania klas i obiektów są bardzo proste: nazwy klasy powinna zaczynać się od wielkiej litery, natomiast nazwa obiektu od małej.

Wszystkie nazwy własne w programowaniu powinny być pisane po angielsku. Wynika to stąd, że słowa kluczowe każdego języka programowania są zdefiniowane właśnie w tym języku. Ponieważ Twój kod powinien być jak najbardziej czytelny, to staraj się używać konkretnych nazw występujących w słowniku języka angielskiego. Unikaj też niepotrzebnych skrótów oraz krótkich nazw, różniących się jedynie numerycznym sufiksem (np. x1, x2, tp.).

Na przykład:

public class Car {
  Integer id;
  String model;
  int madeYear;
  double engineCapacity;
}

Funkcje w klasie

Wiesz już, że w klasie można pisać zmienne. Jednak celem klasy nie jest jedynie przechowywanie struktur, ale także opisywanie ich zachowania. Do tego służą metody.
Metody dzielą się na te, które:

Przykład metody, która zwróci wartość auta:

int countCarValue(int firstValue, int lostValueEstimation) {
  return firstValue - lostValueEstimation;
}

Każda metoda może, ale nie musi, zawierać dowolną liczbę argumentów (w tym przypadku są to: firstValue i lostValueEstimation). Należy je definiować w okrągłych nawiasach wraz z ich oczekiwanym typem. Metoda, która zwraca wartość, przed swoją nazwą musi zawierać typ jaki ma zwrócić.
A teraz spójrz na metodę, która nic nie zwraca:

void showMeCar() {
  System.out.println("Car model is: " + model);
}

Jej wynikiem będzie wyświetlenie na ekran napisu ‘Car model is: “ /* nazwa modelu pobrana z pamięci */
W klasie możemy mieć tyle zmiennych i metod ile chcemy. Nie ma tez obowiązku deklarowania ich w jakiś odpowiednich sekcjach kodu, chociaż dobrą praktyką jest umieszczanie wszystkich zmiennych klasowych na początku, a dopiero później konstruktorów i metod.


Czym jest ów konstruktor? To specjalna metoda, która zajmuje się jedynie przypisywaniem zmiennym klasowym (które zwane są również polami) odpowiednich wartości przy tworzeniu obiektu (czyli wtedy gdy piszemy new). Dopiero, gdy zainicjalizujemy odpowiednie pola, możemy wywołać metody klasy, aby na nich działać. Dlatego tak ważne jest, aby tworzyć konstruktor. Co się stanie, gdy go jednak nie napiszemy? Na szczęście nic poważnego, ponieważ Java sama za nas utworzy domyślny, pusty konstruktor.
Przykład:

Car(Integer _id, int _madeYear) {
  id = _id;
  madeYear = _madeYear;
}

Utworzenie obiektu wygląda teraz tak:

Car car = new Car(1, 1999);

Jak wywołać metodę?

car.countCarValue(50000, 25000);
car.showMeCar();

Wartości domyślne

Pierwszy przykład zwróci liczbę 25000, a drugi wyświetli w konsoli napis “Car model is: null”. Co to jest null? Jest to informacja, że referencja danej zmiennej nie wskazuje na żadną wartość w pamięci (mówiąc prosto jest pusta). Każde pole typu obiektowego jest domyślnie nullem, póki je nie zainicjalizujesz.

Inne wartości domyślne:

Także, aby poprawić nasz program, należy wpierw zainicjalizować pole (np. w konstruktorze) i dopiero użyć metody showMeCar(). To bardzo ważne, żeby zawsze pamiętać o inicjalizacji pól przed ich użyciem. Gdy raz taka zmienna zostanie zdefiniowana, można ją dowolnie używać/modyfikować w każdym innym miejscu klasy (stąd nazwa klasowa), w przeciwieństwie do zmiennych zadeklarowanych w metodzie (zwanych lokalnymi), których długość życia ogranicza się tylko do danej metody.

Link do kodu z tej lekcji: https://github.com/developeronthego/java-basics/tree/main/src/main/java/basics/lesson4

Typy referencyjne: https://developeronthego.pl/java-podstawy-2-typy-referencyjne-podstawy

Exit mobile version