Сложность является основной проблемой при создании больших и сложных систем любой природы.
Главным способом преодоления сложности разработки больших программных систем является правильная декомпозиция.
Термин «декомпозиция» происходит от латинского «divide et impera», что означает «разделяй и властвуй». Далее по тексту термин «декомпозиция» применяется, как прием иерархического проектирования, который заключается в построении сложной системы, из небольшого количества крупных частей. При этом каждая крупная часть в свою очередь строится из частей меньшего размера и так далее, до тех пор, пока самые небольшие части можно будет строить из имеющегося материала.
«Правильная» декомпозиция – означает следующее:
- количество связей между отдельными подсистемами – минимально;
- связность отдельных частей внутри каждой подсистемы – максимальна;
При этом структура системы такова, что все взаимодействия между её подсистемами укладываются в стандартные рамки, то есть:
- каждая подсистема скрывает своё содержимое от других подсистем;
- каждая подсистема имеет чётко определённый интерфейс с другими подсистемами.
Сокрытие содержимого (в данном случае – абстрагирование или инкапсуляция) позволяет рассматривать структуру каждой подсистемы независимо от других подсистем