stringtranslate.com

Сплоченность (информатика)

В компьютерном программировании под связностью понимается степень принадлежности элементов внутри модуля друг другу . [1] В каком-то смысле это мера силы связи между методами и данными класса и некоторой объединяющей целью или концепцией, которой служит этот класс. В другом смысле это мера силы связи между методами класса и самими данными.

Сплоченность является порядковым типом измерения и обычно описывается как «высокая сплоченность» или «низкая сплоченность». Модули с высокой связностью, как правило, предпочтительнее, поскольку высокая связность связана с несколькими желательными характеристиками программного обеспечения, включая надежность , возможность повторного использования и понятность. Напротив, низкая сплоченность связана с нежелательными характеристиками, такими как сложность поддержки, тестирования, повторного использования или даже понимания.

Сплоченность часто противопоставляется связности . Высокая сплоченность часто коррелирует со слабой связью , и наоборот. [2] Программные метрики связанности и связности были изобретены Ларри Константином в конце 1960-х годов как часть структурированного проектирования , основанные на характеристиках «хороших» практик программирования, которые снижали затраты на обслуживание и модификацию. Структурированный дизайн, сплоченность и связь были опубликованы в статье Стивенс, Майерс и Константин (1974) [3] и книге Юрдон и Константин (1979); [1] последние два впоследствии стали стандартными терминами в разработке программного обеспечения .

Высокая сплоченность

В объектно-ориентированном программировании , если методы, обслуживающие класс, во многих аспектах схожи, то говорят, что класс обладает высокой связностью. [4] В высокосплоченной системе читаемость и возможность повторного использования кода повышаются, в то время как сложность остается управляемой.

Сплоченность

Сплоченность увеличивается, если:

Преимущества высокой сплоченности (или «сильной сплоченности») заключаются в следующем:

Хотя в принципе модуль может иметь идеальную сплоченность, состоя только из одного атомарного элемента (например, имеющего одну функцию), на практике сложные задачи невозможно выразить одним простым элементом. Таким образом, в одноэлементном модуле есть элемент, который либо слишком сложен для выполнения задачи, либо слишком узок и, следовательно, тесно связан с другими модулями. Таким образом, сплоченность сбалансирована как со сложностью модулей, так и со связями.

Типы сплоченности

Сплоченность — это качественная мера, означающая, что измеряемый исходный код исследуется с использованием рубрики для определения классификации. Типы сплоченности, от худшего к лучшему, следующие:

Случайное сплочение (худшее)
Случайная связность — это когда части модуля сгруппированы произвольно; единственная связь между частями заключается в том, что они сгруппированы вместе (например, класс «Утилиты»). Пример:
/* Группы: определения функций. Части: термины для каждой функции */ Модуль A { /*  Реализация r(x) = 5x + 3  Нет особой причины группировать функции таким образом,  поэтому говорят, что модуль имеет Случайное сплочение.  */ р ( Икс ) знак равно а ( Икс ) + б ( Икс ) а ( Икс ) знак равно 2 Икс + 1 б ( Икс ) = 3 Икс + 2 }                    
Логическая связность
Логическая связность — это когда части модуля группируются, поскольку они логически категоризированы для выполнения одного и того же действия, даже если они различаются по своей природе (например, группировка всех процедур обработки ввода с помощью мыши и клавиатуры или объединение всех моделей, представлений и контроллеров в отдельные папки). в шаблоне MVC ).
Временная сплоченность
Временная связность — это когда части модуля группируются по времени их обработки — части обрабатываются в определенный момент выполнения программы (например, функция, которая вызывается после перехвата исключения, которое закрывает открытые файлы, создает журнал ошибок и уведомляет пользователя).
Процедурная сплоченность
Процедурная связность — это когда части модуля группируются, поскольку они всегда следуют определенной последовательности выполнения (например, функция, которая проверяет права доступа к файлу, а затем открывает файл).
Коммуникационная/информационная сплоченность
Коммуникационная связность — это когда части модуля группируются, поскольку они работают с одними и теми же данными (например, модуль, который работает с одной и той же записью информации).
Последовательное единство
Последовательная связность — это когда части модуля группируются, поскольку выходные данные одной части являются входными данными для другой части, например, сборочная линия (например, функция, которая считывает данные из файла и обрабатывает данные).
Функциональная сплоченность (лучшая)
Функциональная связность — это когда части модуля группируются, поскольку все они способствуют выполнению одной четко определенной задачи модуля (например, лексический анализ строки XML). Пример:
/* Группы: определения функций. Части: термины для каждой функции */ Модуль A { /*  Реализация арифметических операций.  Говорят, что этот модуль обладает функциональной связностью, поскольку  предполагается группировать  над ним простые арифметические операции.  */ а ( Икс , y ) знак равно Икс + y б ( Икс , y ) знак равно Икс * y }               Module B { /*  Модуль B: реализует r(x) = 5x + 3.  Можно сказать, что этот модуль обладает атомарной связностью. Можно также сказать, что вся  система (с модулями А и Б как частями) обладает функциональной  сплоченностью, поскольку обе ее части имеют конкретные отдельные цели.  */ r ( x ) = [ Модуль A ]. а ([ Модуль А ]. б ( 5 , х ), 3 ) }          
Идеальная когезия (атомарная)
Пример.
/* Группы: определения функций. Части: термины для каждой функции */ Модуль A { /*  Реализация r(x) = 2x + 1 + 3x + 2  Говорят, что он имеет идеальную связность, потому что его нельзя сократить больше, чем это .  */ р ( х ) = 5 х + 3 }        

Хотя сплоченность является шкалой рангового типа, ранги не указывают на устойчивый прогресс в улучшении сплоченности. Исследования различных людей, включая Ларри Константина , Эдварда Юрдона и Стива МакКоннелла [5], показывают, что первые два типа сплоченности хуже; коммуникативная и последовательная слаженность очень хорошие; и функциональная сплоченность выше.

Смотрите также

Рекомендации

  1. ^ аб Юрдон, Эдвард ; Константин, Ларри Лерой (1979) [1975]. Структурное проектирование: основы дисциплины проектирования компьютерных программ и систем . Юрдон Пресс. Бибкод : 1979sdfd.book.....Y. ISBN 978-0-13-854471-3.
  2. ^ Ингено, Джозеф (2018). Справочник архитектора программного обеспечения . Пакт Паблишинг . п. 175. ИСБН 978-178862406-0.
  3. ^ Стивенс, Уэйн П .; Майерс, Гленфорд Дж .; Константин, Ларри Лерой (июнь 1974 г.). «Структурированный дизайн». IBM Systems Journal . 13 (2): 115–139. дои : 10.1147/sj.132.0115.
  4. ^ Марсич, Иван (2012). Программная инженерия . Университет Рутгерса .
  5. ^ МакКоннелл, Стив (июнь 2004 г.) [1993]. Код завершен (2-е изд.). стр. 168-171. ISBN 978-0-7356-1967-8.

Внешние ссылки