Is the notion of structuring a program as a collection of linked modules.
To avoid name clashes, each module has its own Name Space.
Pros
- Large programs can be broken into smaller pieces with clear interfaces.
- It becomes easier to replace parts of a program.
- Implementation details can be abstracted away from the rest of the program.
- Code in modules can be reused.
- Compilation time can be reduced by only recompiling changed modules.
- Code can be shared among several programs at runtime.