BallWorlds

  1. CSSE 120 - Fundamentals of Software Development 1
  2. Rose-Hulman Institute of Technology
  3. Computer Science & Software Engineering

Designing and implementing multple classes: inheritance and interfaces

Part 5: Mover

Learning objectives

After completing all the parts of this lab, you should ...

... Be able to Explain the following concepts:

... Be able to Do the following:

Items in bold above are learning objectives for this part of the lab.

Instructions:

Pair Programming

Lab report

Time limit

Getting Started

What you should learn

Resources

The following steps should be familiar for you by now:

If not,

What you should do

Getting started

  1. Skim through this document. Then return to this point.
  2. Open your BallWorlds, Part 5 report (on Angel)
  3. Question: Who is your partner for this report?
  4. Question: About how many minutes do you think it will take you to complete Part 5 of BallWorlds?
  5. Question: What time is it now? (Later we will ask you how long you spent on Part 5 of BallWorlds.)

    Reminder: Each time that you see a question in this document prefaced by

    "Question: yada yada ..."
    put your answer in your BallWorlds report (on Angel) at that time.
  6. Open Eclipse. Update your BallWorlds project from your SVN repository (Team ~ Update), or else check out BallWorlds from your pair's SVN repository if you don't have it on your computer yet.
  7. Compile and run BallWorlds. You should see no error messages, except that only Duds and DudsThatMove can be created yet by the BallButtons.

Reviewing Dud and DudThatMoves

What you should learn

Resources

The following concepts should be clear to you now:

If not,

What you should do

Reviewing ideas from Dud and DudThatMoves

  1. Question: What is the difference between a class and an instance of that class ?
  2. Question: What is the difference between an interface and a class that implements that interface ?
  3. Question: According to BallWorld's UML class diagram, a Dud has to implement the Animate, Drawable and Relocatable interfaces? What does that tell you?
  4. Question: Your Dud's constructor containted a statement like this:
        ballEnvironment.addBall(this);
    
    
    Explain that statement, word by word.
  5. Question: What fields did your DudThatMoves have? Why were they necessary?

If any of the above questions are still confusing to you, ask your instructor or an assistant for help NOW -- you will be unable to complete the rest of this exercise without understanding the answers to the above questions.

Thinking Before Doing

What you should learn

Resources

For a class to implement an interface, the class must supply definitions for each of the methods whose signatures appear in the interface. However, nothing prohibits those methods from being stubs -- while comments in the interface may describe the intended behaviors of the methods of the interface, only the form of those methods is enforced.
A class responds to mouse events by implementing the MouseListener and/or MouseMotionListener interfaces.
Reading a UML class diagram should be familiar territory to you by now.

If not,

What you should do

Understanding Mover from BallWorld's UML class diagram

  1. Briefly review the specifications of the BallWorlds project.
  2. Briefly review the UML class diagram for the BallWorlds project.

    Note its color-coding:

    • The six yellow classes are the six classes that you will eventually implement.
    • Those yellow classes extend the abstract Ball class, which in turn implements the three blue interfaces. Thus, your classes must implement those three blue interfaces.
    • The Ball class, and hence each of your classes which extends Ball, have the grey BallEnvironment object.
    • Some of your Ball classes may want to refer to instances of the green classes.

    So the only part of the UML class diagram relevant to what you will implement are the colored items listed above.

  3. Question: According to the above UML class diagram, what class must a Mover extend?
  4. Question: According to the above UML class diagram, what interfaces must a Mover implement?
  5. Question: Consider the 7 methods that a Mover must implement to satisfy the contracts of the three interfaces that a Mover implements. Of those 7 methods, which two methods must a Mover implement meaningfully (i.e., not merely stubbed) in order to appear on the screen?
  6. Question: Consider the 7 methods that a Mover must implement to satisfy the contracts of the three interfaces that a Mover implements. Of those 7 methods, which method must a Mover implement meaningfully (i.e., not merely stubbed) in order to move?
  7. Question: According to the above UML class diagram, what class implements both MouseListener and MouseMotionListener (and hence responds to mouse events)?
  8. Question: The World responds to a mouse-press by selecting the Ball nearest the mouse (and showing this by turning that Ball red while the mouse is pressed). Of the 7 Ball methods that must be implemented, which one must be implemented in order for this Ball-selection to work correctly?
  9. Question: The World responds to a mouse-drag by (repeatedly, throughout the drag) telling the selected Ball to move to the current mouse-point. Of the 7 Ball methods that must be implemented, which one must be implemented in order for this Ball-dragging to work correctly?
  10. Question: The World responds to a mouse-left-click (i.e. press and release) by telling the selected Ball to toggle between the paused and not-paused state. (So, if the Ball is acting, it should stop acting; while if it is not acting, it should resume acting.) Of the 7 Ball methods that must be implemented, which one must be implemented in order for this Ball-pause-resume to work correctly?
  11. Question: The World responds to a mouse-right-press by telling the selected Ball to kill itself, that is, to have itself removed from its World. Of the 7 Ball methods that must be implemented, which one must be implemented in order for this Ball-suicide to work correctly?

