From 8d7b85e9f651ab5c46c7c649589bb710007cc4ff Mon Sep 17 00:00:00 2001
From: Martin Goik <goik@hdm-stuttgart.de>
Date: Wed, 3 Jun 2015 08:22:11 +0200
Subject: [PATCH] Missing method comments, chaining example in App class

---
 Doc/Sd1/inheritance.xml                       | 45 ++++++++++++++++++-
 .../de/hdm_stuttgart/mi/sd1/figure/App.java   |  2 +
 .../mi/sd1/figure/model/Circle.java           | 17 ++++---
 .../mi/sd1/figure/model/Figure.java           | 25 +++++++++++
 .../mi/sd1/figure/model/Rectangle.java        | 12 +++--
 5 files changed, 91 insertions(+), 10 deletions(-)

diff --git a/Doc/Sd1/inheritance.xml b/Doc/Sd1/inheritance.xml
index de92f3349..906ef278c 100644
--- a/Doc/Sd1/inheritance.xml
+++ b/Doc/Sd1/inheritance.xml
@@ -33,7 +33,7 @@
     <para>We might implement translation (move) related parameters and methods
     in both classes Rectangle and Circle independently. But since the
     underlying operation is indeed shape independent we choose a different
-    approach using inheritance.</para>
+    approach using inheritance in the subsequent exercises.</para>
 
     <section xml:id="sd1SectFigureBaseClass">
       <title>Defining a <classname>Figure</classname> class hierarchy.</title>
@@ -72,12 +72,55 @@
               linkend="sd1FigFigureMove"/> and the two methods
               <methodname>getArea()</methodname> and
               <methodname>getPerimeter()</methodname>.</para>
+
+              <para>Why is the <methodname>move(...)</methodname> method being
+              defined returning an instance of class
+              <classname>Figure</classname>?</para>
             </question>
 
             <answer>
               <annotation role="make">
                 <para role="eclipse">Sd1/Figure/BaseClass</para>
               </annotation>
+
+              <para>Defining <methodname>move(...)</methodname> returning an
+              instance of class <classname>Figure allows for operation
+              chaining:</classname></para>
+
+              <programlisting language="none">final Circle c = new Circle(1., 2., 3.0);
+c.move(1, 5).move(-3, 7);</programlisting>
+            </answer>
+          </qandaentry>
+        </qandadiv>
+      </qandaset>
+    </section>
+
+    <section xml:id="sd1SectFigureScale">
+      <title>Scaling figures</title>
+
+      <qandaset defaultlabel="qanda" xml:id="sd1QandaFigureScaling">
+        <qandadiv>
+          <qandaentry>
+            <question>
+              <para>We want allow for scaling of figures:</para>
+
+              <mediaobject>
+                <imageobject>
+                  <imagedata fileref="Ref/Fig/figureScale.fig"/>
+                </imageobject>
+              </mediaobject>
+
+              <para>In the above example the rectangle is being
+              <quote>inflated</quote> whereas the circle is being shrunk to
+              half its original size. Add a corresponding scale(...) method to
+              the Figure inheritance hierarchy which allows for operation
+              chaining as well.</para>
+            </question>
+
+            <answer>
+              <annotation role="make">
+                <para role="eclipse">Sd1/Figure/XXX</para>
+              </annotation>
             </answer>
           </qandaentry>
         </qandadiv>
diff --git a/P/Sd1/Figure/BaseClass/src/main/java/de/hdm_stuttgart/mi/sd1/figure/App.java b/P/Sd1/Figure/BaseClass/src/main/java/de/hdm_stuttgart/mi/sd1/figure/App.java
index 56e57d7aa..d585050f7 100644
--- a/P/Sd1/Figure/BaseClass/src/main/java/de/hdm_stuttgart/mi/sd1/figure/App.java
+++ b/P/Sd1/Figure/BaseClass/src/main/java/de/hdm_stuttgart/mi/sd1/figure/App.java
@@ -11,6 +11,8 @@ public class App {
      final Circle c = new Circle(1., 2., 3.0);
      
      System.out.println(c.getPerimeter());
+     
+     c.move(1, 5).move(-3, 7);
     
   }
 }
