Syllabus for
CS-5331-2/156 Design Patterns

Dr.  Michael Sobolewski
Room: CP-310
Office hours: Wednesday 2:00 p.m. to 5:00 p.m. or by appointment

Course Information
CS-5331-002/156: Design Patterns
Location: CP 110
Time: 1 p.m. - 1:50 p.m., MWF

Course webpage is We will make extensive use of the class WWW site. You should check the WWW page on a near daily basis for updates.

A design pattern is a way of pursue a design intent in terms of classes and their methods in an object-oriented (OO) language. Design patterns are recurring solutions to software design problems you find again and again in real-world application development. Design patterns are about design and interaction of objects, as well as providing a communication platform concerning elegant, reusable solutions to commonly encountered programming challenges.

This course covers metasystemic approach to OO programming and fundamental 23 object-oriented programming patterns - the most useful class-level patterns. This course uses UML and Java in its examples and challenges because of UML's standardization as the pattern description language and of Java's popularity and its future prospects.

 By the end of this course, you will learn metasystemic approach to OO programming and by working through the challenges in this course, you will deepen your understanding of the patterns, build confidence in your ability to recognize these patterns, strengthen your ability to apply these patterns in your own programs.

Case studies, challenges, programming projects, and relevant papers support the course.

Learning Outcomes
Ability to:
1. understand add apply component coupling and cohesion in an OO design
2. describe and apply the most useful 23 class-level programming patterns.
3. categorize programming patterns based on design intent as interface, responsibility, construction, operation. and extension patterns
4. define and investigate a specific design pattern(s) not covered in  the class
5. architect larger framework-based computing systems by applying metasystemic approach to OO programming
6. analyze and evaluate architectural qualities
7. design and implement pattern-based application by selecting the appropriate programming patterns

Methods of Assessment of Learning outcomes
a. Research papers on programming patterns not covered in the class
b. Midterm exam
c. Four homework assignments - multiple pattern-based challenges per assignment
d. Pattern-based project or optional final exam

Prerequisites: introductory (undergraduate level) courses in object-oriented programming, and some familiarity with Java programming will also be needed.

Design Patterns Java Workbook, Steven John Metsker. Addison-Wesley, 2002

OO Design & Patterns,
Cay S. Horstmann, San Jose State Univ., 2nd ed., ISBN 0-471-74487-5, Wiley & Sons, 2006

Software Architecture in Practice, Second Edition, Len Bass, Paul Clements, Rick Kazman,  Addison-Wesley Professional; 2003.

Thinking in Patterns with Java, Bruce Eckel,

Design Patterns, Erich Gamma, Richard Helm, Ralph Johnson, ISBN 0201633612, John Vlissides, Addison-Wesley, 1995

Tentative Topics:
Metasystemic Object Orientation
   SW Architectures and OO Paradigm
   Elements of Java Platform
   OO Design Process
   Java Object Model
   Coupling and Cohesion

Interface Patterns
Responsibility Patterns
   Chain of Responsibility
Construction Patterns
   Factory Method
   Abstract Factory
Operation Patterns
   Template Pattern
Extension Patterns

Research paper 25%
Midterm Exam 25%
Homework assignments 20%
Project/Final Exam 30%

Course Delivery Format/Policies
Student Workload: This is a combined lecture/discussion/workshop course, falling somewhere between a traditional lecture-oriented class and a seminar class. Material will be presented by the instructor, and students are expected to participate in class discussions. I anticipate there will be one written assignment, homework assignment fro most modules, a take-home midterm exam, and a final or project.

Homework Assignments: For most modules challenge  assignments should be  submitted by email: before the date on which it is due - one week after a module presentation. For late submissions there will be a penalty of 10% for lateness. Please work individually on your assignment. Please study the assignment specifications, code your programs, and test them independently. Stop by my office if you have difficulty in understanding the assignment or the course material discussed in the class.

Projects: Students should make two person teams or work individually if it is preferred. Each team must complete a project on some aspect of design patterns - refactoring an existing project to pattern-based design is recommended. The project will be presented with the emphasis on the architecture and design, and demonstrated during the last two classes. All students must be present for all the presentations/demos. The students will be graded on the project as well as the quality of the design and presentations/demos. The presentation should not exceed more than six viewgraphs and should reflect a clear understanding of the subject by the student. Please use your critical thinking skills to be concise and focused on both the project results as well as the presentations/demos.

Final exam will be open-book/notes, but will be extremely time-constrained. Material from handouts, textbooks and reading/assignments will be included in the scope of the exams.

The purpose of these different instruments is to have a positive learning experience, critical thinking about OO design issues, and some sound grasp of fundamental design patterns. If you feel any of these instruments is not working for any reason, please send me email and I will consider a change in the format of delivery.
Student-teacher relationships are based on trust. Acts, which violate this trust, undermine the educational process. Your classmates and the instructor will not tolerate violations of academic integrity (see Statement of Academic Conduct for Engineering Students, College of Engineering Texas Tech University).