SDA SE Wiki

Software Engineering for Smart Data Analytics & Smart Data Analytics for Software Engineering

User Tools

Site Tools


Java Warmup

(deutsch: siehe unten: [2])

You may ask questions or post comments about these tasks on the mailing list or on the Questions and Answers page in this Wiki.

Topics

The exercises cover the basic programming topics:

  • Usage of Eclipse 3.0
  • Refactoring
  • Unit-Testing with JUnit
  • A little bit of design patterns.


[#1]

Preparations

1. Task (Accounts):

You need an account to work on the computers of our practical course.

  • If you have a valid account for the Altbau (the building where the course will be located) everything is ok. Nothing to be done.
  • If your account is outdated renew it.
  • If you have a valid account for the Neubau it will also be transferrd to the Altbau within the next days. (09.08.04)
  • Don't hesitate to ask, if you have some questions about this!

2. Task (Setup Eclipse)

  • You may use Eclipse in one of the CIP-Pools (A106, A227). If you want to use it at home download version 3.0 from http://www.eclipse.org

3. Task (Create a Eclipse project)

  • Start Eclipse
  • Switch to the CVS Repository Exploring perspective. (If it's not there: Window → Open Perspective → Other → CVS Repository Exploring)
  • Check out the project xppg-warmup from our CVS repository. (instructions)

4. Task (Strategy Pattern)

Get familiar with strategy pattern.

The programming starts here.

(Die deutsche Formulierung der Aufgaben findet sich weiter unten auf dieser Seite. Klick hier: [3])

Now let's start programming. The exercises deal with the preparation of pasta (spaghetti). Unfortunately we don't have an appropriate pasta-roboter, so the cooking will just be simulated with the computer.

In this example we consider of two different cooking times (= style) (“al dente” and “molle”) and two different sauces (Bolognese and Napoli). A portion Spaghetti consists of one style pasta and one sauce.

Sauce Style
Bolognese Al Dente
Napoli Al Dente
Bolognese Molle
Napoli Molle

{imagesrc='pic.spaghetti.gif'caption='classdiagram(clicktoenlarge)'height='300'link='attach

We created a package for each participant (account-name), you'll find it in src/student. Please do change code in your package only.

Task 1: Check-out and test.

Check the project out and execute the following tests:

  • spaghetti.BologneseAlDenteTest
  • spaghetti.BologneseMolleTest
  • spaghetti.NapoliAlDenteTest
  • spaghetti.NapoliMolleTest

Which of these tests do fail?

Task 2: Correction

Why do these tests fail und how do the SpaghettiStyle-SubClasses have to be adapted? Do the appropriate corrections! Only the SpaghettiStyle-SubClasses may be altered, nor the test-classes nor the cook.

Task 3: Refactoring and Adding of new functions

We want to add a _new_ sauce (guess your favourite). As you certainly noticed, the Spaghetti-SubClasses consist of repeating or similar code-fragments. This redundancy makes adding of new SubClasses quite difficult.

1) How can classes be adapted to avoid this redundany?
2) Write two new tests <NEWSAUCE>AlDenteTest and <NEWSAUCE>MolleTest!
3) After removing this redundancy, this sauce shall be added to each SpaghettiStyle.

Task 4: Adding of a new spaghetti-style.

We want to introduce a new way of preparation. Some like pasta “al dente”, others like “molle”, others might want pasta exactly between “al dente” and “molle”, lets call this “medio”-way. “Medio” pasta cooks 10 minutes.

1. Write a test for all sauces <SAUCENAME>MedioTest.
2. Now introduce the new style “medio”.

Task 5: Check-in.

Now check the altered code into your folder.

Note: If you encounter some problems to find a solution for task 3 or 4, revisit task 4 from the last worksheet. Don't hesitate to use the mailinglists. Exchange your knowledge!



