Here are the assignments for the course:
- Exploring your Java compiler/environment
- A
Timer Program and Practice with Strings
- Data Abstraction, Encapsulation, and Arrays: A Card Game
- Plotting a Graph of Points with Automatic Scaling
- Inheritance and Polymorphism: Drawing Points and Shapes
- Inheritance and Polymorphism: Abstract Syntax Trees
- GUI Components: A Shuttle
- Writing a Simple Applet
You may choose to implement the programs either as Java
applications or Java applets. You'll find that Java
applications are a lot easier to write, since you don't
have to write any HTML to run a Java application (unlike a
Java applet), and also you don't have to fight the browser to make the
applet work.
All the assignments are intended to be a major
part of the learning process: I believe that learning by
doing is the most effective approach, especially with computer
programming. I also believe in assignments that are
reasonably representative of real-world problems, rather than
merely trivial academic exercises. For this reason, several of the
assignments build incrementally towards a goal. I hope that
these assignments are not only challenging, but also fun!
Please do not
wait until I've covered a particular topic before
starting an assignment that involves that topic. This is
a graduate course, and so I expect you to use resources
beyond my class lectures -- books, the Web, etc. If you
wait for me to cover a topic in class, you are likely to
fall behind in the assignments.
The first two assignments are relatively simple, and serve
to introduce you to the language and its environments.
Assignments 3 through 7 will take quite a bit more effort,
and are intended to teach by example various aspects of
object-oriented programming, and Java features in particular,
and apply these to a variety of problems. Assignment 8 is a
very simple one: to create a very simple applet -- it is for
those who wish to create an applet and have not done so
before.
I expect you to test your
assignments thoroughly -- in particular, assignments 3
through 7. Failure to do a good job of testing will
affect the grade for that assignment!
It is possible that you will find difficulty in completing
all the assignments by the end of the course. Some people
appear to take more time than others to grasp certain
concepts and to complete a given assignment, so it's hard to
determine how long you should expect to take. (Note that I have
completed all of the assignments myself!). For this reason,
we will need to cooperate so that I can monitor your
individual progress. If I see some of you progressing too slowly, I will attempt to determine the reason,
and provide additional help as necessary.
Important Note
Please do not hesitate to
contact me if you find yourself not understanding
something in an assignment, or if you are stuck making
little or no progress! I can probably clear the mental
"logjam" reasonably quickly and get you moving
again in the right direction. However, I do expect you to
have thought about the problem and that you have tried a
number of possible solutions before you give up and
contact me. This is in your interest, as well as in mine!
I have found in the past that
those students who are willing to contact me are often
the ones who do better in the course. In past courses, I
have been painfully aware that some students were
experiencing problems, but unfortunately they often did
not try to contact me for help. This was true even after
I repeated several times in class my eagerness and
willingness to help! This situation is not only
frustrating for those students, but it is also very
frustrating to me, because I can usually help them
overcome a problem relatively quickly, and prevent them
from spending a lot of wasted time.
Asking me for help should not
be considered in any way a cause for embarrassment or
shame. On the contrary, it should be considered more of
an introduction to the real world, where you will be
expected to ask for help to solve programming problems. Failure
to ask for help in the real world can often reflect
negatively on your performance. (Naturally, if you ask
for help before having thought about the problem
sufficiently, or if get into the habit of asking for help
to avoid doing work, then that is a different matter.)
Please note the following:
- I have never penalized
someone for asking for help (and I have had
students who have asked a lot!) On the contrary,
I have found that those who ask for help are much
more likely to get a better grade than those who
do not.
- Students who do not ask for
help often penalize themselves by failing to
complete assignments, by completing assignments
incorrectly, or by misinterpreting what is
expected from an assignment.
Note that email is the best way to contact me, because
it is more likely to find me than a telephone call, it's
a lot faster than the US Postal Service, and you can
explain your problem in more detail than you can usually
via telephone. I can also cut and paste code you send me
to try things out myself. Note that, if you send email saying
something like "It doesn't work -- why?" without providing
additional information, it won't help either of us much.