drei gezeichnete Schafe

Objekte und Klassen



Quellen: E. Fuchs, "Java 9 Grundlagen Programmierung", Herdt Verlag, 2017

Java ist eine objektorientierte Programmiersprache. Objekte haben Eigenschaften (engl. states) und Fähigkeiten (engl. behaviors). Eine Klasse beschreibt, welche Eigenschaften und Fähigkeiten ein Objekt haben darf und stellt somit den Bauplan für jedes Objekt.

In diesem Artikel lernst Du den Aufbau von Objekten und Klassen und deren Anwendung kennen.

Klassen und Objekte und deren Eigenschaften - Attribute

Zeichnung zweier unterschiedlicher Schafe

Stellen wir uns eine Herde vor, die aus vielen Schafen besteht. Dabei unterscheidet sich jedes Schaf in seinen Eigenschaften wie Name, Alter und Gewicht. Diese Eigenschaften werden auch als Attribute bezeichnet.

Jedes dieser Tiere gehört nun zur Gruppe der Schafe: Wir sprechen von der Klasse Schaf. Ein Schaf mit dem Namen Berta, 2 Jahre und 30 kg ist ein Objekt der Klasse Schaf. Somit stellt eine Klasse einen Bauplan für die Objekte bereit.

Erstellen der Klasse Schaf

Wir definieren nun die Klasse Schaf. Jede Klasse beginnt mit einem Modifier (hier public), dann dem Schlüsselwort class und dem Klassennamen (hier Schaf). Dabei ist darauf zu achten, dass der Klassenname mit einem Großbuchstaben beginnt.

Auch die Attribute werden im Vergleich zu lokalen Variablen mit einem Modifier versehen. Darüber hinaus muss jedes Attribut mit einem Datentyp versehen werden.

public class Schaf{
  public String name;
  public int alter;
  public double gewicht;
}

Erzeugen von Objekten, Eigenschaften zuweisen und ausgeben

Wir definieren nun die Klasse Schafherde. In dieser werden nun einzelne Schafe als Objekte erzeugt, Attribute zugewiesen und die Werte ausgegeben.

public class Schafherde {
  public static void main(String[] args) {
    Schaf s1;		//Variable s1 vom Typ Schaf
    s1 = new Schaf();	//Objekterzeugung mit Schlüsselwort new
    s1.name = "Emma";	//Zugriff Eigenschaften mit Punktoperator
    s1.alter = 20;

    Schaf s2 = new Schaf(); //neues Objekt erzeugen
    s2.gewicht = 50;

    // Ausgabe der Eigenschaftswerte der beiden Objekte
    System.out.println("Name: " + s1.name + " Alter: " + s1.alter);
    System.out.println("Gewicht: " + s2.gewicht );
  } 
}	

Objekte sind Variablen und müssen definiert werden. Dies wird typischerweise in 2 Schritten gemacht:

  1. Variablendefinition: Schaf s1;
  2. Objekterzeugung: s1 = new Schaf();

Man kann es aber auch zu einem Schritt zusammenfassen: Schaf s1 = new Schaf();

Der Zugriff auf die Eigenschaften eines Objekts erfolgt mit dem Punktoperator.
Zuweisung: s1.name = "Emma"
Zugriff: String ausgabe = s1.name;

Aufgabe 1 Die Schafherde

Erstelle die Klasse Schaf und Schafherde.

  1. Lege eine neues "Java Projekt" mit alt Strg N namens 10-Objektorientierung an.
  2. Erstelle die Klasse Schaf und deklariere vier Attribute (Eigenschaften). Achte darauf, dass du drei verschiedene Datentypen verwendest: String, int, double.
  3. Erstelle die Klasse Schafherde. Erzeuge drei Schafe als Objekte und weiße jedem Schaf jeden Attributwert zu. Gib eine Liste der Werte für jedes Schaf aus.
  4. Füge ein weiteres Attribut boolean geschlecht hinzu. Lass den Benutzer wählen, ob er die Mutterschafe oder Schafböcke gelistet haben möchte.

    Wähle weiblich für true und männlich für false.

Schafherde

Die Ausgabe sollte wie folgt aussehen:

Folgende Mutterschafe sind in der Herde:
Emma ist 20 Jahre alt, weiß und wiegt 50.0 kg.
Berta ist 8 Jahre alt, braun und wiegt 30.0 kg.

Folgende Schafböcke sind in der Herde:
Günter ist 12 Jahre alt, gefleckt und wiegt 62.0 kg.


Aufgabe 2 Der Fuhrpark

Erstelle die Klasse Auto und Fuhrpark.

zwei Autos
  1. Erstelle die Klasse Auto und deklariere folgende Attribute (Eigenschaften):
    public String marke,
    public String modell,
    public String farbe,
    public int leistung,
    public double LiterPro100km,
    public double tankstand,
    public boolean tankwarnung.
  2. Erstelle die Klasse Fuhrpark. Erzeuge zwei Autos als Objekte und weise jedem Auto jeden Attributwert zu. Gib eine Liste der Werte für jedes Auto aus.
  3. Bei einem Tankstand unter 10 l, setze tankwarnung = true, empfehle das Tanken und gib in Abhängigkeit des Spritverbrauchs die Reichweite aus.

Die Ausgabe sollte wie folgt aussehen:

Marke: VW
Typ: Polo
Verbrauch: 4.7 l/100 km
Tankstand: 3.2 l

Sie sollten tanken. Ihre Reichweite beträgt noch 68 km.


Klassen und Objekte und deren Fähigkeiten - Methoden

Methoden: Die Fähigkeiten der Klassen

Objekte haben auch Fähigkeiten, welche in der Klasse als Methoden definiert werden.

Damit ein Schaf einen Laut geben kann definieren wir folgende Methode in der Klasse Schaf:

public void gebenLaut (){
  System.out.println("Mäh!");
}

Der Methodenaufruf in der Klasse Schafherde ist objektgebunden und erfolgt mit dem Punktoperator.

  s1.gebenLaut();
Zeichnung zweier Schafe
	
public void fressenGras(int menge) {
  this.gewicht = this.gewicht + menge*0.5;
  System.out.println("Yummy!");
}
	
public double erhalteGewicht() {
  System.out.println("Ich gebe was zurück.");
  return this.gewicht;
}

Methoden mit Parameter erstellen

Möchte man ein Schaf Gras fressen lassen, ist es sinnvoll die Menge als Parameter zu übergeben. In der Methode kann man dann beispielsweise eine Gewichtszunahme in Abhängigkeit von der Grasmenge berechnen.

Methoden überladen

Innerhalb einer Klasse kann es mehrere Methoden einer Klasse geben. Anhand der Anzahl der Parameter oder der Datentypen der Parameter ordnet die Kasse dann automatisch die richtige Methode zu. So muss der Methodenname und die Parameter (auch Signatur) eindeutig sein.

	
public void fressen(int menge) {
  this.gewicht = 
this.gewicht +
menge*0.5; System.out.println("Yummy!"); }
public void fressen(int mengeBrokoli, int mengeKarotten) {
  this.gewicht = 
this.gewicht +
mengeBrokoli*0.7 +
mengeKarotten*0.3; System.out.println("Yummy!"); }

Aufgabe 3 Ordne zu

Autoren: Klasse EFS320
Ordne die korrekte Antwort zu.

Erzeuge ein neues Objekt.
Wähle eine Antwort.

  1. Auto1 = Auto();
  2. Auto a1 = new Auto();
  3. a2 = new Auto;
  4. Auto2 a = new Auto();

Erkläre den Begriff "Attribut".
Wähle eine Antwort.

  1. Eigenschaften von Java
  2. verschiedene Datentypen (public, String, int, double etc.)
  3. die Deklaration von Methoden
  4. Eigenschaften von Objekten

Finde die Anzahl der Fehler im folgenden Quelltext.

private double gewicht;
private String name;

public int fressenHeu(int menge){
 this.gewicht = gewicht + menge*0,86;
 return this.name;
}

Finde die Anzahl der Fehler im folgenden Quelltext.

public class Schaf {
  public string name;
  public double gewicht;
  public double wert;
  public int alter;
  public boolean geschlecht;
}

Bestimme die zugehörige Methode, zum Methodenaufruf s1.fressenGras(4);. Wähle eine Antwort.

  1. private void fressenGras(int menge){...}
  2. public void gebenLaut(){....}
  3. public void fressenGras(int menge){...}
  4. protected void fressenGras(int menge){...};

Bestimme den Zweck des Schlüsselworts void in Methoden.
Wähle eine Antwort.

  1. Die Methode gibt keinen Wert zurück.
  2. Die Methode gibt einen Wert zurück.
  3. Die Methode gibt mehrere Werte zurück.
  4. Es kennzeichnet die Methode als private