If any of the above questions are still confusing to you, ask your instructor or an assistant for help NOW -- you will be unable to complete the rest of this exercise without understanding the answers to the above questions.

Implementing Mover

What you should learn

Resources

Iterative Enhancement Plans

When implementing per an iterative enhancement plan, one implements and tests each stage of the plan before continuing to the next stage of the plan.

Consider While Working

Some questions/issues to consider throughout this exercise are:

Reminders from the BallWorlds UML

Some notes/reminders from BallWorld's UML class diagram to consider throughout this exercise are:

What you should do

Implementing Mover

As you do this part of the exercise:

  1. Keeping in mind the above (especially think, don't just copy-and-paste and test each stage before continuing to the next stage):

    Augment your BallWorlds project to include a Mover class that extends Ball (not DudThatMoves) and implements Animate, Drawable, Relocatable.

    A Mover should be able to:

    • Stage 1: Appear on the screen, with any reasonable size and color.
      • It should start in the exact middle of its world (even if its world is resized).
      • Its color should be different from colors of the Ball types that you previously implemented.
    • Stage 2: Move on its own in a straight line (i.e. at a constant velocity).
      • Each Mover should have its own fixed velocity that is set at random when the Mover is constructed.
      • The random velocity should be in any reasonable range that includes all directions (not just the "positive" direction).
    • Stage 3: Be "selectable" by the mouse.
      • To accomplish this, implement the distanceFrom method per its specification.
        • Hint: you do NOT need to know any "formula" for distances!
        • Important: go back to Dud and implement distanceFrom there also. Otherwise, depending on what stub you used for distanceFrom in Dud, a Dud might always be seen as the "closest" ball.
    • Stage 4: Be "draggable" by the mouse.
      • To accomplish this, implement the moveTo method per its specification.
    • Stage 5: Be "pausable" by the mouse.
      • To accomplish this, implement the pauseOrResume method per its specification.
    • Stage 6: Be "killable" by right-clicks of the mouse.
      • To accomplish this, implement the die method per its specification.

Wrapping Up

What you should do

Summary

Perhaps the most important ideas that you saw in Part 3 of BallWorlds are:

  • How to implement a class from its UML class diagram
  • How to construct new objects
  • How to read the Java API specification of a class and apply what you learn
  • The meaning of the keyword this
  • How to use one object to do work on behalf of another object
  • How to determine what fields are necessary or helpful
  • The difference between a class and an instance of a class
  1. Question: How many minutes did it actually take you to complete this part of this lab?
  2. Question: Compute the ratio of the time you ACTUALLY TOOK to complete this part of this lab to the time you ESTIMATED that you would take. Choose the ratio in the report that is closest to your ratio.
  3. Commit your changes to your SVN repository, being sure that any new files are added.
  4. Submit your report for this part of BallWorlds.