General Information
Instructors
Professor: Brad Vander Zanden
- Office: Claxton 354
- Office Hours: By appointment
- Email: bvz@cs.utk.edu
TA: Tiger Jaser
Textbooks
Required : Developing User Interfaces, Dan R. Olsen, Jr.
Optional :
- JAVA 2: A Beginner's Guide by Herbert Schildt
(most highly recommended), or
- Onto Java2, 3rd Ed, Patrick Winston and Sundar Narasimhan, or
- Teach Yourself Java by Joseph O'Neil
Other Java Resources
- Good Java Books:
- Java 2: The Complete Reference, Herbert Schildt, McGraw Hill. Excellent
Java resource for more experienced Java programmers.
- The Java Programming Lanugage, Ken Arnold and James
Gosling, Addison-Wesley. Kernighan and Ritchie
type text for Java. Covers the basics of the language but does
not cover the Java API, including the AWT.
- Java in a Nutshell, O'Reilly. Good reference
to Java and Java API, including the AWT. Probably the book most used
by Java programmers.
-
Exploring Java, Patrick Niemeyer & Joshua Peck, O'Reilly.
Another solid book on the basics of Java. Perhaps
a bit less comprehensive than Java in a Nutshell, but may be
a little better for Java beginners.
- Good Awt Books:
- Graphic Java 1.2: Mastering the JFC: AWT, Volume 1, David M. Geary.
- Graphic Java 2, Volume 2, Swing, David M. Geary.
- Good Java 2D Graphics Book: Java 2D API Graphics by Vincent J. Hardy.
Java Documentation
Sun provides an excellent set of class and method descriptions for Java
at
www.java.sun.com/j2se/1.5.0/index.jsp. I tend to answer all
my questions by going to this web-site rather than going to a book.
The Java 2 Platform API Specification link is particularly useful
for finding out about various Java classes. The tutorial links are
also good sources of example code.
Course Prerequisites
The course prerequisites are CS302, CS360, and some knowledge of object
oriented programming. The course will cover some aspects of the
Java language but for the most part you will be expected to pick
up Java on your own from a reference text. You are expected to
have some previous experience with object oriented programming,
either with C++, Java, or some other object oriented language.
In particular, I will assume that you understand classes, inheritance,
methods, constructors and destructors, and virtual functions. You are
free to use your own version of Java for testing your programs but
ultimately your program must run on the Java virtual machine installed
on the hydra and cetus machines, which is Java 1.5.0.
Topics To Be Covered
The course will be a survey of tools and techniques
for constructing highly interactive, graphical user interfaces. The
course is oriented toward programming rather than towards usability
or graphic design. However, some usability and graphic design topics
will be discussed, especially early in the course. The course is
also oriented toward the creation of applications involving custom,
programmer defined objects and behaviors. In other words, the course
will be oriented towards enterprise computing.
Emphasis will be on five major areas:
- Object Oriented Programming: Throughout the course we will
discuss design idioms, frequently called design patterns, for creating
graphical interfaces using object oriented programming. Design patterns
are general solutions to recurring design problems that arise in programming
applications.
- Display Management: When the user manipulates objects in a
user interface,
both the interface and the application typically provide various types
of pictorial feedback. This feedback may "damage" various areas of the
screen, and may require that the graphical objects that inhabit these
areas be redrawn. We will discuss efficient algorithms for incrementally
detecting and updating damaged areas of the display.
- Event Handling: GUIs have a user-centered model of computing
rather than a program-centered model. You are used to writing programs that
have a single thread of control and that determine when they receive input
from the user and when they provide output to the user. In contrast, GUIs
can have multiple threads of control and the user decides when to provide
input. When the user provides input, it is typically via an "event" that
then triggers an action procedure. This action procedure becomes the current
thread of control. It is imperative that the action procedure provide output
as soon as possible because users become impatient if they either do not see
an immediate response to their action. We will discuss event programming
and how events are handled in Java.
We will discuss models and algorithms for handling input, especially
the concept of interaction techniques (combinations of graphics
and behaviors that are reused in many interfaces).
- Animation: Animation is frequently used to provide an illusion
of smooth movement in an interface and we will discuss how animation is
achieved in Java using timers and threads.
- Multi-User Applications: Many user interfaces support
user collaboration across the internet. We will describe general
principles for implementing multi-user applications, and examine Java's
socket and remote method invocation (RMI) interfaces.
- Scripting Languages: Scripting languages are often used to
rapidly prototype interfaces or to rapidly create one-time applications.
We will provide a brief introduction to scripting languages and focus
on one in particular, which will be selected later in the course.
Grading
- Programming Assignments and Homework: 40%
- Midterms (Sept 22 and Nov 3): 40%
- Final: 20%
Programming Assignments
There will be a number of programming assignments throughout the semester
to give you familiarity with the algorithms and languages presented in class.
Undergraduate students will be allowed to work on certain labs in pairs
of two. If you do pair up, you must work in the same pair on all labs on
which I permit pairwork.