Dziś jak nazwa wpisu wskazuje porozmawiamy sobie o trzech rzeczach, pakietach, klasach, oraz o podstawowych typach danych. Tematy same w sobie są dość obszerne, i gdyby skupić się na detalach, na każdy z tych tematów można by poświęcić osobny wpis ( lub kilka wpisów 😉 ).  W tym wpisie postaram się skupić na najważniejszych rzeczach związanych z każdym tematem. Zaczynamy!

01. Pakiety

Na pierwszy ogień idą pakiety. Najprostszym porównaniem pakietów są foldery na naszym komputerze. Do czego służą? Przede wszystkim do organizacji naszych „plików” (klas), jeśli mamy przejrzystą i czytelną hierarchię pakietów, w prosty sposób możemy znaleźć dokładnie co chcemy, lub nawet bez zaglądania do środka możemy zgadnąć co jest w środku. Pakiet, tak jak i folder obwarowany jest pewnymi podobnymi zasadami, np. w  danym pakiecie tak samo jak w folderze, możemy mieć tylko jeden plik z taką samą nazwą, jednak nic nie stoi na przeszkodzie aby mieć taką samą nazwę plików w różnych folderach.

Prawdziwe oprogramowanie składa się z setek, lub nawet tysięcy klas, ich dobra organizacja ułatwia sprawne poruszanie się po projekcie, dzięki czemu łatwiej jest wszystko utrzymać w porządku 😊

Przeanalizujmy sobie przykładową strukturę pakietów:

Wszystko zaczyna się od src (source), jest to folder który zawiera wszystkie nasze pakiety. W świecie Javy przyjęło się że zaczynamy tworzyć pakiety od odwróconej nazwy domeny, w naszym przypadku jest to pl.technologicznasowa, nie jest to żaden przymus, po prostu w taki sposób się przyjęło, jednak mamy kompletną dowolność (link do dyskusji na stackoverflow na ten temat). Chciałbym zwrócić uwagę że są to dwa osobne pakiety pl oraz technologicznasowa, jako że pakiet, pl zawiera nic innego tylko jeden inny pakiet, IDE prezentuje to w jednej linii, a pakiety oddzielone są kropką. W pakiecie technologicznasowa mamy jedną klasę Main, która jest punktem startowym naszego programu (zawiera metodę public static void main ) oraz dwa pakiety, database oraz model które zawierają inne klasy.

02. Klasy, obiekty oraz podstawowe typy danych

W krótkim zdaniu można powiedzieć że klasa jest szablonem z którego tworzymy obiekty. Jednak jest to dość złożony temat więc postaram się go nieco bardziej przybliżyć 😊.

W prawdziwym świecie mamy wiele obiektów które są tego samego typu, np. samochody. Dla uproszczenia załóżmy że każde auto posiada tylko cztery charakteryzujące właściwości, takie jak, marka, model, rok produkcji, pojemność silnika oraz trzy funkcjonalności, start, stop oraz informacje producenta.

W tym momencie chciałbym się zatrzymać aby omówić w dużym skrócie, podstawowe typy danych. W Javie znajduje się naprawdę wiele typów danych które służą do przechowywaniu różnego rodzaju informacji, np. String służy to przechowywania napisów, natomiast Integer do przechowywania liczb całkowitych, natomiast Double jest jednym z typów do przechowywania liczb zmiennoprzecinkowych np. 3.14

W Javie istnieje również osiem typów prostych byte, short, int, long, float, double, boolean oraz char. Typ prosty nie jest obiektem, przedstawia po prostu surową wartość (np liczbową).  Każdy z typów prostych ma swój odpowiednik obiektowy np. int => Integer.

Nasza klasa może zatem wyglądać w ten sposób:

public class Car {

    private String brand;
    private String model;
    private Integer productionYear;
    private Double engineCapacity;

    //Konstruktor
    public Car(String brand, String model, Integer productionYear, Double engineCapacity) {
        this.brand = brand;
        this.model = model;
        this.productionYear = productionYear;
        this.engineCapacity = engineCapacity;
    }

    public void start() {
        System.out.println("Silink zostal wlaczony");
    }

    public void stop() {
        System.out.println("Silnik zostal wylaczony");
    }

    public void manufacturerInformation() {
        System.out.println("Marka: "+ brand +" Model: "+model+" Rok: "+ productionYear +" Moc: "+ engineCapacity);
    }

}

Klasa posiada wszystkie pola które zostały wcześniej wymienione, czyli marka, model, rok produkcji oraz pojemność silnika, trzy metody start, stop oraz informacje producenta które wypiszą na konsolę jakieś informacje, oraz konstruktor. Konstruktor jest specjalną metodą która ma nazwę taką samą jak nazwa klasy, oraz jak sama nazwa wskazuje służy do stworzenie obiektu danej klasy 😊

Zobaczmy jak możemy wykorzystać naszą klasę:

public class Main {
    public static void main(String[] args) {

        Car car1 = new Car("Honda", "Civic", 2015, 1.8);
        Car car2 = new Car("Volkswagen", "Passeratii", 1998, 2.2);

        car1.manufacturerInformation();
        car2.manufacturerInformation();
    }
}

Używając naszej klasy Car, tworzymy przy pomocy konstruktora dwa obiekty, które przypisujemy do zmiennych car1 oraz car2 oraz wywołujemy na nich metodę manufacturerInformation() która wypisze wszystkie informacje auta na konsolę.

Podsumowanie: Z tej lekcji najważniejszymi rzeczami jakie chciałbym aby zostały zapamiętane:
Pakiety – można o nich myśleć jak o folderach, służą głównie do organizacji naszych klas.
Klasy oraz Obiekty – Klasa jest szablonem z którego tworzy się obiekty.

Tak jak wspomniałem na samym wstępie każdy z tych tematów które dziś poruszyłem dotyka tylko podstawy, jednak jest to niezbędna podstawa która pozwoli Ci przejść bez większych problemów przez kolejne lekcje w kursie!