<?xml version="1.0" encoding="UTF-8" standalone="no"?><umlet_diagram><help_text>// Uncomment the following line to change the fontsize:
// fontsize=14

// Welcome to UMLet!
//
// Double-click on UML elements to add them to the diagram.
// Edit element properties by modifying the text in this panel.
// Edit the files in the 'palettes' directory to create your own element palettes.
// Hold down Ctrl to select multiple elements.
// Press Del to delete elements.
// Press Ctrl-c to copy an element, and to store the whole UML diagram to the system clipboard.
// Select "Custom elements &gt; New..." to create new element types.
//
// This text will be stored with each diagram;  use it for notes.</help_text><element><type>com.umlet.element.base.Class</type><coordinates><x>620</x><y>310</y><w>230</w><h>50</h></coordinates><panel_attributes>&lt;&lt;interface&gt;&gt;
*Ball*
bg=green</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>690</x><y>460</y><w>100</w><h>50</h></coordinates><panel_attributes>*Dud*
--
Dud(World w)
bg=yellow</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>670</x><y>580</y><w>140</w><h>30</h></coordinates><panel_attributes>*DudThatMoves*
bg=yellow</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>690</x><y>670</y><w>100</w><h>30</h></coordinates><panel_attributes>*Mover*
bg=yellow</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>690</x><y>750</y><w>100</w><h>30</h></coordinates><panel_attributes>*Bouncer*
bg=yellow</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>630</x><y>830</y><w>100</w><h>30</h></coordinates><panel_attributes>*Shrinker*
bg=yellow</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>740</x><y>830</y><w>100</w><h>30</h></coordinates><panel_attributes>*Exploder*
bg=yellow</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>1000</x><y>20</y><w>230</w><h>200</h></coordinates><panel_attributes>&lt;&lt;interface&gt;&gt;
*Morphable*
--
void moveTo(Point2D p)
void moveTo(World w)
void moveTo(Point2D p, World w)
void applyForce(Point2D force)
void setVelocity(Point2D velocity)
void multiplySize(double multiplier)
void setSize(double size)
void setMass(double mass)
void setShape(Shape s)
bg=green</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>660</x><y>130</y><w>200</w><h>70</h></coordinates><panel_attributes>&lt;&lt;interface&gt;&gt;
*Selectable*
--
void distanceFrom(Point2D p)
bg=green</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>500</x><y>20</y><w>160</w><h>100</h></coordinates><panel_attributes>&lt;&lt;interface&gt;&gt;
*Animate*
--
void act()
void pauseOrResume()
void die()
bg=green</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>530</x><y>170</y><w>230</w><h>160</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;210;140</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>560</x><y>100</y><w>200</w><h>230</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;180;210</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>720</x><y>340</y><w>40</w><h>140</h></coordinates><panel_attributes>lt=&lt;&lt;.</panel_attributes><additional_attributes>20;20;20;120</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>940</x><y>440</y><w>100</w><h>70</h></coordinates><panel_attributes> 
&lt;&lt;interface&gt;&gt;
Shape
bg=pink</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>940</x><y>400</y><w>100</w><h>30</h></coordinates><panel_attributes>Color
bg=pink</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>1090</x><y>390</y><w>140</w><h>30</h></coordinates><panel_attributes>Ellipse2D.Double
bg=pink</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>1090</x><y>440</y><w>140</w><h>30</h></coordinates><panel_attributes>Rectangle2D.Double
bg=pink</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>1090</x><y>480</y><w>140</w><h>30</h></coordinates><panel_attributes>GeneralPath
bg=pink</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>1019</x><y>389</y><w>91</w><h>71</h></coordinates><panel_attributes>lt=&lt;&lt;.</panel_attributes><additional_attributes>20;51;71;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>1019</x><y>440</y><w>91</w><h>40</h></coordinates><panel_attributes>lt=&lt;&lt;.</panel_attributes><additional_attributes>20;20;71;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>1020</x><y>470</y><w>90</w><h>40</h></coordinates><panel_attributes>lt=&lt;&lt;.</panel_attributes><additional_attributes>20;20;70;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>770</x><y>400</y><w>190</w><h>100</h></coordinates><panel_attributes>lt=&lt;-</panel_attributes><additional_attributes>170;20;20;80</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>770</x><y>450</y><w>190</w><h>50</h></coordinates><panel_attributes>lt=&lt;-</panel_attributes><additional_attributes>170;20;20;30</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>530</x><y>470</y><w>180</w><h>40</h></coordinates><panel_attributes>lt=&lt;-</panel_attributes><additional_attributes>20;20;160;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>720</x><y>489</y><w>40</w><h>111</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;91</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>720</x><y>590</y><w>40</w><h>100</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;80</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>720</x><y>680</y><w>40</w><h>90</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;70</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>1090</x><y>520</y><w>140</w><h>50</h></coordinates><panel_attributes>other Shape
implementations
bg=pink</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>1010</x><y>510</y><w>50</w><h>40</h></coordinates><panel_attributes>lt=&lt;&lt;.</panel_attributes><additional_attributes>80;10;80;10</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>720</x><y>270</y><w>50</w><h>40</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>30;40;30;40</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>940</x><y>580</y><w>100</w><h>30</h></coordinates><panel_attributes>Point2D
bg=pink</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>789</x><y>570</y><w>171</w><h>40</h></coordinates><panel_attributes>lt=&lt;-
m1=velocity</panel_attributes><additional_attributes>151;20;20;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>740</x><y>760</y><w>70</w><h>90</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;50;70</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>660</x><y>760</y><w>80</w><h>90</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>60;20;20;70</additional_attributes></element><element><type>com.umlet.element.base.Package</type><coordinates><x>620</x><y>400</y><w>230</w><h>480</h></coordinates><panel_attributes>ballworlds.ball
package
bg=orange</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>720</x><y>150</y><w>300</w><h>180</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>280;20;20;160</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>1020</x><y>490</y><w>90</w><h>70</h></coordinates><panel_attributes>lt=&lt;&lt;.</panel_attributes><additional_attributes>20;20;70;50</additional_attributes></element><element><type>com.umlet.element.base.Note</type><coordinates><x>870</x><y>620</y><w>450</w><h>280</h></coordinates><panel_attributes>Notes to students:
1.  All Ball classes should be in the ballworlds.ball package.
2.  Every type of Ball must have a constructor that takes a World.
3.  This diagram shows (in pink) the attributes required by a Dud
      and DudThatMoves, but leaves to you to determine the attributes
     required by other subclasses.  In any case, you can store the
     attributes internally as you see fit.  For example, you might
     store the location of a Dud as a pair of double's, or a pair of
     Double's, or a Point2D.Double, or as part of a Shape, or ...
