Klasse: Unterschied zwischen den Versionen
(11 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 5: | Zeile 5: | ||
Eine Klasse stellt eine Vorlage (eine Art Bauplan) für Objekte dar, in denen festgelegt wird, welche Eigenschaften ([[Java_Basis-Sprachelemente#Attribute|Attribute]]) die Objekte haben sollen und was man mit den Objekten machen können soll ([[Java_Basis-Sprachelemente#Methoden|Methoden]]). | Eine Klasse stellt eine Vorlage (eine Art Bauplan) für Objekte dar, in denen festgelegt wird, welche Eigenschaften ([[Java_Basis-Sprachelemente#Attribute|Attribute]]) die Objekte haben sollen und was man mit den Objekten machen können soll ([[Java_Basis-Sprachelemente#Methoden|Methoden]]). | ||
Ausgehend von einer Anforderungsdefinition plant man eine Klasse. I.d.R. beginnt man, indem man ein [[Klassendiagramm]] zeichnet und das dann in Java | Von einer '''Klasse''' können viele '''Objekte''' erzeugt werden.<br/> | ||
Beispiel: Es gibt eine Klasse <code>Baum</code>, von der man viele einzelne Objekte erzeugen kann. | |||
Ausgehend von einer Anforderungsdefinition plant man eine Klasse. I.d.R. beginnt man, indem man ein [[Klassendiagramm]] zeichnet und das dann in Java implementiert. | |||
==Erklärvideos== | |||
* '''[https://youtu.be/JVeAUGX60-A Erklärvideo zu Klassen, Objekten, Attritbuten & Methoden (auf youtube)]'''. <br/>'' (Objekt- und Klassendiagramme kommen auch vor.)<br/>[[Medium:VAB-01 Informatik10 KlassenObjekteAttributeMethoden.pdf|Arbeitsblatt zum Video (PDF)]]. <br/>Zu Teilen der Aufgaben gibt es die Lösung im Video, die anderen Aufgaben werden erst im Unterricht besprochen.<br/><br/> | |||
* '''[https://youtu.be/JPWJJCmwi8A OOP in Java (1): Analyse der Klasse Baum]''' | |||
* '''[https://youtu.be/E3bR5lN5Y9A OOP in Java (2): Programmierung der Klasse Haus]''' | |||
* '''[https://youtu.be/LNBaADc0VU4 OOP in Java (3): Die Klasse Doppelhaus]''' | |||
= Beispiel 1: Die Klasse <code>Baum.java</code>= | = Beispiel 1: Die Klasse <code>Baum.java</code>= | ||
Zeile 13: | Zeile 23: | ||
== Klassendiagramm der Klasse <code>Baum.java</code>== | == Klassendiagramm der Klasse <code>Baum.java</code>== | ||
Detaillierte Erläuterungen zu Klassendiagrammen findet man [[Klassen- und Implementationsdiagramm|hier]]. | |||
{| class="wikitable" | {| class="wikitable" | ||
! '''Baum''' | ! '''Baum''' | ||
Zeile 36: | Zeile 49: | ||
|} | |} | ||
== | == Java Implementierung der Klasse <code>Baum.java</code>== | ||
===Grundstruktur=== | |||
Die Implementierung von Klassen hat den selben Aufbau wie das Klassendiagramm: | |||
<code> | |||
'''public class Baum''' | |||
{ | |||
// Attribute | |||
// Konstruktor (oder mehrere Konstruktoren) | |||
// Methoden | |||
} | |||
</code> | |||
===Beispiel: Implementierung der Klasse Baum=== | |||
Hier ist die vollständige Implementierung der Klasse Baum:<br/> | |||
''Für Erläuterungen einfach auf die Links in den Kommentaren klicken!'' | |||
<code> | <code> | ||
'''// Klassendeklaration''' | '''// Klassendeklaration''' | ||
Zeile 42: | Zeile 74: | ||
{ | { | ||
'''// Attribute''' | '''// [[Java_Basis-Sprachelemente#Attribute|Attribute]]''' | ||
private Quadrat stamm; | private Quadrat stamm; | ||
private Kreis krone; | private Kreis krone; | ||
private boolean istRot; | private boolean istRot; | ||
'''// Konstruktor''' | '''// [[Java_Basis-Sprachelemente#Konstruktor|Konstruktor]]''' | ||
public Baum() | public Baum() | ||
{ | { | ||
Zeile 53: | Zeile 85: | ||
stamm = new Quadrat(); | stamm = new Quadrat(); | ||
'''// Aufruf einer Methode fuer ein anderes Objekt.''' | '''// [[Java_Basis-Sprachelemente#Methoden_für_Objekte_anderer_Klassen_aufrufen|Aufruf einer Methode fuer ein anderes Objekt.]]''' | ||
'''// Attributname -> Punkt -> Methodenname | '''// Attributname -> Punkt -> Methodenname | ||
'''// Es wird ein Parameter uebergeben (30)''' | '''// Es wird ein Parameter uebergeben (30)''' | ||
Zeile 72: | Zeile 104: | ||
sichtbarMachen(); | sichtbarMachen(); | ||
} | } | ||
'''// [[Java_Basis-Sprachelemente#Methoden|Methoden]]''' | |||
'''// Methode OHNE Rueckgabe und OHNE Parameter: Schluesselwort void, leere Klammern ()''' | '''// Methode OHNE Rueckgabe und OHNE Parameter: Schluesselwort void, leere Klammern ()''' | ||
Zeile 83: | Zeile 117: | ||
public void horizontalBewegen(int distanz) | public void horizontalBewegen(int distanz) | ||
{ | { | ||
'''//die Aufgabe wird an stamm und krone <u>delegiert</u>.''' | |||
'''//der Parameter wird weiterverwendet''' | '''//der Parameter wird weiterverwendet''' | ||
stamm.horizontalBewegen(distanz); | stamm.horizontalBewegen(distanz); | ||
Zeile 105: | Zeile 140: | ||
public boolean hatGrueneBlaetter() | public boolean hatGrueneBlaetter() | ||
{ | { | ||
'''// [[Java_Basis-Sprachelemente#lokale_Variable|lokale Variable]]''' | |||
// die lokale Variable ergebnis deklarieren | |||
// und mit true initialisieren | |||
// ergebnis wird am Ende zurueckgegeben! | |||
boolean ergebnis = true; | |||
'''// [[Java_Basis-Sprachelemente#Bedingungen_(if-else)|Bedingung]] ''' | |||
if(istRot == true) | |||
{ | |||
// wenn der Baum rot ist... | // wenn der Baum rot ist... | ||
// ... hat er keine gruenen Blaetter! | // ... hat er keine gruenen Blaetter! | ||
ergebnis = false; | ergebnis = false; | ||
} | |||
// '''return-Statement: der zurueckgegebene Wert muss den Typ haben''' | |||
// '''wie im Methodenkopf angegeben. (Hier: boolean) | |||
return ergebnis; | |||
} | } | ||
Zeile 136: | Zeile 177: | ||
== Klassendiagramm der Klasse <code>Benutzer</code> == | == Klassendiagramm der Klasse <code>Benutzer</code> == | ||
Im Klassendiagramm wurden aus Platzgründen nur Teile der sinnvollen Methoden aufgeführt. | Im Klassendiagramm wurden aus Platzgründen nur Teile der sinnvollen Methoden aufgeführt. | ||
Detaillierte Erläuterungen zu Klassendiagrammen findet man [[Klassen- und Implementationsdiagramm|hier]]. | |||
{| class="wikitable" | {| class="wikitable" |
Aktuelle Version vom 10. Juli 2024, 10:20 Uhr
Was ist eine Klasse?
Eine Klasse stellt eine Vorlage (eine Art Bauplan) für Objekte dar, in denen festgelegt wird, welche Eigenschaften (Attribute) die Objekte haben sollen und was man mit den Objekten machen können soll (Methoden).
Von einer Klasse können viele Objekte erzeugt werden.
Beispiel: Es gibt eine Klasse Baum
, von der man viele einzelne Objekte erzeugen kann.
Ausgehend von einer Anforderungsdefinition plant man eine Klasse. I.d.R. beginnt man, indem man ein Klassendiagramm zeichnet und das dann in Java implementiert.
Erklärvideos
- Erklärvideo zu Klassen, Objekten, Attritbuten & Methoden (auf youtube).
(Objekt- und Klassendiagramme kommen auch vor.)
Arbeitsblatt zum Video (PDF).
Zu Teilen der Aufgaben gibt es die Lösung im Video, die anderen Aufgaben werden erst im Unterricht besprochen. - OOP in Java (1): Analyse der Klasse Baum
- OOP in Java (2): Programmierung der Klasse Haus
- OOP in Java (3): Die Klasse Doppelhaus
Beispiel 1: Die Klasse Baum.java
Hier werden beispielhaft das Klassendiagramm und der Quelltext der Klasse Baum
dokumentiert.
Im Detail erläutert werden die einzelnen Sprachelemente hier: Java Basis-Sprachelemente.
Klassendiagramm der Klasse Baum.java
Detaillierte Erläuterungen zu Klassendiagrammen findet man hier.
Baum |
---|
- stamm: Quadrat
- krone: Kreis - istRot: boolean |
+ Baum()
+ sichtbarMachen() + horizontalBewegen(pDistanz: int) + fruehling() + herbst() + hatGrueneBlaetter(): boolean |
Java Implementierung der Klasse Baum.java
Grundstruktur
Die Implementierung von Klassen hat den selben Aufbau wie das Klassendiagramm:
public class Baum
{
// Attribute
// Konstruktor (oder mehrere Konstruktoren)
// Methoden
}
Beispiel: Implementierung der Klasse Baum
Hier ist die vollständige Implementierung der Klasse Baum:
Für Erläuterungen einfach auf die Links in den Kommentaren klicken!
// Klassendeklaration
public class Baum
{
// Attribute
private Quadrat stamm;
private Kreis krone;
private boolean istRot;
// Konstruktor
public Baum()
{
// Aufruf eines Konstruktors: Schluesselwort new
stamm = new Quadrat();
// Aufruf einer Methode fuer ein anderes Objekt.
// Attributname -> Punkt -> Methodenname
// Es wird ein Parameter uebergeben (30)
stamm.groesseAendern(30);
// hier werden zwei Parameter uebergeben; getrennt durch Kommas.
stamm.bewegeZuPosition(30,60);
// hier wird ein String als Parameter uebergeben: "schwarz"
stamm.farbeAendern("schwarz");
krone = new Kreis();
krone.bewegeZuPosition(20,20);
krone.groesseAendern(50);
krone.farbeAendern("gruen");
istRot = false;
//Aufruf einer Methode der Klasse Baum
sichtbarMachen();
}
// Methoden
// Methode OHNE Rueckgabe und OHNE Parameter: Schluesselwort void, leere Klammern ()
public void sichtbarMachen()
{
stamm.sichtbarMachen();
krone.sichtbarMachen();
}
//Methode mit einem Parameter: (Parametertyp Parametername)
public void horizontalBewegen(int distanz)
{
//die Aufgabe wird an stamm und krone delegiert.
//der Parameter wird weiterverwendet
stamm.horizontalBewegen(distanz);
krone.horizontalBewegen(distanz);
}
// Methode OHNE Rueckgabe und OHNE Parameter: Schluesselwort void, leere Klammern ()
public void herbst()
{
krone.farbeAendern("rot");
istRot = true;
}
// Methode OHNE Rueckgabe und OHNE Parameter: Schluesselwort void, leere Klammern ()
public void fruehling()
{
krone.farbeAendern("gruen");
istRot = false;
}
//Methode mit einem Rueckgabetyp: boolean
public boolean hatGrueneBlaetter()
{
// lokale Variable
// die lokale Variable ergebnis deklarieren
// und mit true initialisieren
// ergebnis wird am Ende zurueckgegeben!
boolean ergebnis = true;
// Bedingung
if(istRot == true)
{
// wenn der Baum rot ist...
// ... hat er keine gruenen Blaetter!
ergebnis = false;
}
// return-Statement: der zurueckgegebene Wert muss den Typ haben
// wie im Methodenkopf angegeben. (Hier: boolean)
return ergebnis;
}
}
Beispiel 2: Die Klasse Benutzer
Anforderungsbeschreibung einer Klasse Benutzer
Ein paar Oberstufenschüler planen, ein asoziales Netzwerk zu gründen. Die Nutzer des Netzwerkes sollen durch eine Klasse Benutzer
realisiert werden. Zu jedem Nutzer sollen folgende Informationen gespeichert werden:
- Nachname und Vorname des Nutzers
- Alter des Nutzers
- ob der Nutzer Brillenträger ist
- der andere Nutzer des Netzwerks, auf dessen Profil der Nutzer am häufigsten geklickt hat
Außerdem sollen folgende Aktionen auf Benutzer
-Objekte angewendet werden können:
- man soll den Vornamen und Nachnamen eines
Benutzer
-Objektes auslesen können (-> get-Methode) - man soll das Alter eines Nutzers eintragen bzw. ändern können (-> set-Methode)
- falls ein Benutzer nun Brillenträger ist, soll man den entsprechenden Attributwert ändern können
- falls ein Benutzer einen neuen Lieblingsnutzer hat, soll dieser eingetragen werden können
Klassendiagramm der Klasse Benutzer
Im Klassendiagramm wurden aus Platzgründen nur Teile der sinnvollen Methoden aufgeführt.
Detaillierte Erläuterungen zu Klassendiagrammen findet man hier.
Benutzer |
---|
- nachname: String
- vorname: String - alter: int - brillentraeger: boolean - lieblingsnutzer: Benutzer |
+ Benutzer(pNachname: String, pVorname: String, pAlter: int)
+ getNachname(): String + getVorname(): String + traegtNunBrille() + setLieblingsNutzer(pNeuerLiebling: Benutzer) |
Umsetzung der Klasse in Java
public class Benutzer
{
// Attribute
private String nachname;
private String vorname;
private int alter;
private boolean brillentraeger;
private Benutzer lieblingsnutzer;
// Konstruktor
public Benutzer(String pNachname, String pVorname, int pAlter)
{
nachname = pNachname;
vorname = pVorname;
alter = pAlter;
brillentraeger = false;
lieblingsnutzer = null;
}
// weitere Methoden
public String getNachname()
{
return nachname;
}
public String getVorname()
{
return vorname;
}
public void traegtNunBrille()
{
brillentraeger = true;
}
public void setLieblingsNuetzer(Benutzer pNeuerLiebling)
{
lieblingsnutzer = pNeuerLiebling;
}
}