Overview

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)

Topics

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

Details

Piazza

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.

Grading

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.