Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

Eclipsekurs 2007/Tag 2: Unterschied zwischen den Versionen

 
Zeile 1: Zeile 1:
== Refactoring ==
+
[[Javakurs_2007/PlanungTag2 | Link zu den Stichpunkten die ursprünglich hier abgelegt waren]]
  
* TestProjekt erklären: Klassen Frorm, Kreis
 
  
* Rename:
 
* Frorm -> form (WARNUNG: Java-Konventionen) -> Form
 
* hierbei die Preview Funktion erwähnen
 
* r -> radius
 
* Funktioniert genauso mit allem was einem Namen hat: Projekte, Ordner, Java-Packages, Klassen, Methoden, Variablen, etc
 
  
* Extract Method:
+
== Aufgabe: Grundlagen ==
* Code in Kreis kurz erklären (Oh mein Gott: doppelter Code!)
+
* Für die Leute, die noch ein wenig mehr mit den Grundlagen der Programmiersprache Java üben möchten, haben wir [[Javakurs2006/Uebungsaufgaben | hier]] viele kleine Aufgaben hinterlegt.
* PI-Code markieren und extrahieren, dabei Formular-Felder kurz erklären: Name, Access-Modifier, Preview
+
* 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:
* an Code zeigen, wie PI Code ausgelagert und _sogar_ auch noch an zwei Stellen ersetzt wurde
 
* extract rückgängig machen, nochmal von vorne und dabei auf die "occurence replace" Option hinweisen
 
* darauf hinweisen, dass "occurence replace" nur bei _identischem_ Code funktioniert
 
  
* Pull-Up:
+
==Aufgabe: Importieren und Exportieren ==
* wir wollen später noch eine Ellipsen-Klasse definieren -> wir brauchen PI auch dort -> es wäre schön wenn PI in der Klasse Form wäre
 
* pull-up Formular aufrufen, Felder erklären: Destination Type, Actions for members und dann "next" anklicken und noch erklären, dass zu entfernende Funktionen auch eingestellt werden können
 
