Сплоченность (информатика) - Cohesion (computer science)
В компьютерное программирование, сплоченность относится к степень, в которой элементы внутри модуль принадлежат друг другу.[1] В каком-то смысле это мера силы взаимосвязи между методами и данными класса и некоторой объединяющей целью или концепцией, обслуживаемой этим классом. В другом смысле это мера силы взаимосвязи между методами класса и самими данными.
Сплоченность - это порядковый тип измерения и обычно описывается как «высокая когезия» или «низкая когезия». Модули с высокой связностью, как правило, предпочтительнее, потому что высокая связность связана с несколькими желательными характеристиками программного обеспечения, включая надежность, надежность, возможность повторного использования, и понятность. Напротив, низкая сплоченность связана с нежелательными чертами, такими как сложность поддержания, тестирования, повторного использования или даже понимания.
Сплоченность часто противопоставляется связь, другое понятие. Высокая сплоченность часто коррелирует с Слабая связь, наоборот.[2] В показатели программного обеспечения сцепления и сцепления были изобретены Ларри Константин в конце 1960-х в рамках Структурированный дизайн, основанный на характеристиках «хороших» практик программирования, которые снизили затраты на обслуживание и модификацию. Структурированный дизайн, согласованность и взаимосвязь были опубликованы в статье. Стивенс, Майерс и Константин (1974)[3] и книга Юрдон и Константин (1979);[1] последние два впоследствии стали стандартными терминами в разработке программного обеспечения.
Высокая сплоченность
В объектно-ориентированного программирования, если методы, обслуживающие класс, имеют тенденцию быть похожими во многих аспектах, то говорят, что класс обладает высокой связностью.[4] В очень сплоченной системе читаемость кода и возможность повторного использования увеличивается, а сложность остается управляемой.
Сплоченность повышается, если:
- Функции, встроенные в класс, доступ к которым осуществляется через его методы, имеют много общего.
- Методы выполняют небольшое количество связанных действий, путем избегая крупнозернистый или несвязанные наборы данных.
- Связанные методы находятся в одном исходном файле или иным образом сгруппированы вместе; например, в отдельных файлах, но в одном подкаталоге / папке.
Преимущества высокой сплоченности (или «сильной сплоченности»):
- Пониженная сложность модуля (они проще, с меньшим количеством операций).
- Расширенная система ремонтопригодность, потому что логические изменения в домене влияют на меньшее количество модулей и потому, что изменения в одном модуле требуют меньшего количества изменений в других модулях.
- Повышенная возможность многократного использования модуля, поскольку разработчикам приложений будет легче находить нужный им компонент среди связного набора операций, предоставляемых модулем.
Хотя в принципе модуль может иметь идеальную сплоченность, состоящий только из одного атомарного элемента - например, имеющего единственную функцию - на практике сложные задачи не могут быть выражены одним простым элементом. Таким образом, одноэлементный модуль имеет элемент, который либо слишком сложен для выполнения задачи, либо слишком узок и, таким образом, тесно связан с другими модулями. Таким образом, сплоченность уравновешивается как сложностью единицы, так и связью.
Типы сплоченности
Сплоченность - это качественная мера, означающая, что исходный код, который нужно измерить, исследуется с использованием рубрика для определения классификации. Типы сплоченности, от худшего к лучшему, следующие:
- Случайное единство (худшее)
- Случайное единство - это когда части модуля сгруппированы произвольно; единственная связь между частями заключается в том, что они сгруппированы вместе (например, класс «Утилиты»). Пример:
/*Группы: определения функцийДетали: условия каждой функции*/Модуль А{ /* Реализация r (x) = 5x + 3 Нет особой причины группировать функции таким образом, поэтому говорят, что модуль имеет Coincidental Cohesion. */ р(Икс) = а(Икс) + б(Икс) а(Икс) = 2Икс + 1 б(Икс) = 3Икс + 2}
- Логическая сплоченность
- Логическая сплоченность - это когда части модуля сгруппированы, потому что они логически категоризированы для выполнения одного и того же действия, даже если они различны по своей природе (например, группировка всех процедур обработки ввода с помощью мыши и клавиатуры).
- Временная сплоченность
- Временная согласованность - это когда части модуля сгруппированы по времени их обработки - части обрабатываются в определенное время при выполнении программы (например, функция, которая вызывается после обнаружения исключения, которое закрывает открытые файлы, создает журнал ошибок и уведомляет пользователя).
- Процедурная согласованность
- Процедурная согласованность - это когда части модуля сгруппированы, потому что они всегда следуют определенной последовательности выполнения (например, функция, которая проверяет права доступа к файлу, а затем открывает файл).
- Коммуникационная / информационная сплоченность
- Коммуникационная сплоченность - это когда части модуля сгруппированы, потому что они работают с одними и теми же данными (например, модуль, который работает с одной и той же записью информации).
- Последовательная сплоченность
- Последовательная сплоченность - это когда части модуля сгруппированы, потому что выходные данные одной части являются входными данными для другой части, такой как сборочная линия (например, функция, которая считывает данные из файла и обрабатывает данные).
- Функциональная сплоченность (лучшая)
- Функциональная сплоченность - это когда части модуля сгруппированы, потому что все они вносят вклад в одну четко определенную задачу модуля (например, Лексический анализ строки XML). Пример:
/*Группы: определения функцийДетали: условия каждой функции*/Модуль А { /* Осуществление арифметических операций Этот модуль считается функциональным, поскольку есть намерение сгруппировать простые арифметические операции в теме. */ а(Икс, у) = Икс + у б(Икс, у) = Икс * у}Модуль B { /* Модуль B: реализует r (x) = 5x + 3 Можно сказать, что этот модуль обладает атомарной связностью. Целый систему (с модулями A и B как частями) можно также сказать, что она сплоченность, потому что обе ее части имеют определенные отдельные цели. */ р(Икс) = [Модуль А].а([Модуль А].б(5, Икс), 3)}
- Идеальное сцепление (атомарное)
- Пример.
/*Группы: определения функцийДетали: условия каждой функции*/Модуль А { /* Реализация r (x) = 2x + 1 + 3x + 2 Говорят, что у него идеальная сплоченность, потому что его нельзя уменьшить больше, чем это. */ р(Икс) = 5Икс + 3}
Хотя сплоченность - это тип шкалы ранжирования, ранги не указывают на устойчивый прогресс улучшенной сплоченности. Исследования разных людей, в том числе Ларри Константин, Эдвард Йордон, и Стив МакКоннелл[5] указывают, что первые два типа сплоченности являются неполноценными; коммуникационная и последовательная сплоченность очень хорошие; и функциональная сплоченность выше.
Хотя функциональная сплоченность считается наиболее желательным типом сплоченности для программного модуля, она может быть недостижимой. Бывают случаи, когда коммуникационная сплоченность - это наивысший уровень сплоченности, который может быть достигнут в данных обстоятельствах.[нужна цитата ]
Смотрите также
- Связь (информатика)
- Список терминов объектно-ориентированного программирования
- Статический анализ кода
Рекомендации
- ^ а б Юрдон, Эдвард; Константин, Ларри Лерой (1979) [1975]. Структурированный дизайн: основы дисциплины компьютерных программ и проектирования систем. Yourdon Press. Bibcode:1979sdfd.book ..... Y. ISBN 978-0-13-854471-3. ISBN 0-13-854471-9.
- ^ Ингено, Джозеф (2018). Справочник архитектора программного обеспечения. Packt Publishing. п. 175. ISBN 178862406-8.
- ^ Стивенс, Уэйн П.; Майерс, Гленфорд Дж.; Константин, Ларри Лерой (Июнь 1974 г.). «Структурированный дизайн». Журнал IBM Systems. 13 (2): 115–139. Дои:10.1147 / sj.132.0115.
- ^ Марсич, Иван (2012). Программная инженерия. Университет Рутгерса.
- ^ МакКоннелл, Стив (Июнь 2004 г.) [1993 г.]. Код завершен (2-е изд.). стр.168-171. ISBN 978-0-7356-1967-8.