Java - OOP 1
Tag 1[edit]
Objektorientierung[edit]
Aufgabe 1: Personenverwaltung[edit]
Modelliere und Implementiere eine Personenverwaltung! Die Klasse Personenverwaltung soll die Möglichkeit bieten Personen anzulegen und Personen zu löschen. Zum Speichern kannst du gerne eine [Liste](https://docs.oracle.com/javase/7/docs/api/java/util/List.html) verwenden. Es soll möglich sein, mehrere Personenverwaltungen mit verschiedenen Listen zu erstellen (z.B. PV Linz, PV Codersbay, PV Magistrat Wien, ...).
⚠️ Ziel ist es nicht in der Main Methode den Person-Konstruktor aufzurufen und diese Personen der Personenverwaltung zu übergeben! Stattdessen sollte die Personenverwaltung eine Methode `createPerson` bieten über die Personen mithilfe des Konstruktors der Person erstellt werden können
Personen besitzen verschiedene Eigenschaften u.a. Vorname, Nachname, Geburtsdatum, Adresse, Geschlecht.
Die Klasse Personenverwaltung soll mehrere `create` Methoden zur Erstellung von Personen bieten:
- Eine Person die lediglich mit Vornamen und Nachnamen erstellt wird
- Eine Person die mit allen Werten erstellt wird
- Eine Person die mit Vornamen, Nachnamen, Geschlecht und Geburtstdatum erstellt wird
Versuch für die Abbildung des Geschlechts ein [Java Enum](https://www.w3schools.com/java/java_enums.asp) zu verwenden. Eine Adresse hat vermutlich auch ihre eigene Klasse verdient da sie aus PLZ, Ort, Straßenname und Hausnummer besteht.
Aufgabe 2: verkettete Liste[edit]
Wie auch Arrays ist die verkettete Liste eine lineare Datenstruktur, allerdings besteht die verkettete Liste aus einzelnen Elementen (Nodes) die durch Zeiger miteinander verbunden sind.
Um die Liste zu implementieren benötigst du 2 Klassen. Die Klasse Node (im Bild A, B, ..) hat ein Attribut value (z.B.: vom Typ String) und einen Zeiger vom Typ Node auf das nächste Element. Die zweite Klasse ist die Liste selbst. Hier implementieren wir alle Funktionen die unsere Liste haben soll.
Folgene Funktionalität sollte unsere Liste zumindest haben: (Siehe auch Java List Interface: https://docs.oracle.com/javase/8/docs/api/java/util/List.html)
boolean add(E e) void add(int index, E element) int size() E get(int index) E remove(int index)
Zusätzlich:
String toString() # Return a string representing the values of the list properly formated
Für diese Aufgabe benötigst du KEINE anderen Datenstrukturen (Arrays, ArrayList, etc.).
Hier ein einfaches Beispiel für die Grundstruktur: https://www.geeksforgeeks.org/linked-list-set-1-introduction/
Bonus: Du kannst deine Liste mit Generics(https://www.geeksforgeeks.org/generics-in-java/) implementieren, sodass der Typ des gespeicherte Wertes value, beim erstellen der Liste dynamisch angegeben werden kann.
Aufgabe 3: doppelt verkettete Liste[edit]
Eine doppelt verkettete Liste ist eine Reihe von Elementen (auch Knoten/Nodes genannt), die durch zwei Zeiger miteinander verbunden sind. Zusätzlich zu einem Zeiger, der auf das nächste Element zeigt gibt es einen, der auf das vorhergehende Element zeigt. Eine doppelt verkettete Liste kann man also in beide Richtungen durchlaufen. Die Operationen auf einer doppelt verketteten Liste sind analog zu denen einer einfach verketteten Liste.
Folgene Funktionalität sollte unsere Liste zumindest haben: (Siehe auch Java List Interface: https://docs.oracle.com/javase/8/docs/api/java/util/List.html)
boolean add(E e) void add(int index, E element) int size() E get(int index) E remove(int index)
Zusätzlich:
String toString() # Return a string representing the values of the list properly formated String toStringReverse() # Output the elements expected from toString in reverse
Wie auch bei der einfach verketteten Liste kannst du gerne Generics verwenden.
Tag 2[edit]
Aufgabe: Personenverwaltung[edit]
Erweitere deine Personenverwaltung um Access Modifier und Datenkapselung https://wiki.streampy.at/index.php?title=Java_-_OOP_1#Personenverwaltung