Lab 4: Inheritence with Shapes
Objectives
- Translate UML class diagrams into source code
- Construct software which using an abstract class and polymorphism
- Employ aggregation and composition in the development of software
- Use javadoc to determine appropriate use of an unfamiliar class
Prerequisite
While you don't need to have knowledge about JavaFX to complete this assignment, it makes use of JavaFX. As a result, you'll need to have JavaFX installed on your computer and configured in IntelliJ. Use one of the following guides to get this done:
Resources
- Accept the GitHub Classroom assignment invitation in Canvas and then, in IntelliJ, create a new project from Version Control using the repository URL.
- Shape Family Documentation
- You will find
WinPlotterFX.jar
in thelib
folder of the repository - WinPlotterFX Documentation
Assignment
Shape Implementations
Your assignment is to write the Shape
, Triangle
,
LabeledTriangle
, Rectangle
, LabeledRectangle
, and Circle
classes.
The classes are part of an inheritance hierarchy that is shown in the UML
class diagram below. Note that the Shape
class is an abstract class.
Also, be sure that your implementation adheres to the visibility modifiers
shown in the diagram.
Place each of these classes in a package that uses your MSOE username as the name.
Implementation specific details for these classes is found in the javadoc.
FaceMaker
The FaceMaker
class has already been partially implemented.
Once you have implemented the Shape
and Rectangle
classes, you should be
able to run the FaceMaker
program and see a face made of rectangles displayed.
The program makes use of the classes that you must implement to create the following:
You will need to refactor the FaceMaker
class and add additional functionality
as described below.
When completed, your program should ask the user for the desired type of shapes to use when generating the face. The user should be able to select any of the following options:
- Rectangle — draws face using rectangles as shown above
- Circle — draws face using circles for each facial component
- Triangle — draws face using triangles for each facial component
- Labeled Rectangle — draws face using labeled rectangles for each facial component
- Labeled Triangle — draws face using labeled triangles for each facial component
- Random — draws face using one of the previous shapes for each facial component
If the user enters something other than the one of the above options, then the program should draw a face using a randomly selected shape type for each facial component. For example, the program may draw a rectangle for the head, a labeled rectangle for the right eye, a triangle for the left eye, and circles for the nose and mouth.
WinPlotterFX
The program relies on the WinPlotterFX class. Prof. Jones
wrote the WinPlotterFX
class, and the documentation for the class is
found here. You will need to download and then add the
WinPlotterFX.jar
file to your build path (see instructions below).
Accessing the .jar File
For this assignment, you will need to make use of the WinPlotterFX.jar.
In order to be able to access the WinPlotterFX
class in the .jar
file:
- Create a lib folder in your IntelliJ project folder
- Download the WinPlotterFX.jar file and save it in the newly created lib folder.
- Select File -> Project Structure
- Select Modules from the Project Settings on the left
- Select the Dependencies tab on the right
- Select the + on the far right
- Select Libraries -> Java from the drop-down menu
- Select the lib folder you created above and click OK
- In the Configure Library dialog box that appears, accept the default settings: Name = lib and Level = Project Library
- Click OK to close the Project Structure window
You should now have access to the edu.msoe.winplotterfx.WinPlotterFX
class
in your project code.
Details
- Every class in this inheritance hierarchy, except the
Shape
class implements thedraw
method. - The
draw
methods all take a single argument, which is a reference to theWinPlotterFX
object created at the beginning of themain
method in theFaceMaker
class. As a result, all shapes use the sameWinPlotterFX
object for drawing. - Each implementation of the
draw
method must use methods from theWinPlotterFX
class to draw the desired shape. - To help you understand what you must write for each class (and how to draw each shape), read the Javadoc for the Shape-derived classes.
Sample Results
Just For Fun
Once you have met the requirements of the assignment, you may enjoy doing one or more of the following:
- Create a completely separate program that draws a picture of your own choosing.
- Implement the
Point
class shown in the UML class diagram and add freckles to the face. As an extra challenge, try to keep the freckles only on the skin. - Use different colors for the shapes.
- Draw ears and/or hair.
- Use multiple shapes to represent facial components (e.g., add a pupil in the each eye).
Acknowledgment
This laboratory assignment was developed Dr. Chris Taylor, and Prof. Sean Jones.