Worum handelt es sich bei überladenen Methoden?
Wähle eine Antwort.

  1. Methoden die zu häufig aufgerufen wurden
  2. Methoden mit gleichen Parametern aber unterschiedlichem Namen
  3. Methoden die zu umfangreich sind
  4. Methoden mit gleichen Namen, aber unterschiedlichen Parametern

Bestimme den Zweck der Referenzvariable this in Java.
Wähle eine Antwort.

  1. sie ist bloß zwecks der Schönheit des Codes da
  2. wird verwendet, um auf Eigenschaften der eigenen Klasse zu verweisen
  3. wird verwendet um auf eine andere Klasse zu referenzieren
  4. schließt das entsprechende Attribut aus der eigenen Klasse

Aufgabe 4 Fähigkeiten der Schafe

Die Schafe sollen mit Fähigkeiten ausgestattet werden.

  1. Erweitere die Klasse Schaf mit den vier folgenden Methoden:
    public void gebenLaut () {..},
    public void fressen(int menge) {..},
    public double erhalteGewicht() {..},
    public void fressen(int mengeGras, int mengeKohl ) {..}
  2. Teste in der Klasse Schafherde die neuen Funktionen ausführlich. Lass alle Änderungen der Attribute jeweils anzeigen.
  3. Erfinde für die Klasse Schaf eine weitere Funktionalität, welche das Niveau Deiner Objekte verbessert.
Zeichnung zweier Schafe

Die Lösung sollte bspw. folgendermaßen aussehen:

Das weiße Schaf Emma sagt: Mäh!
Das weiße Schaf Emma wiegt 50.0kg.
Das braune Schaf Berta sagt: Mäh!

Das Schaf Emma frisst 5 kg Gras.
Das weiße Schaf Emma wiegt 51.5kg.

Das Schaf Emma frisst 2 kg Gras und 5 kg Kohl.
Das weiße Schaf Emma wiegt 55.6kg.

Entspann dich erstmal ...



Ameisen in Thailand

In Hamburg lebten zwei Ameisen,
Die wollten nach Australien reisen.
Bei Altona auf der Chaussee,
Da taten ihnen die Beine weh,
Und da verzichteten sie weise
Dann auf den letzten Teil der Reise.

Aufgabe 5 Fähigkeiten der Autos

Die PKW's sollen mit Fähigkeiten ausgestattet werden.

  1. Erweitere die Klasse Auto mit den folgenden Methoden:
    public void fahrenStrecke (int km) {..},
    public double tanken() {..},
    public double tanken(int menge) {..},
    public double erhalteReichweite () {..}
  2. Teste in der Klasse Fuhrpark die neuen Funktionen ausführlich. Lass alle Änderungen der Attribute jeweils anzeigen.
  3. Wiederhole in einer Schleife die Distanzabfrage solange, bis der Nutzer den Wert 0 eingibt. Bei einem Tankstand von weniger als 10 l wird eine Tankwarnung angezeigt und die Möglichkeit zum Tanken gegeben.
Zeichnung zweier Autos

Die Lösung sollte bspw. folgendermaßen aussehen:

Ihnen steht folgendes Autos zur Verfügung:
Mercedes GLS metallic schwarz
Leistung: 230 PS
Verbrauch: 12.4 l/100km
Tankstand: 20.0 l

Welche Distanz wollen Sie mit dem Mercedes zurücklegen? 100
Fahrstrecke: 100 km
Verbrauch: 12.4 l
Neuer Tankstand: 7.6 l Wollen Sie tanken (j/n)? j
Ihr neuer Tankstand: 17.6 l

Wortliste und Satzbausteine



das Objekt, -e Objekte haben Eigenschaften (engl. states) und Fähigkeiten (engl. behaviors). Diese werden in einer zugehörigen Klasse festgelegt.
die Klasse, -n Eine Klasse beschreibt, welche Eigenschaften und Fähigkeiten ein Objekt haben darf und stellt somit den Bauplan von Objekten bereit.
die Fähigkeit, -en Fähigkeiten von Objekten werden in Methoden beschrieben.
die Eigenschaft, -en Eigenschaften von Objekten werden in Attributen/Variablen festgelegt.
der Modifier, ~ legt fest ob Eigenschaften und Fähigkeiten privat oder öffentlich zugänglich sind
das Überladen einer Methode Existieren mehrere Methoden gleichen Namens spricht man vom Überladen. Dabei muss die Signatur eindeutig sein.
die Signatur, -en Methodenname und Parameter einer Methode.
die Parameter­liste, -n eine Liste von Datentypen mit Variablennamen, welche beim Methodenaufruf übergeben werden