Kurs Java

Klasy i programowanie obiektowe

No dobrze to teraz spójrzmy na klasy i obiekty od strony samego kodu. Zacznijmy od definicji. Programowanie obiektowe to takie, w którym do budowy programów używamy klas, na podstawie których powstają obiekty. Wiążą one ze sobą stan (dane przechowywane w polach) oraz działanie (zwykle procedury lub funkcje, a w Javie - metody). Obiektowy program komputerowy wyrażony jest jako zbiór takich obiektów, komunikujących się pomiędzy sobą w celu wykonywania zadań.

No właśnie, tylko co to dokładnie oznaczają te klasy i obiekty w samej Javie?
  • Klasa – napisany przez programistę blok kodu zawierający pola o określonym typie danych oraz metody wykonujące określone operacje.
  • Obiekt – instancja tworzona przez działający program na podstawie napisanej wcześniej klasy.

Klasy w Javie

Można powiedzieć, że tworzymy wzorce (klasy), na bazie których tworzone są gotowe obiekty. Hmm... a jak to wygląda w praktyce? Weźmy sobie przykładowy szkielet klasy, niewypełniony kodem:
public class Item {
    
    // Definicje pól
    
    // Definicje konstruktorów
    
    // Definicje metod
} 
Jak widzicie klasa ma swoją nazwę: Item. Nazwa klasy musi spełniać ograniczenia dotyczące identyfikatorów i zgodnie z konwencjami nazewniczymi powinna zaczynać się od dużej litery i być pisana w tzw. notacji PascalCase, czy UpperCamelCase.

W Javie powinna istnieć tylko jedna klasa główna w każdym pliku i musi być ona publiczna. To, że klasa jest publiczna możemy stwierdzić po tym, że posiada modyfikator dostępu public.

Samą definicję umieszcza się w następujących po nazwie nawiasach klamrowych. Kod definicji (pomiędzy nawiasami klamrowymi) nazywa się ciałem klasy. W tym ciele klasy wprowadziliśmy trzy komentarze oznaczające kolejne sekcje klasy: pola, konstruktory, metody.

Pole, konstruktor, metoda?

Spokojnie - zaraz rozłożymy te pojęcia na czynniki pierwsze:

  • Pole klasy (field) - określa własność (cechę) jaką będzie posiadał obiekt tej klasy. Może to być typ prosty (liczba, znak), ciąg znaków lub obiekt innej klasy. Polem może być także tablica lub lista złożona z dowolnego rodzaju z powyższych elementów.
    public class Item {
        int id;
        String name;
        Category category;
    } 
    
  • Konstruktor - definiuje specjalną operację, która jak sama nazwa wskazuje jest odpowiedzialna za skonstruowanie obiektu (za jego utworzenie).
    <modyfikator dostępu> <nazwa klasy> (<lista parametrów>)  {
            // Instrukcje wykonywane przez konstruktor
    }
    Przykładowy konstruktor:
    public class Item {
    
        int id;
        String name;
        Category category;
        
        public Item (int id, String name, Category category) {
            this.id = id;
            this.name = name;
            this.category = category;
        }    
    } 
    
      Na podstawie ogólnej definicji wyjaśnimy poszczególne określenia w powyższym zapisie:
    • public jest wspomnianym modyfikatorem dostępu. Konstruktor zdefiniowany ze słowem public jest dostępny zewsząd, a więc pozwala na stworzenie obiektu z dowolnego miejsca w projekcie. Tworzenie obiektów jak i modyfikatory dostępu są przez nas omawiane bardziej szczegółowo w kolejnych rozdziałach.
    • Item jest nazwą klasy (nazwa użyta w konstruktorze zawsze musi być taka sama jak nazwa klasy).
    • int id, String name, Category category są przykładowymi parametrami konstruktora. Z powodu, iż nasz konstruktor ma kilka parametrów nazywamy go konsktruktorem wieloargumentowym. Może zdarzyć się tak, że konstruktor nie będzie posiadał w ogóle parametrów, wówczas nazwywamy go konstruktorem bezparametrowym, inaczej bezargumentowym. Przykładem takiego konstruktora jest konstruktor domyślny. Wygląda on tak:
      public Item() {
      
      }
      
      Domyślnego konstruktora nie musimy definiować, ponieważ Java zrobi to za nas. Natomiast jeśli zadekarujemy dowolny konstruktor (obojętnie jaki: bezargumentowy, jednoargumetowy, wieloargumentowy), to domyślny konstruktor nie zostanie utworzony. Więcej w temacie konstruktorów przeczytacie już w kolejnym rozdziale - Tworzenie własnych obiektów.
    • Wiersz this.id = id i dwa kolejne wiersze, oznaczają czynności wykonywane przez konstruktor. W praktyce znaczy to tyle, że do pola klasy id przy pomocy operatora przypisania = (równa się) wstawiana jest wartość parametru. Zauważcie, że w podanym przykładzie parametry oraz pola konstruktora mają te same nazwy. Aby poprawnie przypisać wartości z parametrów do pól obiektu używamy wskaźnika this. To słowo kluczowe, które wskazuje na bieżący obiekt. Gdybyśmy go pominęli wówczas wartości parametrów przypisane zostałyby sobie samym, co w praktyce nic by nam nie dało. Pola obiektu nie miałyby ustawionych wartości.
  • Metoda - blok kodu służący do wykonywania określonych zadań na danych. Metoda może być wywoływana wielokrotnie z innych miejsc programu (w zależności od użytego modyfikatora dostępu). W odróżnieniu od funkcji (znanych z języków proceduralnych), metody zwykle wywoływane są na rzecz konkretnych obiektów (poza metodami statycznymi) . Schematyczna postać definicji metody jest następująca:
    <modyfikator dostępu> <typ zwracanej wartości> <nazwa metody> (<lista parametrów>)  {
            // Instrukcje wykonywane przez metodę
    }
    Przykładowe metody:
    public void setName(String name) {
        this.name = name;
    }
    
    public String getName() {
        return this.name;
    }
    
    • Modyfikator public mówi o tym, że dana metoda może być wywołana z dowolnej innej klasy w projekcie.
    • Typ zwracanej wartości (w naszym przypadku void lub String) określa jakiego typu jest wartość zwracana przez metodę. Zastosowanie określenia void oznacza, że metoda nie zwraca żadnej wartości.
    • Nazwy metod to w tym przypadku setName, getName. Pierwsza metoda będzie ustawiała wartość w stworzonym obiekcie, a druga umożliwi pobranie takiej wartości.
    • Parametr przekazywany do metody w nawiasie - String name. Tak jak w przypadku konstruktora może być wiele takich parametrów oddzielonych przecinkami.
    • Ostatnim fragmentem metody zwracającej jest słowo kluczowe return. Słowo return z angielskiego oznacza "zwróć". Cała komenda ozacza więc: zwróć wartość pola name przechowywanego w obiekcie.

      Appa Notka. Modyfikator dostępu występujący zarówno w przypadku konstruktorów, metod, czy pól klas jest opcjonalny. Nie musimy zawsze go wpisywać. Jednak jeśli go ominiemy, wspomniane elementy będą miały ograniczoną widoczność w projekcie. W naszych przykładach, dodajemy do metod i konstruktorów najczęściej modyfikator public, aby ułatwić Wam naukę podstaw języka, tak byście nie musieli co chwilę zastanawiać się jaki rodzaj modyfikatora powinien zostać użyty w danym miejscu. Na takie zabawy przyjdzie jeszcze czas. Najpierw warto poznać zasady działania języka, a dopiero później wprowadzać do niego ograniczenia, które wymagają wiedzy na odpowiednim poziomie - między innymi tej znajdującej się w rozdziale Modyfikatory dostępu i niedostępowe.
