In der objektorientierten Programmierung begrenzt man normalerweise den Zugriff von Objekteigenschaften (Attribute) auf die Methoden einer Klasse. Man spricht von Kapselung. Gleichzeitig möchte man direkt beim Erzeugen eines neuen Objektes dessen Attribute setzen. Dies ist möglich mit dem sogenannten Konstruktor.
In diesem Artikel lernst Du set- und get-Methoden, die Bedeutung der Modifier, das UML-Klassendiagramm und Konstruktoren kennen.
Leuchtmittel werden folgende Eigenschaften für die Leuchtmittel definiert: Leistungsaufnahme P in W (Watt), Spannung U in V (Volt) und Strom I in A (Ampere). Die Leistung kann mit P = U ⋅ I berechnet werden.
public class Leuchtmittel{
public double spannung;
public double strom;
public double leistung;
}
LampeEine Wagenradlampe der Klasse Lampe besteht aus Objekten der Leuchtmittel. Wir erstellen nun ein Objekt:
public class Lampe {
public static void main(String[] args) {
Leuchtmittel l1 = new Leuchtmittel(); //Objekterzeugung L1
l1.spannung = 230.0;
l1.strom = -0.1; //Problem: negativer Wert
l1.leistung = 60.0; //Problem: P ist von U und I abhängig
}
}
Folgende Probleme treten auf:
Lampe kann die Leistung unabhängig von Spannung und Strom setzen. Die Leistung eines Leuchtmittels ist aber von dessen Spannung und Stromaufnahme abhängig. So können Leuchtmittel entstehen, die es in der realen Welt gar nicht gibt.LeuchtmittelWir ersetzen den Modifier der Attribute in der Klasse Leuchtmittel beschränkt. Diesen Vorgang nennt man Kapselung. Man schirmt die Attribute vom Zugriff aus anderen Klassen ab.
Um nun die Werte noch ändern zu können benötigt man die sogenannten set-Methoden; für den Wertzugriff die get-Methoden.Der indirekte Zugriff auf die Leuchtmittelattribute erfolgt aus der Klasse Lampe:
public class Lampe {
public static void main(String[] args) {
Leuchtmittel l1 = new Leuchtmittel(); //Objekterzeugung l1
l1.setSpannung(230.0);
l1.setStrom(0.1);
System.out.println(l1.getLeistung());
}
}
public class Leuchtmittel{
private double spannung = 0;
private double strom = 0;
private double leistung = 0;
public void setSpannung(double u){
if(u<=0) System.out.println("Wert fehlerhaft");
this.spannung = u;
this.leistung = u * this.strom;
}
public void setStrom(double i){
if(i<=0) System.out.println("Wert fehlerhaft");
this.strom = i;
this.leistung = i * this.spannung;
}
public double getLeistung(){
return this.leistung;
}
}
| Modifier | Die Klasse selbst | Paketklassen und innere Klassen | Unterklassen | sonstige Klassen |
|---|---|---|---|---|
| private | ✓ | ✗ | ✗ | ✗ |
| public | ✓ | ✓ | ✓ | ✓ |
| protected | ✓ | ✓ | ✓ | ✗ |
| ohne | ✓ | ✓ | ✗ | ✗ |
Erstelle die Klasse Leuchtmittel und Beleuchtung.
Leuchtmittel und deklariere die Attribute private double spannung, private double strom, private double leistung und private double dimmfaktor.public void setSpannung(double u){ },public void setStrom(double i){ },public double getLeistung(){ },public void setDimmfaktor(double f){ },public double getDimmfaktor(){ }.Beleuchtung. Erzeuge drei Leuchtmittel als Objekte und weiße jedem Leuchtmittel Strom, Spannung zu.
Mit Hilfe von Konstruktoren kann man beim Erzeugen neuer Objekte, dessen Attribute initialisieren. Der Konstruktor ist eine Methode die beim Erzeugen eines Objekts aufgerufen wird und den identischen Namen wie die Klasse hat. Der Standardkonstruktor für die Klasse Schaf sieht wie folgt aus:
public class Schaf{
public String name;
public int alter;
public Schaf (){ }
}
Um nun Standardwerte zu vergeben oder beim Erzeugen des Objekts die Attribute zu setzen, wird die Konstruktormethode überladen.
void wird nicht verwendet. Sobald man einen neuen Konstruktor erstellt, existiert der alte Standardkonstruktor nicht mehr.
public class Schaf{
private String name;
private int alter;
public Schaf (){
this.name="anyname";
}
public Schaf (String name, int alter){
this.name = name;
this.setAlter(alter);
}
}
public class Schafherde {
public static void main(String[] args) {
//Aufruf des Standardkonstruktors
Schaf s1 = new Schaf();
//Konstruktoraufruf mit Parameter
Schaf s2 = new Schaf("Emma",20);
}
}
Konstruktoren werden nun beim Erzeugen der Objekte aufgerufen. Der Aufruf muss entsprechend zu einer der Konstruktormethoden passen.
Nenne die Klasse, welche auf ein private Attribut Zugriff hat.
Wähle eine Antwort.
Nenne Vorteile der Kapselung.
Wähle zwei Antworten.
Finde die Anzahl der Fehler im folgenden Quelltext.
public double setStrom(double i){
if(i<=0) System.out.println("Wert fehlerhaft");
strom = i;
this.leistung = i * this.spannung;
}
Finde die Anzahl der Fehler im folgenden Quelltext.
private double leistung;
public int getLeistung(double p){
return this.leistung;
}
Bestimme die zugehörige Konstruktormmethode, zum Konstruktoraufruf Schaf s2 = new Schaf(20,23.3);. Wähle eine Antwort.
public Schaf(int a, double b){...}public int Schaf(int a, double b){...}public Schaf(double alt, int gew){...}public Schaf(int a, int g){...}Beschreibe einen Konstruktor.
Wähle beliebig viele Antworten.
Die Schafe sollen mit set-get-Fähigkeiten und Konstruktoren ausgestattet werden.
Schaf mit folgenden set-get-Methoden:public void setName(String name) {..}public void setAlter(int alter) {..}public void setGewicht(double gewicht) {..},public void setGewicht(int mengeGras, int mengeKohl ) {..},public String getName() {..},public int getAlter() {..},public double getGewicht() {..}.Schaf mit einem neuen Standardkonstuktor:public Schaf( ) {..}. Initialisiere den Namen mit "noname", das Alter mit 1 Jahr sowie das Gewicht mit 0.0 kg.Schaf mit dem weiteren Konstuktor:public Schaf(String name, int alter, double gewicht) {..}.Schafherde die neuen Methoden und Konstruktoren ausführlich. Lass alle Änderungen der Attribute jeweils anzeigen.
Ein männlicher Briefmark erlebte
Was Schönes, bevor er klebte.
Er war von einer Prinzessin beleckt.
Da war die Liebe in ihm erweckt.
Er wollte sie wieder küssen,
Da hat er verreisen müssen.
So liebte er sie vergebens.
Das ist die Tragik des Lebens!
Erweitere die Klasse Auto und Fuhrpark.