[#2]

Kommentare und Fragen zu diesen Aufgaben kannst du an die mailing list schicken oder in der Fragen und Antworten Seite in diesm Wiki eintragen. Daniel und Tobias antworten ebenfalls auf Mails.

Themen

In diesen Übungen geht es um folgende grundlegende Inhalte:

  • Benutzung von Eclipse 3.0
  • Refactoring
  • Unit-Testing mit JUnit
  • Ein kleines bisschen Design Patterns.

Vorbereitung

1. Aufgabe (Accounts):

Du brauchst einen Account um an den Rechnern im Praktikum zu arbeiten.

  • Wenn du einen gültigen Account für den Altbau hast (das Gebäude in dem der Kurs stattfinden wird) ist alles OK.
  • Wenn Dein Account abgelaufen ist, erneuere ihn bitte.
  • Wenn du einen gültigen Account für den Neubau hast, sollte er inzwischen auch auf den Altbau übertragen worden sein. Fall nicht: Mail!
  • Zögere nicht zu fragen, wenn es irgendwelche Probleme gibt.

2. Aufgabe (Eclipse einrichten)

  • Du kannst Eclipse in einem der CIP-Pools (A106, A227) benutzen. Wenn du es zuhause benutzen willst, lade dir die Version 3.0 von http://www.eclipse.org herunter.

3. Aufgabe (Erstelle ein Eclipse Projekt)

  • Starte Eclipse
  • Wechsele in die CVS Repository Exploring Ansicht (“perspective”). (Wenn diese nicht zu sehen ist, findest du sie unter: Window → Open Perspective → Other → CVS Repository Exploring)
  • Hole die das Projekt xppg-warmup aus dem CVS Repository. (instructions)

4. Aufgabe (Strategy Pattern)

Mache dich mit dem Strategy pattern vertraut.

Hier folgt der Programmierteil

(If you're searching for the English Version. Look upwards, or click here:[2])

Jetzt wird programmiert. Die Aufgaben befassen sich mit der Zubereitung von verschiedenen Spaghetti-Gerichten. Leider fehlen uns die Mittel für einen Pasta-Roboter, die Zubereitung wird daher nur am Rechner simuliert.

In diesem Beispiel gibt es zwei verschiedene Nudelzubereitungsarten(“al dente” und “molle”) und zwei verschiedene Soßen(Bolognese und Napoli), wobei man jede Nudelzubereitung mit jeder Sosse nutzen kann. Hier eine Übersicht:

Soße Nudel-
zubereitungsart
Bolognese Al Dente
Napoli Al Dente
Bolognese Molle
Napoli Molle

{imagesrc='pic.spaghetti.gif'caption='classdiagram(clicktoenlarge)'height='300'link='attach

Wir haben für jeden Teilnehmer ein eigenes Package mit eurem jeweiligen account-namen unter dem Ordner src/student angelegt. Bitte ändert nur den Code in eurem eigenen Packet.

1. Aufgabe: Auschecken und Testen.

Checke das Projekt aus und starte die folgenden Tests:

  • spaghetti.BologneseAlDenteTest
  • spaghetti.BologneseMolleTest
  • spaghetti.NapoliAlDenteTest
  • spaghetti.NapoliMolleTest

Welche Tests schlagen fehl?

2. Aufgabe: Korrektur

Warum schlagen diese fehl und wie müssten die SpaghettiZubereitungs-UnterKlassen angepasst werden, damit es funktioniert? Führt die entsprechenden Korrekturen durch. Verändert werden dürfen dabei nur die SpaghettiZubereitungs-Unterklassen und nicht die Test-Klassen oder Koch.

3. Aufgabe: Refaktorisieren und Hinzufügen neuer Funktionen

Wir wollen eine neue Soße hinzufügen (denkt euch eine aus!). Wie ihr sicherlich bemerkt habt, haben wir in den Spaghetti-Unterklassen sich wiederholende oder ähnliche Codestücke. Diese Redundanz erschwert das Hinzufügen von neuen Unterklassen.

1. Wie kann man die Klassen so anpassen, dass die Redundanz vermieden wird?
2. Schreibe 2 neue Tests <NEUERSOßENNAME>AlDenteTest und <NEUERSOßENNAME>MolleTest
3. Nach Beseitigung der Redundanz soll nun für jede Nudel-Zubereitung diese Soße hinzugefügt werden

4. Aufgabe: Hinzufügen einer neuen Nudelzubereitung und Testen

Nun wollen wir eine völlig neue Nudelzubereitung einführen. Manche mögen ihre Spaghettis “al dente”, die anderen “molle”, manche mögen die Spaghettis genau in der Mitte von “al dente” und “molle”, das sind die sogenannten Spaghettis “medio”. Sie haben eine Kochzeit von 10 Minuten.

1. Schreibe zunächst für alle Sossensorten die Tests <SOßENNAME>MedioTest.
2. Nun führe die neue Nudelzubereitung “medio” ein.

5. Aufgabe: Einchecken

Nun bitten wir euch, den von euch geänderten/geschriebenen Code in den nach eurem Account benannten Ordner einzuchecken.

Hinweis: Solltet ihr Schwierigkeiten haben, eine geeignete Lösung für Aufgabe 3 und 4 zu finden, so schaut euch nochmal die Aufgabe 4 vom letzten Übungsblatt an. Bei Fragen und Problemen könnt Ihr gerne die Mailinglisten nutzen. Tauscht Euch aus!

teaching/labs/xp/2004b/prepjavawarmup.txt · Last modified: 2018/05/09 01:59 (external edit)

SEWiki, © 2020