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 2008/Tag 1

Erste Schritte

Eclipse starten

  • Starte die Eclipse-Umgebung mit dem Kommando /home/pub/lib/eclipse/eclipse, oder richte deine Pfadumgebungsvariable wie im Beipackzettel beschrieben ein. Gib danach eclipse ein.

Workspace anlegen

  • Lege einen neuen Workspace zum Testen an.
  • Gebe als Workspace dein Homeverzeichnis und einen nicht existierenden Ordner an, bspw. /home/moe/MyWorkspace, wobei dein CS-Name moe sein sollte ...
  • Setze den Haken damit beim nächsten Starten von Eclipse dieser Workspace geladen wird.
  • Verlasse nun den Begrüßungsbildschirm, in dem du auf to Workbench oder den Pfeil klickst.

Projekt anlegen

  • Erstelle ein Java-Projekt "eclipseTutorial".
  • Lege in diesem Projekt eine neue Klasse "Spielwiese" an, die eine main-Methode enthält.
  • Erweitere die Klasse zu einem "Hello World"-Programm und führe dieses in Eclipse aus.

Tipp: Mit sysout [Strg+Leerzeichen] erzeugt die Eclipse-Autocompletion ein System.out.println();

Aufruf mit Parametern

  • Verändere das Programm so, dass es einen beim Start übergebenen Parameter auf dem Bildschirm ausgibt.

Tipp 1: Die Methode main bekommt ihre Parameter als Array von Strings. Der Name des ersten übergebenen Parameters ist also args[0] .
Tipp 2: Die Parameter des Programms kannst du in der Run-Configuration einstellen.

Autocompletion

  • Lege eine neue Klasse "TinyObject" an, welche keine main Methode enthält.
  • "TinyObject" soll drei Instanzvariablen enthalten. Wenn ein Objekt dieser Art erzeugt wird, sollen diese mit einem beliebigen Wert initialisiert werden.
  • Erweitere "TinyObject" um eine Methode "void printYourselfAndThis(String text)", die den übergebenen String sowie den Inhalt der Instanzvariablen auf der Konsole ausgibt.
  • Sieh dir an, was passiert, wenn du in dieser Methode "this." schreibst und anschließend kurz wartest oder die Autocompletion mit [Strg+Leerzeichen] aktivierst.
  • Lege eine Instanzvariable "diesIstEinLangerName" an. Schreibe irgendwo in der Klasse "diesIst" und drücke [Strg+Leerzeichen].
  • Erzeuge in der "Spielwiese" ein "TinyObject" und teste deine Methode.

Autokorrektur

  • Baue Fehler in dein Programm ein (Semikolon löschen, Klammer löschen, Tippfehler) und sieh dir an, welche Korrekturvorschläge Eclipse anbietet. Spiele mit diesem Feature ein wenig herum. Du kannst Änderungen jederzeit rückgängig ([Strg+Z], Undo) machen.

Tipp 1: Beachte die "Problems"-Ansicht, sowie die Markierungen links und rechts vom Editorfenster. Manchmal muss man Änderungen allerdings erst speichern, damit die Anzeigen aktualisiert werden.
Tipp 2: Fehler werden rot unterstrichen, außerdem gibt es an der linken Seite der Zeile einen Hinweis. Den Vorschlag zum Quick-Fix gibt es auch mit [STRG+1].

Templates

  • Unter "window -> preferences -> java -> editor -> templates" findest du die Schlüsselwörter für alle Templates, die du in Eclipse mit [Schlüsselwort][Strg+Leerzeichen] einsetzen kannst. Probiere einige Schlüsselwörter, die dir bekannt vorkommen aus.
  • Alternativ kannst du auch an verschiedenen Stellen in deinem Projekt zweimal [Strg+Leerzeichen] drücken, und siehst so die an dieser Stelle verfügbaren Templates.

Programmabbruch

  • Lege eine Methode "void keepLooping()" an, welche eine Endlosschleife mit einer Konsolenausgabe (z.B. "still looping") enthält. Führe diese Methode aus und brich die Ausführung mit dem roten Stop-Button ab.

Navigieren im Projekt

  • Sieh dir die "Outline"-Ansicht an und probiere aus, wie du mit ihr in deinen Klassen navigieren kannst.
  • Halte die [Strg] Taste gedrückt und gehe mit der Maus über einen Methodenaufruf. Klicke ihn an. Was ist passiert?

