SemaTrain Logo Ein Fachportal von SemaTrain

OOP: Klassen & Objekte

Sie steigen in OOP ein: Klassen als Bauplan, Objekte als Instanzen – mit Feldern, Methoden und einem ersten Mini-Modell im SemaTrain-Kontext.

Hinweis: Beispiele nutzen Beispieldaten (didaktisch, nicht verbindlich).

Java Grundlagen Schulung – Kursbezug

Dieses Kapitel ist Teil des Lernpfads zur Java Grundlagen Schulung. Termine & Buchung laufen über SemaTrain.de.

Hinweis: Beispiele sind kursnah, aber mit Beispieldaten.

Ziel dieses Kapitels: Sie können eine Klasse als „Bauplan“ schreiben, daraus Objekte erzeugen, Felder/Methoden nutzen und mit einem Konstruktor sauber initialisieren.

Worum geht’s?

Lehr-Lernziele

Nach diesem Kapitel können Sie …

Wie Ziele erreicht werden: Beispiele führen Sie von „1 Klasse“ → „2 Objekte“ → „Methoden am Objekt“ (LZ1–LZ3). Quiz prüft Begriffe und typische Fehler (LZ1–LZ4). Mini-Projekt zwingt dazu, Kurs/Teilnehmer als Objekte zu modellieren und Regeln als Methoden zu kapseln (LZ1–LZ3).

Klasse vs. Objekt

Beispiel: Klasse (Bauplan) und zwei Objekte (LZ1) (Java)
public class Kurs {
  String name;
  String format;   // "Online" oder "Praesenz"
  int dauerTage;

  void druckeKurz() {
    System.out.println(name + " | " + format + " | " + dauerTage + " Tage");
  }

  public static void main(String[] args) {
    // Objekt 1
    Kurs k1 = new Kurs();
    k1.name = "Java Grundlagen Schulung";
    k1.format = "Online";
    k1.dauerTage = 3;

    // Objekt 2
    Kurs k2 = new Kurs();
    k2.name = "Java Grundlagen Schulung";
    k2.format = "Praesenz";
    k2.dauerTage = 3;

    k1.druckeKurz();
    k2.druckeKurz();
  }
}

Konstruktor & this

Konstruktor = Startzustand. this referenziert das aktuelle Objekt.

Beispiel: Konstruktor + this + Objektmethoden (LZ1–LZ3) (Java)
public class Kurs {
  String name;
  String format;
  int dauerTage;
  double preis; // Beispielwert

  // Konstruktor
  Kurs(String name, String format, int dauerTage, double preis) {
    this.name = name;
    this.format = format;
    this.dauerTage = dauerTage;
    this.preis = preis;
  }

  boolean istOnline() {
    return format != null && format.equals("Online");
  }

  String ortFuerAusgabe(String ort) {
    return istOnline() ? "remote" : ort;
  }

  void druckeKurz(String ort) {
    System.out.println(
      name + " | " + (istOnline() ? "Online" : "Praesenz") +
      " | Ort: " + ortFuerAusgabe(ort) +
      " | " + dauerTage + " Tage" +
      " | Preis (Beispiel): " + preis + " €"
    );
  }

  public static void main(String[] args) {
    Kurs kurs = new Kurs("Java Grundlagen Schulung", "Online", 3, 1490.00);
    kurs.druckeKurz("Hamburg");
  }
}

static vs. Instanz

Instanzmethoden arbeiten mit dem Zustand des Objekts (Felder). static gehört zur Klasse selbst (z.B. Hilfsmethode, die ohne Objekt funktioniert).

Beispiel: static Hilfsmethode (LZ4) (Java)
public class PreisHelper {

  static double endpreis(double preis, double rabattProzent) {
    return preis * (1 - rabattProzent);
  }

  public static void main(String[] args) {
    double preis = 1490.00;
    System.out.println(endpreis(preis, 0.10)); // 10% (Beispiel)
  }
}

Praxisaufgabe (Mini)

Sie modellieren Kursdaten als Objekt – und kapseln Regeln als Methoden am Objekt.

Beitrag zu den Lehr-Lernzielen: LZ1 (Objekte erstellen), LZ2 (Konstruktor), LZ3 (Regeln als Methoden), optional LZ4 (static Helper).

  1. Erstellen Sie eine Klasse Kurs mit Feldern: name, format, dauerTage, preis.
  2. Schreiben Sie einen Konstruktor, der alle Felder setzt.
  3. Schreiben Sie Methoden: istOnline(), ortFuerAusgabe(String ort), druckeKurz(String ort).
  4. Bonus: static Helper endpreis(double preis, boolean rabattAktiv) (10% als Beispielregel).
