Eclipsekurs 2007/Tag 2
Link zu den Stichpunkten die ursprünglich hier abgelegt waren
Inhaltsverzeichnis
Aufgabe: Grundlagen
- Für die Leute, die noch ein wenig mehr mit den Grundlagen der Programmiersprache Java üben möchten, haben wir hier viele kleine Aufgaben hinterlegt.
- Wer die Grundlagen der Java-Programmierung versteht und keine (bzw. sehr wenige) Probleme mit der Rennschneckenaufgabe von der letzten Eclipse-Übung hatte, kann ruhig den Schwerpunkt dieser Übungseinheit stärker auf Eclipse legen und folgende Aufgaben angehen:
Aufgabe: Importieren und Exportieren
- Erstelle ein Java-Projekt "Matrix" und importiere die Datei MatrixClass.zip als Archivdatei in das Projekt. Um zu sehen, dass die .class Dateien zum Ausführen eines Programms reichen, starte das Projekt wie gehabt.
- Tipp: Wechsle zur Navigator-Ansicht, um die importierten .class Dateien zu sehen.
- Hinweis: Die Hauptklasse des Projekts ist MatrixTest.
- Nun importiere den Quellcode hierzu aus der Archivdatei MatrixJava.zip in dein Projekt. Verändere die Klasse Matrix mittels Refactoring:
- Gib der Instanzvariable giveMeAName einen sinnvollen Namen.
- Exportiere die beiden bearbeiteten Java-Dateien in eine Archivdatei und schicke sie an deinen Tischnachbarn, der freut sich bestimmt.
Tipp: Achte darauf, dass die Archivdatei das gesamte Projekt enthält, damit es von jemandem importiert werden kann, ohne dass vorher extra ein neues Projekt angelegt werden muss.
Aufgabe: Refactoring
Herzlichen Glückwunsch, du wurdest bei der "Luft- und Bodenverkehr AG" eingestellt! Deine erste Aufgabe als neuer Entwickler der firmeneigenen Software ist es, diese in einen wartbaren und besser verständlichen Zustand zu bringen. Dein Vorgänger, ein Java-Crack, der auf den Programmier-Editor HackPad schwört, musste aufgrund geringer Produktivität leider von dieser Aufgabe abgezogen werden. Nun darfst du dich mit Eclipse daran versuchen!
- Importiere das gezippte Projekt in Verkehr.zip.
- Zu deinem Schrecken findest du ein Chaos aus verschiedenen Klassen vor. Bringe zuerst die Klassen in eine sinnvolle Ordnung, indem du sie per Drag-and-Drop in die richtigen Java-Packages einordnest.
- Dir wird aufgefallen sein, dass einige Klassen sehr seltsame und/oder falsch geschriebene Namen haben. Gib diesen Klassen bessere bzw. korrekte Namen. Benutze dafür die Refactoring-Funktion "Rename".
- Beim Durchsehen der Klassen fällt dir folgendes auf:
- Die Klassen mit den (ehemaligen) Namen "Farrad" und "MeinAuto" enthalten beide Code, der die Anzahl der Räder zurückgibt. Benutze die Refactoring-Funktion "Pull Up", so dass in einem Schritt der identische Code von anzahl() aus beiden Klassen entfernt und in die gemeinsame Mutterklasse verschoben wird. Führt Eclipse dies aus ohne sich zu beschweren? Falls nicht, nicht nutze das von Eclipse erzeugte Preview um das Problem zu erkennen. Dann gehe zurück im Refactoring-Dialog und versuche das Problem zu beseitigen.
- Tipp: Es hat mit dem Attribut "anzahlRaeder" zu tun!
- Alle Klassen, die ein konkretes Verkehrsmittel modellieren (Auto, Fahrrad, Flugzeug, ...), haben Funktionen um die Farbe zurückzuliefern. Verschiebe diese zusammen mit dem Attribut "farbe" in die gemeinsame Mutterklasse.
- In der (ehemaligen) Klasse MeinAuto kommt Code mehrfach vor. Benutze die Refactoring-Funktion "Extract Method" um dieses Problem zu beseitigen.
- Während du den soeben extrahierten Code durchliest, fällt dir auf, dass er viel verständlicher wäre, wenn die Variablen sprechende Namen hätten. Nutze die Refactoring-Funktion "Rename" um dies zu erreichen.
- Die Klassen mit den (ehemaligen) Namen "Farrad" und "MeinAuto" enthalten beide Code, der die Anzahl der Räder zurückgibt. Benutze die Refactoring-Funktion "Pull Up", so dass in einem Schritt der identische Code von anzahl() aus beiden Klassen entfernt und in die gemeinsame Mutterklasse verschoben wird. Führt Eclipse dies aus ohne sich zu beschweren? Falls nicht, nicht nutze das von Eclipse erzeugte Preview um das Problem zu erkennen. Dann gehe zurück im Refactoring-Dialog und versuche das Problem zu beseitigen.
Aufgabe: Der Eclipse Debugger
- Lade die Datei StandardNormalVerteilung.java herunter und importiere sie in das Projekt "Einstein".
- Setze einen Breakpoint in der main-Methode (siehe TODO) und starte das Programm im Debug-Modus.
- Benutze die Step into/Step over/Run to return/Resume Buttons im Debugger, um folgendes herauszufinden:
- Hinweis: Dies lässt sich alles in einem einzigen Programmdurchlauf herausfinden (du kannst aber natürlich trotzdem mehrere Anläufe nehmen bis du es raus hast)
- Im ersten Aufruf von normalVerteilung():
- Welcher Wert wird xi im 2. Durchlauf der 1. Schleife zugewiesen?
- Welcher Wert wird summe im 2. Durchlauf der 2. Schleife zugewiesen?
- Tipp: Um letzteres herauszufinden kannst du zur Laufzeit des Programms noch einen Breakpoint einfügen!
- Im zweiten Aufruf von normalVerteilung():
- Welchen Wert hat summe am Ende des Methodenaufrufs? Ermittle dies innerhalb des Aufrufs von normalVerteilung()!
- Tipp: Auch hier kannst du zur Laufzeit wieder Breakpoints einfügen und entfernen!
- Lass das Programm bis zum Ende laufen (es erscheint eine Ausgabe auf der Konsole).
Wer macht was
Zur Erinnerung: Der Debugger bietet dir mehrere Möglichkeiten, dein Programm fortzusetzen:
- Terminate: Beendet das Programm sofort
- Step Into: Überspringt die Methode nicht (F5)
- Step Over: Überspringt die Beobachtung einer Methode (F6)
- Step Return: Führt die Methode bis zum Ende aus (F7)
- Resume: Setzt das Programm bis zum nächsten Haltepunkt fort (F8)
Zusatzaufgaben
Refactoring Ia
Verwende für die folgenden Aufgaben die Matrixklasse vom Anfang:
- Kapsle die Instanzariablen n und m:
- Wähle für n mit und für m ohne "Feldverweise beibehalten" aus und schaue dir in der Vorschau den Unterschied an.
- Warum ist es in diesem Fall besser, n und m auf private zu setzen?
- Ist es hier sinnvoll, für n und m getter- und/oder setter-Methoden bereit zu stellen?
- Gib den Methoden multipliesMatrixWithScalar() und multipliesMatrixWithMatrix() den gleichen Methodennamen. Der neue Name sollte sinvoll gewählt werden, aber dennoch nicht eine halbe Zeile lang sein. Warum kann man in diesem Fall beiden Methoden den gleichen Namen geben?
- Tipp: Bei multipliesMatrixWithMatrix() und add() wäre dies nicht möglich.
- Kapsle die Instanzariablen n und m:
Debugging II
- Lade dir die Datei Calc.java runter. Erstelle ein Java-Projekt "Einstein" und importiere die Datei in das Projekt und führe es aus.
- Im Quellcode wurden zwei Stellen markiert, an denen du den aktuellen Wert einer Variable auslesen sollst. Dies lässt sich sehr einfach mit Hilfe von Breakpoints lösen.
- Hinweis: Der Quellcode darf zur Lösung der Aufgabe nicht verändert werden!
- Setze eine Watch Expression auf die Variable b und beobachte wie sie sich im Laufe des Programms verändert.
- Exportiere das Programm als Jar-Datei. Damit die Datei später über die Konsole ausgeführt werden kann, gehst du wie folgt vor:
- Der komplette Projektordner muss exportiert werden
- Wähle einen Namen für die Datei und einen Ordner in deinem Home Verzeichnis als Exportziel.
- Klicke zweimal auf "weiter" und wähle die Hauptklasse des Projekts aus.
- Um zu testen, ob du alles richtig gemacht hast, öffne eine Konsole, wechsle in den Ordner, in dem die Jar-Datei liegt und führe den Befehl java -jar filename.jar aus.
Aufgabe: Eclipse Plug-Ins
- Installiere das Plug-In für das deutsche Sprachpaket (Anleitung) und starte Eclipse neu.
Eigenes Subversion-Repository im Fakultätsnetz
Richte in deinem eigenen Verzeichnis im CS-Netz ein SVN-Repository ein und lade deine Gruppenmitglieder aus MPGI3 oder MPGI4 in eine eigene Gruppe ein. Setze für diese Gruppe die entsprechenden Rechte im Respository. Checke dieses Verzeichnis mit Subclipse aus und lade eure fertigen und angefangenen Hausaufgaben darin hoch.
Hinweise zur Einrichtung findet ihr im Artikel Subversion im CS-Netz.