Java - OOP 1

From Coders.Bay Wiki
Jump to navigation Jump to search

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.
Linkedlist.png
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.

2022-03-21 11 54 55-double linked lis at DuckDuckGo — Mozilla Firefox.png

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