Revised: January 2006 (David Luginbuhl)
Course Description
Techniques for design and construction of reliable, maintainable, and useful software systems. 3 credit hours. Prerequisites: CS 151.
Objectives
Students will work on UML design and Java implementation of projects while learning about applicable object-oriented design patterns.
This is chiefly a course on object-oriented design. Students will use UML to express designs. General design principles such as using composition rather than inheritance, using interfaces, and encapsulation will be covered. Students will learn to use design patterns such as Adapter, Strategy, Factory, and the Delegation Event Model. The following parts of the Java programming language will be used and explained: concurrency, inner classes, and GUI programming. The second half of the course will focus on JavaBeans: Java's component architecture. The completion of a sequence of projects will help students understand the value of using the design principles.
Text
It is difficult to find a single text that covers all of the topics in this course. There will probably be more than one text for this course. The texts are chosen to cover as many of the following topics as possible.
- Object-Oriented Design
- UML
- Design Patterns
- Software Components (JavaBeans)
- Designing with Threads
- GUI Programming or Human Computer Interfaces Design (HCI)
In the fall of 2002, the texts used were Refactoring by Martin Fowler and a book on design patterns in Java.
Grading Procedure
Grading procedures and factors influencing course grade are left to the discretion of individual instructors, subject to general university policy.
Attendance Policy
Attendance policy is left to the discretion of individual instructors, subject to general university policy.
Course Outline
- Introduction to UML:
o The Unified Modeling Language. - Low-level patterns:
o Coding standards
o Naming standards
o Behavior patterns
o State patterns - JavaBeans Component Architecture:
o Events
o Persistence
o Bound and constrained properties
o Reflection and introspection - Object-Oriented Design Principles:
o Loose coupling and tight cohesion
o Encapsulation
o Inheritance vs. composition
o Interfaces: when and how to use them - Higher-level patterns:
o Proxy
o Factory
o Adapter
o Observer
o Strategy - Other Design Topics:
o Designing with Threads
o GUI programming and HCI







