Klasy i obiekty

klasa

Pojęcie klasy „zaokrągla” nieco definicję obiektu – klasą nazywamy sposób zapisu obiektu (połączenie danych – struktury obiektu – oraz funkcji do ich obsługi).

Dla laika jako obiekt możemy przedstawić dowolny, obecny w świecie rzeczywistym obiekt – idąc śladami Isaaca Newtona np. jabłko :).

Gdybyśmy chcieli stworzyć klasę opisującą jabłko, wyglądałaby ona np. tak:

 

JAVA

class jablko {

        private double waga;
        public int ocena_kwasnosci;

 

        public jablko() {
                this.waga = 0.0;
                this.ocena_kwasnosci = 0;
        }

 

        public void setWaga(double wagaNowa) {
                this.waga = wagaNowa;
        }

 

        public double getWaga() {
                return this.waga;
        }

}

C++

class jablko {

    private:

        double waga;

 

    public:
        int ocena_kwasnosci;

 

 

        jablko() {
                this.waga = 0.0;
                this.ocena_kwasnosci = 0;
        }

 

 

        void setWaga(double wagaNowa) {
                this.waga = wagaNowa;
        }

 

 

        double getWaga() {
                return this.waga;
        }

 

}

Zarówno w języku C++ jak i Java definicja klasy wygląda podobnie.

 

Private i Public

C++ skraca sposób zapisu elementów klasy (zmienne, funkcje) przez wydzielenie sekcji private (prywatne elementy, dostępne wyłącznie w obrębie klasy) i public (elementy publiczne, dostępne także na zewnątrz klasy). Dzięki takiemu podejściu nie musimy za każdym razem definiować dostępności funkcji czy zmiennej.

Java do zagadnienia ograniczenia dostępu do danych podchodzi w inny sposób – zmienne i funkcje prywatne oraz publiczne określane są bezpośrednio przed typem zmiennej/typu zwracanych danych przez funkcję. Wpływa to z kolei na czytelność długich klas, gdzie bez potrzeby wykorzystywania specjalnych IDE na pierwszy rzut oka widzimy, czy zmienna/funkcja jest prywatna lub publiczna.

 

Konstruktory i destruktory

Klasa jest tworem „prawie doskonałym”. Wykorzystując funkcje nazywane konstruktorami i destruktorami możemy wpłynąć na właściwości obiektu podczas jego tworzenia (rezerwacji pamięci).

Konstruktor jest więc pierwszą wykonywaną funkcją na danej klasie czyli przygotowuje obiekt do wykonania poszczególnych funkcji – np. zerowanie zmiennych typu integer (liczba całkowita). Konstruktor stosowany jest m.in. w językach C++, C#, Java, PHP.

Java

        public jablko() {
                this.waga = 0.0;
                this.ocena_kwasnosci = 0;
        }

C++

        jablko() {
                this.waga = 0.0;
                this.ocena_kwasnosci = 0;
        }

 

Destruktor jest ostatnią funkcją wykonywaną na danej klasie, która pozwala na sprzątanie po działaniach obiektu (np. rezerwacji pamięci). Destruktor występuje m.in. w językach C++, C# oraz PHP.

W języku Java odstępuje się od tworzenia destruktorów ze względu na właściwość wirtualnej maszyny Javy o nazwie Garbage Collector (odśmiecacz). Dzięki Garbage Collector programista nie musi dbać o zwolnienie zasobów, gdyż zostaną one zwolnione automatycznie przez maszynę wirtualną po zakończeniu aplikacji/korzystania z obiektu. Java udostępnia natomiast na potrzeby programisty funkcję finalize(), która niszczy obiekt (informuje Garbage Collector, że obiekt nie jest już potrzebny).

 

by Mat