Connascence ( / к ə п eɪ с ən с / ) является качество программного обеспечения метрики изобретен Мейлер Пейдж Джонс , чтобы позволить рассуждения о сложности , вызванные отношений зависимости в объектно-ориентированном проектировании так же, как муфта сделал для структурного проектирования . В программной инженерии два компонентасогласны, если изменение одного потребует изменения другого, чтобы сохранить общую правильность системы. Помимо возможности категоризации отношений зависимости, connascence также предоставляет систему для сравнения различных типов зависимости. Такие сравнения между потенциальными проектами часто могут намекнуть на способы повышения качества программного обеспечения.
Сила
Форма согласия считается более сильной, если она с большей вероятностью требует компенсирующих изменений в элементах согласия. Чем сильнее форма согласия, тем сложнее и дороже изменить элементы в отношениях.
Степень
Приемлемость согласия зависит от степени его возникновения. Согласие может быть приемлемым в ограниченной степени, но неприемлемым в значительной степени. Например, функция или метод, принимающие два аргумента, обычно считаются приемлемыми. Однако обычно недопустимо, чтобы функции или методы принимали десять аргументов. Элементы с высокой степенью согласия несут большую сложность и стоимость изменения, чем элементы с более низкой степенью.
Местонахождение
Местность имеет значение при анализе connascence. Более сильные формы согласия приемлемы, если вовлеченные элементы тесно связаны. Например, многие языки используют позиционные аргументы при вызове функций или методов. Такое совпадение позиции приемлемо из-за близости вызывающего и вызываемого. Позиционная передача аргументов веб-сервису недопустима из-за относительной несвязанности сторон. При одинаковой силе и степени согласия будет тем сложнее и дороже измениться, чем дальше будут задействованные элементы.
Типы соучастия
Это список некоторых типов соучастия, упорядоченный примерно от слабой формы к сильной.
Статические союзы
Connascenses называются "статичными", если они могут быть обнаружены путем визуального изучения кода.
Коннесценция имени (CoN)
Созвучие имени - это когда несколько компонентов должны согласовать имя объекта. Имена методов являются примером этой формы согласия: если имя метода изменяется, вызывающие его методы должны быть изменены, чтобы использовать новое имя.
Созвучие типа (CoT)
Созвучие типа - это когда несколько компонентов должны согласовать тип объекта. В статически типизированных языках тип аргументов метода является примером этой формы согласия. Если метод изменяет тип своего аргумента с целого числа на строку, вызывающие этого метода должны быть изменены для передачи другого аргумента, чем раньше.
Согласованность смысла (CoM) или Connascence of Convention (CoC)
Созвучие смысла - это когда несколько компонентов должны согласовать значение определенных ценностей. Возвращение целых чисел 0 и 1, представляющих ложь и истину, соответственно, является примером этой формы согласия.
Коннесценция позиции (CoP)
Согласованность позиции - это когда несколько компонентов должны согласовать порядок значений. Позиционные параметры в вызовах методов являются примером такой формы согласия. И вызывающий, и вызываемый должны согласовать семантику первого, второго и т. Д. Параметров.
Согласованность алгоритма (CoA)
Совершенство алгоритма - это когда несколько компонентов должны согласовать конкретный алгоритм. Коды аутентификации сообщений являются примером такой формы согласия. Обе стороны обмена должны реализовать один и тот же алгоритм хеширования, иначе аутентификация не удастся.
Dynamic Connascence
Сознания называются «динамическими», если они могут быть обнаружены только во время выполнения.
Согласие на казнь (CoE)
Созвучие исполнения - это когда важен порядок выполнения нескольких компонентов.
Согласие времени (CoT)
Согласованность во времени - это когда важно время выполнения нескольких компонентов.
Сознание ценностей (CoV)
Совокупность ценностей - это когда несколько ценностей должны измениться вместе.
Коннесценция идентичности (CoI)
Созвучие идентичности - это когда несколько компонентов должны ссылаться на сущность.
Уменьшение согласия
Уменьшение согласия снизит стоимость изменения программной системы. Один из способов уменьшить согласие - это преобразовать сильные формы согласия в более слабые. Например, метод, который принимает несколько аргументов, можно изменить для использования именованных параметров . Это изменило бы connascence от CoP к CoN . Уменьшение степени и увеличение локальности вовлеченных элементов представляют собой другие способы уменьшения согласия.
Рекомендации
- Великая унифицированная теория дизайна программного обеспечения, Джим Вейрих
- Мейлир Пейдж-Джонс, Сравнение методов с помощью инкапсуляции и согласования, Сообщения ACM, Том 35, Выпуск 9
- Что каждый программист должен знать об объектно-ориентированном дизайне, Мейлир Пейдж-Джонс, Dorset House Publishing, ISBN 0-932633-31-5
- Основы объектно-ориентированного дизайна в UML, Мейлир Пейдж-Джонс, Addison-Wesley Pub Co; ISBN 0-201-69946-X
- Мануэль Риверио; 9 августа 2018 г .; Connascence: взгляд на объектно-ориентированный дизайн в Java