A procedural abstraction refers to a sequence of instructions that have a specific and limited function.
Separation of concerns suggests that any complex problem can be more easily handled if it is subdivided into pieces that can each be solved and/or optimized independently. Where a concern is a feature or behaviour that is specified as part of the requirements model for the software. This separating of concerns into smaller, and therefore more manageable pieces, a problem takes less effort and time to solve.
Five different types of design classes, each representing a different layer of the design architecture are: