Принципиально можно выделить 2 вида разбиения предметной области на составляющие элементы:
В соответствии с алгоритмической декомпозицией предметной области мы при анализе задачи пытаемся понять, какие алгоритмы необходимо разработать для ее решения, каковы спецификации этих алгоритмов (вход, выход), и как эти алгоритмы связаны друг с другом. В языках программирования данный подход в полной мере поддерживается средствами модульного программирования (библиотеки, модули, подпрограммы).
В рамках объектной декомпозиции мы пытаемся выделить основные содержательные элементы задачи, разбить их на типы (классы). Далее для каждого класса абстракций мы определяем его свойства (данные) и поведение (операции), а также, как эти классы абстракций взаимодействуют друг с другом.
На сегодняшний день объектный подход и его основы - объектная модель и объектная декомпозиция - поддерживаются современными объектно-ориентированными языками программирования (Object Pascal, C++, Java, C#…).