Zbierając w całość powyższą wiedzę, przykładowa, niewielka klasa wygląda tak:
public class Item {

    int id;
    String name;
    Category category;
    
    public Item(int id, String name, Category category) {
        this.id = id;
        this.name = name;
        this.category = category;
    }    
    
    public void setName(String name) {
        this.name = name;
    }
    
    public String getName() {
        return this.name;
    }    
}              
Pewnie nurtuje Was jeszcze dlaczego właściwie klasa zawiera metody get i set tylko dla pola z nazwą? Czy czegoś tu nie brakuje? To jest celowy zabieg. Chcemy przez to pokazać, że klasa nie zawsze musi zawierać takie metody. Oczywiście przydałaby się tutaj przynajmniej metoda get do pobierania id i get do pobierania kategorii. Natomiast nie chcemy na tym etapie wchodzić w detale o zasadach używania setów i getów. Będziemy o tym mówić dokładniej w niedalekiej przyszłości, w osobnym rozdziale.
Linki
https://docs.oracle.com/javase/tutorial/java/concepts/class.html
http://edu.pjwstk.edu.pl/wyklady/ppj/scb/DefKlas/DefKlas.html
Masz pytanie dotyczące tego rozdziału? Zadaj je nam!
Masz pytanie dotyczące prezentowanego materiału?
Coś jest dla Ciebie niejasne i Twoje wątpliwości przeszkadzają Ci w pełnym zrozumieniu treści?
Napisz do nas maila, a my chętnie znajdziemy odpowiednie rozwiązanie.
Najciekawsze pytania wraz z odpowiedziami będziemy publikować pod rozdziałem.
Nie czekaj. Naucz się programować jeszcze lepiej.
kursjava@javappa.com

Stale się rozwijamy, a więc bądź na bieżąco!
Na ten adres będziemy przesyłać informacje o ważniejszych aktualizacjach, a także o nowych materiałach pojawiających się na stronie.
Polub nas na Facebooku:
Nasi partnerzy:
Javappa to również profesjonalne usługi programistyczne oparte o technologie JAVA. Jeśli chesz nawiązać z nami kontakt w celu uzyskania doradztwa bądź stworzenia aplikacji webowej powinieneś poznać nasze doświadczenia.
Kliknij O nas .