Objektorientierte Programmierung - Java

Hallo!
Ich hab grade erst im Studium mit Java angefangen und bin eben dabei mir die ganzen Begriffe beizubringen.
Was mir aber sehr schwer fällt, is die Abgrenzung von Klasse, Objekt, Attribut und Methode im Programmcode.
Also was gehört wo alles dazu, wo fängts an und wo hörts auf.
Könnte mir das jemand anhand von nem Beispielcode, den ich hier anfüge erklären?

Wäre super!

public class Getraenk {
private String bezeichnung;
private long getraenkenummer;
private double einkaufspreis;
private double verkaufspreis;
private double volumen;
private Abfueller abfueller;

public Getraenk(String bez, long getrnr, double ek, double vk, double vol, Abfueller ab) {
bezeichnung = bez;
getraenkenummer =getrnr;
einkaufspreis= ek;
verkaufspreis= vk;
volumen= vol;
abfueller= ab;
}

public void ausgeben () {
System.out.println(„Bezeichnung:“ +bezeichnung);
System.out.println(„Getraenkenummer:“ +getraenkenummer);
System.out.println(„Einkaufspreis:“ +einkaufspreis);
System.out.println(„Verkaufspreis:“ +verkaufspreis);
System.out.println(„Volumen:“ +volumen);
abfueller.ausgeben();
}

public static void main(String[] args) {
Abfueller ab2 = new Abfueller(„Spritzig&Frisch GmbH“, 98765, „Erfinderstrasse“, 1, 54321, „Erfinderdorf“, „Entdeckerland“);
Getraenk getr1 = new Getraenk („Mineralwasser“, 12345, 0.50, 1.00, 0.75, ab2);
Getraenk getr2 = new Getraenk („Orangensaft“, 23456, 0.90, 1.50, 0.2, new Abfueller(„Saftladen OHG“, 76543, „Apfelsaftweg“, 2, 65432, „Kirschsaftstadt“, „Fruchtland“));
System.out.println(„Daten von Objekt getr1“);
getr1.ausgeben();
System.out.println("\n\nDaten von Objekt getr2");
getr2.ausgeben();

getr2.aendereAbfueller(ab2);

System.out.println("\n\nDaten von Objekt getr2 neu");
getr2.ausgeben();

System.out.println("\n\nDaten von Objekt bestellung1");
Bestellung bestellung1 = new Bestellung(123456789, 13, getr2, 3);
bestellung1.ausgeben();
}

public String getBezeichnung() {
return bezeichnung;
}

public double getVerkaufspreis() {
return verkaufspreis;
}

public void aendereAbfueller (Abfueller neuerAbfueller) {
abfueller= neuerAbfueller;
}

}

Hallo,

für Definitionen etc:

Objektorientierte Programmierung:
http://openbook.galileocomputing.de/javainsel/javain…

Klassen, Methoden etc.
http://openbook.galileocomputing.de/javainsel/javain…

Selbständige Suche nach weiterführenden Themen:
http://openbook.galileocomputing.de/javainsel/stichw…

public class Getraenk {

  • Beginn der Klasse - wenn Du eine gescheite Entwicklungsumgebung hast (z.B. Eclipse), kannst Du Dir anzeigen lassen, wo die Klasse aufhört, in Deinem Fall ganz am Ende … auch würde ich Dir empfehlen, bissel auf Formatierung zu achten um die Lesbarkeit zu erhöhen, siehe dazu die Quelltextbeispiele auf den Galileo-Computing-Seiten

private String bezeichnung;
private long getraenkenummer;
private double einkaufspreis;
private double verkaufspreis;
private double volumen;
private Abfueller abfueller;

  • Definition von Klassenvariablen, Strings sind null, Zahlen 0 … wenn Du was anderes willst, kannst Du einen Wert nach nem = anfügen

public Getraenk(String bez, long getrnr, double ek, double vk,
double vol, Abfueller ab) {
bezeichnung = bez;
getraenkenummer =getrnr;
einkaufspreis= ek;
verkaufspreis= vk;
volumen= vol;
abfueller= ab;
}

public void ausgeben () {
System.out.println(„Bezeichnung:“ +bezeichnung);
System.out.println(„Getraenkenummer:“ +getraenkenummer);
System.out.println(„Einkaufspreis:“ +einkaufspreis);
System.out.println(„Verkaufspreis:“ +verkaufspreis);
System.out.println(„Volumen:“ +volumen);
abfueller.ausgeben();
}

  • Methode ohne Parameter, die irgendwas ausgibt, wenn sie aufgerufen wird

public static void main(String[] args) {
Abfueller ab2 = new Abfueller(„Spritzig&Frisch GmbH“, 98765,
„Erfinderstrasse“, 1, 54321, „Erfinderdorf“,
„Entdeckerland“);
Getraenk getr1 = new Getraenk („Mineralwasser“, 12345, 0.50,
1.00, 0.75, ab2);
Getraenk getr2 = new Getraenk („Orangensaft“, 23456, 0.90,
1.50, 0.2, new Abfueller(„Saftladen OHG“, 76543,
„Apfelsaftweg“, 2, 65432, „Kirschsaftstadt“, „Fruchtland“));
System.out.println(„Daten von Objekt getr1“);
getr1.ausgeben();
System.out.println("\n\nDaten von Objekt getr2");
getr2.ausgeben();

getr2.aendereAbfueller(ab2);

System.out.println("\n\nDaten von Objekt getr2 neu");
getr2.ausgeben();

System.out.println("\n\nDaten von Objekt bestellung1");
Bestellung bestellung1 = new Bestellung(123456789, 13, getr2,
3);
bestellung1.ausgeben();
}

public String getBezeichnung() {
return bezeichnung;
}

public double getVerkaufspreis() {
return verkaufspreis;
}

public void aendereAbfueller (Abfueller neuerAbfueller) {
abfueller= neuerAbfueller;
}

  • diverse Methoden

}

  • Ende der Klasse

Vielen, vielen Dank für die Tipps und die Links!
Weisst du zufällig, wie man sich Klasse etc. in Eclipse anschauen kann?
Grüße

Die Klasse beschreibt ein Konzept der Wirklichkeit oder, für fortgeschrittene Programmierer, auch etwas Abstraktes, mit dem im Programm gearbeitet wird. Die Klasse wird durch Eigenschaften beschrieben, die Attribute heißen.

Wenn du eine Plattform schreibst, auf der mehrere User interagieren (Browsergame, soziales Netzwerk etc.), dann wirst du bspw. eine Klasse User anlegen. Dabei fragt man sich immer: WAS ist ein… (in dem Fall: User). Die Antwort ist dann: Ein User hat einen Vornamen, einen Nachnamen, eine Geburtsdatum, einen Wohnort, eine Mailadresse, ein Foto etc. Das sind die Attribute. Die Klasse User sagt nun also was ein User ist und welche Eigenschaften er hat.

Die Klasse User könne grob vereinfacht so aussehen:

public class User {
private String vorname;
private String nachname;
private Date geburtstdatum;

}

Objekte (auch: Instanzen) sind nun Ausprägung dieser Klasse. Hier werden die definierten Attribute der Klasse User mit Werten belegt. Ein Objekt ist jetzt also eine „lebende“ Ausprägung der Klasse. Das kann z.B. Martin Müller, Hans Meyer etc. sein. Ein solches Objekt erfüllt die in der Klasse vorgegebene Struktur.

In Java wird ein Objekt dann wie folgt erstellt:

User hansMeyer = new User( „Hans“, „Meyer“, …). Mit diesen Objekten wird dann halt im Programm gearbeitet.

Methoden sind Programmfunktionen, welche die Attribute eines Objekts ändern oder mit anderen Objekten kommunizieren können. Methoden können auch ganz gewöhnliche Funktionen sein, die was auf dem Bildschirm ausgeben, in eine Datei schreiben etc. Methoden werden mit in der Klasse definiert.

In deinem Beispiel hast du eine Klasse Getränk, welche Getränke der Wirklichkeit im Programm nachbildet. Ein Getränk hat bei dir also eine Bezeichnung, eine Nummer, einen Einkaufspreis etc. Das sind die Attribute. Was danach kommt ist der Konstruktor, damit kannst du auf einfache Weise im Programm Getränke-Objekte anlegen und direkt die Attributwerte definieren.

Die Methode aendereAbfueller() ist eine typische Klassenmethode, die den Objektzustand ändert; hier kann der Abfüller eines bestehenden Objekts nachträglich geändert werden. Die Methode ausgeben() ist eine einfache, herkömmliche Methode, welche die Eigenschaften des Objekts auf der Konsole ausgibt.

Die main-Methode ist der Start ins Programm. Hier werden ein paar Getränke-Objekte angelegt (mit konkreten Attributwerten), bevor dann die ausgeben()-Methode aufgerufen wird, um die Werte auszugeben.

Btw., die main-Methode legt man für gewöhnlich in eine separate Klasse, da sie nichts mit der Klasse Getränk zu tun hat - die ist nur dazu da, um Getränke darzustellen. Aber für den Anfänger ist es ok, das Programm läuft so natürlich auch.

Hoffe das konnte ein wenig helfen.