Eclipsekurs 2008/Tag 2
Inhaltsverzeichnis
Aufgabe: Grundlagen
- Falls du noch etwas Übung in Java brauchst, dann besuche den Übungspool des Javakurses 2008 und mache einfach von dort noch einige Aufgaben.
- Die folgenden Aufgaben beschäftigen sich weniger mit der Programmierung von Java. Viel mehr stehen die Features von Eclipse im Vordergrund.
Aufgabe: Importieren und Exportieren
- Lade dir Marios Framework für Formen herunter
- Informiere dich über den Allgemeinen Aufbau des Frameworks
- Erstelle ein neues Projekt
- Lade das JAR in das Projekt (BuildPath -> Add Jars)
- Schreibe eine main Methode, die den Visualizer erstellt (addVisualElement()) und anzeigt (visualize())
- Wie wäre es, wenn du nach dem WhishfullThinking-Prinzip versuchst weitere VisualElements zu schreiben? Beispielsweise ein Rechteck oder ein Dreieck? Oder gar eine bunte Form?
- Gibt es eine Möglichkeit, diese mit anderen Studierenden auszutauschen?
- Wenn ja, dann tue dies doch einfach ...
Subversion Repository
Folgende Aufgabe kann leider nur von Benutzern mit einem CS-Account bearbeitet werden!
Wir haben für dich und die anderen Teilnehmer ein Subversion-Repository im CS-Netz angelegt, das ihr für die folgenden Aufgaben nutzen könnt.
- Check dir ein eigenes Verzeichnis davon aus und füge deine Lösungen hinzu.
- Stell sicher, dass dein eclipse mit dem Subclipse-Plugin versehen ist. Wenn du eclipse im cs-Netz nutzt, fügst du einfach die "Repository Location" wie auf dem Beipackzettel beschrieben hinzu. Falls nicht, füge es über "Help->Software Updates" hinzu.
- Erstelle ein neues Java-SVN-Projekt. (RMB auf PackageExplorer -> new Project -> SVN)
svn+ssh://cs.tu-berlin.de/home/theclaw/eclipse2008/svn/[NUMMER]
- Gebe als Repository Location den obigen Text ein
- Lass dir von einem Tutor eine Nummer zwischen 0 und 9 geben
- Trage diese als [NUMMER] ein.
- gebe deinen CS Benutzernamen und dein CS Passwort ein
- klicke danach auf Next - noch nicht auf Finish:
- Folge den weiteren Schritten des Dialoges, und bearbeite die Aufgabe, die im SVN als README.txt gestellt wurde
- Schau dir auch die CommitKommentare (LogMessages) an, evtl.findest du weitere Aufgaben ....
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 die folgende Zip-Datei in ein leeres Projekt Verkehr.zip.
- Zu deinem Schrecken findest du ein Chaos 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 Namen. Benutze dafür die Refactoring-Funktion Rename.
- Beim Durchsehen der Klassen ist dir bestimmt folgendes aufgefallen:
- 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 Superklasse verschoben wird. Führt Eclipse diese Aktion 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 Verkehrsmittel modellieren (Auto, Fahrrad, Flugzeug, ...), haben Funktionen um die Farbe zurückzuliefern. Verschiebe diese zusammen mit dem Attribut "farbe" in die gemeinsame Superklasse.
- 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 erneut 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 Superklasse verschoben wird. Führt Eclipse diese Aktion 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: Standardnormalverteilung (einfach)
- 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:
- 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).
- Im ersten Aufruf von normalVerteilung():
Aufgabe: Micki Maus im Labyrinth (etwas schwerer)
- Bei dieser Aufgabe geht es auch darum, den Eclipse Debugger ein wenig kennenzulernen.
- Lade dir die Aufgabe unter MickiMaus.jar herunter und importiere diese wie in Aufgabe 1.
Micki die Maus, befindet sich in einem Labyrinth und muss den Käse finden. Du sollst nun ihren Weg mit Hilfe des Debuggers verfolgen. Setze dazu einen Breakpoint auf den Methodenaufruf von Mouse.dfs(), also in Zeile 30 und in Zeile 40 am return. Starte den Debugger, indem du auf das Käfer-Symbol klickst. Um zu sehen, welchen Weg Micki wählt, schau dir in der Variables View die Variable this.currentNode an. Micki sollte auf den Koordinaten (1,1) stehen. Nun könnt ihr mit der Funktion Resume einen Schritt weitergehen. (Es ist normal, dass sich Micki beim ersten Schritt nicht bewegt :-). Probiert auch mal die anderen Debugger-Funktionen Step into, Step over und Step return aus. Am Ende sollte Micki den Käse gefunden haben.
Das Labyrinth sieht folgendermaßen aus:
01234567 0 ######## 1 #M# ## 2 # #K# # 3 # #### # 4 # #### # 5 # X # 6 #### ### 7 ########
Die Stelle X ist beipielsweise mit den Koordinaten (4,5) beschrieben. Micki befindet sich anfangs bei (1,1) also M und der Käse ist mit einem K markiert also (3,2).
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 II
Verwende für diese Aufgabe das Projekt Verkehr von der ersten Refactoring Aufgabe. Im Folgenden sind ein paar Vorschläge von Refactoring Aktionen, die du noch durchführen kannst:
- In der (ehemaligen) Klasse MyHupschrauber:
- Benenne die Instanzvariable x, y, z und blabla um, so dass sie aussagekräftige Namen haben. Ihre Bedeutung erfährst du aus den JavaDoc-Kommentaren
- Kapsle die (ehemaligen) Instanzariablen x, y, z und blabla (immer nur eine auf einmal). Was bewirkt dies? Dazu schaue dir in der Vorschau den Unterschied an. Warum könnte das sinnvoll sein?
- Wende die Refactoring-Funktion Extract Interface auf MyHupschrauber an. Was bewirkt sie und was bewirken die einzelnen Einstellungen?
- In der (ehemaligen) Klasse MyFlugzeug: Lies dir kurz den Code der Klasse durch (man beachte die Warnungen). Benutze die Refactoring-Funktion Infer Generic Type Arguments und schau was passiert.
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.
- 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 als Exportziel.
- Klicke zweimal auf Next 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. (filename.jar ist der Name der JAR ...)
Aufgabe: Eclipse Plug-Ins
- Informiere dich über die Massen an PlugIns, die es für eclipse gibt über Eclipse Plugin Central.
- Findest du ein Plugin, mit dem du Sokoban in Eclipse Spielen kannst?
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.
PS: Wenn du Fehler in den Aufgaben findest, benutze den "Bearbeiten"-Link oben auf der Seite. Oder spreche einfach mit einem der Tutoren ...