CodeGym /Kursy /Składnia Java /Inicjalizowanie obiektów. Metoda inicjalizuj

Inicjalizowanie obiektów. Metoda inicjalizuj

Składnia Java
Poziom 5 , Lekcja 6
Dostępny

– 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.

Przykład:
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:

Przykład z dwiema metodami inicjalizuj:
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.

Utwórz kopię obok bieżącego pliku.
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:
MojPlik plik = new MojPlik();
plik.inicjalizuj("c:\data\a.txt");

String tekst = plik.readTekst();
MojPlik plik = new MojPlik();
plik.inicjalizuj("c:\data\", "a.txt");

String tekst = plik.readTekst();
MojPlik plik = new MojPlik();
plik.inicjalizuj("c:\data\a.txt");

MojPlik plik2 = new MojPlik();
plik2.inicjalizuj("a.txt");

String tekst = plik2.readTekst();

– 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.

Komentarze (5)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Nao Poziom 9, Poland, Poland
18 września 2023
Generalnie ta lekcja jest troche bez sensu i moze wprowadzać w blad nowych developerow. Metoda "inicjalizuj" wlascwie niczym nie różni się od settera którry został przedstawiony lekcję wcześniej. Po co to mieszać?

class MojPlik
{
    private String nazwapliku = null;
    public void inicjalizuj(String nazwa)
    {
        this.nazwapliku = nazwa;
    }
to równie dobrze mogloby wygladac tak:

class MojPlik
{
    private String nazwapliku = null;
    public void setNazwaPliku(String nazwa)
    {
        this.nazwapliku = nazwa;
    }
"– 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." Przecież nawet jeśli stworzę obiekt klasy MojPlik nie mam przymusu wywolac metody inicjalizuj, wiec przedstawione zalozenia nie sa spelnione :P Aby spełnić przedstawione założenia należałoby stworzyć konstruktor klasy MojPlik zawierający parametry, wtedy nie ma możliwości utworzenia obiektu klasy bez podania ich Jesli to ma byc wprowadzenie do przeciazania metod, to powiedzcie o przeciazaniu metod i zrobcie np kalkulator :P
Przemo Poziom 17, Legnica, Poland
20 grudnia 2023
Dokładnie to samo pomyślałem. Czy ta lekcja to wprowadzenie do konstruktorów(które juz było) czy do przeciążania.
Anonymous #11274698 Poziom 8, Gorzow Wielkopolski, Poland
26 kwietnia 2023
Do czego tak właściwie służy ta metoda?
Mateusz Poziom 30, Poland
26 października 2022
Może głupie pytanie ale czy możnaby utworzyć po prostu setter zamiast metody inicjalizuj?
Loginus Lagonow Poziom 9, Poland, Poland
26 listopada 2022
a jeszcze lepiej by bylo przekazac niezbendne parametry w wywolanou konstruktora .