CodeGym /Kurse /Java Syntax /Objektinteraktion

Objektinteraktion

Java Syntax
Level 2 , Lektion 1
Verfügbar

„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.“

Kommentare (57)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Drauz.Andreas #11484201 Level 1, Germany
17 Januar 2025
Ich weiß zwar das steht ich muss nur wissen Was eine Klasse bzw. Objekt macht und nicht Wie. Aber kann mir einer das Wie erklären das wäre für mich hilfreich zum besseren verstehen. Danke im vor raus.
DigitalNomad Level 2, Germany
30 Dezember 2024
Die Aufgabenstellung für die 4 Zeilen ist unpräzise. "Die Methode print soll JEDE! Zeichenkette 4 mal anzeigen. Der Satz soll jedes Mal in einer eigenen Zeile stehen."
Drauz.Andreas #11484201 Level 1, Germany
18 März 2024
Kann mir einer erklären wie das mit der Übungsaufgabe funktioniert. Ich habe mir den Lösungscode runtergeladen aber irgendwie versteh ich das nicht. Wieso wird bei println() der String S übergeben. Der ist doch nirgendwo deklariert?
Christoph Breddin Level 10, Cologne, Germany
9 April 2024
Du übergibst ja quasi String s, in dem du in der main die Methode print() aufrufst. public static void main(String[] args) { // s = "Java ist einfach zu erlernen!" print("Java ist einfach zu erlernen!"); // s = "Java ist objektorientiert!" etc... print("Java ist objektorientiert!"); print("Java ist plattformunabhängig!"); } du "deklariest", in dem du der Methode in der Main einen String gibst, den ja die Methode print() erwartet. Und da ja der Compiler Zeile für Zeile von oben nach unten ab-arbeitet, wird jedesmal ein neuer String s übergeben. Nun musst du halt nur die print() methode bearbeiten, das sie es 4 mal ausgibt mit println() und eine zB. while-Schleife.
nahom Level 2, Germany, Germany
4 Dezember 2023
Erst kostenloses anmelden und dann wollen deine Seele
Anonymous #11476543 Level 5, United States of America
23 Februar 2024
Hab 50€ für ein Jahr bezahlt 🤑
King H Level 2, Stuttgart, Germany
28 April 2023
Also wenn ich das jetzt richtig verstanden habe, ist String s ja logischerweise eine variable, die Print zugewiesen wurde? heißt das wenn ich String s ausführen will als Bildschirmausgabe führe ich automatisch die ganzen Print texte weil die ja zu String s zugewiesen wurden?
oliver Level 2, Muenster, Germany
24 Februar 2023
ich kann schon java fehlerfrei buchstabieren.j,ähh
Holger Level 3, München, Germany
7 Januar 2023
"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 für mich nicht wie ein Zauberstab, sondern wie ein Buch mit sieben Siegeln. Was bringt es mir, allgemein bzw. genau zu wissen, was eine bestimmte Klasse oder Methode wie tut oder macht, wenn ich nicht weiss, was sie sind?
Anonymous #11246164 Level 22, Germany, Germany
9 Januar 2023
Nunja wenn du weißt wie man Auto fährt kannst du selbiges tun, dafür musst du nicht wissen wie der Motor oder das Lenkrad genau funktioniert :) Hoffe ich habe deine Frage richtig verstanden.
Holger Level 3, München, Germany
12 Januar 2023
Naja, wenn ich Auto fahre, muss ich zwar nicht wissen, wie der Motor oder das Lenkrad genau funktioniert, solange beides normal funktioniert, wie es funktionieren soll; aber wenn's mal nicht funktioniert, könnts teuer und zeitaufwändig werden. Tja, das BIP jubelt, während man sich selbst unter Umständen ärgert, zumindest, wenn das eigene Einkommen nicht allzu hoch ist.
Bernhard M Level 4, Germany, Germany
21 Dezember 2022
Woher weiß die Variable s, welchen Wert sie hat ?
Anonymous #11246164 Level 22, Germany, Germany
9 Januar 2023
In der main Methode übergibst du ja die Methode print und dahinter den String s und dadurch wird die Variable s deklariert. Also sprich die Lösung "print()" würde nicht funktionieren weil du s damit nicht deklarierst.
lena.pb Level 2, Germany
9 Dezember 2022
Hallo, ich finde diese Aufgabenstellung sowas von verwirrend. Ich habe mir alle Hinweise durchgelesen aber leider immer noch keinen blassen Schimmer, was überhaupt verlangt ist in dieser Aufgabe. Ich sehe in der main Methode drei Sätze und diese Methode soll drei mal aufgerufen werden (?). In der nächsten Bedingung steht, dass "die Zeichenkette" vier mal ausgegeben werden soll. Bedeutet das jetzt dass dieser Block aus drei Sätzen vier mal ausgegeben werden soll? Also insgesamt 12 Zeilen? Wie passt das zusammen damit dass die methode drei mal aufgerufen werden soll? Ich hab da irgendwie einen totalen Knoten im Kopf. Vielleicht hat ja noch mal jemand einen Hinweis für mich.
Anonymous #11246164 Level 22, Germany, Germany
9 Januar 2023
Du rufst in der Main Methode nur eine neue Methode "print" auf, du gibst aber den Text damit nicht aus. Du musst also deine zweite Methode print so erweitern, damit diese Text ausgibt.
MAG Level 4, Germany, Germany
8 Dezember 2022
Danke Anonymous #11045972 für dein Hinweis