Понятие функциональной связности (Cohesion). Принцип High Cohesion. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Понятие функциональной связности (Cohesion). Принцип High Cohesion.



Проблема. Как обеспечить возможность управления сложностью?

Решение. Распределение обязанностей, поддерживающее высокую степень зацепления.

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

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

 трудность понимания;

 сложность при повторном использовании;

 сложность поддержки;

 надежность, постоянная подверженность изменениям.

Классы со слабым зацеплением, как правило, являются слишком «абстрактными» или выполняют обязанности, которые можно легко распределить между другими объектами.

 

Несколько сценариев, иллюстрирующих различную степень функционального зацепления.

1) Очень слабое зацепление. Только один класс отвечает за выполнение множества операций в самых различных функциональных областях. Допустим, существует класс RDB-RPC-Interface, полностью отвечающий за взаимодействие между реляционными БД и вызов

удаленных процедур. Это две абсолютно разные функциональные области.

2 ) Слабое зацепление. Класс несет единоличную ответственность за выполнение сложной задачи из одной функциональной области. Допустим, некий класс RDBInterface полностью отвечает за взаимодействие с реляционными БД. Методы класса связаны между

собой однако их слишком много, и их реализация требует огромных объемов кодов. Таких методов может быть несколько сотен или больше. Данный класс следует разделить на несколько более мелких классов.

3) Среднее зацепление. Класс имеет несложные обязанности в нескольких различных областях, логически связанных с концепцией этого класса, но не связанных между собой. Допустим существует класс Company, который несет полную ответственность за знание

всех сотрудников компании и всю финансовую информацию. Эти две области не слишком связаны между собой, однако логически связаны понятием «компания». К тому же предполагается, что такой класс содержит небольшое количество открытых методов и требует

незначительных объемов кода для их реализации.

4) Сильное зацепление. Класс имеет среднее количество обязанностей из одной функциональной области и для выполнения своих задач взаимодействует с другими классами. Допустим некоторый класс RDBInterface лишь частично отвечает за взаимодействие с

реляционными БД. Для извлечения и хранения объектов в БД он взаимодействует с с десятком других классов. Как правило, класс с высокой степенью зацепления содержит сравнительно небольшое количество методов, которые функционально тесно связаны между собой, и не выполняют слишком много функций. Они взаимодействуют с другими объектами для выполнения более сложных задач. Такие классы являются предпочтительными, поскольку просты в понимании, поддержке и повторном использовании.

Шаблон High Cohesion, как и другие понятия объектно-ориентированной технологии проектирования, имеет аналогию в реальном мире. Всем известно, что человек, выполняющий большое число разнородных обязанностей (особенно тех, которые можно легко распределить между другими людьми), работает не очень эффективно. Это касается менеджеров, которые не умеют распределять обязанности между своими подчиненными.

Такие люди страдают от «низкой степени зацепления» и могут легко «расклеиться».



Поделиться:


Последнее изменение этой страницы: 2017-01-19; просмотров: 208; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.113.197 (0.004 с.)