4.  All of the classes shown here can have stubbed  implementations
      of some of the Ball methods.  For example, getMass is not used 
      by any of the classes shown here and is included only for future
      expansion.
5.  If you add other types of Balls (Popper, WormHole,
      Rebounder, ...), you decide where to add them in the Ball
      hierarchy.
bg=blue</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>480</x><y>190</y><w>40</w><h>290</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;270</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>940</x><y>260</y><w>100</w><h>50</h></coordinates><panel_attributes>&lt;&lt;interface&gt;&gt;
Point2D
bg=pink</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>769</x><y>289</y><w>203</w><h>211</h></coordinates><panel_attributes>lt=&lt;-
m1=            location</panel_attributes><additional_attributes>171;20;20;191</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>1010</x><y>320</y><w>100</w><h>30</h></coordinates><panel_attributes>Double
bg=pink</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>770</x><y>330</y><w>323</w><h>170</h></coordinates><panel_attributes>lt=&lt;-
m1=                               DEFAULT_SIZE</panel_attributes><additional_attributes>240;20;20;150</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>820</x><y>20</y><w>160</w><h>100</h></coordinates><panel_attributes>&lt;&lt;interface&gt;&gt;
*BallDescriber*
--
Point2D getVelocity()
double getMass()
double getSize()
bg=green</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>720</x><y>179</y><w>40</w><h>151</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;20;131</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>400</x><y>130</y><w>150</w><h>80</h></coordinates><panel_attributes>&lt;&lt;interface&gt;&gt;
*Drawable*
--
Shape getShape()
Color getColor()
bg=green</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>720</x><y>100</y><w>200</w><h>230</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>180;20;170;100;20;210</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>1090</x><y>270</y><w>140</w><h>30</h></coordinates><panel_attributes>Point2D.Double
bg=pink</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>1019</x><y>269</y><w>91</w><h>40</h></coordinates><panel_attributes>lt=&lt;&lt;.</panel_attributes><additional_attributes>20;20;71;20</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>130</x><y>160</y><w>260</w><h>150</h></coordinates><panel_attributes>&lt;&lt;interface&gt;&gt;
*WorldDescriber*
--
boolean isInsideWorldX(Point2D p)
boolean isInsideWorldY(Point2D p)
Point2D middleOfWorld()
Point2D randomPointInWorld()
World getAnotherWorld()
List&lt;World&gt;allWorlds()
bg=magenta</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>130</x><y>340</y><w>260</w><h>150</h></coordinates><panel_attributes>&lt;&lt;interface&gt;&gt;
*BallManager*
--
void addBall(Ball ballToAdd)
void removeBall(Ball ballToRemove)
Ball nearestBall(Point2D p)
Ball intersectingBall(Ball b)
List&lt;Ball&gt;intersectingBalls(Ball b)
List&lt;Ball&gt; allBallsInWorld()
bg=magenta</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Class</type><coordinates><x>460</x><y>460</y><w>90</w><h>50</h></coordinates><panel_attributes>&lt;&lt;interface&gt;&gt;
*World*
bg=magenta</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>370</x><y>290</y><w>150</w><h>190</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;130;170</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>370</x><y>390</y><w>150</w><h>90</h></coordinates><panel_attributes>lt=&lt;&lt;-</panel_attributes><additional_attributes>20;20;130;70</additional_attributes></element><element><type>com.umlet.element.base.Class</type><coordinates><x>1090</x><y>580</y><w>140</w><h>30</h></coordinates><panel_attributes>Point2D.Double
bg=pink</panel_attributes><additional_attributes/></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>1020</x><y>570</y><w>90</w><h>40</h></coordinates><panel_attributes>lt=&lt;&lt;.</panel_attributes><additional_attributes>20;20;70;20</additional_attributes></element></umlet_diagram>