How to Design Class Hierarchies

Matthias Felleisen

Presented at: FDPE 2005, Tallinn, Estonia

Presented by: Matthew Flatt, Utah

24 September 2005

Colleges and universities must expose their students of computer science to object-oriented programming (OOP) even if the majority of the faculty believes that OOP is not the proper programming paradigm for novices. OOP is an important paradigm of thought, and OOP languages are widely used in commercial settings. Ignoring these facts means to ignore the students' needs.

In the past, institutions that introduce functional programming first have explained object-oriented programming via closures and method-oriented dispatch. Put differently, in such courses, students learn to implement objects, message passing, and delegation. They do not learn to design object-oriented programs. Although I firmly believe that our students benefit from such knowledge, I will argue that it is inappropriate as an introduction of object-oriented programming.

My talk will instead present a novel approach to the first-year programming curriculum. Specifically, I will explain how a functional semester ideally prepares students for the true essence of object-oriented programming according to Alan Kay: the systematic construction of small modules of code and the construction of programs without assignment statements. Experience shows that these courses prepare students better for upper-level courses than a year of plain object-oriented programming. Initial reports from our students' co-op employers appear to confirm the experiences of our upper-level instructors.