Auto mit set- und get-Methoden.Auto auf privateFuhrpark durch Aufrufe der set- und get-Methoden und teste so die Funktionalität der Klasse Auto.Auto mit zwei Konstruktormethoden, den Standardkonstruktor mit Initalwerten und einem Konstruktor mit Parameterliste.UML (engl. unified modeling language) ist eine grafische Modellierungssprache zur Spezifikation, Konstruktion und Dokumentation von Software-Teilen und anderen Systemen. UML besteht aus vielen Diagrammtypen. Ein Typ davon ist das Klassendiagramm.
Ein Klassendiagramm stellt eine Klasse übersichtlich und strukturiert dar. Es ist von der Form her rechteckig und besteht aus drei Teilen:
+ für public und - für private) und Datentyp,
Man beachte, das statische Methoden und Attribute unterstrichen werden.
Was das Klassendiagramm nicht sagt:
Auto |
- farbe : String- leistung : int- preis : double- mehrwertsteuer : double |
+ Auto (String farbe, int leistung, double preis)+ setFarbe (String color) : void+ setLeistung (int power) : void+ setMwSt (double mwst) : void+ getFarbe () : String+ getLeistung () : int+ getMwSt () : double+ fahrenStrecke (int km) : void+ tanken (int menge) : void |
Schreibe UML-Klassendiagramme.
Auto.Fuhrpark.Schaf.
Schreibe weitere Klassenpaare.

