General Information


Instructor

Professor: Brad Vander Zanden


TAs

David Prenshaw


Course Prerequisites

The course prerequisites are CS302 and some knowledge of object oriented programming. The course will cover the GUI 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 machines, which is Java 1.6.


Textbook and Reference Material

  1. Textbook: Dan Olsen-Building Interactive Systems: Principles for Human-Computer Interaction

  2. Java API: I tend to answer all my questions by going to this web-site rather than reading a textbook.

  3. Java Swing Tutorial


Resources for the Java Language

  1. Java Tutorial: Before you run out and spend a lot of money on a Java book, check out this site. It's free and is constantly updated as new versions of Java are released. If you buy a book there's a good chance that it will become obsolete in a couple years.

  2. If you really feel that you must have a desk copy of a Java book, my favorites are the Herbert Schildt books. JAVA: A Beginner's Guide is an excellent introduction to Java. He keeps updating the book so try to get the latest edition. Java: The Complete Reference is an excellent Java resource for more experienced Java programmers. Again try to get the latest edition.

  3. My CS365 notes on Java:


Grading


Homework

There will be a number of homework assignments throughout the semester to give you familiarity with the algorithms and languages presented in class.

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. Emphasis will be on five major areas:

  1. 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.

  2. 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.

  3. 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).

  4. Animation: Animation is frequently used to provide an illusion of smooth movement in an interface and we will discuss how animation is achieved using timers and threads.

  5. Multi-User Applications: Many user interfaces support user collaboration across the internet. We will describe general principles for implementing multi-user applications.