subsections:
Abstraction in programming languages
Foundational perspectives -- types as constraints
Objectives of typed OOP