В информатике проблема — это определенный набор информации, который влияет на код компьютерной программы . Проблема может быть как общей, как детали взаимодействия с базой данных , так и конкретной, как выполнение примитивного вычисления, в зависимости от уровня общения между разработчиками и обсуждаемой программой. IBM использует термин «пространство проблем» для описания секционирования концептуальной информации. [1]
Обычно код можно разделить на логические разделы, каждый из которых решает отдельные проблемы, и таким образом он скрывает необходимость для данного раздела знать определенную информацию, рассматриваемую другим разделом. Это приводит к модульной программе. Эдсгер В. Дейкстра ввел термин « разделение проблем » [2], чтобы описать менталитет, лежащий в основе этой модуляризации, которая позволяет программисту уменьшить сложность проектируемой системы . Две разные проблемы, которые смешиваются в одном и том же разделе кода, называются « сильно связанными ». Иногда выбранные модульные разделения не позволяют полностью отделить одну проблему от другой, что приводит к сквозным проблемам . [3] Различные парадигмы программирования решают проблему сквозных проблем в разной степени. Регистрация данных является распространенной сквозной проблемой, используемой во многих других частях программы, отличных от конкретного модуля(ей), которые фактически регистрируют данные. Поскольку изменения в коде регистрации могут влиять на другие разделы, [ как? ] это может привести к ошибкам в работе программы.
Парадигмы, которые конкретно решают проблему разделения интересов: