Generally, a polylithic design is given when a software provides a high count of different classes. Each class provides only a small amount of functionality. These separated classes are consolidated through several programming techniques like inheritance or generic concepts.
A lot of separation allow developers to change or manipulate existing functionality selectively. Furthermore, a high abstraction of objects forces developer to implement well thought out components which may also work correctly when other components have changed. Typically, this results in a clear, flexible, and elaborate architecture. Furthermore, the code of single classes is less complex.
Nevertheless, the large count of objects may also lead to unconsidered mistakes and makes it harder to understand the software. Furthermore, the separation between objects can exceed a normal dimension. In case of too many classes developers will have problems in conceiving the whole architecture. Especially generic concepts (e.g., reflection) must be applied very carefully as external developers often have no insight in such concepts.
In visualization, especially the separation between abstract data, visual structures, and rendering routines is defined as polylithic design.
See also: monolithic design