Modularity is one of the most important pillars in the Object Oriented paradigms. As you know object oriented is to manage complexities and keep them local. Firstly complexity is reduced by applying “Abstraction” to a real world problem in this paradigm, then other principles try to manage remaining and avoidable complexities; This type of design act based on a mind set which states “Divide and rule” is the most effective approaches for controlling changes in a complex domain; Modularity is highest level of “Dividing” that group and separate complex elements to physical units based on their intrinsic concepts and responsibilities; In such case you can change them with no internal changes in other units. When you decide to create separated either Jar files or Dlls actually you are applying modularity; By Modularity you can change a module completely without side effect on other modules, Suppose you know due to changing in persistence mechanism “Data Access Component” might be changed independently than other components in your system, We prefer this change dose not make changes in other part of the system, In other word it’s safer to keep such a crazy code in a separated hutch than other code parts, other wise this change would increase expenditures of the changes.
A notorious symptom in applying modularity is creating an “Over modular” system, This problem will transpire when you try separate classes in various physical binary files regardless of their high cohesive relation, due to such strong relations among these classes some of them in different modules always change as a whole set. In such case we have many binary files with a small granularity; Version management and deployment is one of the primitive troublesome activities in such systems.