I_R_W13A_M01_JAVA Konstruktory i destruktory w Java
Konstruktory
Konstruktor to specjalna funkcja (metoda klasy), wywoływana, gdy tworzona jest instancja danej klasy. Wewnątrz konstruktora zdefiniowane są instrukcje, które mają zostać wykonane przy utworzeniu obiektu klasy.
W językach programowania (o ile dany język wspiera programowanie obiektowe) konstruktory deklarowane są na różne sposoby. Najczęściej jednak konstruktor przyjmuje nazwę klasy, w której się znajduje.
Konstruktor zwykły
Przeanalizujmy przykład konstruktora zwykłego.
Zdefiniowana w linii funkcja o nazwie Uczen() to analizowany przez nas konstruktor. Oznacza to, że funkcja ta zostanie wywołana podczas tworzenia obiektu klasy Uczen. Należy wtedy podać trzy parametry, które nadadzą wartości atrybutom klasy Uczen: imie, nazwisko, wiek.
W obrębie danej klasy może być zdefiniowanych wiele konstruktorów. Jeżeli chcemy stworzyć więcej niż jeden konstruktor, to każdy z nich musi różnić się typem, liczbą lub kolejnością parametrów.
W zależności od języka programowania wyróżnia się specjalne typy konstruktorów. Omówimy tutaj niektóre z nich.
Konstruktor domyślny
To rodzaj konstruktora, który nie ma zdefiniowanych parametrów (bądź mają one ustawione wartości domyślne). Podczas tworzenia obiektu klasy za pomocą konstruktora domyślnego, nie są podawane żadne argumenty. W przypadku gdy dla danej klasy nie zdefiniowano żadnego konstruktora, zostanie on wygenerowany automatycznie, zgodnie ze specyfikacją danego języka programowania.
Oto przykłady tego rodzaju konstruktora:
Drugi z konstruktorów przedstawionych w pseudokodzie pełni funkcję zarówno konstruktora domyślnego, jak i zwykłego.
Konstruktor kopiujący
Taki konstruktor przyjmuje tylko jeden argument - referencję do obiektu tej samej klasy. Następnie ma on za zadanie skopiowanie wartości pól z obiektu podanego przez referencję do nowo tworzonej instancji klasy.
Przedstawiony przykład pokazuje praktyczne wykorzystanie konstruktora kopiującego. Utworzono obiekt klasy Uczen oraz – poprzez konstruktor zwykły – zostały podane wartości parametrów: "Jan", "Kowalski", 12. Następnie utworzono drugi obiekt (również klasy Uczen: uczen2) za pomocą konstruktora kopiującego.
W obiekcie uczen2 wartości pól imie, nazwisko, wiek będą takie same, jak w obiekcie uczen, czyli odpowiednio: "Jan", "Kowalski", 12.
Konstruktor teleskopowy
Szczególnym rodzajem konstruktora jest konstruktor teleskopowy. Zakłada on w rzeczywistości utworzenie kilku konstruktorów. Spójrzmy na przykład:
Przedstawiony konstruktor klasy Osoba umożliwia utworzenie i nadanie wartości atrybutom obiektu tej klasy. Gdybyśmy skorzystali z tego konstruktora, musielibyśmy podać wszystkie wartości atrybutów. Co jednak w przypadku, gdy dana osoba nie będzie miała drugiego imienia?
Konstruktor teleskopowy okazuje się bardzo przydatny, gdy w obrębie klasy są zdefiniowane atrybuty opcjonalne, takie jak np. drugie imię.
Zobaczmy, jak wygląda jego budowa:
W tym przykładzie pierwszy konstruktor nadaje wartości atrybutom, które nie są opcjonalne – zakładamy, że każda osoba musi mieć imię, nazwisko, nazwisko rodowe i wiek. Drugi konstruktor zawiera w sobie wywołanie pierwszego konstruktora (dla atrybutów imie, nazwisko, nazwiskoRodowe oraz wiek), a także oprócz tego nadaje wartość drugiego imienia.
Słownik
niezależny obiekt danej klasy, zajmujący określone miejsce w pamięci
konkretna wartość lub zmienna przekazywana do funkcji lub metody przy jej wywołaniu
definicja zmiennej zawarta w deklaracji metody lub funkcji; deklarujemy ją w nawiasach, np. funkcja(liczba parametr1, tekst parametr2)
zmienna zawierająca informacje o położeniu w pamięci innej zmiennej lub obiektu
jedna z metod automatycznego zarządzania dynamicznie przydzielaną pamięcią; za proces jej zwalniania odpowiedzialny jest programowy zarządca zwany w skrócie GC
zdefiniowany przez programistę złożony typ zmiennej, która może zawierać metody oraz pola danych
specjalna metoda danej klasy, którą wywołuje się podczas tworzenia jej instancji; zadaniem konstruktora jest zainicjowanie obiektu, a w niektórych językach programowania także utworzenie obiektu
przeciwieństwo konstruktora; specjalna metoda, wywoływana przez program przed usunięciem obiektu
pojedyncza instancja pewnej klasy, czyli zmienna o jej typie; struktura zawierająca dane oraz metody (funkcje służące do wykonywania na tych danych określonych zadań)