MPCS 51410 Object Oriented Programming (Spring 2022)

Section 1
Instructor(s) Almhana, Rafi (ralmhana)
Location JCL 298
Meeting Times Tuesday 5:30pm - 8:30pm
Fulfills Elective Specialization - Software Engineering (SE-1) Specialization - Software Engineering (SE-2)

Syllabus

 

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 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.

 

Course Contents

  • Fundamentally understand central OO concepts and terminology. 
  • Develop a full understanding of Domain-Driven Design and Object-Oriented Analysis and Design. 
  • Become fluent in the syntax of UML 
  • Produce different UML models using a UML tool.
  • Become conversant with a number of common design patterns. 

Tentative Weekly Course Schedule

Week 1: 

  • Object-Oriented Concepts 

Week 2: 

  • How to Think in Terms of Objects
  • The Anatomy of a Class

Week 3: 

  • Class Design Guidelines
  • Designing with Objects
  • Building Objects and Object-Oriented Design

Week 4: 

  • Inheritance and Composition
  • Frameworks and Reuse: Designing with Interfaces and Abstract Classes

Week 5: 

  • The SOLID Principles of Object-Oriented Design

Week 6: 

  • UML
  • UML Tools

Week 7: 

  • Design Patterns (Structural, Behavioral, Creational)

Week 8: 

  • Design Patterns (Structural, Behavioral, Creational)

Week 9: 

  • Code Smells 
  • Antipatterns

Week 10: 

  • Refactoring 

 

Exercises: Students will be expected to complete:

  • 5 programming exercises due the day before class
  • 1 final exam 

 

References 

The Object-Oriented Thought Process By Matt Weisfeld

Clean Code: A Handbook of Agile Software Craftsmanship By Robert C. Martin

Design Patterns: Elements of Reusable Object-Oriented Software By Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

Head First Design Patterns By Eric Freeman, Elisabeth Robson

Head First Object-Oriented Analysis and Design By Brett McLaughlin, David West, Gary Pollice

Office Hours
By appointment 

Contact Info
ralmhana@uchicago.edu

Grading Policy
Grades are not curved in this class, and instead are based on the sum of all points students have earned on their participation, exercises, and final project:

  • 93.0 and above: A
  • 90.0 and above: A-
  • 87.0 and above: B+
  • 83.0 and above B
  • 80.0 and above B-
  • 77.0 and above C+
  • 73.0 and above: C
  • 70.0 and above C-
  • Below 70.0: Dealt with on a case-by-case basis

 

Late Policy
Exercises are due the day before the class. Late Exercises are accepted but penalized 1 point per hour.

Course Prerequisites

Core Programming

Other Prerequisites

Students must be fluent in at least one programming language, preferably an object-oriented language.

This course requires competency in Unix and Linux. Please plan to attend the MPCS Unix Bootcamp (https://masters.cs.uchicago.edu/page/mpcs-unix-bootcamp) or take the online MPCS Unix Bootcamp Course on Canvas.

Overlapping Classes

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

  • MPCS 55001-1 -- Algorithms
  • MPCS 56430-1 -- Introduction to Scientific Computing
  • MPCS 51039-1 -- Mobile Software Development
  • MPCS 52040-1 -- Distributed Systems

Eligible Programs

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