COMPSCI 230B Assignment
(2 marks) submit your source code (including the original Canvas code) to the Assignment
Drop Box (ADB – adb.auckland.ac.nz) by Week 10 (Friday 10:00pm, 29 May 2020).
The code submission must take the form of one zip file that maintains the Bounce
You must name your zip file as “YourUPI_230a3_2020.zip”.
You may make more than one ADB submission, but note that every submission that
you make replaces your previous submission.
Submit ALL your files in every submission.
Only your most recent submission will be marked.
Please double check that you have included all the files required to run your program
in the zip file before you submit it. Your program must compile and run (through Java
.8) to gain any marks.
Include the code for creating and showing all required shapes in
NOTE: It would be ideal to first complete all tasks (that you are able to complete) in an IDE like
Eclipse, and then only proceed to answer CR3 questions once you have finished writing working
code for this iteration in your IDE.
For all three parts of the of the assignment, any changes you make to the Shapeclass hierarchy must
not break existing code (e.g. the AnimationViewerclass). In particular, class Shape must provide
the following public interface (note this is not the Java “interface”; here the term “interface” refers to
the set of public methods in a class that may act as entry points for the objects of other classes) at all
void paint(Painter painter)
void move(int width, int height)
Task 1: add class NestingShape
Deﬁne a new subclass of Shape, NestingShape. A NestingShape instance is unique in that it
contains zero or more shapes that bounce around inside it. The children of a NestingShapeinstance
can be either simple shapes, like RectangleShapeand OvalShapeobjects, or other NestingShape
instances. Hence, a NestingShape object can have an arbitrary containment depth.
The Javadoc description for NestingShapeis given in Appendix 1. Appendix 2 describes additional
functionality required of class Shapefor this task.
The resulting Shapeand NestingShapestructure is an application of the Composite design pattern.
Specific requirements are listed in the Appendices 1 and 2.
Once created, edit the AnimationViewerclass to add in instance of NestingShape, with a depth
of at least three containment levels, to your animation.
A NestingShapehas its own coordinate system, so that Shapeinstances within it are within
the coordinates of the NestingShape. So, if a Shape with a location of (10,10) is in a
NestingShape, it will be located 10 pixels below and 10 pixels to the right of the top-left
corner of the NestingShape.
In addition to implementing new methods in class NestingShape, methods handling
painting and movement inherited from Shape will need to be overridden to process a
The method that Shape’s subclasses implement to handle painting should not be modiﬁed
when completing this task. In other words, Shape objects should not have to be concerned
with whether or not they are children within a NestingShapewhen painting themselves.
One way of cleanly implementing NestingShape’s painting behaviour is to use graphics
translation – adjusting the coordinate system by specifying a new origin (the
NestingShape’s top left corner) that corresponds to a point in the original coordinate
system. This can be achieved using Painter’s translate()method. Once translated, all
drawing operations are performed relative to the new origin. Note that any translation should
be reversed after painting a NestingShape.
E.g. the following code sets the new origin (0, 0) to (60, 40). After this, a Paintercall like
painter.drawRect(10, 10, 40, 20) would cause the rectangle to be painted at
absolute position 70, 50. The second translate()call restores the origin to (0, 0).
// Code to paint children …
From the CodeRunner quiz named Bounce II, complete the first two questions:
(3 marks) Bounce II NestingShape, which runs a series of tests on your NestingShapeclass.
(1 mark) Bounce II NestingShape (static analysis), which examines the source code for your
Your code will need to pass all tests.
Task 2: add provision for any Shape to display text
Further develop the Shapeclass hierarchy to allow text to be displayed when a shape is painted. Text
should be centered, horizontally and vertically, in a shape’s bounding box, but may extend beyond the
left and right sides. Graphicsclass’ drawString()method and FontMetricsclass may be
used to implement the core functionality for this task.
In designing the revised class structure, you must guarantee that if a shape is associated with text that
it will always be painted. This responsibility should not be left to developers of Shapesubclasses. To
elaborate, consider the intention to make your Shapeclass hierarchy available – only the bytecode
and not the source ﬁles – to other developers. The above guarantee should hold for any Shape
subclasses added by other developers in the future. Note that since such developers will not have the
source code for your class hierarchy they cannot edit your classes; all they can do is extend the classes
that you provide.
You must solve this problem by applying the Template Method design pattern. Recall the
constraint that it must be possible to call paint(Painter)and move(int, int)on any
object that is an instance of class Shapeor its subclasses.
The mandatory hook method required for the Template Method solution must be named
doPaint()and take a Painterparameter.
Class Shape and all of its subclasses should provide a 7-argument constructor where the
arguments are x, y, deltaX, deltaY, width, height and text, where text is a String. This adds the
capability for text to be supplied when constructing a shape. If other constructors are used,
the resulting shape is assumed not to have text.
During painting of a shape, any text should be painted last – so that it is superimposed over
any solid figure or image that has been painted for the shape.
Once you have implemented the text painting facility, add some shapes with text to your animation.
From the CodeRunner quiz named Bounce II, complete the remaining two questions:
(3 marks) Bounce II Shapes with text, which runs a series of tests on your classes.
(1 mark) Bounce II Shapes with text (static analysis), which examines the source code for your
本网站支持淘宝 支付宝 微信支付 paypal等等交易。如果不放心可以用淘宝交易！
E-mail: [email protected] 微信:itcsdx