stringtranslate.com

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ссылки

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

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