Difference between revisions of "Java - OOP 1"

From Coders.Bay Wiki
Jump to navigation Jump to search
Line 22: Line 22:
[[File:Linkedlist.png]]<br>
[[File:Linkedlist.png]]<br>
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.
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:
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)
(Siehe auch Java List Interface: https://docs.oracle.com/javase/8/docs/api/java/util/List.html)

Revision as of 13:45, 8 February 2023

Tag 1

Objektorientierung

Aufgabe: Personenverwaltung

Modelliere und Implementiere einen 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 Namen, 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: verkettete Liste

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: doppelt verkettete Liste

Eine doppelt verkettete Liste ist 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) # Make this efficient by seeking the element from the "closest" side (front/back) e.g.: index 978 from a list with 1000 elements would be ideal to seek from the back
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

Aufgabe: Personenverwaltung

Erweitere deine Personenverwaltung um Access Modifier und Datenkapselung https://wiki.streampy.at/index.php?title=Java_-_OOP_1#Personenverwaltung