Neben den Klassenpaaren Schaf und Schafherde sowie Auto und Fuhrpark, gibt es weitere Klassenpaare.
Wohnmobil und Campingplatz.Pizza und Menue.Sensor und Home.Speichert man die verschiedenen Objekte direkt beim Erzeugen in einer ArrayList können mit Hilfe von Schleifen automatisierte Ausgaben und Auswertungen aller Objekte generiert werden. Dabei muss im Vergleich zu einem array die genaue Anzahl der Objekte vorab nicht bekannt sein. Mit der add(..) Methode wird ein Element dem Container hinzugefügt.
import java.util.ArrayList;
public class SchafherdeArrayList {
public static void main(String[] args) {
//Anlegen einer ArrayList namens schafListe
ArrayList<Schaf> schafListe = new ArrayList<Schaf>();
//Hinzufügen von Einträgen mit der Methode add(..)
schafListe.add(new Schaf("Emma", 20, 50.0));
schafListe.add(new Schaf("Berta", 8, 30.0));
}
}
ArrayList ist eine Klasse, die als Container für eine Liste von Objekten dient. Ähnlich wie bei einem Array kann man auf die Objekte über einen Index zugreifen, jedoch muss die Objektanzahl in der Liste anfangs nicht angegeben werden.
Um nun Standardwerte zu vergeben oder beim Erzeugen des Objekts die Attribute zu setzen, werden entsprechende Konstruktormethoden erstellt.
Des weiteren benötigen wir wie gehabt entsprechende set- und get-Methoden.
public class Schaf{
private String name;
private int alter;
private double gewicht;
//Konstruktor
public Schaf (String n, int a, double g){
this.name = n;
this.alter = a;
this.gewicht = g;
}
//set- und get-Methoden
...
}
//Ausgabe aller Schafe und deren Alter
for (int i=0; i<schafListe.size(); i++) {
Schaf schaf = schafListe.get(i);
System.out.println("Schaf "+(i+1)+": "+schaf.getName());
System.out.println("Alter: "+schaf.getAlter());
}
//Berechnung des mittleren Herdenalters
int gesamt = 0;
for (Schaf schaf: schafListe) {
gesamt += schaf.getAlter();
}
double herdenalter = (double)gesamt/schafListe.size();
System.out.printf("Herdenalter: %.1f",herdenalter);
In der for-Schleife wird über die size() Mehtode die Anzahl der Elemente abgefragt. Die get(..) Methode gibt das Element am angegebenen Index zurück.
for-each-Schleifen iterrieren über alle Datenstrukturen deren Elemente aufzählbar sind. In Java werden diese mit dem : Operator gekennzeichnet. Dabei ist Schaf der Datentyp des Elements und schaf das Elementobjekt welches aktuell betrachtet wird. Das Containerobjekt schafListe gehört zur Klasse ArrayList.
For-each-Schleifen haben eine kürzere und übersichtlichere Syntax. For-Schleifen erlauben einen Zugriff auf den Schleifenzähler.
add(..), size() und get(..) sind die essentiellen Methoden der Klasse ArrayList.
Realisiere eine Bücherei in der Bücher mit Titel, Autor und Bewertung gespeichert werden sollen.

Book und Library. Book die Attribute title, author, rating hinzu sowie entsprechende set- und get-Methoden.Library eine ArrayList namens booklist hinzu und erzeuge drei Einträge wie bspw. booklist.add(new Book("Herr der Ringe", "J.R.R. Tolkien", 4.8));.Für Objekte der Klasse Schaf soll eine ArrayList erstellt werden.
Wähle eine Antwort.
ArrayList box = new ArrayList();ArrayList<Schaf> box = ArrayList<Schaf>();ArrayList<Schaf> box = new ArrayList<Schaf>();ArrayList schafListe = new ArrayList();Erkläre die Klasse ArrayList.
Wähle eine Antwort.
Finde die Anzahl der Fehler im folgenden Quelltext.
import java.util.ArrayList;
public class Pizzamenu {
public static void main(String[] args) {
ArrayList menue = new ArrayList();
menue1.add(new schaf());
}
}
Finde die Anzahl der Fehler im folgenden Quelltext.
public class Pizza{
private String name;
public Pizza (String name, double preis){
this.name = namen;
this.preis = preis;
}
}
In der ArrayList box sind 3 Schafe im Alter von jeweils 3 Jahren.
int i = 3;
for (Schaf schaf: box) {
i += schaf.getAlter()-1;
}
Bestimme den Wert von i. Wähle eine Antwort.
In der ArrayList box sind zwei Schafe namens Emma und Berta.
for (int i=0; i<box.size(); i++) {
Schaf schaf = box.get(i);
System.out.print(schaf.getName());
}
Bestimme die Ausgabe. Wähle eine Antwort.
| 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 Methode, -en | Fähigkeiten von Objekten werden in Methoden beschrieben. |
| das Attribut, -en | Eigenschaften von Objekten werden in Attributen (Variablen) festgelegt. |
| der Modifier, ~ | legt die Sichtbarkeit von Eigenschaften und Fähigkeiten fest, also ob diese bspw. privat oder öffentlich zugänglich sind |
| die Kapselung, - | die Sichtbarkeit der Attribute einer Klasse wird auf private gesetzt und so schirmt man die Attribute vom Zugriff aus anderen Klassen ab. |
| die set-, get-Methoden, - | Methoden die die abgeschirmten Attribute setzen oder auslesen. |
| der Konstruktor, -en | Methode welche die Initialisierung der Parameter bei Objekterzeugung ermöglicht |
| das Überladen des Konstruktors | Existieren mehrere Methoden gleichen Namens spricht man vom Überladen. So kann bspw. mit mehreren Konstruktoren ein unterschiedlicher Initialisierungsgrad erreicht werden. |
| die ArrayList | eine Klasse, die als Container für eine Liste von Objekten dient |