程序代写代做代考 Java javaFx gui COMP 303 Project & Mini 5 Combo McGill

COMP 303 Project & Mini 5 Combo McGill

Vybihal School of Computer Science Page 1 of 5

COMP 303

Project & Mini 5 Combo
Due: April 16, 2018 on myCourses at 23:30

Question 1 (20 points)

Please read the entire question before you start.

JavaFX is a library of classes that implement a prettier GUI than Swing. JavaFX does not replace

Swing but upgrades it. At the heart of JavaFX 1 was Swing; Calling JavaFX methods resulted in

Swing calls.

For this assignment you will create your own mini implementation of JavaFX called

JavaCool303. You cannot use JavaFX in this assignment. You must use Swing. You must, like

JavaFX, build an implementation that uses Swing components internally but abstracts it away in

your own mini library called JavaCool303.

Create a package called JavaCool303.

Design and program using good OO techniques and Design Patterns. Hand in a README1.txt

file that lists the well-designed techniques and design patterns you used in your program.

Indicate where these techniques were implemented so that the TA can verify.

Your programming solution only needs to implement enough code to answer these three

submission requirements:

1. Design your solution on paper using a UML Class diagram, use UMLet. Add notes to
your diagram making it clear to the reader which design patterns you chose to include in

your implementation. One way you can do this is to draw a dashed box around the

objects that make up one design pattern, then label the dashed box with the name of the

design pattern. Remember Goldilocks, not too much, not too little, develop something

balanced, optimal and following the good designed principles we covered in class.

2. You will build two things: a simple application and the JavaCool303 library. The simple
application uses the JavaCool303 library.

• Design the JavaCool303 library as a standalone library that can be shared with
other developers. Make sure to protect your library and provide an API that makes

it easy to use. Create a JavaDoc for your library to help users who may want to

use your library.

• The simple application displays a window with a square area that can accept n
objects (the application will populate the area with 20 buttons). The square area is

contained within the window but is a different component. Each button is labeled

by a unique integer number. When a button is pressed the label is output to the

consol. The various components of this application are JavaCool303 items.

COMP 303 Project & Mini 5 Combo McGill

Vybihal School of Computer Science Page 2 of 5

3. JavaCool303 is a Java Swing library upgrade that is based on themes. A developer
wanting to use your JavaCool303 package must provide a Cool303Theme class that

modifies the look of all the GUI elements contained within JavaCool303. Your package

will come built in with two themes: Pastel and Summer. Pastel must use pastel colours

with bubble-like shapes (as best as you can do) for buttons / boxes / windows / areas;

Winter I will leave it to your imagination but the implementation must be different from

Pastel.

Your solution must use what we have covered in class: abstract classes, interfaces, inheritance,

and design patterns.

You will have to wrap the paint methods of Swing components with your own version for

JavaCool303. Don’t animate anything, unless you want a greater challenge (there are no extra

points for animation).

Take time to think of the problem and how to implement it by wrapping or replacing a minimum

number of Swing components with JavaCool303 components. Name your components like this:

Cool303ZZZ. For example: Cool303Component, Cool303Container, Cool303Theme,

Cool303Box and Cool303Button. Your solution must maximize Swing reuse under/within this

new packaging. Your solution must maximize reuse within the JavaCool303 library elements

themselves.

What makes this different from Swing? Once a theme is selected, then all the Cool303ZZZ

classes are affected by that theme. For example, the application program will display all the

components of the GUI according to the theme. A good test, by the TA, would be to keep your

application as-is but change only the theme to your other theme. If that test works, then they will

keep your application as-is but write their own theme, following the instructions from your

JavaDoc. Your program must be able to work in all these cases to receive full points.

Note: If the user leaves the theme empty (NULL), your library must throw an error.

The basic classes will work this way:

• Cool 303 Components are individual GUI units that are used to populate Containers.

• Cool 303 Containers store and display components in a fixed bounded area. But the
bounded area cannot be seen. It is an invisible area; however, the components can be seen

and the containers can be given a background. Containers have an optional string. If this

string is present, then the string is displayed as a title (in bold) appearing at the top left

corner of the container area. Containers have an optional background color, if provided

the invisible area is revealed.

• Class Cool303Root is a container populated with Components and Containers. A user can
implement more than one Cool303Root in their application. The Root is fancy and

follows the selected theme and applies the theme to all elements populated within it. Root

does not have a title or any other text. Root will auto size itself to the minimum size

needed to display all the components if the user does not specify a size. If the user of

Root defines a size the class will attempt to follow that request if it is sufficient to display

