Java podstawy #4: Czym jest klasa i obiekt?

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: klasy piszemy wielką literą a obiekty małą.

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:

  • zwracające jakiś typ (przypominające funkcję matematyczną)
  • oraz te, które przetwarzają dane, ale nic nie zwracają.

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:

  • dla byte, short, int, long jest to 0
  • dla float I double to 0.0>
  • dla char jest to wartość, ktora kryje się pod elementem zerowym tablicy ASCII, czyli [NULL] (w praktyce jest to pusta wartość)
  • dla boolean, to false

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

Może Ci się również spodoba

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *