The University of Chicago
Department of Computer Science

MPCS 51410 Course Syllabus
Winter 2020


Instructor:        Mark Shacklette
Office:               Crerar 398-F
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:                     John Hadidian-Baugher
Office:                Gleacher Center Dining Room (1st Floor)
Office Hours:     Wednesdays 5pm-7pm
email:                 jhadidianbaugher-at-gmail.com

TA:                    Alan Salkanović
Office:               JCL 356
Office Hours:   Sundays 10am-12pm
email:                zekija816-at-gmail-dot-com     

TA:                    Kiran Baktha
Office:               T.B.D.
Office Hours:   T.B.D.
email:                kiranbaktha2002-at-gmail-dot-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. 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:

5 Coding Assignments:       20 pts (4 pts each)
1 Final Project             30 pts (See project description)
3 Modeling Laboratories     30 pts (10 pts each)
1 Pattern Presentation       5 pts
1 Final Exam                15 pts
Total:                     100 pts

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

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 (assignments and modeling laboratories) are due as specified on this syllabus.  Students who turn in work late, regardless of the reason, will receive 2 points off for Modeling Laboratories per day (1 point off per day for Coding Assignments), 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 (4 days for Coding Assignments).  Modeling Laboratory 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.  Coding Assignments turned in more than 4 days late from the original date due will not be accepted and the student will receive a 0 on the assignment.  All late deliveries, regardless of cause and without exception, 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 6

Introduction and Problem Statement

Issues in Complexity
Modeling and Abstraction

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
Makeup:

Sunday
January 19

1-4 PM

ROOM:  JCL 390

Classification and Abstraction
Introduction to Domain-Driven Design & Bounded Contexts

Analysis Modeling

Classes and Objects



Bruce:  1, 2
Metz: 2-3
Evans:  3-4

Patterns:  See Student Presentation Schedule

TWB: 10,11,16

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


January 20
Class 3
MLK Day-No Class



Class 4

January 27

Inheritance, Abstraction and Composition
Test-Driven Development

Class Identification Strategies (CRC, etc.)

Object-Oriented Design Principles (SRP)

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

Patterns:  See Student Presentation Schedule



Fucci
Turhan
Erdogmus


APL 180, 203,  247
Modeling Laboratory I


Class 5

February 3

Class Relationships (Associations, Dependencies, Whole/Part)
Object-Oriented Design Principles (LSP)

SQL Databases (and MySQL) (needed for ML2)


Bruce, 5, 6, 7
Evans:  6-7

Patterns:  See Student Presentation Schedule





HW1
Class 6

February 10

Polymorphism (lisp, ruby/python, smalltalk, C++, Java)
State and Behavior
Object-Oriented Design Principles (OCL)
Metz: 7-9
Evans:  8-9

Patterns:  See Student Presentation Schedule




Modeling Laboratory II

HW2

Class 7

February 17


Interfaces and Implementations
Aspectival Programming
Dynamic Modeling


Object-Oriented Design Principles (ISP)
Evans:  10-11

Patterns:  See Student Presentation Schedule
 





HW3

Class 8

February 24

Object-Oriented Design Principles (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 III

HW4
Class 9

Monday, March 2



Event Model and Reactive Programming
 Evans:  14-17

Patterns:  See Student Presentation Schedule

 

HW5
Class 10
Monday, March 9

Concurrency and Multi-threaded programming
 Evans:  14-17

Patterns:  See Student Presentation Schedule

Final Project Deliverable Due (graduating students only)


Class 11

Monday, March 16

Final Exam
Study Guide for Final Exam



Final Project Deliverable Due (non-graduating students)

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.