Class MeetingsWed 7:10-9pm in CIWW 201
First LectureJan 24, 2018
Last LectureMay 9, 2018
Final ExamMay 2, 2018, 7:10-9pm in CIWW 201
InstructorThomas Wies
Office60FA 403
Office HoursWed 4:00-5:00pm, or by appointment
GradersXi Huang and Pratik Parag Karnik


Object-oriented programming (OOP) has emerged as a significant software development methodology. This course introduces the important concepts of object-oriented design and languages, including data abstraction and encapsulation, inheritance and dynamic method dispatch, subtyping, generics, and OOP-based concurrent programming paradigms. We will learn advanced programming techniques that use these concepts and explore how OOP language features are implemented by compilers. The course will include significant programming assignments, stressing object-oriented design. Programming assignments will use the programming language Scala, which will also be introduced in the course.

Prerequisites:Programming Languages (CSCI-GA.2110)


Throughout the semester, we will investigate the following topics in detail among others:

  • Object-oriented programming in Scala
  • Composition, inheritance, and subtyping
  • Method overloading and overriding
  • Implementing OOP features
  • Functional programming with objects
  • Generic programming with objects
  • Covariance, contravariance, and higher-kinded types
  • Concurrent programming with objects
  • Design patterns



We will use Piazza for course-related discussions and announcements. I encourage you to ask questions when you are struggling to understand a concept - you can even do so anonymously.


Homework assignments and projects (50%), final exam (50%).

Late Submission Policy

Late submissions of homework solutions and projects will be graded with a 10% penalty per day of late submission. Solutions will not be graded if they are submitted later than one week after the specified deadline.

Academic Integrity

Please review the departmental academic integrity policy. In this course, you may discuss assignments with other students, but the work you turn in must be your own. Do not copy another student's work. You must do the projects as a group but not with other groups and without consulting previous years' students, code, etc. You should help other students and groups on specific technical issues but you must acknowledge such interactions. Copying code or other work without giving appropriate acknowledgment is a serious offense with consequences ranging from no credit to potential expulsion.

Recommended Textbook


The syllabus is subject to change, so please refresh frequently.

Class Date Topics Materials Assignments
1 01/24
  • Introduction; Scala Basics
Read OSV Ch. 2, Ch. 5, Ch. Sec. 6.10, Sec. 7.7, Sec. 17.5
2 01/31
  • Scala Basics: classes and objects, case classes
  • Visitor Design Pattern
3 02/07
  • Scala Basics: function objects, higher-order functions
Read OSV Ch. 8, Ch. 16, and Ch. 23
4 02/14
  • Inheritance, Subtyping, and Dynamic Dispatch
  • Implementing Inheritance by Hand
5 02/21
  • Parametric polymorphism: generics and variance
Read OSV Ch. 19
6 02/28
  • Inheritance vs. Composition
  • Implicits and type classes
  • Pimp my Library Design Pattern
Read OSV Ch. 21
  • Class canceled due to winter storm
  • No class (Spring Break)
  • Class canceled due to winter storm
7 03/28
  • Object-Functional Design
  • Designing Parser Combinators
8 04/04
  • Multiple Inheritance
  • Interface Inheritance in Java
  • Multiple Class Inheritance in C++
9 04/05 Make-up session: 5:10-7pm in WWH 201
  • Traits
  • Self-types and dependency injection
Read OSV Ch. 12
10 04/11
  • Overloading resolution
  • Object initialization
  • Call by name and lazy evaluation
11 04/18
  • Concurrent Programming with Objects
  • Monitors and locks
  • Futures and data parallelism
  • Read OSV Ch. 32
12 04/25
  • Concurrent programming with Objects
  • Actors
13 05/02
  • Final exam
14 05/09