„Hallo, Amigo. Heute möchte ich dir etwas über ein typisches Java-Programm erzählen. Die interessante Neuigkeit ist, dass jedes in Java geschriebene Programm aus Klassen und Objekten besteht.“

„Ich weiß bereits, was Klassen sind. Was sind Objekte?“

„Beginnen wir mit einer Analogie. Angenommen, du willst ein kleines Schiff bauen. Du arbeitest an einem Entwurf und sendest den Entwurf dann an eine Fabrik, wo ein Schiff nach deinem Entwurf gebaut wird. Oder ein Dutzend Schiffe, oder noch mehr Schiffe. Entscheidend ist, dass Dutzende identischer Schiffe nach einem einzigen Plan gebaut werden können.“

„Genau so funktioniert das in Java.“

„Java-Programmierer sind wie Konstrukteure, außer dass sie statt Baupläne zu entwerfen, Klassen schreiben. Schiffsteile werden auf der Grundlage von Bauplänen hergestellt, während Objekte auf der Grundlage von Klassen erstellt werden.

„Zuerst schreiben wir Klassen (entwerfen Baupläne). Beim Ausführen des Programms erstellt die Java-Maschine dann Objekte, die auf diesen Klassen basieren. Das entspricht genau dem Vorgehen beim Bau eines Schiffes. Ein Bauplan – viele Schiffe. Die Schiffe unterscheiden sich. Sie haben unterschiedliche Namen und tragen unterschiedliche Ladungen. Aber sie sind sich dennoch ähnlich. Sie alle haben eine identische Konstruktion und können ähnliche Aufgaben erfüllen.“

„OK, ich verstehe deine Schiffsanalogie. Könntest du mir noch ein paar Beispiele geben, damit ich sicher bin, dass ich verstehe, was du meinst?“

„Ein weiteres Beispiel sind Bienen...“

"Nein, lassen wir das lieber. Ich habe schlechte Erfahrungen mit Bienen gemacht. Nehmen wir Ameisen.“

„Eine Ameisenkolonie ist ein gutes Beispiel dafür, wie Objekte interagieren. Jede Ameisenkolonie besteht aus drei Klassen: der Königin, den Soldaten und den Arbeiterameisen. Die Anzahl der Ameisen in jeder Klasse ist unterschiedlich. Normalerweise hat eine Kolonie nur eine Königin, ein paar Dutzend Soldaten und Hunderte von Arbeitern. Drei Klassen, Hunderte von Objekten. Die Ameisen folgen strengen Regeln, wenn sie mit Ameisen in ihrer eigenen Klasse und Ameisen einer anderen Klassen interagieren.“

„Das ist das perfekte Beispiel. Ein typisches Programm funktioniert genau so. Es gibt ein Hauptobjekt, das Objekte in allen Klassen erzeugt. Die Objekte interagieren miteinander und mit der Außenwelt. Das Verhalten der Objekte ist intern festgeschrieben (programmiert).“

„Das verstehe ich nicht ganz. Ich meine, ich verstehe es überhaupt nicht.“

„Diese beiden Erklärungen sind zwei Seiten derselben Medaille. Die Wahrheit liegt irgendwo dazwischen. Das erste Beispiel (über Baupläne und Schiffe) zeigt uns die Verbindung zwischen einer Klasse und ihren Objekten. Es ist eine starke Analogie. Die Analogie der Ameisenkolonie zeigt die Beziehung zwischen Objekten, die durch Klassen beschrieben werden und nur während der Ausführung eines Programms existieren.“

„Du meinst, wir müssen Klassen für alle Objekte schreiben, die in einem Programm verwendet werden, und dann ihre Interaktionen beschreiben?“

„Ja, aber das ist einfacher, als es klingt. In Java sind alle Entitäten Objekte, während ein Programm ausgeführt wird. Beim Schreiben eines Programms geht es deshalb darum, die verschiedenen Möglichkeiten zu beschreiben, wie Objekte interagieren können. Die Objekte rufen einfach gegenseitig ihre Methoden auf und übergeben die benötigten Daten an diese.“

„Das ist mir nicht ganz klar, aber ich glaube, ich verstehe es fast.“

„Woher wissen wir, welche Methoden wir aufrufen und welche Daten wir übergeben müssen?“

„Jede Klasse besitzt eine Deklaration, die ihren Verwendungszweck angibt. Ebenso hat jede Methode eine Deklaration, die angibt, was sie tun kann und welche Daten wir an sie übergeben müssen. Um eine Klasse zu verwenden, musst du ein allgemeines Verständnis dafür haben, was sie tut. Du musst genau wissen, was jede Methode macht, aber nicht genau, wie sie es macht. Das ist wie ein Zauberstab.“

„Okay! Klingt gut.“

„Hier. Wirf mal einen Blick auf den Code einer Klasse, die Dateien kopiert:“

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

„Ich verstehe zwar nicht alles, aber ich glaube, das Wesentliche habe ich schon begriffen.“

„Prima. Dann bis zum nächsten Mal.“

„Das hätte ich fast vergessen. Hier ist deine Aufgabe von Diego.“