CodeGym/Kurs Javy/Składnia Java/Interakcja z obiektem

Interakcja z obiektem

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.

3
Zadanie
Składnia Java,  poziom 2lekcja 1
Niedostępne
Zaimplementuj metodę print
Pisanie swoich własnych metod daje nam nieograniczoną wolność, ale jest to także wielka odpowiedzialność. Metody implementujemy ostrożnie i z rozmysłem. To zadanie wymaga napisania metody, która wyświetli określony ciąg. Nie raz, ale cztery razy. Ciąg jest argumentem metody, co oznacza, że zostanie podany jako dane wejściowe.
Komentarze (42)
  • Popularne
  • Najnowsze
  • Najstarsze
Musisz się zalogować, aby dodać komentarz
Aleksandra
Poziom 2 , France, France
31 października 2023, 10:02
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, 08:51
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, 11:38
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, 19:27
Nie klasa a metoda.
Anonymous #11274698
Poziom 8 , Gorzow Wielkopolski, Poland
9 lutego 2023, 22:37
/* Comment has been deleted */
Adam Pracuje w Oracle
26 maja 2022, 21:33
System.out.println(s); 4x? ja napisalem i dziala... nie wiem czy tak powinno byc :D
NeoBTK
Poziom 8 , Katowice, Poland
26 sierpnia 2022, 20:09
Tak, ale lepiej w pętli, po te je mamy ;)
Anonymous #10851766
Poziom 2 , Poland, Poland
26 stycznia 2022, 22:05
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 Website Admin w CodeGym
2 lutego 2022, 13:07
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, 21:58
,,I, -_- ,I,,
Zaaxel
Poziom 2
27 marca 2021, 13:20
Poziom 2, lekcja 1 Koniec ciemnej materii. I co tu robić bez premium :(
Anonymous #10763658
Poziom 2 , Poland
3 lipca 2021, 20:53
Też bladego pojęcia nie mam :( A tak się wciągnąłem...
Maks
Poziom 3 , Poland, Poland
19 lipca 2022, 13:45
kup premium👍
Karol
Poziom 4 , Jaworzyna Slaska, Poland
2 listopada 2020, 19:07
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, 20:13
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, 13:48
dzieki Karol ! bez twojej podpowiedzi nie udało by mi sie tego zrobic.
18 września 2020, 14:30
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, 11:01
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, 20:27
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.