The University of Chicago
Department of Computer Science

MPCS 51410 Course Syllabus
Winter 2019

Instructor:        Mark Shacklette
Office:               Crerar
Office Hours:   Monday 3:30 - 5:15 pm (please set up appointment as location may vary)

email:    mark (at) cs (read hourly or so)    
              mshack (at) post.harvard.edu (read hourly or so)

Teaching staff: 

TA:                    Terry Lynch
Office:               T.B.D.
Office Hours:   T.B.D.
email:                terrencelynch_at_icloud.com

TA:                     John Hadidian-Baugher
Office:                T.B.D.
Office Hours:    T.B.D.
email:                 jhadidianbaugher_at_gmail.com

Piazza signup here.
 
SUBJECT COURSE TITLE TIME BUILDING
324 51410 Object Oriented Programming
5:30 - 8:50 Monday Ryerson 277

I. TEXT AND MATERIALS 

Texts: Required

Foundations of Object-Oriented Languages:  Types and Semantics, Kim Bruce, MIT, 2002, ISBN: 026202523X

Practical Object-Oriented Design in Ruby:  An Agile Primer, Sandi Metz, Upper Saddle River, NJ: Addison-Wesley, 2013, ISBN:  9780321721334

Design Patterns, Gamma, et. al., Addison Wesley, 1995, ISBN: 0201633612

Domain-Driven Design:  Tackling Complexity in the Heart of Software, Eric Evans, Addison-Wesley, 2004, ISBN:  0321125215

