Laboratory Exercise

Object Oriented Programming in Java

Supplemental Material for Baldwin and Scragg, Algorithms and Data Structures: The Science of Computing; Charles River Media, 2004 (Now published by Cengage Learning)

Site Index


Purpose

This lab reinforces understanding of basic object oriented programming concepts (objects, classes and subclasses, methods) and their expression in Java. It also provides practice using non-object aspects of Java (loops, conditionals, etc.)

Prerequisites

{Prerequisites}

Background

This lab exercises many of the object oriented programming concepts discussed in Chapter 2 of Algorithms and Data Structures: The Science of Computing (for instance, objects, messages, methods, classes and subclasses). Consult this chapter for information on these concepts. The appendix to the text also provides additional information on expressing these concepts in Java.

This lab involves defining a subclass of the Robot class from Chapter 2 of Algorithms and Data Structures: The Science of Computing. The “Final Details” section of this document explains how to find Java code for this class and incorporate it into a program. That section also indicates where to find documentation on the class.

Exercise

Do the following…

Part 1

Write a subclass of Robot that handles the following messages. Don’t forget to test the subclass, to make sure that each method works as intended:

void travel( int n )
This message causes a robot to move forward n tiles. The message has a precondition that there are no obstructions within n tiles in front of the robot.
void travel()
This message causes a robot to move as far forward as it can, stopping when it comes to an obstacle. (Note that even though this message has the same name as the above “travel” message, it is distinguishable because it has a different set of parameters — no parameters in the case of this message, versus one integer parameter in the case of the previous “travel”. Many modern programming languages distinguish between messages based on their parameters as well as their names in this manner.)
void face( int direction )
This message causes a robot to face in the direction specified by direction. The message has a precondition that direction is one of the direction constants defined in the Robot class (i.e., Robot.NORTH, Robot.EAST, Robot.SOUTH, Robot.WEST).
void safeMove()
This message causes a robot to move one tile forward if there is no obstruction immediately in front of the robot. Otherwise the robot stays where it is.
void changeColor( java.awt.Color c )
This message causes a robot to paint the tile underneath itself color c, if the tile is not already that color. If the tile is already color c, the robot paints the tile white. This message has a precondition that c is not white.

Part 2

Write a main program that creates two instances of the subclass from Part 1, positioned arbitrarily in a room, and then makes those two robots move until they are next to each other. More precisely, the code that moves the robots until they are next to each other should have preconditions

This code should establish the postcondition

(Notice that what these pre- and postconditions do not say is just as important as what they do say: for example, the preconditions do not allow assuming that the robots start in specific places, or with specific headings. The postconditions do not require the robots to be on particular tiles, or have particular headings.)

Some, but not necessarily all, of the messages handled by the new subclass will probably be helpful in making the robots stand next to each other.

Final Details

The Robot Class

Programs that use the Robot class need to include two Java files: Robot.java and RobotRoom.java. These files are available on the Web, at http://cs.geneseo.edu/~baldwin/sc/classes/Robot.java and http://cs.geneseo.edu/~baldwin/sc/classes/RobotRoom.java.

Documentation on both classes is available at http://cs.geneseo.edu/~baldwin/sc/doc/. This page is an index to documentation for all the Java classes written for use with Algorithms and Data Structures: The Science of Computing. To see the documentation for a specific class, click on that class’s name in the left-hand panel of the page.

To incorporate the Robot and RobotRoom classes into a program, just add the Robot.java and RobotRoom.java files to the CodeWarrior project that defines that program.

Any file that uses the Robot or RobotRoom classes should “import” those classes, via the statement

    import geneseo.cs.sc.*;

at the beginning of the file.

Submitting Your Work

This lab is due on Monday, February 2, no later than the beginning of your lab section.

Turn in printouts of your subclass and main program.


Copyright © 2004 Charles River Media. All rights reserved.

Revised Jan. 21, 2004 by Doug Baldwin

Site Index