"Szia Amigo. Ma egy tipikus Java programról mesélek. A nagy hír az, hogy minden Java nyelven írt program osztályokból és objektumokból áll."

"Már tudom, mik az osztályok. Mik azok az objektumok?"

"Kezdjük egy analógiával. Tegyük fel, hogy egy kis hajót akar építeni. Dolgozik egy terven, majd elküldi a tervrajzot egy gyárba, ahol egy hajót összeállítanak a terved szerint. Vagy egy tucat hajót, vagy annyi hajót A lényeg az, hogy egy terv alapján több tucat egyforma hajó készíthető."

"Ez pontosan így működik a Java-val."

" A Java programozók olyanok, mint a tervezőmérnökök, csakhogy a tervrajzok készítése helyett osztályokat írnak. A hajóalkatrészek tervrajzok alapján készülnek, míg az objektumok osztályok alapján. "

"Először osztályokat írunk (tervrajzokat készítünk). Majd a program futtatásakor a Java gép objektumokat hoz létre ezek alapján az osztályok alapján. Pontosan olyan, mint ahogy a hajókat tervrajzból építik. Egy terv – sok hajó. A hajók különbözőek . Különböző nevük van, és különböző rakományt szállítanak. De még mindig hasonlóak. Mindegyikük azonos kialakítású, és hasonló feladatokat képesek ellátni."

"Rendben, értem a hajóhasonlatát. Adna még párat, hogy segítsen megbizonyosodnom arról, hogy értem, amit mond?"

– Vegyük például a méheket...

"Nem, kapard meg. Rossz tapasztalatom van a méhekkel. Vegyük a hangyákat."

"A hangyatelep jó példa arra, hogy az objektumok hogyan hatnak egymásra. Minden hangyatelep három osztályból áll: a királynőből, a katonákból és a munkáshangyákból. A hangyák száma az egyes osztályokban változó. Általában egy kolóniának csak egy királynője van, több tucat katonából , és több száz munkás. Három osztály, több száz objektum. A hangyák szigorú szabályokat követnek, miközben a saját osztályukhoz tartozó hangyákkal és más osztályokhoz tartozó hangyákkal lépnek kapcsolatba."

"Ez a tökéletes példa. Egy tipikus program pontosan így működik. Van egy fő objektum, amely az összes osztályban objektumokat hoz létre. Az objektumok kölcsönhatásba lépnek egymással és a külső világgal. Az objektumok viselkedése belsőleg vezetékes (programozott) ."

"Nem egészen értem. Úgy értem, egyáltalán nem értem."

"Ez a két magyarázat ugyanannak az éremnek a két oldala. Az igazság valahol a kettő között van. Az első példa (a tervrajzokról és a hajókról) megmutatja nekünk az osztály és tárgyai közötti kapcsolatot. Ez egy erőteljes analógia. A hangyatelep-analógia bemutatja, objektumok közötti kapcsolat, amelyeket osztályok írnak le, és csak a program futása közben léteznek."

"Úgy érted, osztályokat kell írnunk a programban használt összes objektumhoz, majd le kell írni az interakcióikat?"

"Igen, de egyszerűbb, mint amilyennek hangzik. A Java-ban, miközben egy program fut, minden entitás objektum. Egy program írása annyit tesz, mint leírja az objektumok interakciójának különböző módjait. Az objektumok egyszerűen meghívják egymás metódusait, és átadják a szükséges adatokat nekik."

– Kicsit homályos, de azt hiszem, majdnem értem.

"Honnan tudjuk, hogy mely metódusokat hívjuk meg és mely adatokat adjuk át?"

"Minden osztálynak van egy deklarációja, amely jelzi a szándékolt felhasználást. Hasonlóképpen minden metódusnak van egy deklarációja, amely jelzi, hogy mire képes, és milyen adatokat kell átadnunk neki. Egy osztály használatához általános ismeretekkel kell rendelkeznie arról, hogy mit tud Pontosan tudnod kell, hogy az egyes módszerek mit csinálnak, de azt nem, hogy pontosan hogyan . Ez olyan, mint egy varázspálca."

"Hú! Szépen hangzik."

"Itt. Tekintse meg egy osztály kódját, amely fájlokat másol:"

Másolja a c:\data.txt fájlt a c:\result.txt fájlba
package com.codegym.lesson2;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

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

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

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

– Nem mondhatom, hogy mindent értek, de azt hiszem, a lényeget megértettem.

"Szuper. Akkor találkozunk legközelebb."

"Majdnem elfelejtettem. Itt a feladatod Diegotól."