Конасценция (Connascence)
Конасценция между двумя компонентами программного обеспечения А и Б подразумевает:
- что если вы вносите изменения в А, то Б тоже потребует внесения изменений, или как минимум проверки работоспособности и корректности.
- что можно представить требование, требующие одновременного внесение изменений в А и в Б для соблюдения корректности.
Статическая конасценция
Конасценция которая вносится при написании кода, компиляции и тд. Ее можно отследить в редакторе, специальными инструментами или глазами. Относится к классу
- Имени. Зависимость от имени. Например подкласс использует переменную родительского класса, если в родительском изменить имя переменной, то и в дочернем тоже придется изменить.
- Типа или класса. Зависимость от типа. Пример аналогичный с именем, только тут изменение типа. Второй пример это переименование класса, все кто использует этот класс должны получить изменение.
- Смысла. Например если имеется целочисленная переменная в которой отрицательные числа подразумевают корпорации, а начиная с нуля внутренние отделы, то при изменении этого смысла потребуется изменение везде где это используется.
- Алгоритма. Например два места работают с Хэш таблицей, один добавляет, другой извлекает запись. Оба зависят от алгоритма хеширования ключа.
- Позиции или последовательности. Например одна строка кода должна быть выполнена до выполнения второй строки кода итд.
Динамическая конасценция
Относится к времени выполнения, то есть скорее к объекту нежели к классу.
- Выполнения. Аналогично позиции в статической конасценции, только относится к динамике. Например инициализация переменной, до ее использования, чтение и изменение значения в глобальной переменной с использованием семафора итд.
- Времени. Подразумевает зависимость от реального времени в системах реального времени. Например инструкция выключения рентгеновского аппарата, должна быть выполнена в течении n миллисекунд после инструкции включения.
- Значения. Например изменение одного значения, требует изменения другого значения. Репликация данных между базами итд.
- Идентификации. Относится к связям в объектных моделях. Например если отчет по продажам ссылается на мартовскую сводную таблицу, тогда операционный отчет тоже должен указывать на мартовскую сводную таблицу. То есть если если два объекта o1 и о2 имеют ссылки на o3, то они всегда должны иметь одинаковую ссылку на o3. (Идентификация потому, что подразумевается указатель (идентификатор) на объект)
Контранасценция
Тут автор подразумевает зависимость в том, что вещи независимы. Например в коде используется два класса с именами А и Б. Эти классы между собой не связаны, однако если вы заходите переименовать А в Б, то сначала придется переименовать Б во, что-то другое. Тоже самое с переменными в одном методе. Если используется две переменные.