Lösung anzeigen
Lösung: Kurs als Klasse + Objektmethoden (LZ1–LZ4, Beispielwerte) (Java)
public class Kurs {

  String name;
  String format;
  int dauerTage;
  double preis; // Beispiel

  Kurs(String name, String format, int dauerTage, double preis) {
    this.name = name;
    this.format = format;
    this.dauerTage = dauerTage;
    this.preis = preis;
  }

  boolean istOnline() {
    return format != null && format.equals("Online");
  }

  String ortFuerAusgabe(String ort) {
    return istOnline() ? "remote" : ort;
  }

  static double endpreis(double preis, boolean rabattAktiv) {
    double rabatt = rabattAktiv ? 0.10 : 0.0; // Beispielregel
    return preis * (1 - rabatt);
  }

  void druckeKurz(String ort) {
    boolean rabattAktiv = istOnline() && dauerTage >= 3; // Beispielregel
    double end = endpreis(preis, rabattAktiv);

    System.out.println(
      "Kurs: " + name +
      " | Format: " + (istOnline() ? "Online" : "Praesenz") +
      " | Ort: " + ortFuerAusgabe(ort) +
      " | Dauer: " + dauerTage + " Tage" +
      " | Preis (Beispiel): " + end + " €"
    );
  }

  public static void main(String[] args) {
    Kurs kurs = new Kurs("Java Grundlagen Schulung", "Online", 3, 1490.00);
    kurs.druckeKurz("Hamburg");
  }
}
Optional: typische Stolperfallen
  • Felder nicht initialisiert: Konstruktor nutzen, um „halbe“ Objekte zu vermeiden (LZ2).
  • static/Instanz verwechselt: Instanzmethoden arbeiten mit Feldern, static nicht (LZ4).
  • Zu viel Logik in main(): Regeln in Methoden der Klasse kapseln (LZ3).

Kurz-Takeaways

Quiz: Klassen & Objekte (OOP-Basics)

1. Was beschreibt eine Klasse am besten? (LZ1)

2. Wofür nutzt man einen Konstruktor? (LZ2)

3. Wofür steht this im Konstruktor? (LZ2)

4. Welche Aussage zu static stimmt? (LZ4)

Praxisaufgabe

Mini-Projekt: Teilnehmer + Kurs als Objekte

Sie modellieren zwei Dinge als Klassen und lassen sie zusammenarbeiten: Teilnehmer und Kurs.

Beitrag zu den Lehr-Lernzielen:
LZ1 (Objekte erzeugen), LZ2 (Konstruktoren), LZ3 (Methoden kapseln Regeln/Ausgabe), optional LZ4 (static Helper).

Aufgabe

Lösung anzeigen
Lösung: Teilnehmer + Kurs als Objekte (OOP-Basics) (Java)
class Teilnehmer {
  String name;
  String firma;
  int erfahrungsjahre;

  Teilnehmer(String name, String firma, int erfahrungsjahre) {
    this.name = name;
    this.firma = firma;
    this.erfahrungsjahre = erfahrungsjahre;
  }
}

class Kurs {
  String name;
  String format;  // "Online" oder "Praesenz"
  int dauerTage;
  double preis;   // Beispielwert

  Kurs(String name, String format, int dauerTage, double preis) {
    this.name = name;
    this.format = format;
    this.dauerTage = dauerTage;
    this.preis = preis;
  }

  boolean istOnline() {
    return format != null && format.equals("Online");
  }

  String ortFuerAusgabe(String ort) {
    return istOnline() ? "remote" : ort;
  }

  double endpreisBeispiel() {
    boolean rabatt = istOnline() && dauerTage >= 3;
    return preis * (rabatt ? 0.90 : 1.0); // 10% Beispiel
  }

  void druckeZusammenfassung(Teilnehmer t, String ort) {
    System.out.println(
      "TN: " + t.name + " (" + t.firma + ", " + t.erfahrungsjahre + "J)" +
      " | Kurs: " + name +
      " | Format: " + (istOnline() ? "Online" : "Praesenz") +
      " | Ort: " + ortFuerAusgabe(ort) +
      " | Dauer: " + dauerTage + " Tage" +
      " | Preis (Beispiel): " + endpreisBeispiel() + " €"
    );
  }
}

public class MiniProjektOOP {
  public static void main(String[] args) {
    Teilnehmer t = new Teilnehmer("Max Beispiel", "Beispiel GmbH", 2);
    Kurs k = new Kurs("Java Grundlagen Schulung", "Online", 3, 1490.00);

    k.druckeZusammenfassung(t, "Hamburg");
  }
}