"Hallo, Amigo. Vandaag vertel ik je over een typisch Java-programma. Het grote nieuws is dat elk programma dat in Java is geschreven, uit klassen en objecten bestaat."

"Ik weet al wat klassen zijn. Wat zijn objecten?"

"Laten we beginnen met een analogie. Stel dat je een klein schip wilt bouwen. Je werkt aan een ontwerp en stuurt de blauwdruk vervolgens naar een fabriek, waar een schip wordt geassembleerd volgens jouw ontwerp. Of een dozijn schepen, of evenveel schepen zoals je wilt. Mijn punt is dat er tientallen identieke schepen kunnen worden gemaakt op basis van één blauwdruk.'

"Dat is precies hoe het werkt met Java."

" Java-programmeurs zijn net ontwerpingenieurs, behalve dat ze in plaats van blauwdrukken te maken, klassen schrijven. Scheepsonderdelen worden gemaakt op basis van blauwdrukken, terwijl objecten worden gemaakt op basis van klassen. "

"Eerst schrijven we klassen (maken blauwdrukken). Vervolgens, wanneer het programma wordt uitgevoerd, maakt de Java-machine objecten op basis van deze klassen. Het is precies zoals schepen worden gebouwd op basis van een blauwdruk. Eén blauwdruk - veel schepen. De schepen zijn verschillend "Ze hebben verschillende namen en vervoeren verschillende ladingen. Maar ze lijken nog steeds op elkaar. Ze hebben allemaal een identiek ontwerp en kunnen vergelijkbare taken uitvoeren."

'Oké, ik begrijp je scheepsanalogie. Kun je me er nog een paar geven om me te helpen er zeker van te zijn dat ik begrijp wat je zegt?'

"Neem bijvoorbeeld bijen..."

"Nee, schrap dat. Ik heb een slechte ervaring met bijen gehad. Laten we mieren nemen."

"Een mierenkolonie is een goed voorbeeld van hoe objecten op elkaar inwerken. Elke mierenkolonie bestaat uit drie klassen: de koningin, soldaten en werkmieren. Het aantal mieren in elke klasse varieert. Gewoonlijk heeft een kolonie slechts één koningin, tientallen soldaten , en honderden arbeiders. Drie klassen, honderden objecten. De mieren volgen strikte regels als ze omgaan met mieren in hun eigen klasse en mieren die tot andere klassen behoren."

"Dit is het perfecte voorbeeld. Een typisch programma werkt precies zo. Er is een hoofdobject dat objecten in alle klassen maakt. De objecten interageren met elkaar en met de buitenwereld. Het gedrag van de objecten is intern bedraad (geprogrammeerd) ."

'Ik snap het niet helemaal. Ik bedoel, ik snap het helemaal niet.'

"Deze twee verklaringen zijn twee kanten van dezelfde medaille. De waarheid zit ergens tussenin. Het eerste voorbeeld (over blauwdrukken en schepen) toont ons het verband tussen een klasse en zijn objecten. Het is een krachtige analogie. De mierenkolonie-analogie demonstreert de relatie tussen objecten, die worden beschreven door klassen en alleen bestaan ​​terwijl een programma draait."

"Je bedoelt dat we klassen moeten schrijven voor alle objecten die in een programma worden gebruikt, en dan hun interacties moeten beschrijven?"

"Ja, maar het is makkelijker dan het klinkt. In Java, terwijl een programma draait, zijn alle entiteiten objecten. Het schrijven van een programma komt neer op het beschrijven van de verschillende manieren waarop objecten kunnen interageren. De objecten roepen simpelweg elkaars methoden aan en geven de vereiste gegevens door naar hen."

"Het is een beetje vaag, maar ik denk dat ik het bijna snap."

"Hoe weten we welke methoden we moeten aanroepen en welke gegevens we moeten doorgeven?"

"Elke klasse heeft een declaratie, die het beoogde gebruik aangeeft. Op dezelfde manier heeft elke methode een declaratie die aangeeft wat ze kan doen en welke gegevens we eraan moeten doorgeven. Om een ​​klasse te gebruiken, moet je een algemeen begrip hebben van wat het doet. Je moet precies weten wat elke methode doet, maar niet precies hoe het doet . Het is als een toverstaf. "

"Huh! Klinkt leuk."

"Hier. Bekijk de code van een klasse die bestanden kopieert:"

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

"Ik kan niet zeggen dat ik het allemaal snap, maar ik denk dat ik de essentie ervan snap."

"Geweldig. Tot de volgende keer dan."

'Ik was het bijna vergeten. Hier is je taak van Diego.'