Tipp 1: Mit der Tastenkombinationen [ALT + Links] bzw. [ALT + Rechts] kannst du dich wie in einem Webbrowser bewegen. Drückst du [ALT + Links] gehst du an die Stelle zurück von der du mit [Strg+Klick] gekommen bist. Tipp 2: Statt [STRG+Klick] kannst du auch [F3] drücken.

Javadoc

  • Kommentiere deine gerade erstellten Klassen und die darin enthaltenen Methoden mit Javadoc.

Tipp: /**[Enter] in der Zeile vor einer Methode oder Klasse legt automatisch einen Javadoc-Rumpf mit allen benutzten Parametern an.

  • Bewege den Cursor in deinem Hauptprogramm auf eine Stelle, an der du eine der kommentierten Methoden verwendest, und sieh dir die Javadoc-Ansicht an.
  • Alternativ kannst du auch [F2] drücken, wenn dein Cursor über einem Aufruf der Methoden ist. Was passiert wenn du über einer JDK-Methode (bspw. System.out.println() ) [F2] drückst?

TODOs und FIXMEs

Schreibe einen Kommentar in dein Programm, der mit dem Wort TODO oder FIXME beginnt. Sucht dann den "Task View" und findet eure Markierung dort wieder.

Übungsaufgaben

Du hast jetzt einige der (kleinen) Helfer kennengelernt, mit denen Eclipse dich beim Programmieren unterstützen kann. Übung im Umgang mit Eclipse bekommt man allerdings erst, wenn man es verwendet. Dafür haben wir euch im Folgenden Übungsaufgaben erstellt. Die Zeit im Tutorium wird vermutlich nicht ausreichen, um alle Aufgaben fertig zu stellen.

Aufgabe 1 stellt einen Einstieg in die Programmierung mit Eclipse dar.

Aufgabe 2 bringt euch weitere Vorteile von Eclipse näher und ihr könnt bisher Gelerntes nochmal ausprobieren.

Aufgabe 3 führt euch langsam durch ein kleines Projekt, bei dem ihr Gelegenheit habt, alle Features, die ihr eben kennengelernt habt, auszuprobieren.

Zusatzaufgabe ist für diejenigen gedacht, die schon einiges an Erfahrung in Java mitbringen und Programmierpraxis mit Eclipse erhalten wollen.

Viel Spaß!

Aufgabe 1

  • Lege im Projekt "eclipseTutorial" ein neues Package mit dem Namen "aufgabe1" an. Erstelle in diesem Package eine Klasse mit dem Namen "gcd.java" und fülle sie per copy & paste mit dem folgenden Javacode.
package aufgabe1 ;

public class gcd {
public static int compute_gcd(int x, int y) {
if (x < 0)
x = x * -1; // convert x into abs(x)
if (y < 0)
y = y * -1; // convert y into abs(y)
if (x == y && y == 0)
return (-1); // error
if (x * y == 0)
return (x + y); // either x or y = 0
if (x == y)
return y; // found the gcd
else if (x > y)
return compute_gcd(x - y, y);
else
return compute_gcd(x, y - x);
} 

public static void main(String[] args) { // test cases
System.out.println(compute_gcd(24, 36));
System.out.println(compute_gcd(1034, 1276));
System.out.println(compute_gcd("42", "21"));		
} 
}


  • Nutze die Autoformat-Funktion von Eclipse um den Code besser lesbar zu machen.
  • Der Programmcode enthält noch Fehler. Führe den Code trotzdem aus und sieh dir die Meldungen in Console, Problem-View und am Rande des Quelltextes an.
  • Behebe die Fehler und führe das Programm erneut aus.
  • Die Methode main(String[] args) bekommt Parameter von der Console in Form des String-Arrays args übergeben. Ein Konsolenaufruf der Form "gdc 13 hallo 7" würde mit diesem Array in der Form {"13", "hallo", "7"} übergeben werden. Erweitere das Programm so, dass es von der Konsole zwei Zahlen entgegennimmt und für diese den größten gemeinsamen Teiler bestimmt.

Tipp: int x = Integer.parseInt("42"); wandelt den String "42" in den integer 42 um.

  • Modifiziere den Aufruf des Programmes unter "Run..." so, dass es mit 2 Konsolenparametern aufgerufen wird.

Aufgabe 2

  • Lege im Projekt "eclipseTutorial" ein neues Package mit dem Namen "geometry" an. Erstelle in diesem Package eine 'abstrakte' Klasse mit dem Namen "Shape" und füge dieser Klasse die 3 Member-Variablen "String name", "int xCoordinate" und "int yCoordinate" (jeweils mit der Sichbarkeit private) hinzu.
  • Benutze nun die entsprechenden Source-Hilfsfunktionen von Eclipse um Getter- und Setter-Methoden für die 3 Variablen und den Konstruktor zu erzeugen.
  • Füge die abstrakte Methode "public abstract int getArea()" hinzu.
  • Erstelle nun im selben Paket eine neue Klasse "Circle" die von der abstrakten Klasse "Shape" erbt und deren Konstruktor sowie die abstrakten Methoden übernimmt.
  • Füge dieser Klasse die private Membervariable "double radius" hinzu und lass Eclipse wieder die Getter- und Setter-Methoden dazu erzeugen.
  • In der Klasse Circle besteht schon die Methode "public int getArea()", sofern die ersten Schritte richtig gemacht wurden. Besteht die Methode nicht, könnt ihr sie über die entsprechende Source-Hilfsfunktion erzeugen lassen.
  • Der Rückgabewert der Methode soll von 0 auf "Math.PI*radius*radius" geändert werden. Nutze nun die Refactor-Hilfsfunktion zum Ändern der Methodensignatur (Der Rückgabetyp soll von int auf double geändert werden, aber nicht von Hand sondern per Refactoring). Schau in der Klasse "Shape" nach, was mit der Methode "public int getArea()" passiert ist.
  • Füge nun deiner Klasse "Circle" die Methode "public void moveTo(int newX, int newY)" hinzu, die einen Kreis an die übergebenen Koordinaten verschiebt.
  • Die Methode "moveTo" kann eigentlich auf jede geometrische Form angewendet werden, daher wäre sie besser in der Klasse "Shape" aufgehoben. Nutzt die Refactoring-Funktion zum Hoch-/Runterschieben um die Methode in die Klasse Shape zu bringen.
  • Nutze die Refactoring-Hilfe um die Methode "moveTo" in "translate" umzubenennen.

Aufgabe 3

Für alle, die sie noch nicht kennen und alle, die sie noch einmal ordentlich schreiben wollen:

Die Rennschnecken


Zusatzaufgabe (nur für Experten)

Cäsar-Chiffre

Im Folgenden soll ein Programm weitgehend selbstständig entwickelt werden. Lies dir das nötige Wissen zur Cäsar-Chiffre im Web an und überleg dir selbst eine Struktur für dein Programm.

Mache dir auch Gedanken darüber, wie du die einzelnen Teile frühzeitig testen kannst.


  1. Erstelle ein Programm, das einen Text aus einer Datei einliest, mit einem Schlüssel (einer Zahl zwischen 1 und 25) durch eine Cäsar-Chiffre verschlüsselt und in einer neuen Datei (z.B. mit anderer Endung) speichert.
    • Für mehr Komfort, aber nicht notwendig: Sowohl der Dateiname als auch der Schlüssel sollen über die Konsole eingegeben werden können.
    • Tipp: Das Programm wird einfacher, wenn man als erstes den Text in Kleinschreibung umwandelt. Sonderzeichen, Leerzeichen und Zahlen können unverändert übernommen werden.
  2. Erweitere dein Programm so, dass es einen Text entschlüsseln kann, der mit demselben Chiffrierverfahren verschlüsselt wurde. Der Schlüssel wird hierfür übergeben und der lesbare Text soll in einer separaten Datei gespeichert werden.
  3. Erweitere dein Programm so, dass es in der Lage ist, einen beliebigen mit einer Cäsar-Chiffre verschlüsselten Text mit Hilfe von Häufigkeitsanalyse zu entschlüsseln, ohne den Schlüssel zu kennen. Gib auch den gefundenen Schlüssel aus.


Hinweis: Unsere Tutoren können dir bei allen auftretenden Javaproblemen helfen, wir können allerdings nicht garantieren, dass sie sich in ihrer Freizeit auch mit Kryptographie beschäftigen.


Verschlüsseln / Entschlüsseln

  1. Trage einen von dir verschlüsselten Text mit mind. 50 Zeichen hier im Wiki ein und verlinke ihn auf dieser Seite unter deinem Namen. Entschlüssle andere Texte, die hier verlinkt sind.

Wenn du willst, kannst du deinen Chiffrieralgorithmus auch verändern oder einen anderen implementieren. Du solltest das aber im Link zu deinem verschlüsselten Texten aber auch kenntlich machen. Denke daran, dass du selbst in der Lage sein solltest, deine Texte bei gegebenem Schlüssel zu entschlüsseln ;)


Zurück zu Eclipse 2008

PS: Wenn du Fehler in den Aufgaben findest, benutze den "Bearbeiten"-Link oben auf der Seite.