Development is started by writing monolithic applications, that all source code is intermixed in one set of code file as the following diagram:
The first improvement was to think of layered code and separate the user interface code from all business logic below.
As applications became much more complex, more layering is abstracted as following:
From ahm507.blogspot.com