Aufgabe 1
Objekte sind die konkrete Umsetzung einer Klasse. Die Klasse bestimmt die Methoden und die Attribute, und wenn dann „in die Klasse Daten eingesetzt werden”, haben wir ein Objekt.
Aufgabe 2
Eine Variable ist ein reservierter Speicherbereich mit einer bestimmten Addresse, einem Namen und einem Wert. Wenn wir eine Variable haben, dessen Wert der Addresse einer anderen Variable entspricht, nennen wir diese eine Referenz. Wenn wir eine noch andere Variable mit dem selben Wert, aber einer anderen Addresse haben, nennen wir diese eine Kopie.
Call by Value oder Call by Reference beschreibt, ob Funktionsargumente als Referenzen oder als Kopien übergeben werden. Dies zeigt sich daran, ob die Funktionen ihre Argumente mutieren können, sodass der Wert der vom Aufrufer gehaltene Referenz sich verändert. Java ist immer Call by Value, aber wenn wir Objekte übergeben, verhalten sich dessen Attribute wie Call by Reference.
Aufgabe 3
- Endlosschleife als While-Schleife mit konstant wahrer Bedingung, Methodenaufruf der
println
Methode auf dem ObjektSystem.out
- Deklaration einer Main-Methode, einer statischen Methode mit der Signatur
void main(String[] args)
- Deklaration einer Unterklasse
Farbe
vonMethodeVonGame
- Deklaration einer Variable
peopleHeights
und Initialisierung mit einer neuen Instanz der KlasseHashMap
mit den KlassenString
undShort
als generische Typargumente, zweimaliger Aufruf derput
-Methode, um Einträge in der Hashmap anzulegen
Aufgabe 4.1
- Kopplung
- = Abhängigkeit einer Klasse vom Interface einer anderen
- engere Kopplung (Zugriff auf Member, auch ĂĽber Getter und Setter) ist schlecht, lose Kopplung ist gut
- Kohäsion
- Methoden und Klassen implementieren immer genau eine Aufgabe
- Kapselung:
- Implementationsdetails (Member, innere Klassen, Helper, …) sind nicht Teil des öffentlichen Interfaces
Aufgabe 4.2
public class Stack {
private Element head;
public Stack() {
this.head = null;
}
public void push(String value) {
this.head = new Element(value, this.head);
}
public String pop() {
String currentHead = this.head.value;
this.head = this.head.tail;
return currentHead;
}
private static class Element {
private String value;
private Element tail;
private Element(String value, Element tail) {
this.value = value;
this.tail = tail;
}
}
}
Aufgabe 4.3
public class Stack {
private Element head;
public Stack() {
this.head = null;
}
public Stack(String value) {
this.head = new Element(value, null);
}
public void push(String value) {
this.head = new Element(value, this.head);
}
public String pop() {
if (this.head == null) return null;
String currentHead = this.head.value;
this.head = this.head.tail;
return currentHead;
}
private static class Element {
private String value;
private Element tail;
private Element(String value, Element tail) {
this.value = value;
this.tail = tail;
}
}
}
Aufgabe 4.4
public class Stack {
private Element head;
public Stack() {
this.head = null;
}
public Stack(String value) {
this.head = new Element(value, null);
}
public void push(String value) {
this.head = new Element(value, this.head);
}
public String pop() {
if (this.head == null) return null;
String currentHead = this.head.value;
this.head = this.head.tail;
return currentHead;
}
private static class Element {
private String value;
private Element tail;
private Element(String value, Element tail) {
this.value = value;
this.tail = tail;
}
}
}
Aufgabe 6
public class Queue extends Stack {
public Queue() {
super();
}
public Queue(String value) {
super(value);
}
@Override
public void push(String value) {
if (this.head == null) {
this.head = new Element(value, null);
return;
}
Element head = this.head;
while (head.tail != null) {
head = head.tail;
}
head.tail = new Element(value, null);
}
}