Texts: Highly Recommended (depending on an individual student's interests) 

Reactive Programming with RxJava, Nurkiewicz & Christensen, O'Reilly, 2016, ISBN: 9781491931653

The Object Primer, Scott Ambler, Cambridge, 2004, ISBN: 0521540186

CODE Complete: A Practical Handbook of Software Construction. 2nd ed., Steve McConnell, Redmond, WA: Microsoft Press, 2004

Object Oriented Analysis and Design, 3rd Ed., Grady Booch, Addison Wesley, 2007, ISBN:  020189551X

Object Design:  Roles, Responsibilities, and Collaborations, Wirfs-Brock, McKean, Addison Wesley, 2003 ISBN: 0201379430

Growing Object-Oriented Software, Guided by Tests, Freeman and Pryce, Addison Wesley, 2010 ISBN: 0321503626

Texts: Recommended

Developing Software with UML, Bernd Oesterich, Addison-Wesley, 1999, ISBN: 0201398265

Modern C++ Design, Andrei Alexandrescu, Addison-Wesley, 2001, ISBN: 0201704315

Building Enterprise Information Architectures, Melissa Cook, Prentice Hall, 1994, ISBN: 0134402561

Developing Object Oriented Software, OOTC, Prentice Hall, 1996, ISBN: 0137372485

Does IT Matter?, Carr, HBS Press, 2004, ISBN: 1591394449

Object-Oriented Software Engineering, Ivar Jacobson, Addison Wesley, 1992, ISBN: 0201544350

The Unified Modeling Language Reference Manual, James Rumbaugh et. al., Addison Wesley, 1991, ISBN: 020130998X

UML Distilled,  Martin Fowler et. al., Addison Wesley, 1999, ISBN: 0201325632

Use Case Driven Object Modeling with UML, Doug Rosenberg, et. al., Addison Wesley, 1999, ISBN: 0201432897  

Object Oriented Design & Patterns, Cay Horstmann, Wiley, 2004 ISBN: 047131966X

Agile Modeling:  Effective Practices for Extreme Programming and the Unified Process, Scott Ambler, Wiley, 2002  ISBN: 0471202827

Agile Software Development:  Principles, Patterns, and Practices, Robert Martin, Prentice Hall, 2003 ISBN: 0135974445

The CRC Card Book,  Bellin & Simone, Addison Wesley, 1997 ISBN: 0201895358

Agile Software Development,  Alistair Cockburn, Addison Wesley, 2002 ISBN: 020169969

Use Cases: Patterns and Blueprints,  Overgaard and Palmkvist, Addison Wesley, 2005 ISBN: 0131451340


Texts: Ready Reserve Reading List (materials available on canvas, and many articles may be found on the cluster under ~mark/pub/51410/ready.reserve.reading/* )

The Timeless Way of Building, Christopher Alexander, New York: Oxford, 1979

A Pattern Language, Christopher Alexander, et. al., New York: Oxford, 1977

The Categories and On Interpretation, Aristotle, Cambridge: Harvard 1938

The Parts of Animals, Aristotle, Cambridge: Harvard 1937

The Mythical Man Month, Fred Brooks, Reading, Mass: Addison-Wesley 1975

Pattern Languages of Program Design, Vol. 1, James Coplien,  DougSchmidt, Reading, Mass: Addison-Wesley, 1995

Object-Oriented Design Heuristics,  Arthur Riel, Reading, Mass: Addison-Wesley, 1996

Object Oriented Analysis and Design with Applications, 2nd ed., Grady Booch, Redwood City, Calif: Benjamin Cummings, 1994

The Patterns Handbook,  Linda Rising, ed., Cambridge, Cambridge University Press, 1998

David Garlan, Robert Allen, and John Ockerbloom. Architectural Mismatch, or Why its hard to build systems out existing parts. Proc Seventeenth International Conf on Software Engineering (ICSE-17), April 1995.

II. PREREQUISITE:

Obviously, exposure to an Object-Oriented Programming Language such as Java, C++, C#, Objective-C/Swift, python, Scala, Smalltalk/Squeak, Common Lisp Object System (CLOS), Ruby, or Eiffel would be helpful, but it is not required.  Although one of our texts implies Ruby, the code snippets are simple enough to be understood by anyone with basic knowledge of any OO language such as Java, python, etc.
 

III. COURSE DESCRIPTION

This course concentrates on three major themes: Software Architecture, Object Oriented Analysis and Domain-Driven Design, and Methodology. The bulk of the course will involve advanced concepts in Object-Oriented Analysis and Design and Domain-Driven Design (OOAD/DDD). The methods we will study include Object-Oriented Analysis and Design, Domain-Driven Design, and the Unified Modeling Language (UML).  While the focus of the course is on current best practices in designing object-oriented software, the general theme of the course is coming to terms with complexity in software systems and domains.

This course focuses on principles, concepts, processes, methods, and best practice models that are implemented with (most) any object-oriented programming language. Code examples that illuminate key concepts in OO code design will be provided in various OO languages (Java, C++, C#, Smalltalk, Python, Ruby, Common Lisp Object System (CLOS)) in order to further illuminate the concepts being discussed. For example, we will see how Python, Java, C++, and CLOS, implement, say, polymorphism, with distinctive hermeneutical and pragmatic significance.  However, it is the concepts that are central, not their particular language implementations. A primary focus of the course will be to come to terms with many common patterns in software design, which provide proven and repeatable templates on which to base implementations.

Students will have labs assigned which will reinforce the concepts covered and will work individually to produce a significant software project at the end of the term.

IV. LEARNING OBJECTIVES

Upon completion of this course the student will:

A. Fundamentally understand central OO concepts and terminology.
B. Develop a full understanding of Domain-Driven Design and Object-Oriented Analysis and Design.
C. Become fluent in the syntax of UML-the Unified Modeling Language
D. Develop object-oriented code leveraging both SQL and NoSQL databases.
E. Become conversant with a number of common design patterns. 

V. ACADEMIC INTEGRITY

Students are expected to have read and understood the University's policy on Academic Integrity. This policy is detailed in the Student Manual of University Policies and Regulations, available online here.
 

VI. METHOD OF INSTRUCTION

Methods include lecture and class presentations.
 

VII. OTHER COURSE INFORMATION

Attendance:

No formal attendance taken. There may be information presented in class that is not in the texts. You will be responsible for all information discussed in class and assigned in the required Ready Reserve readings.

Make-up Work:

If you miss an exam, you will need to speak with the instructor ASAP .  The instructor is known to woefully frown on students who miss exams.

Students are expected to read the assigned texts before class in order to be able to full participate intelligently in the discussions.

VIII. METHOD OF EVALUATING STUDENT PROGRESS

Assigned work evaluated as follows:

1 Final Exam:               25 pts **
1 Final Project             35 pts (See project description)
3 Modeling Laboratories     30 pts (10 pts each)
1 Pattern Presentation      10 pts
Total:                     100 pts

Grading scale: A=90-100, B=80-89, C=70-79, D=60-69, F=0-59

**Extra credit questions may be offered on the Exam. Questions may be drawn from the lectures, required texts as well as the required Ready Reserve Reading assignments. As this course has no programming homework, no quizzes, and only one exam, students are expected to do the reading, and will be held accountable for all of it, without exception. 

Each student will need to sign up for 1 pattern presentation during which each student will deliver a simple presentation on a pattern of choice. The presentation should last no longer than 10-15 minutes, and present the pattern in simple expository terms, and if possible, provide an example in code or design. An overhead projector will be available should students desire it.  Most students choose to deliver their presentations using Power Point.  Instructions for how to present a pattern may be found here.

All assignments are due as specified on this syllabus.  Students who turn in work late, regardless of the reason, will receive 1 points off from the first day the assignment is due (calculated as the first 24 hour period following the due date and time), and continuing for 5 days.  Assignments turned in more than 5 days late from the original due date will not be accepted and the student will receive a 0 on the assignment.  All late deliveries, regardless of cause, will incur the penalty.  It is assumed that you will have plenty of time to work on each assignment, and that a penalty will have little overall effect on a student's final grade, unless lateness is chronic or other grades are poor, in which case, of course, the penalty will be more cumbersome.  If you are late with a delivery and therefore receive a penalty (which you will) and it's an isolated incident and the rest of your work is excellent, the penalty will be innocuous. 

The instructor reserves the right to alter the course contents, dates, times or percentage of credit based on time allowed and class progress through the course material. The instructor also reserves the right to curve grades if he deems it in the best interest of the majority of students. 

NB:  The end of the quarter is the time at which the final grade you have earned through your work in the quarter is recorded with the registrar.  It is not the time you begin negotiations for extra credit opportunities.  There is no extra credit (outside of a few optional questions on an exam) offered in this course, either at the beginning or at the end. 

IX. COURSE SCHEDULE

NB: The Instructor reserves the right to alter the schedule as class progress dictates.

Abbreviations Key for Required texts and Required Ready Reserve reading (Texts marked with * are on Ready Reserve):

 
Metz Metz, Practical Object-Oriented Desgin in Ruby
OOAD Booch, Object Oriented Analysis and Design*
Bruce Bruce, Kim, Foundations of Object-Oriented Languages:  Types and Semantics
TMMM Brooks, The Mythical Man Month*
Categories Aristotle, Categories* (available online at MIT)
Animals Aristotle, Parts of Animals  (available online at MIT)
Topics Aritstotle, Topics (available online at MIT)
TWB* Alexander, The Timeless Way of Building *
APL* Alexander, A Pattern Language* (References are to chapters, not pages)
OOSC*
Meyer, Bertrand, Object-Oriented Software Construction, 2nd Ed.*
GAO95* David Garlan, Robert Allen, and John Ockerbloom. Architectural Mismatch, or 
Why its hard to build systems out of existing parts. Proceedings Seventeenth International Conference 
on Software Engineering (ICSE-17), April 1995.
Erdogmus Erdogmus et. al. Test-Driven Development (available online)
Fucci
Fucci et. al., A Dissection of the Test-Driven Development Process: Does It Really Matter to Test-First or to Test-Last? (available online)
Turhan
Turhan, et. al. How Effective is Test Driven Development (available online)

 
 
Class/Date Lecture Topics Required Reading & Pattern 
Presentation Schedule (Students
should read relevant patterns in
Gamma, et. al. for each class)
Required Reserve Reading Homework Assignments
Class 1

January 7

Introduction and Problem Statement

Issues in Complexity
Modeling and Abstraction
Design Thinking
Introduction to Design Patterns

Patterns: 

Singleton (demonstration presentation)

Metz: 1
Evans:  1-2

Patterns:  Singleton
 
 

 

Aristotle, Categories,
i - vii,xii,xiii,xv (online)

Aristotle, Parts of Animals, Book I, Part I (online)

Aristotle, Topics, Book 1:  Parts 4-7 (online)

TWB: 1,2,4,5,7





Class 2

January 14

Classification and Abstraction
Introduction to Domain-Driven Design

Analysis Modeling Programming Paradigms
Classes and Objects
State and Behavior
Bruce:  1, 2
Metz: 2-3
Evans:  3-4

Patterns:  Factory Method

TWB: 10,11,16

APL: 112,115,159, 168, 169, 173


January 21
MLK Day-No Class



Class 3

January 28

Inheritance, Abstraction and Composition
Test-Driven Development

Use Cases & User Stories
Class Identification Strategies (CRC, etc.)

Metz: 4-5 
Bruce:  3, 4
Evans:  4-5

Patterns:  See Student Presentation Schedule



Fucci
Turhan
Erdogmus


APL 180, 203,  247

Class 4

February 4


Class Relationships (Associations, Dependencies, Whole/Part)
Object-Oriented Design Principles (SAP/OCP/LSP/ISP/DIP)
Bruce, 5, 6, 7
Evans:  6-7

Patterns:  See Student Presentation Schedule




Class 5

February 11

Polymorphism (lisp, ruby/python, smalltalk, C++, Java)

Object-Oriented Design Principles (cont.) (SAP/OCP/LSP/ISP/DIP)
Metz: 7-9
Evans:  8-9

Patterns:  See Student Presentation Schedule





Modeling Laboratory I due
Class 6

February 18

Interfaces and Implementations
Aspectival Programming
Dynamic Modeling
SQL Databases (and MySQL)

Object-Oriented Design Principles (cont.) (SAP/OCP/LSP/ISP/DIP)
Evans:  10-11

Patterns:  See Student Presentation Schedule
 





Project Prototype Proposal Due (See Modeling Laboratory I.6)
Class 7

February 25

Object-Oriented Design Principles (cont.) (SAP/OCP/LSP/ISP/DIP)

Method dispatch, generics and type erasure, operator overloading, lambdas, streams and reflection
Object Equivalence (Equivalence vs. Identity, Deep vs. Shallow Copying)

NoSQL Databases:  MongoDB

Evans 12-13

Patterns:  See Student Presentation Schedule


Modeling Laboratory II due
Class 8
Rescheduled
No Class March 4




Class 8

Monday, March 11

Inter-process communication with sockets

Event Model and Reactive Programming

Exam Review
 Evans:  14-17

Patterns:  See Student Presentation Schedule

 

Modeling Laboratory III due
Class 9
Sunday,
March 17
9:30 AM - 12:20 PM
Room: JCL 298 (Crerar)
Concurrency and Multi-threaded programming

 Evans:  14-17

Patterns:  See Student Presentation Schedule



Class 10

Monday, March 18


EXAM



Final Project Deliverable Due

X. Online Reference and Resources:

General:

Cetus Links on OO: http://www.objenv.com/cetus/software.html

OOA/OOD:

Martin Fowler's home pages:      http://www.martinfowler.com/

Patterns:

Salingaros's notes on Christopher Alexander: http://www.math.utsa.edu/sphere/salingar/Chris.text.html
Patterns-Discussion FAQ: http://g.oswego.edu/dl/pd-FAQ/pd-FAQ.html
Writing Patterns: http://hillside.net/patterns/
Alistair Cockburn's home page:  http://alistair.cockburn.us/

Pattern Signup Schedule is here  
Student pattern presentation submissions can be found on the cluster by visiting /stage/classes/archive/2018/winter/51410-1/StudentPresentations.