– Chciałbym opowiedzieć Ci o inicjalizacji obiektów. Kiedy tworzysz jakiś obiekt, musisz przypisać wartości początkowe do jego zmiennych, aby uniknąć tego, że udostępnisz obiekt, któremu brakuje informacji potrzebnych do prawidłowego działania.
– Weźmy na przykład obiekt Plik. Minimalną wymaganą informacją dla pliku jest jego nazwa. Byłoby absurdalne tworzyć plik bez nazwy.
– Załóżmy, że piszemy klasę MojPlik, aby pracować z plikami. Jaka informacja jest niezbędna dla każdego obiektu?
– Nazwa pliku związana z obiektem?
– Tak jest. Aby to zrobić, dodajemy metodę inicjalizuj() do naszej klasy. Wygląda to tak.
class MojPlik
{
private String nazwapliku = null;
public void inicjalizuj(String nazwa)
{
this.nazwapliku = nazwa;
}
...
}
– Dodajemy metodę inicjalizuj, aby móc pracować z obiektem za pomocą wywołania metody. Możemy wywołać metody obiektów zaraz po wywołaniu metody inicjalizuj. Jeśli nie można pracować z obiektem, nazywamy go nieprawidłowym; w innym przypadku jest on prawidłowy. Głównym zadaniem metody inicjalizuj jest otrzymanie wszystkich danych, które są wymagane, by obiekt był prawidłowy.
– Rozumiem.
– A teraz utrudnijmy sobie trochę to zadanie. A może, właściwie, uprośćmy? Zależy, jak na to spojrzeć. Załóżmy, że programista używający naszej klasy uzna, że wygodniej jest przekazać katalog pliku i skróconą nazwę zamiast jego pełnej ścieżki. Aby mógł on to zrobić, utworzymy kolejną metodę inicjalizuj (Java pozwala tworzyć wiele metod z identycznymi nazwami). A oto, jak wyglądałaby nasza klasa:
class MojPlik
{
private String nazwapliku = null;
public void inicjalizuj(String nazwa)
{
this.nazwapliku = nazwa;
}
public void inicjalizuj(String folder, String nazwa)
{
this.nazwapliku = folder + nazwa;
}
...
}
– Jeszcze jedno: często jest tak, że potrzebujemy zrobić tymczasową kopię pliku obok pliku bieżącego.
– Czy możemy stworzyć metodę, która to zrobi?
– Jasne. Spójrz.
class MojPlik
{
private String nazwapliku = null;
public void inicjalizuj(String nazwa)
{
this.nazwapliku = nazwa;
}
public void inicjalizuj(String folder, String nazwa)
{
this.nazwapliku = folder + nazwa;
}
// nazwapliku będzie przechowywany w tym samym katalogu, co plik.
public void inicjalizuj(MojPlik plik, String nazwa)
{
this.nazwapliku = plik.getFolder() + nazwa;
}
...
}
– I mogę stworzyć tyle tych metod, ile chcę?
– W granicach rozsądku. Ale, technicznie rzecz biorąc, możesz tak zrobić.
– Kiedy powinienem wywołać metodę inicjalizuj?
– Natychmiast po utworzeniu obiektu, aby był on prawidłowy.
Przykłady: |
---|
|
|
|
– Czym jest metoda getFolder()?
– Właściwie nie pokazaliśmy tutaj kodu. Ona reprezentuje metodę, która zwraca string z nazwą folderu, w którym przechowywany jest nasz plik.