* zeigen dass es tatsächlich ausgelagert wurde und von private auf _protected_ geändert wurde
 
  
== Importieren ==
+
* Erstelle ein Java-Projekt "Matrix" und importiere die Datei [http://docs.freitagsrunde.org/Veranstaltungen/eclipsekurs_2006/MatrixClass.zip 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.
* Erklären warum importieren wichtig ist (Vorgaben für UE-Blätter, Bibliotheken)
+
** ''Tipp:'' Wechsle zur Navigator-Ansicht, um die importierten .class Dateien zu sehen.
* Dialog-Fenster vorstellen und wichtigste Punkte erwähnen (Archive, beliebige Dateien wie Quellcode, Projekte von anderen)
+
** ''Hinweis:'' Die Hauptklasse des Projekts ist ''MatrixTest''.
* bei vorgegebenen .class Dateien: jar -cf vorgabe.jar filename und danach jar-File ins Projekt hinzufügen sowie Project->Properties->Java Build Path->Libraries->Add Jar
 
  
== Exportieren ==
+
* Nun importiere den Quellcode hierzu aus der Archivdatei [http://docs.freitagsrunde.org/Veranstaltungen/eclipsekurs_2006/MatrixJava.zip MatrixJava.zip] in dein Projekt. Verändere die Klasse ''Matrix'' mittels Refactoring:
* analog zum Importieren (file-system, archive, etc.), auch wieder type-filters möglich
+
** Gib der Instanzvariable ''giveMeAName'' einen sinnvollen Namen.
* über Kontext-Menü+s lassen sich auch nur bestimmte Dateien (einzelne Java-Files etc exportieren)
 
* ausführbare Jar Dateien erzeugen: Export -> Jar File, type filter erklären und dann zwei screens später die Main-Class auswählen
 
  
 +
* 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.
  
== Debugging ==
+
==Aufgabe: Refactoring ==
* Programm vorstellen
 
* Normal starten -> Exception
 
* als Debug starten, Debug-Perspektive
 
** Fenster erklären: Code, Stack und Threads, Variablem im Scope (main)
 
** Fehler finden.
 
** Fehler korrigieren.
 
** Neu starten, Ausgabe 0 - Nanu?
 
** Keine Exception -- wie debuggt man? Breakpoints!
 
** Zeile 15
 
** b1 -> into
 
** b2 -> over
 
  
== Team Programming ==
+
* Für diese und alle weiteren Aufgaben solltest du unter Eclipse -> Window -> Show View -> Others -> Basics -> Tasks öffnen. Dieses Fenster gibt dir einen Überblick über alle ToDo's und FixMe's in den Projekten.
* Mehere Leute arbeiten an einem Programm / Projekt
+
 
* Subversion (SVN)!
+
* Starte die Eclipse-Umgebung und importiere die Datei [http://docs.freitagsrunde.org/Veranstaltungen/eclipsekurs_2006/Array.zip Array.zip] als vorhandenes Projekt (Existing Project)
** Grafik zeigen
+
** ''Hinweis:'' Vorhandene Projekte in Zip-Dateien können erst seit Eclipse 3.1.1 direkt importiert werden.
** Ein zentraler Ort, wo der Code liegt
+
** Führe die soeben importierte Klasse ''Main'' aus.
** Leute kopieren Dateien auf ihren PC
+
** Finde und korrigiere den Fehler in der ''toString()'' Methode der Klasse ''Array''.
** Änderungen werden an den Server geschickt
+
*** ''Hinweis:'' Diese Aufgabe kann wahlweise mit oder ohne Debugger gelöst werden.
** Änderungen anderer herunterladen
+
** Gib der Methode ''fooBar()'' in der Klasse ''Array'' einen passenderen Namen. 
** Was bringt Subversion? --> Paralleles Arbeiten, Kombinieren (Merging) von Änderungen, Versionshistorie
+
** Gib der Variable ''temp'' in der Klasse ''Array'' einen passenderen Namen.
** Aktionen: Checkout, Commit, Update (Conflict)
+
** Die (umbenannte) Methode ''fooBar()'' und ''sumIsEven()'' enthalten beide die Berechnung der Summe aller Elemente des Feldes. Um zukünftige Änderungen zu vereinfachen, ist es sinnvoll, aus mehrfach verwendetem Code eine einzelne Methode zu extrahieren. Benutze Refactoring, um eine Methode zu erstellen, welche die Summe berechnet.
* SVN in Eclipse: Subclipse als Plugin (im CS-Netz installiert)
+
*** ''Hinweis:'' Schau dir die Vorschau an bevor du den OK Knopf drückst, um gegebenenfalls unerwünschte Ergebnisse zu vermeiden.
* Perspektive: SVN Repository Exploring
+
** Bisher hat das Feld ''myArray'' eine feste Länge von 5, da es in der ''fillArray()'' Methode so festgelegt ist. Verändere die Klasse ''Array'' so, dass eine dem Konstruktor übergebene Zahl die Länge des Arrays festlegt. Hierzu musst du der Klasse eine neue Konstante hinzufügen, die im Programm anstelle der Zahl 5 genutzt werden soll. Benutze Refactoring, um alle Vorkommen der Zahl 5 durch die Konstante zu ersetzen.
** Einrichtung eines Repositories
+
*** ''Hinweis:'' Achte auf den Hinweis von Eclipse zur Benennung von Konstanten und auf die Optionen.     
** URL angeben, Nutzername und Passwort, als Authorname auch "lohrmann"
+
** In der Klasse ''Main'' werden 2 Objekte vom Typ ''Array'' erstellt. Auf beiden werden die gleichen Berechnungen ausgeführt und ausgegeben. Benutze Refactoring, um für die Füllung der Felder und die Ausgabe eine Methode zu extrahieren. Der Parameter der neuen Methode soll ''myArray'' heißen.
** Auschecken aus der Location
+
 
** Anlegen als Projekt, falls keins existiert
+
==Aufgabe: Der Eclipse Debugger==
** Anzeigen von Änderungen: Sternchen, Fragezeichen
+
* Lade die Datei [http://docs.freitagsrunde.org/Veranstaltungen/eclipsekurs_2006/StandardNormalVerteilung.java StandardNormalVerteilung.java] herunter und importiere sie in das Projekt "Einstein".
** Klasse anlegen
+
* Setze einen Breakpoint in der main-Methode (siehe TODO) und starte das Programm im Debug-Modus.
** Commit -> Hinzufügen von Dateien, -> keine .class-Dateien
+
* Benutze die '''Step into/Step over/Run to return/Resume''' Buttons im Debugger, um folgendes herauszufinden:
** Update
+
** ''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)
** History (Geschichte, Änderungsverlauf)
+
** 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).
 +
 
 +
= 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.
 +
 
 +
 
 +
== Debugging II ==
 +
* Lade dir die Datei [http://docs.freitagsrunde.org/Veranstaltungen/eclipsekurs_2006/Calc.java 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 ([http://docs.freitagsrunde.org/eclipsekurs/tutorials/translations_cs_net/ Anleitung]) und starte Eclipse neu.
 +
 
 +
 
 +
 
 +
 
 +
----
 +
 
 +
[[Eclipsekurs 2007|Zurück zu Eclipsekurs 2007]]

Version vom 30. Oktober 2007, 22:42 Uhr

Link zu den Stichpunkten die ursprünglich hier abgelegt waren


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

  • Für diese und alle weiteren Aufgaben solltest du unter Eclipse -> Window -> Show View -> Others -> Basics -> Tasks öffnen. Dieses Fenster gibt dir einen Überblick über alle ToDo's und FixMe's in den Projekten.
  • Starte die Eclipse-Umgebung und importiere die Datei Array.zip als vorhandenes Projekt (Existing Project)
    • Hinweis: Vorhandene Projekte in Zip-Dateien können erst seit Eclipse 3.1.1 direkt importiert werden.
    • Führe die soeben importierte Klasse Main aus.
    • Finde und korrigiere den Fehler in der toString() Methode der Klasse Array.
      • Hinweis: Diese Aufgabe kann wahlweise mit oder ohne Debugger gelöst werden.
    • Gib der Methode fooBar() in der Klasse Array einen passenderen Namen.
    • Gib der Variable temp in der Klasse Array einen passenderen Namen.
    • Die (umbenannte) Methode fooBar() und sumIsEven() enthalten beide die Berechnung der Summe aller Elemente des Feldes. Um zukünftige Änderungen zu vereinfachen, ist es sinnvoll, aus mehrfach verwendetem Code eine einzelne Methode zu extrahieren. Benutze Refactoring, um eine Methode zu erstellen, welche die Summe berechnet.
      • Hinweis: Schau dir die Vorschau an bevor du den OK Knopf drückst, um gegebenenfalls unerwünschte Ergebnisse zu vermeiden.
    • Bisher hat das Feld myArray eine feste Länge von 5, da es in der fillArray() Methode so festgelegt ist. Verändere die Klasse Array so, dass eine dem Konstruktor übergebene Zahl die Länge des Arrays festlegt. Hierzu musst du der Klasse eine neue Konstante hinzufügen, die im Programm anstelle der Zahl 5 genutzt werden soll. Benutze Refactoring, um alle Vorkommen der Zahl 5 durch die Konstante zu ersetzen.
      • Hinweis: Achte auf den Hinweis von Eclipse zur Benennung von Konstanten und auf die Optionen.
    • In der Klasse Main werden 2 Objekte vom Typ Array erstellt. Auf beiden werden die gleichen Berechnungen ausgeführt und ausgegeben. Benutze Refactoring, um für die Füllung der Felder und die Ausgabe eine Methode zu extrahieren. Der Parameter der neuen Methode soll myArray heißen.

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).

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.


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.




Zurück zu Eclipsekurs 2007