COMP 303 Project & Mini 5 Combo McGill

Vybihal School of Computer Science Page 3 of 5

all the components. If it is not big enough then the automatic sizing option is

automatically initiated overriding the user’s specified size.

WHAT TO HAND IN FOR QUESTION 1 AND GRADING

• 1 point: A readme.txt file explicitly stating the design techniques and the design patterns
you used

• 5 points:
o Proper use of techniques (for example, abstract classes, interfaces, inheritance,

protected, contracts, analogies, design with reuse)

o Properly used design patterns
o Good selection of techniques and design patterns
o Following the Goldilocks principal
o Followed instructions

• 1 point: Easy for developer to create their own themes

• 1 point: Easy to incorporate JavaCool303 into a new project

• 2 point: JavaDoc and commenting and good variable names + easy to read code

• 5 points: UML diagram demonstrating a well-formed design

• 4 points: Sample program displaying window, box and 20 buttons (as described)

• 1 point: JavaCool303 as a package

Everything is graded proportionally.

Question 2 (10 points)

Simulators are programs that attempt to duplicate real life in software. For this question, you

will use well-formed techniques and design patterns to construct a portion of a simulator. As in

question 1, you will need to provide a readme2.txt file making explicit the well-formed

techniques and the design patterns you used to answer this question. Specify where these

techniques were implemented so that the TA can verify.

One of the most fundamental parts of a simulator is the World and those items that populate the

World. Often a simple way to represent a world is using a 2D array. This array is imagined to be

the ground. Items populate this array. Some items are immoveable, others are moveable, and

others move autonomously.

You will need to build the following elements of your simulator using proper object-oriented

techniques, good software development techniques and using design patterns. You may add

additional helper methods and objects if needed. Remember to be optimal.

COMP 303 Project & Mini 5 Combo McGill

Vybihal School of Computer Science Page 4 of 5

• The World:
o A 2D array that can store one Moveable, Immoveable, or Autonomous object per

cell of the array.

o A method called public void step() that iterates through the cells of the

array changing the state of the world by updating the position of all the

Autonomous and Moveable objects (see below). It does this once for each call to

the method.

o The method public void display() to display the world on the screen

using Swing or JavaFX. This must be a GUI grid displaying simple text tokens

that represent the items in the world.

o The method public void add(item,x,y) is used to populate the world

by adding items to the array at cell x,y. The cell needs to be available (empty) or

the add fails.

o The constructor defines the size of the array. The array is empty.

• Immovable:
o Private string name, describing what it is.

o Private char token, a character that stores the symbol that represents the

item when printed to the screen.

o Private int x, y, which specifies the location in the array this item exists.

o The method public char getToken() returns the character symbol.

(If you want a greater challenge, you can replace the symbol by a graphic.)

• Moveable:
o Implemented exactly as Immovable, however it can be moved by one cell position

if bumped into by an Autonomous object. It is displaced in the same direction as

the bump. For example, if the item was bumped on its right side and the motion of

the bump was towards the left, then the item will move to the left.

• Autonomous:
o Implemented exactly like Moveable (bumped by a Moveable object or another

Autonomous object causes it to shift one cell in the direction it was bumped).

o A public void step() method that randomly picks a direction and updates

the item to a new location by one cell.

• Construct a main method that builds a world and then runs a simulation for 100 iterations.
o Your program will not prompt the user at the beginning.
o Your main method will call private static buildWorld() method that

will be hand coded to construct a world of a particular size and then populated

with 5 immovable, 3 moveable and 2 autonomous objects. Your implementation

must be able to handle any number of items since the TAs will change these

parameters when they test your program. Once the world is populated the method

returns to the main.

o From the main, a for-loop is used to iterate 100 times. For each iteration of the
loop the objects of the world are updated and their new positions are displayed on

the screen.

o When the simulation is complete, the program prompts the user: “Would you like
to run the simulation again?”. If they say yes then the world iterates for an

additional 100 loops, continuing with the world as it was before the prompt. If

COMP 303 Project & Mini 5 Combo McGill

Vybihal School of Computer Science Page 5 of 5

they say no, then the program terminates. After this second 100 iteration the user

is prompted again, etc.

WHAT TO HAND IN FOR QUESTION 2 AND GRADING

• 1 points: A readme.txt file making it explicit the well-formed techniques and design
patterns you elected to use to answer this question

• 2 points: Well-formed techniques and design pattern choices

• 2 points: World

• 1 point: Immovable

• 1 point: Moveable

• 2 points: Autonomous

• 1 point: Main

Graded proportionally