Syllabus | Calendar | Homework Assignments | Coding examples | Daily Survey |
This is really two courses in one.
Half of the course is about the technical and software-engineering issues of implementing a graphical user interface. This includes language-independent techniques like model/view separation and other common software design patterns (e.g. Command, Active Object, Factory, Proxy, etc.), and Java-specific techniques such as Swing GUI components, Listeners, inner classes, multithreading, and networking.
The other half of the course is about how to design a good user interface: how to identify users and their goals, lay things out on the screen to be attractive, clear, and efficient, choose appropriate displays and controls, structure the navigation among different screens, specify and test a proposed user interface.
Every student will carry out several projects of increasing size during the semester, representing various phases of the development process: user interface design, software design, software testing, iterative improvement, etc. You may be called upon to implement the user interface specified by one of your classmates, or to serve as a "test-driver" for a program designed by one classmate and implemented by another.
My office hours are M 11:00-2:00, TTh 1:30-3:00, W 11:00-1:00.
For the programming half of the course, we'll use Mauro Marinilli's Professional Java User Interfaces (Wiley 2006, ISBN 0-471-48696-5). For the interface-design half, we'll use Jennifer Tidwell's Designing Interfaces (O'Reilly 2006, ISBN 0-596-00803-1). I'll also post links to some tutorials on the Web; see below.
For things that I haven't yet updated on this web site, take a look at the last time I taught this course, in Spring 2007.
This course meets on Tuesdays and Thursdays from 12:15-1:30 PM in the Gallagher Lab, Swirbul Library.