"Ciao, Amigo. Oggi ti parlerò di un tipico programma Java. La grande novità è che ogni programma scritto in Java è composto da classi e oggetti."

"So già cosa sono le classi. Cosa sono gli oggetti?"

"Cominciamo con un'analogia. Supponiamo che tu voglia costruire una piccola nave. Lavori su un progetto e poi invii il progetto a una fabbrica, dove verrà assemblata una nave secondo il tuo progetto. O una dozzina di navi, o altrettante navi Il punto è che dozzine di navi identiche possono essere realizzate sulla base di un unico progetto."

"È esattamente così che funziona con Java."

" I programmatori Java sono come ingegneri progettisti, tranne che invece di creare progetti, scrivono classi. Le parti della nave sono realizzate sulla base di progetti, mentre gli oggetti vengono creati sulla base di classi. "

"In primo luogo, scriviamo classi (creiamo progetti). Quindi, quando il programma viene eseguito, la macchina Java crea oggetti basati su queste classi. È esattamente come le navi vengono costruite da un progetto. Un progetto - molte navi. Le navi sono diverse Hanno nomi diversi e trasportano carichi diversi, ma sono ancora simili, hanno tutti un design identico e sono in grado di svolgere compiti simili.

"OK, ho capito la tua analogia con la nave. Potresti darmene un altro paio per aiutarmi a essere sicuro di capire quello che stai dicendo?"

"Prendi, per esempio, le api..."

"No, grattalo. Ho avuto una brutta esperienza con le api. Prendiamo le formiche."

"Una colonia di formiche è un buon esempio di come interagiscono gli oggetti. Ogni colonia di formiche è composta da tre classi: la regina, i soldati e le formiche operaie. Il numero di formiche in ogni classe varia. Di solito una colonia ha solo una regina, dozzine di soldati , e centinaia di lavoratori. Tre classi, centinaia di oggetti. Le formiche seguono regole rigide mentre interagiscono con le formiche della loro stessa classe e con le formiche che appartengono ad altre classi."

"Questo è l'esempio perfetto. Un programma tipico funziona esattamente così. C'è un oggetto principale che crea oggetti in tutte le classi. Gli oggetti interagiscono tra loro e con il mondo esterno. Il comportamento degli oggetti è cablato (programmato) internamente ."

"Non capisco proprio. Voglio dire, non capisco affatto."

"Queste due spiegazioni sono le due facce della stessa medaglia. La verità sta nel mezzo. Il primo esempio (su progetti e navi) ci mostra la connessione tra una classe e i suoi oggetti. È un'analogia potente. L'analogia della colonia di formiche dimostra il relazione tra oggetti, che sono descritti da classi ed esistono solo mentre un programma è in esecuzione."

"Vuoi dire che dobbiamo scrivere classi per tutti gli oggetti usati in un programma e poi descrivere le loro interazioni?"

"Sì, ma è più facile di quanto sembri. In Java, mentre un programma è in esecuzione, tutte le entità sono oggetti. Scrivere un programma equivale a descrivere i vari modi in cui gli oggetti possono interagire. Gli oggetti chiamano semplicemente i metodi dell'altro e passano i dati richiesti a loro."

"È un po' confuso, ma credo di averlo quasi capito."

"Come facciamo a sapere quali metodi chiamare e quali dati passare?"

"Ogni classe ha una dichiarazione, che ne indica l'uso previsto. Allo stesso modo, ogni metodo ha una dichiarazione che indica cosa può fare e quali dati dobbiamo passargli. Per usare una classe, devi avere una comprensione generale di cosa lo fa. Devi sapere esattamente cosa fa ogni metodo, ma non esattamente come lo fa . È come una bacchetta magica."

"Huh! Suona bene."

"Ecco. Dai un'occhiata al codice di una classe che copia i file:"

Copia c:\data.txt in c:\result.txt
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();
    }
}

"Non posso dire di aver capito tutto, ma penso di averne afferrato l'essenza."

"Fantastico. Alla prossima volta allora."

"Quasi dimenticavo. Ecco il tuo compito da parte di Diego."