CSPP 51050 Home Page

CSPP 51050     Object Oriented Architecture:  Patterns, Technologies, Implementations

Course Description

This course gives hands-on experience in object oriented architecture and design and the understanding of such designs in the form of patterns. There are no formal prerequisites except basic familiarity with one object-oriented programming language, such as Java, C# or C++ (or python or Scala or Ruby & etc.).

The course is designed to give students a solid introduction to software patterns as they are implemented in large scale system architectures currently in industry, as well as give students the opportunity to play with various languages in actually implementing these patterns in a structured course setting.  Students will be encouraged to explore the various implementation possibilities afforded by these patterns.  Trade-offs in terms of performance, development time, maintenance impact, etc. will also be discussed.

This course has two different foci, a languages focus and a design focus.

After a brief review of the fundamentals of object orientation, including inheritance and polymorphism, the first focus on design patterns concentrates on several different design and architectural patterns or styles, including pipes and filters, message queues, the blackboard pattern, the broker pattern, model-view-controller, reflection, bridge, adapter, visitor, iterator, singleton, and composite.  Refactoring concepts (improvement of code and design after the fact) will also be covered.  Historical anticedents of these patterns will be reviewed in order to give students a fundamental grounding in such concepts.

The languages focus allows students to gain additional acquaintance with various OO lanugages by actually implementing various patterns during labs in languages of their choice, including Java, C++,  C#, Smalltalk, Python, Ruby, Scala, and CLOS to name a few.  Students should come into this class with a basic knowledge of one object-oriented language, usually one of the above languages.   Acquaintance with an additional object oriented language, or knowledge of C, Smalltalk, and/or Lisp will be helpful but is not required.  Students will choose to implement a series of simple systems that incorporate several of these patterns.  Students will be able to work with industry standard technologies such as IBM MQSeries and Java J2EE in implementing their systems.  Tradeoffs in various implementation langauges will be discussed, to help students determine the various strengths and weaknesses of individual language implementations.

Labs will be designed to reinforce lectures and to help students implement each pattern covered.  Students will be able to choose which language in which they wish to work for a given lab.


Details of the course can be found in the course syllabus.


Basic familiarity with one object oriented language (e.g., Java, C#, C++) will be assumed.  You should have taken CSPP50123 prior to attempting this class or have acquired commensurate experience.  Basic familiarity with UML will be assumed.

Lecture Notes:

Lecture 1:      Lecture 1 PDF 
Lecture 2:      Lecture 2 PDF
Lecture 3:      Lecture 3 PDF
Lecture 4:      Lecture 4 PDF
Lecture 5:      Lecture 5 PDF
Lecture 6:      Lecture 6 PDF
Lecture 7:      Lecture 7 PDF
Lecture 8:      Lecture 8 PDF 
Lecture 9:      Lecture 9 PDF 

Online Sources of Relevant Information:

General OOA/OOD:

Cetus Links on OO:     http://www.cetus-links.org/~cetus/software.html
OOSE Links:             http://www.inf.ufsc.br/poo/ine5383/oose.html
Martin Fowler's home pages:      http://www2.awl.com/cseng/titles/0-201-89542-0/techniques/index.htm

Smalltalk Programming:

Cetus Links Smalltalk:  http://www.cetus-links.org/oo_smalltalk.html
Smalltalk Tutorials:  http://www.fja-odateam.com/links/smalltalk/s_tutori.html
Smalltalk FAQ:  http://www.ipass.net/~vmalik/smalltalk.html
Smalltalk FAQ:  http://www.dnsmith.com/SmallFAQ/PDFfiles/index.html
Smalltalk (VisualWorks-specific):  http://wiki.cs.uiuc.edu/VisualWorks/Tutorials+and+courses

Lisp Programming:

Cetus Links CLOS:  http://www.cetus-links.org/oo_clos.html
Marty Hall's Intro to CLOS:  http://www.apl.jhu.edu/~hall/AI-Programming/CLOS.html
CLOS chapter in Steele's Common Lisp:  http://www-2.cs.cmu.edu/Groups/AI/html/cltl/clm/node260.html
Marty Hall's Lisp Resources:  http://www.apl.jhu.edu/~hall/lisp.html
Common Lisp, The Language, 2nd Ed. (Steele):  http://www-2.cs.cmu.edu/Groups/AI/html/cltl/cltl2.html
Common Lisp HyperSpechttp://www.lispworks.com/reference/HyperSpec/
Lisp Resources:  http://eksl-www.cs.umass.edu/lisp-resources/index.html

Java Programming:

Cetus Links Java:  http://www.cetus-links.org/oo_java.html
(Just start
at Cetus and browse)

C++ Programming:

Cetus Links C++:  http://www.cetus-links.org/oo_c_plus_plus.html
C++ Object Model:  http://www.objs.com/x3h7/cplus.htm

Pattern Language (Christopher Alexander) Home Page:  http://www.patternlanguage.com/
Salingaros's notes on Christopher Alexander: http://www.math.utsa.edu/sphere/salingar/Chris.text.html
AGCS Patterns Home page:  http://www.agcs.com/supportv2/techpapers/patterns/
The Portland Pattern Repository:  http://c2.com/ppr/
The Pattern Wiki:  http://c2.com/cgi-bin/wiki?CategoryPattern
The Design Patterns Wiki:  http://c2.com/cgi-bin/wiki?DesignPatterns
Patterns-Discussion FAQ: http://g.oswego.edu/dl/pd-FAQ/pd-FAQ.html
Writing Patterns: http://hillside.net/patterns/patterns.html

What Is Refactoring? (Wiki):  http://c2.com/cgi-bin/wiki?WhatIsRefactoring
The Refactoring Browser Wiki:  http://c2.com/cgi-bin/wiki?CategoryRefactoringBrowser
Wiki Refactoring Summary:  http://c2.com/cgi-bin/wiki?WikiRefactoringSummary
Refactoring Home page:  http://www.refactoring.com/
Other Links:  http://spock.culocalbiz.com/

AntiPatterns Wiki:  http://c2.com/cgi-bin/wiki?AntiPatterns

Alistair Cockburn's home page:  http://members.aol.com/acockburn/

Current Info:

Reading List:

To join the Listserv for this course, go to:  https://mailman.cs.uchicago.edu/mailman/listinfo/cspp51050

I can be reached at several email addresses, among them: