# Abstraction and Decomposition in Software Engineering

## Abstraction:

It refers to the construction of a simpler version of a problem by ignoring the details. The principle of constructing an abstraction is popularly known as **modelling**.

It is the simplification of a problem by focusing on only one aspect of the problem while omitting all other aspects. When using the principle of abstraction to understand a complex problem, we focus our attention on only one or two specific aspects of the problem and ignore the rest.

Whenever we omit some details of a problem to construct an abstraction, we construct a model of the problem. In everyday life, we use the principle of abstraction frequently to understand a problem or to assess a situation.

## Decomposition:

It is another important principle that is available in the repertoire of a software engineer to handle problem complexity. This principle is profusely made use by several software engineering techniques to contain the exponential growth of the perceived problem complexity. The decomposition principle is popularly known as the **divide and conquer principle**.

The decomposition principle advocates decomposing the problem into many small independent parts. The small parts are then taken up one by one and solved separately. The idea is that each small part would be easy to grasp and understand and can be easily solved. The full problem is solved when all the parts are solved.