©2006 Felleisen, Proulx, et. al.
In the first part of this lab you will learn how to work in a commercial level integrated development environment IDE Eclipse, using the Java 1.5 programming language. There are several step in the transition from ProfessorJ:
Learn to set up your workspace and launch an Eclipse project.
Learn to manage your files and save your work.
Learn the basics of the use of visibility modifiers in Java.
Learn the basics of writing test cases in Java.
Start working on two adjacent computers, so that you can use one for
looking at the documentation and the other one to do the work. Find
the web page on the documentation computer:
http://www.ccs.neu.edu/howto/howto-windows-n-unix-homedirs.html
and follow the instructions to log into your Windows/Unix account on
the work computer.
Next, set up a workspace folder in your home directory where you will keep all your Java files.
Now go to the web page:
http://www.ccs.neu.edu/howto/eclipse/howto-windows-eclipse.html
on the documentation computer and set up your Eclipse working
environment. Ask for help if anything is not clear.
Start your Eclipse and follow the Welcome Tutorial to Build a
simple Java application.
DO NOT check the box that
asks if you want to make this the default workspace for eclipse
Starting a new Project
In the File menu select New select Project.
In the pane that opens, under Java wizard select Java Project.
Name the project Project1
You can select a different name, but here we will refer to this
project as Project1.
In the bottom part select Create separate source and output folders and click on Next.
In the next pane just hit Finish.
Now in the Package Explorer pane there should be Project1. Click on the triangle or the plus sign on the side to open up the sub-parts, and do so again next to src line.
Download the file EclipseLab.zip to the desktop and un-zip
it. Ask for help if you do not know how. You sould now have a folder
named EclipseLab
with three folders in it:
Book
, BlobWorld
, and UFO
.
The first one contains two simple classes Book.java
and
BookTests.java
designed to get you started. The second one
BlobWorld
has three files, Blob.java
and
TimerTests.java that illustrate the use of the
world.jar library as well as the world.jar
library itself. The third folder contains nearly identical
files to the ones you worked with in your last lab.
You willl start working with the first folder.
Highlight the src in the Package Explorer pane and in the File menu select Import.
Under Select an import source choose File System and click on Next.
Next to From directory click on Browse and select
the folder Book
.
Highlight the Book
in the left pane, then select
all three files in the right pane.
Leave all other selections unchanged and click on Finish.
You should be back in the main Eclipse view. In the Package Explorer pane under the src in your Project1 there should be a default package with the three files in it. Open both files.
Highlight Project1 and select Run in the Run menu.
In the Create, manage, and run configurations select New. Under Project you should see Project1. If you do not, browse and find it. Give a name to this configuration. We choose the name Project1.
Click on the Search button next to Main class. It
should prompt you for the class Booktests
. Hit OK.
Back in the Create, manage, and run configurations click on the Run button.
The program should run and produce output in the Console window on the bottom. However, the window is very small. If you double-click on any window tab in the Eclipse workspace, it will get resized to cover the whole Eclipse pane. Double-clicking on its tab again restores it back to the original view. Try it with the source files as well.
You noticed that instead of using one file to keep all of our work we
now have two different files. Java requires that each
(public
) class or interface is saved in a separate file and
the name of that file must be the same as the name of the class or
interface, with the extension .java
. That means, you will
always need several files for each problem you are working on.
First, modify the files you were given by adding two more examples of
books to the BookTests
class and showing the
data in the main test driver. Run your program.
Now save all your files as an archive. Go to the workspace subdirectory of your eclipse directory and find the directory Project1. Make a .zip archive of the files in the src subdirectory and save the archive in a folder where you keep your work.
Your project will remain in the Eclipse workspace, but now you have saved a copy that will not change as you keep working.
Add a class Author
that contains the information about author's name
and age and modify the class Book
to refer to an object in
the Author
class. Of course, you need to define a new file
with the name Author.java
.
Notice that all
declarations in the project files start with the word
public
. These keywords represent the visibility
modifiers that inform the Java compiler about the restrictions
on what other programs may refer to the particular classes, fields, or
methods.
Declare the fields name
and age
in the
class Author
to be private. Now design a method
sameAuthor
to the class Book
that consumes a name of
the author and determines whether the
book was written by an author with the given name. Write your examples
as comments for now. We will turn them into tests in the next part.
You should fail in making this method work. Run it. You will see the message Error in a required project. Continue launch?. At times the compiler is smart enough to fix small errors and hitting OK works just fine. In this case, hit Cancel. The program launch stops and it looks like nothing happened. Go to the tab Problems in the bottom pane and see what the problem are. You should see the message The field author.name is not visible (or something similar). The error was probably signalled in your code already. Clicking on the red cross mark to the left or the erroneous statement pops up message indicating what is wrong, and even offers suggestions for fixing the problem, whenever possible.
The problem is, that you no longer can see the field name
in the class Author
. The class Author
does not let
you see how the author's name is represented in its class. For all we
know, it could ba a list of integers that give you the position of
each letter in the alphabet, so that an author with the name
Bach would have his name encoded as a list (2 1 3
7)
. However, we can let the outside world find out whether this
author's name is the same as the given String
. Design a
public
method
sameName
to the class Author
that determines whether
this
author has the same name as the given String
.
Modify the previous method to use this helper method to slove the problem.
We are now on our own - with no help from ProfessorJ to shows us
nicely the information represented by our objects, or to provide an
environment to run our test suite.
Viewing the data definitions
To make it possible to view the values of the fields for the objects
we define, we add to each class a method asString()
that
produces a String
representation of our data. Java allows us
to use the +
operator to concatenate two String
s -
it is much less messy than using the concat
method we used
earlier.
The simplest way for defining the toString
method for the
class MyClass
is:
public String toString(){ return "new MyClass(" + this.field1 + ", " + this.field2 + ")"; }
Our example for the class Book
shows a more elaborate version
that gives us not only the value of each field, but also its name.
Java provides a toString()
method for the class Object, but
it typically does not give us the information we are interested in,
and so we define our own asString()
method.
You must define the method toString()
for every class you
design, even if, at times, it may show only a portion of the data
represented by the instance of the class.
Designing tests
Our goal when designing tests is to make sure that we can tell easily not only that some tests failed, but also which test failed.
Read the code that tests the method before
. It prints out a
String
that consists of the names of the tests and the
results of the tests. Convert your examples for the tests for the
methods sameAuthor
and sameName
into similar tests
and run your code again.
Save your results as a .zip file.
Start a new project BlobWorld. Import the .java files from the
BlobWorld
folder. Notice that the files are marked with a
number of errors. You need the world.jar
library.
To add the library to your project proceed as follows:
In the Project
menu select Properties
.
In the left pane select java Build Path
In the top menu line select Libraries
On the right select Add Variable ...
. A pane with title
New Variable Classpath Entry
will open.
Click on Configure Variables...
Click on New
to get the new Variable Entry
pane
Enter world as Name
and click on
File...
to select the world.jar
file in your
BlobWorld
directory. (You may later choose to move it
elsewhere - but make sure you re-do these steps.)
Hit OK
. A new entry should be visible under the
Classpath Variables
. Highlight it and hit OK
again.
You are back in the pane where you started adding a variable,
but now, the entry for world
is available. From now on, the
BlobWorld
project knows how to find the library. Hit
OK
to get back to you project environment.
You can now run your BlobWorld
project. The key controls the
movement of the ball, but the timer also moves the ball randomly on
each tick. The user interface is nearly the same as we have seen in
ProfessorJ.
Make sure you can run the project and see how it is designed.
Create a new project named UFO and import all files from the UFO directory. Add the library (variable) to the project and run it. Make additions like those in the previous lab and make sure they work.