"Hei, Amigo. I dag skal jeg fortelle deg om et typisk Java-program. Den store nyheten er at hvert program skrevet i Java består av klasser og objekter."

"Jeg vet allerede hva klasser er. Hva er objekter?"

"La oss starte med en analogi. Anta at du vil bygge et lite skip. Du jobber med et design og sender deretter tegningen til en fabrikk, hvor et skip vil bli satt sammen i henhold til ditt design. Eller et dusin skip, eller like mange skip som du vil. Poenget mitt er at dusinvis av identiske skip kan lages basert på én plan."

"Det er akkurat slik det fungerer med Java."

" Java-programmerere er som designingeniører, bortsett fra i stedet for å lage tegninger, skriver de klasser. Skipsdeler lages basert på tegninger, mens objekter lages basert på klasser. "

"Først skriver vi klasser (lager tegninger). Deretter, når programmet kjøres, lager Java-maskinen objekter basert på disse klassene. Det er akkurat som hvordan skip bygges fra en blåkopi. En blåkopi – mange skip. Skipene er forskjellige . De har forskjellige navn og har forskjellig last. Men de er fortsatt like. De har alle identisk design, og er i stand til å utføre lignende oppgaver."

"OK, jeg forstår skipsanalogien din. Kan du gi meg et par til for å hjelpe meg å være sikker på at jeg forstår hva du sier?"

"Ta for eksempel bier..."

"Nei, rip på det. Jeg har hatt dårlig erfaring med bier. La oss ta maur."

"En maurkoloni er et godt eksempel på hvordan gjenstander samhandler. Enhver maurkoloni består av tre klasser: dronningen, soldater og arbeidermaur. Antall maur i hver klasse varierer. Vanligvis har en koloni bare én dronning, dusinvis av soldater , og hundrevis av arbeidere. Tre klasser, hundrevis av gjenstander. Maurene følger strenge regler når de samhandler med maur i sin egen klasse og maur som tilhører andre klasser."

"Dette er det perfekte eksempelet. Et typisk program fungerer akkurat slik. Det er et hovedobjekt som lager objekter i alle klassene. Objektene samhandler med hverandre og med den ytre verden. Objektenes oppførsel er hardwired (programmert) internt ."

"Jeg skjønner det ikke helt. Jeg mener, jeg skjønner det ikke i det hele tatt."

"Disse to forklaringene er to sider av samme sak. Sannheten er et sted midt i mellom. Det første eksemplet (om tegninger og skip) viser oss sammenhengen mellom en klasse og dens objekter. Det er en kraftig analogi. Analogien fra maurkolonien demonstrerer forhold mellom objekter, som er beskrevet av klasser og eksisterer bare mens et program kjører."

"Du mener vi må skrive klasser for alle objekter som brukes i et program, og deretter beskrive deres interaksjoner?"

"Ja, men det er enklere enn det høres ut. I Java, mens et program kjører, er alle enheter objekter. Å skrive et program er å beskrive de ulike måtene objekter kan samhandle på. Objektene kaller ganske enkelt hverandres metoder og sender de nødvendige dataene til dem."

"Det er litt uklart, men jeg tror jeg nesten skjønner det."

"Hvordan vet vi hvilke metoder vi skal ringe og hvilke data vi skal sende?"

"Hver klasse har en erklæring som indikerer dens tiltenkte bruk. På samme måte har hver metode en erklæring som indikerer hva den kan gjøre og hvilke data vi trenger å sende til den. For å bruke en klasse må du ha en generell forståelse av hva det gjør det. Du må vite nøyaktig hva hver metode gjør, men ikke nøyaktig hvordan den gjør det . Det er som en tryllestav."

"Hæ! Høres fint ut."

"Her. Ta en titt på koden til en klasse som kopierer filer:"

Kopier c:\data.txt til 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();
    }
}

"Jeg kan ikke si at jeg forstår alt, men jeg tror jeg har skjønt essensen av det."

"Flott. Da sees vi neste gang."

"Jeg glemte nesten. Her er oppgaven din fra Diego."