<?xml version="1.0" encoding="UTF-8"?> <book version="5.0" xml:id="klausur_SoSe_2017" xml:lang="de" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xila="http://www.w3.org/2001/XInclude/local-attributes" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:trans="http://docbook.org/ns/transclusion" xmlns:svg="http://www.w3.org/2000/svg" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:db="http://docbook.org/ns/docbook"> <!-- saxon9he-xslt -s:klausur.xml -xsl:/usr/share/hdm-docbook-xsl/CustomLayer/Klausur/docbook2klausur.xsl --> <info> <title/> <author> <personname/> </author> <pubdate/> </info> <chapter xml:id="task1"> <title>Klassenmethoden</title> <!-- Hier gemeinsames zip Archiv hochladen, auch von anderen Aufgaben. --> <section xml:id="aufgabe1_prepare"> <title>Vorbereitung</title> <para>Entpacken Sie das oben sichtbare Archiv <filename>exam.zip</filename> und importieren Sie den resultierenden Ordner <filename>Exam</filename> als <productname>Maven</productname> Projekt in Ihren <productname>Eclipse</productname> <foreignphrase xml:lang="en">Workspace</foreignphrase>.</para> </section> <section xml:id="aufgabe1_descr"> <title>Beschreibung</title> <para>Implementierung vorbereiteter Methoden gemäß <productname>Javadoc</productname> Beschreibungen und nachfolgend beschriebener Funktionalitäten. Sie bekommen bei unvollständiger Implementierung Teilpunkte.</para> </section> <section xml:id="aufgabe1_task"> <title>Aufgabe</title> <para>Vervollständigen Sie die Implementierung aller Methoden aus folgenden Klassen im <foreignphrase xml:lang="en">package</foreignphrase> <package>de.hdm_stuttgart.mi.sd1.aufgabe1</package>:</para> <itemizedlist> <listitem> <para><classname>BodenlegerKosten</classname></para> <programlisting language="java">System.out.println("Die Kosten für einen Raum der Länge 5m bei " + " 3m Breite, 17€ pro Quadratmeter Laminat, 2€ pro Meter Sockelleiste " + " und 37 Km Anfahrt betragen " + new BodenlegerKosten(3, 5). getGesamtKosten(17, 2, 37) + "€");</programlisting> <para>Ergebnis:</para> <screen>Die Kosten für einen Raum der Länge 5m bei 3m Breite, 17€ pro Quadratmeter Laminat, 2€ pro Meter Sockelleiste und 37 Km Anfahrt betragen 298.1€</screen> </listitem> <listitem> <para><classname>Helper</classname></para> <programlisting language="java">System.out.println("Die Quersumme von " + 33215 + " ist " + Helper.quersumme(33215));</programlisting> <para>Ergebnis:</para> <screen>Die Quersumme von 33215 ist 14</screen> </listitem> </itemizedlist> <tip> <para>Das <foreignphrase xml:lang="en">package</foreignphrase> <package>de.hdm_stuttgart.mi.sd1.test.aufgabe1</package> im Test Zweig Ihres Projekts enthält zugehörige <productname>Junit</productname> Testklassen:</para> <itemizedlist> <listitem> <para><classname>TestBodenlegerKosten</classname></para> </listitem> <listitem> <para><classname>TestHelper</classname></para> </listitem> </itemizedlist> </tip> </section> <section xml:id="aufgabe1_commonHints"> <title>Allgemeine Hinweise</title> <itemizedlist> <listitem> <para>Für jede Methode stehen Ihnen in der zugehörigen Testklasse korrespondierende Tests zur Verfügung. Nutzen Sie diese!</para> </listitem> <listitem> <para>Die von Ihnen erreichte Punktzahl richtet sich nach der Anzahl positiv bestandener Tests. Sie bekommen keine Punkte, wenn Ihre Implementierung in Bezug auf einen einzelnen Test lediglich <quote>fast richtig</quote> ist. Implementieren Sie im Zweifelsfall weniger Methoden, diese dafür aber vollständig.</para> </listitem> <listitem> <para>Die <productname>Javadoc</productname> Kommentare der jeweiligen Methoden beschreiben das gewünschte Verhalten. Unter <link xlink:href="https://freedocs.mi.hdm-stuttgart.de/sd1SectMavenGenerateJavadoc.html">Generating Javadoc™ project documentation</link> finden Sie eine Anleitung zur Umwandlung in das HTML Format zwecks besserer Lesbarkeit.</para> <para>Lesen Sie die (generierte) Dokumentation <emphasis role="bold">sehr genau</emphasis>.</para> </listitem> <listitem> <para>Beachten Sie alle Sonderfälle. Dazu zählen insbesondere <code>null</code> Werte von Variablen oder enthaltene <code>null</code> Werte in <foreignphrase xml:lang="en">Arrays</foreignphrase>.</para> </listitem> <listitem> <para>Nutzen Sie den <foreignphrase xml:lang="en">Debugger</foreignphrase> oder logging <foreignphrase xml:lang="en">Statements</foreignphrase> im Fall fehlgeschlagener Testfälle.</para> </listitem> <listitem> <para>Die Ausführung von <package>de.hdm_stuttgart.mi.sd1.test</package>.<classname>ShowAllReachedPoints</classname> im Testzweig Ihres Projekts als <productname>Java</productname> Anwendung (nicht als Junit Test!) zeigt Ihnen zu jedem Zeitpunkt die in allen Programmieraufgaben bislang erreichten Punkte.</para> </listitem> </itemizedlist> </section> <section version="5.1" xml:id="uploadFirst" xml:lang="de"> <title>Hochladen Ihrer Lösung in das Klausursystem</title> <para>Exportieren Sie Ihre Implementierung dieser und weiterer Programmieraufgaben per Rechtsklick im <foreignphrase xml:lang="en">Package Explorer</foreignphrase> Ihres <productname>Eclipse</productname> Projekts. Klicken Sie im <foreignphrase xml:lang="en">Package Explorer</foreignphrase> (Maus Rechtsklick) auf Ihre Projektwurzel und exportieren Sie über das Kontextmenü <quote>Export</quote> → <quote>General</quote> → <quote>Archive File</quote> einen auf <filename>.zip</filename> endenden Archivnamen, z.B. <filename>solution_1.zip</filename>. Laden Sie danach <filename>solution_1.zip</filename> über die <quote><foreignphrase xml:lang="en">Upload</foreignphrase> File</quote> Funktion am unteren Seitenende des <productname>Ilias</productname> Klausursystems hoch. Wichtige Punkte:</para> <itemizedlist> <listitem> <para>Achten Sie auf vollständigen Export. Im Exportmenü können Sie (versehentlich) einzelne Ordner, wie z.B. <filename>src</filename>, abwählen. In diesem Fall wird Ihr Quellcode nicht in das Archiv <filename>solution_1.zip</filename> exportiert.</para> </listitem> <listitem> <para>Wählen Sie beim Hochladen nicht die falsche Datei, etwa das Ausgangsarchiv <filename>exam.zip</filename> oder eine ältere Version Ihres Projekts.</para> </listitem> <listitem> <para>Kontrollieren Sie nach dem Hochladen die Sichtbarkeit Ihres <filename>solution_1.zip</filename> Archivs im Klausursystem.</para> </listitem> <listitem> <para>Sie können mehrere Versionen <filename>solution_2.zip</filename> ... hochladen und bei Bedarf ältere im <productname>Ilias</productname> System löschen. Nur die zuletzt hochgeladene Version wird bewertet.</para> </listitem> </itemizedlist> <caution> <itemizedlist> <listitem> <para>Reservieren Sie für den Vorgang des Hochladens ausreichend Zeit vor Klausurende.</para> </listitem> <listitem> <para>Bearbeitungen, welche sich nach Klausurende lediglich auf Ihrem Arbeitsplatzrechner befinden, werden nicht gewertet.</para> </listitem> <listitem> <para>Laden Sie keine Projekte mit <productname>Java</productname> Syntaxfehlern hoch, diese werden nicht bewertet!</para> </listitem> <listitem> <para>Exportieren Sie Ihr Projekt nicht als <filename>.tgz</filename>, <filename>.java</filename>, <filename>.tar.gz</filename> <acronym>o.ä.</acronym>. Das Klausursystem akzeptiert nur Archive mit der Endung <filename>.zip</filename>.</para> </listitem> </itemizedlist> </caution> </section> </chapter> <chapter xml:id="task2"> <title>Kreise</title> <section xml:id="aufgabe2_prepare"> <title>Vorbereitung</title> <para>Falls Sie die erste Aufgabe »<xref linkend="task1"/>« bearbeitet haben, arbeiten Sie einfach an Ihrem <productname>Maven</productname> Projekt weiter. Ansonsten lesen Sie bitte die Anleitung in der Aufgabe »<xref linkend="task1"/>« zum <productname>Eclipse</productname> <productname>Maven</productname> Projektimport sowie weitere Hinweise zum Hochladen in das <productname>Ilias</productname> System.</para> </section> <section xml:id="aufgabe2_descr"> <title>Beschreibung</title> <para>Implementierung einer Methode zur Prüfung, ob ein gegebener Kreis einen anderen Kreis enthält.</para> <para>Das <productname>Maven</productname> Projektskelett enthält eine Klasse <classname>Kreis</classname> im <foreignphrase xml:lang="en">Package</foreignphrase> <package>de.hdm_stuttgart.mi.sd1.aufgabe2</package>.</para> <para>Implementieren Sie die Klasse und insbesondere den Konstruktor sowie die Methode <methodname>enthaelt(...)</methodname>. Nutzen Sie zum Test Ihrer Implementierung die <productname>Junit</productname> Tests in <package>de.hdm_stuttgart.mi.sd1.test.aufgabe2</package>.<classname>TestKreis</classname>.</para> <tip> <orderedlist> <listitem> <para>Zur Berechnung des Abstandes zwischen zwei Punktkoordinaten können Sie die Methode <methodname xlink:href="https://docs.oracle.com/javase/9/docs/api/java/lang/Math.html#sqrt-double-">Math.sqrt()</methodname> oder besser <methodname xlink:href="https://docs.oracle.com/javase/9/docs/api/java/lang/Math.html#hypot-double-double-">Math.hypot()</methodname> verwenden.</para> </listitem> <listitem> <para>Unter <link xlink:href="https://learn.mi.hdm-stuttgart.de/ilias/data/iliasclient1/mobs/mm_14078/kreise.png">https://learn.mi.hdm-stuttgart.de/ilias/data/iliasclient1/mobs/mm_14078/kreise.png</link> finden Sie eine hilfreiche Illustration mit passenden Testkoordinaten und Radien.</para> </listitem> <listitem> <para>Beispiel:</para> <programlisting language="java">final Kreis kreis1 = new Kreis(0,0,4), kreis2 = new Kreis(0,0,3); if (kreis1.enthaelt(kreis2)) { System.out.println("Zweiter Kreis ist im ersten Kreis enthalten."); } else { System.out.println("Zweiter Kreis ist nicht im ersten Kreis enthalten."); }</programlisting> <screen>Zweiter Kreis ist im ersten Kreis enthalten.</screen> </listitem> </orderedlist> </tip> </section> <section version="5.1" xml:id="uploadFollow" xml:lang="de"> <title>Hochladen Ihrer Lösung in das Klausursystem</title> <para>Laden Sie die Lösung dieser Aufgabe als gemeinsamen Projekt Export mit der ersten Aufgabe <xref linkend="task1"/> gemäß den dortigen Hinweisen hoch. Falls Sie die Aufgabe »<xref linkend="task1"/>« ebenfalls bearbeitet haben, enthält Ihr <foreignphrase xml:lang="en">Upload</foreignphrase> die Lösungen zu beiden Aufgaben.</para> <para>Tragen Sie im Freitextfeld weiter unten genau einen der beiden Texte ein:</para> <itemizedlist> <listitem> <para>Ich habe die aktuelle Aufgabe bearbeitet und erhoffe dafür Punkte.</para> </listitem> <listitem> <para>Ich habe die aktuelle Aufgabe nicht bearbeitet.</para> </listitem> </itemizedlist> </section> </chapter> <chapter xml:id="task3"> <title>Compile time Fehler</title> <para>Wir betrachten:</para> <programlisting language="java">public static int max (int a, int b, int c) { if (a < b) { if (b < c) { return c; } else { return b; } } else { if (a < c) { return c; } } }<emphasis role="red"> // Fehler: Missing Return Statement</emphasis></programlisting> <orderedlist> <listitem> <para>Was bedeutet der Compile time Fehler »Missing Return Statement«? Erklären Sie dessen Auftreten, obwohl doch sogar drei <code>return</code> Anweisungen vorhanden sind.</para> </listitem> <listitem> <para>Korrigieren Sie diesen Fehler durch eine minimale Ergänzung.</para> </listitem> </orderedlist> </chapter> </book>