MPCS 51410 Object Oriented Programming (Winter 2023)

Section 1
Instructor(s) Shacklette, Mark (jmshackl)
Location Online
Meeting Times Monday 4:10pm - 6pm
Fulfills Elective Specialization - Software Engineering (SE-1) Specialization - Software Engineering (SE-2)



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 design will be provided in various OO languages (Java, C++, C#, Smalltalk, Python, 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.


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 
D. Produce different UML models using a UML tool.
E. Become conversant with a number of common design patterns. 

Course Prerequisites

Core Programming

Other Prerequisites

This course requires competency in Unix and Linux. If you attended the MPCS Unix Bootcamp you covered the required material. If you did not, please review the UChicago CS Student Resource Guide here:

Overlapping Classes

This class is scheduled at a time that conflicts with these other classes:

  • MPCS 56511-1 -- Introduction to Computer Security
  • MPCS 51087-1 -- High Performance Computing
  • MPCS 51030-1 -- iOS Application Development

Eligible Programs

MS in Computational Analysis in Public Policy (Year 2) MA in Computational Social Science (Year 2) Bx/MS in Computer Science (Option 1: Research-Oriented) Bx/MS in Computer Science (Option 2: Professionally-oriented - CS Majors) Bx/MS in Computer Science (Option 3: Profesionally-oriented - Non-CS Majors) Masters Program in Computer Science