Modeling Complex Systems Using Object-Oriented Design Techniques

Presenter: Thodoris Sotiropoulos
Date: 25 November 2025

Abstract

Programming language implementations can be viewed as complex software systems. In this talk, we explore how core object-oriented (OO) principles, especially polymorphism, help us build modular, extensible, and maintainable representations of programs. Using a small example language, we examine traditional approaches such as the "Visitor" design pattern and contrast them with modern Java features: records, sealed types, and pattern matching. We show how these mechanisms allow us to express diverse operations on program representations (evaluation, semantic analysis, etc.) elegantly and declaratively, while avoiding boilerplate and ensuring runtime safety through exhaustiveness checks.