SDA SE Wiki

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

User Tools

Site Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
teaching:labs:xp:2004b:prepjavawarmup [2009/12/16 12:06]
127.0.0.1 external edit
teaching:labs:xp:2004b:prepjavawarmup [2018/05/09 01:59] (current)
Line 1: Line 1:
 +====== Java Warmup ======
 +
 +
 +(deutsch: siehe unten: [[#​ref-prepjavawarmup-2|[2]]])
 +
 +You may ask questions or post comments about these tasks on the [[mailto:​xp-participants-1@iai.uni-bonn.de|mailing list]] or on the [[prepjavawarmupquestionsandanswers|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]|[#​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. ([[teccvscheckout|instructions]])
 +====  4. Task (Strategy Pattern) ====
 +
 +Get familiar with strategy pattern. ​
 +  * Resources in German: [[http://​www.informatik.uni-bonn.de/​III/​lehre/​praktika/​xp/​xp2004a/​uebung/​Strategy.doc|Strategy.doc ]] and [[http://​www.informatik.uni-bonn.de/​III/​lehre/​praktika/​xp/​xp2004a/​uebung/​Strategy-Solution.doc|Strategy-Solution.doc ]]
 +  * Resource in English: Bob Tarr, [[http://​www.research.umbc.edu/​~tarr/​dp/​lectures/​StateStrategy.pdf|The State and Strategy Patterns ​ ]], slide 37 - 45
 +
 +
 +
 +
 +=====  The programming starts here. =====
 +
 +(Die deutsche Formulierung der Aufgaben findet sich weiter unten auf dieser Seite. Klick hier: [[#​ref-prepjavawarmup-3|[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?​page=pic.spaghetti.gif'​}]]
 +
 +
 +
 +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]|[#​2]]]
 +
 +Kommentare und Fragen zu diesen Aufgaben kannst du an die [[mailto:​xp-participants-1@iai.uni-bonn.de|mailing list]] schicken oder in der [[prepjavawarmupquestionsandanswers|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. ([[teccvscheckout|instructions]])
 +====  4. Aufgabe (Strategy Pattern) ====
 +
 +Mache dich mit dem Strategy pattern vertraut. ​
 +  * Resources in German: [[http://​www.informatik.uni-bonn.de/​III/​lehre/​praktika/​xp/​xp2004a/​uebung/​Strategy.doc|Strategy.doc ]] and [[http://​www.informatik.uni-bonn.de/​III/​lehre/​praktika/​xp/​xp2004a/​uebung/​Strategy-Solution.doc|Strategy-Solution.doc ]]
 +  * Resource in English: Bob Tarr, [[http://​www.research.umbc.edu/​~tarr/​dp/​lectures/​StateStrategy.pdf|The State and Strategy Patterns ​ ]], slide 37 - 45
 +
 +
 +
 +
 +
 +
 +
 +
 +=====  Hier folgt der Programmierteil =====
 +
 +(If you're searching for the English Version. Look upwards, or click here:​[[#​ref-prepjavawarmup-2|[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?​page=pic.spaghetti.gif'​}]]
 +
 +
 +
 +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