Definition modules, often referred as just modules in the sequel, fulfill two different but related purposes. On one side, they provide some degree of protection by preventing accessing indicators defined within the module but not explicitly publicized. On the other, they allow to define interfaces, allow separated compilation based on these interfaces, and conform libraries.
Modules are usually associated with bottom-up development strategies, where several already written components are grouped and combined to conform bigger components.