CodeGym /Kursy Java /Składnia Java /Interakcja z obiektem

Interakcja z obiektem

Składnia Java
Poziom 2 , Lekcja 1
Dostępny

– Cześć, Amigo. Dziś opowiem Ci o typowym programie Java. Najważniejszą informacją jest to, że każdy program napisany w Javie składa się z klas i obiektów.

– Wiem już, czym są klasy. Co to są obiekty?

– Zacznijmy od analogii. Załóżmy, że chcesz zbudować mały statek. Pracujesz nad projektem, a następnie wysyłasz plan do fabryki, w której statek zostanie skonstruowany zgodnie z Twoim projektem. Albo tuzin statków, albo tyle statków, ile tylko zechcesz. Chodzi o to, że na podstawie jednego planu można tworzyć dziesiątki identycznych statków.

– Dokładnie tak dzieje się w Javie.

Programiści Java są jak konstruktorzy, z tym wyjątkiem, że zamiast tworzyć plany, piszą klasy. Części statku są tworzone na podstawie planów, a obiekty na podstawie klas.

– Najpierw piszemy klasy (tworzymy plany). Następnie, po uruchomieniu programu, maszyna Java tworzy na podstawie tych klas obiekty. To działa dokładnie tak, jak budowanie statków na podstawie planów. Jeden plan – wiele statków. Statki są różne. Mają różne nazwy i przewożą różne ładunki. Ale nadal są podobne. Wszystkie mają identyczną konstrukcję i są w stanie wykonywać podobne zadania.

– Rozumiem Twój przykład ze statkiem. Czy możesz podać jeszcze kilka przykładów, aby pomóc mi upewnić się, że rozumiem, o czym mówisz?

– Weźmy na przykład pszczoły...

– Nie, wolę nie. Mam złe doświadczenia z pszczołami. To weźmy mrówki.

– Kolonia mrówek jest dobrym przykładem interakcji między obiektami. Każda kolonia mrówek składa się z trzech klas: królowej, żołnierzy i robotnic. Liczba mrówek w każdej klasie jest różna. Zwykle kolonia ma jedną królową, dziesiątki żołnierzy i setki robotnic. Trzy klasy, setki obiektów. Mrówki przestrzegają surowych zasad, gdy wchodzą w interakcje z mrówkami własnej klasy i mrówkami należącymi od innych klas.

– To idealny przykład. Typowy program działa tak samo. Istnieje główny obiekt, który tworzy obiekty innych klas. Obiekty te wchodzą w interakcje ze sobą i ze światem zewnętrznym. Zachowanie obiektów jest przypisane (zaprogramowane) na stałe.

– Nie do końca rozumiem. To znaczy, nic nie rozumiem.

– Te dwa przykłady to dwie strony tej samej monety. Prawda leży gdzieś pośrodku. Pierwszy przykład (dotyczący planów i statków) pokazuje nam związek między klasą i jej obiektami. To bardzo znacząca analogia. Analogia do kolonii mrówek pokazuje relacje pomiędzy obiektami opisanymi przez klasy i istniejącymi tylko podczas działania programu.

– Masz na myśli, że musimy pisać klasy dla wszystkich obiektów używanych w programie i potem opisywać ich interakcje?

– Tak, ale to łatwiejsze, niż się wydaje. W Javie, gdy program jest uruchomiony, wszystkie byty są obiektami. Napisanie programu sprowadza się do opisania różnych sposobów interakcji pomiędzy obiektami. Obiekty po prostu wywołują nawzajem swoje metody i przekazują do nich wymagane dane.

– Trochę to niejasne, ale myślę, że prawie rozumiem.

– Skąd wiemy, które metody wywoływać i jakie dane przekazać?

– Każda klasa ma deklarację opisującą jej przeznaczenie. Podobnie – każda metoda ma deklarację wskazującą, co może zrobić i jakie dane musimy do niej przekazać. Aby użyć klasy, musisz ogólnie rozumieć, co ona robi. Musisz dokładnie wiedzieć, co robi każda metoda, ale już niekoniecznie, jak to robi. To jak magiczna różdżka.

– Ha! Brzmi nieźle.

– Tutaj. Popatrz na kod klasy, która kopiuje pliki:

Kopiuj c:\dane.txt do c:\wynik.txt
package com.codegym.lesson2;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class KopiujPlik
{
    public static void main(String[] args) throws IOException
    {
        FileInputStream fileInputStream = new FileInputStream("c:\dane.txt");
        FileOutputStream fileOutputStream = new FileOutputStream("c:\wynik.txt");

        while (fileInputStream.available() > 0)
        {
            int dane = fileInputStream.read();
            fileOutputStream.write(dane);
        }

        fileInputStream.close();
        fileOutputStream.close();
    }
}

– Nie mogę powiedzieć, że wszystko rozumiem, ale myślę, że łapię główny przekaz.

– Świetnie. Do zobaczenia następnym razem.

– Prawie zapomniałam. Oto Twoje zadanie od Diego.

Komentarze (42)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Aleksandra Poziom 2, France, France
31 października 2023
W ogóle niezrozumiałe co trzeba zrobić. Nie wiem jak jest zdefiniowany String s . Sama metoda wytłumaczona tak, że nie rozumiem o co tu chodzi. Może potem będzie trochę jaśniej
Adrian Poziom 2, Polska, Poland
15 marca 2023
Jak można wrzucić zadanie z pętlą kiedy nie było wcześniej o tym ani słowa?
Anonymous #11274698 Poziom 8, Gorzow Wielkopolski, Poland
8 maja 2023
Nie ma tu pętli. Tworzysz klasę "print" której parametrem jest "String" np. "s". Więc powstaje klasa print(String s) przez co "s" jest jakby "nośnikiem" tego co wyżej jest obok print
Przemo Poziom 17, Legnica, Poland
11 grudnia 2023
Nie klasa a metoda.
Anonymous #11274698 Poziom 8, Gorzow Wielkopolski, Poland
9 lutego 2023
/* Comment has been deleted */
Adam Poziom 3
26 maja 2022
System.out.println(s); 4x? ja napisalem i dziala... nie wiem czy tak powinno byc :D
NeoBTK Poziom 8, Katowice, Poland
26 sierpnia 2022
Tak, ale lepiej w pętli, po te je mamy ;)
Anonymous #10851766 Poziom 2, Poland, Poland
26 stycznia 2022
Codegym Dlaczego jak zrobię raz dobrze ćwiczenie nie mogę sprawdzić czy nie ma innej możliwości jego rozwiązania? Nie musicie "płacić" czarną materią ale to powinno być możliwe. Jeśli dany program napiszę inaczej też powinna być możliwość jego sprawdzenia
John Squirrels Poziom 41, San Francisco, Poland
2 lutego 2022
The ReCheck feature is only available to our Premium Pro subscribers and allows users to repeat completed tasks for three more calendar days, after the first successful verification.
jubei Poziom 2
7 września 2021
,,I, -_- ,I,,
Zaaxel Poziom 2
27 marca 2021
Poziom 2, lekcja 1 Koniec ciemnej materii. I co tu robić bez premium :(
Anonymous #10763658 Poziom 2, Poland
3 lipca 2021
Też bladego pojęcia nie mam :( A tak się wciągnąłem...
Maks Poziom 3, Poland, Poland
19 lipca 2022
kup premium👍
Karol Poziom 4, Jaworzyna Slaska, Poland
2 listopada 2020
W metodzie main mamy zadeklarowane zmienne do wyświetlenia, mówi o tym słowo print(" "); w kolejnej lini te 3 pojedyńcze zdania sa zadeklarowane dla jednej zmiennej s. nie mozemy napisać 12 linijek system.out.println dla kazdego zdania, ale dla zmiennej s ktora jest zadeklarowana dla całej metody main juz tak, mamy 3 zdania wiec wystarczy napisac 4 razy polecenie wyswietlające zmienna s. Nie rozumiem tylko dlaczego program wyswietla tekst 1111,2222,3333 a nie 123,123,123,123
Łukasz Urbański Poziom 4, Toruń
6 listopada 2020
Witaj Karol, dzieje sie tak ponieważ ptzy wywołaniu metody print(1), wykona się wszytko co jest zawarte w metodzie, czyli wyświetli ci 1111, natępnie znowu wywołujesz metodę print() tym razem z parametrem 2 i analogicznie do pierwszego wywołania otrzumasz 2222 itd.
Saimonn Novakovski Poziom 2, Netherlands
10 lutego 2022
dzieki Karol ! bez twojej podpowiedzi nie udało by mi sie tego zrobic.
18 września 2020
How are we supposed to know how to "implement print method"? It hasn't been explained in previous lessons! 😒 What's the deal here?
Patryk Poziom 3, Augsburg, Germany
29 sierpnia 2020
Skad poczatkujacy moze wiedziec ze wogole cos takiego istnieje ? for (int i=0;i<4;i++) nikt tego wczesniej nie wytlumaczyl ani nawet nie wspomnial o czyms takim i jak jest to interpretowane w JAVA. Int ok wartosc liczb calkowitych, ale skad tutaj i=o; i<4; i++ kazde cos znaczy, szkoda ze nikt nie wyjasnil w kursie co..
Damian Poziom 18, Lublin, Poland
4 grudnia 2020
Ale nikt tutaj nie każe ci używać pętli, nie było o tym mowy. W metodzie print każesz tylko powtórzyć 4 razy przysłany tekst, więc wpisujesz tylko znane już System.out.println(s) cztery razy.