Martin Häcker/Java Kurs/Tag 2
Inhaltsverzeichnis
LE 3: Modularisierung mit Klassen und Objekten
Vortragende: Martin, Felix
Inhalt
Java / Methodik
- Modularisierung und Strukturierung -- auf allen Ebenen
- Klassen (als Strukturen)
- Methoden-Kapselung: Methoden-Nachtrag
- Methoden als Abstraktionsmöglichkeiten -> verstecken von methoden [1] Bringts das an der stelle?
- Testen
- eigene assert-Funktion
Objektorientierung (Erklärungsansatz)
- Objekt, Klasse erklären als: "Klasse" Mensch
- davon dann klonen mit bestimmten Modifikationen (augenfarbe, größe, name....)
- das wäre dann klasse, objekte und konstruktoraufruf
- Objekte / Klassen erklären als
- Platonische Ideen (Pferd)
- Tatsächliches Ding (Bruno auf dem ich jeden Dienstag in Hellersdorf reite)
- Objekte als Daten mit Schutzschicht Methoden aussen herum
- Klassen als solches erst später (quasi erst prototyp und dann klassen erklären)
- Ganz anderer Ansatz: Erklären über Einheiten die sich über Nachrichten gegenseitig verständigen
- Äquivalenz zu Funktionaler Programmierung aufmachen
- Constructor: Funktion die Parameter bekommt und eine Funktion zurückgibt die diese verkapselt
- Methoden: diese Funktion kann mit dem Namen verschiedener Methoden aufgerufen werden und wird, indem es diese ausführt, zum Objekt
Probleme beim Erklären
- this, woher kommt das und wie verwendet man es!
Ü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
Inhalt
Java
- Modularisierung in Java: Klassen und Objekte
- Instanziierung (auch Erklärung Mehrdeutigkeit von "Objekt" für Klasse oder Instanz)
- Referenzen (Pointer)
- insb: Referenzen sind nicht Kopien
- Overloading / Polymorphie
- Standardmethoden: toString, equals, hash, compare
- Type Casting einfacher Basistypen?
- Objekte vertieft: als Ansammlung von Daten mit Methoden dazu
- Konstruktoren
- um innendrinn auswechseln zu können
- static
- Static nicht static: Benefits of Local State
- final
- null, new
- this
- static / instanz -> Ebenen modell (?)
- Java-API: Konzept Klassenbibliothek
- Javadocs finden, lesen
- JavaDoc selber schreiben und verwenden -> http://www.javadocs.org
- Input/Output (Streams, usw.) <-- großer Block
- List, ArrayList, InputReader, BufferedReader, Scanner
- Collections
Ü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....)