Modularization is tightly coupled with the notion of *abstraction*:

- we construct an abstract model of the problem, based on which we identify
the solution
- we focus on the essential aspects of the problem
- we ignore those aspects that are not relevant for the objective to achieve

- we select a concrete model that corresponds to the abstract model, and through which we realize the solution to the problem

Types of abstraction:

**Abstraction on operations**: we concentrate on "what" a certain operation has to do, and not on "how" it does what it has to do.**Abstraction on objects**:- we group similar objects (i.e., objects with the same properties) in classes
- we establish the relevant properties of the objects, and specifically the operations that the objects support (note that this in turn requires abstraction on operations).