diff --git a/P/Sd1/Figure/BaseClass/src/main/java/de/hdm_stuttgart/mi/sd1/figure/model/Circle.java b/P/Sd1/Figure/BaseClass/src/main/java/de/hdm_stuttgart/mi/sd1/figure/model/Circle.java
index ccb81c91f..87a6b3d20 100644
--- a/P/Sd1/Figure/BaseClass/src/main/java/de/hdm_stuttgart/mi/sd1/figure/model/Circle.java
+++ b/P/Sd1/Figure/BaseClass/src/main/java/de/hdm_stuttgart/mi/sd1/figure/model/Circle.java
@@ -1,24 +1,29 @@
 package de.hdm_stuttgart.mi.sd1.figure.model;
 
+/**
+ *
+ */
 public class Circle extends Figure {
 
    private double radius;
    
+   /**
+    * Extending {@link Figure#Figure(double, double)} by adding parameter radius
+    * on top of center coordinates.
+    * 
+    * @param x
+    * @param y
+    * @param radius
+    */
    public Circle(double x, double y, double radius) {
       super(x, y);
       setRadius(radius);
    }
    
-   /**
-    * @return The circle's area.
-    */
    public double getArea() {
      return radius * radius * Math.PI;
    }
 
-   /**
-    * @return The circle's perimeter.
-    */
    public double getPerimeter() {
      return 2 * Math.PI * radius;
    }
diff --git a/P/Sd1/Figure/BaseClass/src/main/java/de/hdm_stuttgart/mi/sd1/figure/model/Figure.java b/P/Sd1/Figure/BaseClass/src/main/java/de/hdm_stuttgart/mi/sd1/figure/model/Figure.java
index bc02a53e3..3d62882e0 100644
--- a/P/Sd1/Figure/BaseClass/src/main/java/de/hdm_stuttgart/mi/sd1/figure/model/Figure.java
+++ b/P/Sd1/Figure/BaseClass/src/main/java/de/hdm_stuttgart/mi/sd1/figure/model/Figure.java
@@ -1,16 +1,34 @@
 package de.hdm_stuttgart.mi.sd1.figure.model;
 
+/**
+ * @author goik
+ *
+ */
 public abstract class Figure {
      
    private double x,y;
    
+   /**
+    * Creating a figure with given center coordinates
+    *  
+    * @param x
+    * @param y
+    */
    public Figure(double x, double y) {
       setX(x);
       setY(y);
    }
    
    // To be implemented in derived classes Rectangle and Circle
+   /**
+    * 
+    * @return The current figure's area e.g. with times height in case of a rectangle
+    */
    public abstract double getArea();
+   
+   /**
+    * @return The current figure's perimeter e.g. with 2 * (height + width) in case of a rectangle
+    */
    public abstract double getPerimeter();
    
    public double getX() { return x;}
@@ -18,6 +36,13 @@ public abstract class Figure {
    public double getY() { return y;}
    public void setY(double y) { this.y = y;}
    
+   /**
+    * Translating a figure by a given vector (x,y).
+    * 
+    * @param x
+    * @param y
+    * @return The current object.
+    */
    public final Figure move(double x, double y) {
       setX(getX() + x);
       setY(getY() + y);
diff --git a/P/Sd1/Figure/BaseClass/src/main/java/de/hdm_stuttgart/mi/sd1/figure/model/Rectangle.java b/P/Sd1/Figure/BaseClass/src/main/java/de/hdm_stuttgart/mi/sd1/figure/model/Rectangle.java
index f3b671abd..299508a59 100644
--- a/P/Sd1/Figure/BaseClass/src/main/java/de/hdm_stuttgart/mi/sd1/figure/model/Rectangle.java
+++ b/P/Sd1/Figure/BaseClass/src/main/java/de/hdm_stuttgart/mi/sd1/figure/model/Rectangle.java
@@ -4,10 +4,16 @@ public class Rectangle extends Figure {
 
 // Instance variables representing a rectangle's additional parameters
   private double width, height;
+  
+  
    /**
-    *  
-    * @param width The rectangle's width
-    * @param heigth The rectangle's height
+    * Extending {@link Figure#Figure(double, double)} by adding parameters
+    * width and height on top of center coordinates.
+    * 
+    * @param x
+    * @param y
+    * @param width
+    * @param height
     */
    public Rectangle(double x, double y, double width, double height) {
       super(x, y);
-- 
GitLab