The OOP paradigm
• Design in the problem domain
• Objects map to concrete things/concepts
• But, sometimes algorithms are the problem domain
• Program correctness
• Objects are generalizations of abstract data types
• Program correctness follows from static typing
• But, type errors are only small source of bugs
• OOP is ‘deep’ stuff