Martin Häcker/Java Kurs/Tag 2
Inhaltsverzeichnis
LE 3: Modularisierung mit Klassen und Objekten
Vortragende: Martin, Felix
Inhalt
- Muss neu verteilt werden auf LE 3 und 4
- Modularisierung als erstes
- Sammlung von Methoden
- static -> ABER ERKLÄREN!!!!!!
- Dann höhere Datenstrukturen
- Als zusammenfassung von Attributen
- Beispiel: Point(x, y)
- Weg von static
- new erklären
- Call by Reference: Beispiel: Fernbedienung
- Referenzen sind _NICHT_ kopien
- Gleich beim Array: Obwohl das kein
- Call by Reference: Beispiel: Fernbedienung
- initialisierung von hand
- initialisierung per init methode
- Als zusammenfassung von Attributen
- init in objekt schieben
- init in konstruktor umwandeln -> DAS ist der übergang zu Objektorientierung
- Dann das zusammen als Verkapselung der Datenstrukturen
- damit man sie ändern kann
- Point(theta, phi)
- Hier ohne static, und erklären wieso und was unterschied
- damit man sie ändern kann
DAS ist Objektorientierung! Daher, wenn man OO Programmiert, braucht man static so gut wie nie.
Klassen nächstes Abstraktionswerkzeug nach Methoden
- Wichtiges Gedankengut: Eine Sprache die mehrere verschiedene Abstraktionswerkzeuge hat vielleicht zu viele?
Beispiele:
- Point
- PseudoRandomNumberGenerator
- Uhr
- Counter
- Liste (argh) (auf Arrays implementiert)
- Element löschen -> null rein
Alle Aufgaben: Objekt Bauen, aber innnendrinn die Implementierung ändern. (Vielleicht aber auch erst später)
Syntax Vertiefung:
- static
- final
- null, this
Austauschbarkeit der internen Implementierung, sollte dazu führen das man Objekte viel besser Wiederbenutzen kann. Das hat aber nicht soo gut funktioniert wie gedacht. ABER es gibt Klassenbibliotheken:
- Java-API: Konzept Klassenbibliothek
- Javadocs finden, lesen: javadocs.org/Klassenname (vorsicht, linkt nach Java 5)
- JavaDoc selber schreiben und verwenden
- Input/Output (Streams, usw.) <-- großer Block
- Streams: InputReader, BufferedReader, Scanner
- Collections: List, ArrayList
Aufgabe: IO-Objekt schreiben das es leicht macht:
- Eine Datei zu lesen
- Zeilenweise lesen
- Eine Datei zu schreiben
- Das gegenwärtige Verzeichnis auszugeben
- Input und Output zur Konsole
Noch kreutz und quer durch die Api schicken
- Was für das Kaufhaus bauen
- Testklasse -> Tests schreiben
Objekte als Abstraktionsmöglichkeit nutzen
- Interfaces kurz anritzen?
- Alles von Objekt abgeleitet
- Instanziierung (auch Erklärung Mehrdeutigkeit von "Objekt" für Klasse oder Instanz)
- Beispiel: Ausprobieren mit equals(), toString()
- Overloading / Polymorphie (so wenig wie möglich)
- Standardmethoden: toString, equals, hash, compare (brauchen wir da interfaces?)
- Gotchas: Strings vergleichen mit == oder equals?
Kaufhausbeispiel vielleicht Tag 3 Vormittags und in der Vorlesung beginnen. Als Beispiel für Zerlegung eines größeren Problems in Klassen.
Vielleicht auch lieber das Spiele-Beispiel nehmen.
Tag vier:
- Mit der Vorlesung beginnen und da das Projekt planen
- Jede Gruppe sucht sich ein Projekt und Plant das zusammen (Geht nicht, keine Tafel)
- Setzt es dann getrennt um
Was wir nicht behandeln: Ausblick zum selber machen
- Vererbung
- Interfaces (Abstrakte Klassen)
- Polymorphie
Noch nicht integriert
Ideen für Beispiele mit local state
- Kassenzettel Objekt:
- summe
- toString / printMe
- Point
- Konto
- Mensch (Augenfarbe, Größe, Hautfarbe, Sprachen die er spricht, Gewicht, Haarfarbe, Brille)
- Kickertisch (Punktestand, Spieler, Position der Spieler)
- Flasche
- Testen
- eigene assert-Funktion
- Ebenen-Modell für static?
Übungsaufgaben
- Ziel
- Kleine Studentendatenbank in der Studenten eingefügt und gesucht werden können.
- Advanced
- mit löschen
- Idee
- "Statistik" : Anzahl der Studenten, durchschnittliches Alter, bla
- Aufgaben
- Schreibe eine Klasse, die Informationen wie Name, Matrikelnummer etc. über einen Studenten speichert. Erzeuge ein Objekt dieser Klasse und belege die Objektvariablen mit Werten. Lese diese Werte aus den Objektvariablen wieder aus und gib sie auf dem Bildschirm aus.
- Schreibe einen Konstruktor für deine Klasse, der die Objektvariablen des erzeugten Objekts mit Werten füllt. Erzeuge mit Hilfe dieses Konsturktors ein Objekt, lies seine Werte aus und gib sie auf dem Bildschirm aus.
- Erweitere deine Klasse um eine Methode
public void printMe()
, die die Daten des Studentenobjekts auf dem Bildschirm ausgibt. Teste deine Methode! - Lege eine Feld (Array) mit 100 Studentenobjekten an, die verschiedene Matrikelnummern haben und gib all auf dem Bildschirm aus.
- Diese Feld ist schon eine Art Studentendatenbank. Schreibe daher eine neue Klasse
StudentenDatenbank
, die eine Feld von Studentenobjekten enthält. Die Klasse soll einen Konstruktor haben, dem die Größe des zu erzeugenden Feldes übergeben wird. Implementiere auch eine MethodeprintMe
, die alle Datensätze ausgeben soll, sowie eine MehtodestudentHinzufuegen()
, die einen Studentenobjekt mit den zu übergebenen Daten anlegen soll und dieses in die Datenbank einfügen soll. - Erweitere die Studentendatenbank um eine Methode
studentEntfernen()
, die das Studentenobjekt mit der übergebenen Matrikelnummer aus der Datenbank löschen soll. Funktionert nach dem Löschen einiger Objekte deine Ausgabemethode (printMe()
) noch? - Erweitere die Studentendatenbank um eine Methode
studentenAnzahl()
, die die Anzahl der in der Datenbank gespeicherten Studentenobjekte zurückliefert.
- Zeitbedarf
- Arthur: Aufgaben 1-5 zusammen ca. 1h
- Sven : Aufgaben 1-7 zusammen etwa 1h hätte ich kate+bash benutzt schätz ich mal (angenehme aufgabe)
- Fragen
- soll private / public / default / protected thematisiert werden? (Arthur+Sven)
- soll sich deren array in der DB von sich aus vergrößern? (Sven)
- evtl. verwirrend das bei den methodenNamen hinten in der aufgabe ein "()" ist obwohl ja parameter übergeben werden? (Sven)
- gibt es eine musterlösung? wäre für die übungen denke ich sinnvoll damit dort alle tutoren auf die aufgabe klarkommen.. und am ende ähnliche ergebnisse haben ;) (Sven)
LE 4: OO-Vertiefung und Klassenbibliothek
Vortragende: Arthur, Martin
Muss neu aufgeteilt aus LE 3
Übungsaufgaben
- meinPferd = deinPferd;
- Klassen benutzen:
- Input/Output üben
- Viele andere Klassen aus der Java-API finden und nutzen
- Praktische Vorgehensweise, Anleitung zum Selbstlernen, nicht so viel Vorlesung dazu
- UtilityObjekt mit readFile(aFilename) und getUserInput(aPrompt) sowas sollte rauskommen!
- Menü Objekt, das sich leicht adaptieren lässt?
- Apfelbaum
while (Apfelbaum.hatNochAepfel) { Apfel meinApfel = Apfelbaum.getApfel(); // Apfel pflücken ich.esse(meinApfel); }
- Collections, Polymorphie (Apfel mit Wurm....)