Поверхностность структуры
Парнас предлагает два критерия разбиения:
Этот новый взгляд на "модуль" отличается от традиционного. Такой "модуль" -- собрание кусочков, обычно очень маленьких, которые вместе прячут информацию о некоторой стороне проблемы.
Двое других авторов описывают ту же идею по-другому, используя выражение "абстрагирование данных" [5]. Они приводят в пример стековую структуру. Стековый "модуль" состоит из процедур для очистки стека, отправки значения в стек, снятия значения оттуда и определения пустоты стека. Этот "многопроцедурный" модуль скрывает информацию о том как оргазизован стек от остальных частей программы. При этом он считается единым модулем потому, что его процедуры взаимозависимы. Нельзя изменить способ загрузки значения в стек без изменения способа снятия его оттуда.
Слово `использовать` играет важную роль в этой концепции. Парнас пишет в своей более поздней статье [6]:
Системы, достигнувшие определенной степени "элегантности" ... сделали это за счет "использования" одними частями системы других ...
Если существует такое иерархическое построение, то каждый уровень представляет собой проверяемый и способный быть использованным подраздел системы ...
Проектирование иерархии "использования" может быть одним из главных направлений приложения сил. Расчленение системы на независимо вызываемые подпрограммы должно производиться параллельно с решениями об "использованиях", поскольку они влияют друг на друга.
Разработка, при которой модули группируются в соответствии с потоком передачи управления, не готова к быстрым изменениям в проекте. Структура, построенная в соответствии с иерархией управления, является поверхностной.
Готовность к восприятию изменений может обеспечить проект, в котором модули формируются по признаку объединения потенциально изменяемых вещей.