
Procedural programming
- procedures, use the optimal algorithms
Modules
- hide the data, provide functional abstractions
Data abstraction
- types, provide a sufficiently complete set of operations
Object-oriented -- organize your types
- make commonality explicit by using inheritance