Чтобы сберечь дисковую память, многие из наследуемых систем работают на основе совместно используемых массивов и общих областей данных. Это значит, что информация в этих областях полностью доступна и различные части системы используют ее по-своему. Изменение общих областей данных экономически невыгодно из-за высокой стоимости анализа влияния этих изменений на использование данных.
Именно для снижения стоимости таких изменений можно использовать разбиение программы на модули, построенные на основе абстракций данных. Абстракции данных (т.е. абстрактные типы данных) группируют сами данные и способы их обработки, что делает их более изменяемыми. Абстракции данных скрывают способ представления данных и обеспечивают доступ к ним. При хорошо разработанном интерфейсе модуля данных такие изменения типов данных не повлияют на другие части программы.
Чтобы преобразовать общие используемые области данных в объекты или абстрактные типы данных, следует выполнить ряд действий.
1.Провести анализ общих областей данных для выявления логических структур данных. Случается, что одну область используют данные нескольких разных типов. Такие ситуации следует выявлять и реконструировать.
2.Создать абстрактный тип данных или объект для каждой абстракции. Если в языке программирования нет способов сокрытия данных, можно имитировать абстрактный тип данных путем написания соответствующих функций, обеспечивающих обновление и доступ ко всем полям записей данных.
3.Осуществить поиск всех ссылок на данные с использованием системы просмотра программ или генератора перекрестных ссылок. Заменить эти ссылки соответствующими функциями.
На первый взгляд эти действия покажутся достаточно простыми, хотя и отнимающими много времени. Однако в действительности все гораздо сложнее из-за разных способов использования области совместных данных. В более старых версиях языков типа FORTRAN, у которых довольно ограниченный набор функций по структурированию данных, программисты могли разработать достаточно сложные стратегии управления данными с помощью совместно используемых массивов. Последующие проблемы вытекают из косвенной адресации совместно используемых структур, а также из адресации со смещением.
Проблемы другого рода возникают, если вычислительная машина, на которой выполнялась исходная программа, имеет ограниченную память. В этом случае программисты в разных частях программы могли использовать одну область данных для хранения разных типов данных. Такие явления распознаются только после детального статического и динамического анализа программ.