Cohesion: смысл, примеры и применение

Когезия (cohesion) - это принцип объектно-ориентированного программирования, который определяет степень связности внутри класса или модуля. Высокая когезия означает, что каждый класс или модуль выполняет только одну задачу и имеет узкую область ответственности. Это способствует повышению читаемости, поддерживаемости и переиспользованию кода.

Существует несколько уровней когезии, от самого низкого до самого высокого, каждый из которых является примером разделения ответственностей внутри класса или модуля. Рассмотрим некоторые из них:

  1. Когезия на уровне "случайной совместимости" (coincidental cohesion):
  2. В классе или модуле содержатся методы или функции, которые не имеют никакой общей тематики и выполняют разные задачи.

    class RandomClass:
        def method1(self):
            # Реализация первой задачи
        
        def method2(self):
            # Реализация второй задачи
  3. Когезия на уровне "логической связности" (logical cohesion):
  4. В классе или модуле собраны методы или функции, которые выполняют похожие операции, но не имеют общего назначения.

    class LogicalClass:
        def calculate_sum(self):
            # Расчет суммы элементов списка
        
        def calculate_average(self):
            # Расчет среднего арифметического списка
        
        def find_maximum(self):
            # Поиск максимального элемента списка
        
        def find_minimum(self):
            # Поиск минимального элемента списка
  5. Когезия на уровне "последовательной функциональности" (sequential cohesion):
  6. В классе или модуле присутствуют методы или функции, которые выполняют последовательные этапы общей операции.

    class SequentialClass:
        def read_data_from_file(self):
            # Чтение данных из файла
        
        def preprocess_data(self):
            # Предварительная обработка данных
        
        def analyze_data(self):
            # Анализ данных
        
        def visualize_data(self):
            # Визуализация данных
  7. Когезия на уровне "функциональной связности" (functional cohesion):
  8. В классе или модуле содержатся методы или функции, которые выполняют одну общую операцию.

    class FunctionalClass:
        def calculate_area(self, shape):
            if shape == "circle":
                # Расчет площади круга
            elif shape == "square":
                # Расчет площади квадрата
            elif shape == "triangle":
                # Расчет площади треугольника
  9. Когезия на уровне "информационного эксперта" (informational cohesion):
  10. В классе или модуле собраны методы или функции, которые оперируют общей информацией и выполняют операции с ней.

    class InformationalClass:
        def load_data(self):
            # Загрузка данных из базы данных
        
        def filter_data(self, condition):
            # Фильтрация данных по заданному условию
        
        def display_data(self):
            # Вывод данных на экран
  11. Когезия на уровне "функционального эксперта" (functional expert cohesion):
  12. В классе или модуле собраны методы или функции, которые относятся к одной определенной области и отвечают за решение задач в этой области.

    class FunctionalExpertClass:
        def send_email(self):
            # Отправка электронной почты
        
        def create_report(self):
            # Создание отчета
        
        def generate_invoice(self):
            # Генерация счета-фактуры

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

Похожие вопросы на: "cohesion "

Знак рубля символ - информация и советы по использованию
Enum в Java: основы и применение
Тернарный оператор: примеры, синтаксис и особенности
<h1>Работа с временем в SQL: timestamp
Taskkill: завершение процессов в Windows
Как добавить favicon в HTML
Мастерская печати Print C: высокое качество и надежность
JS ассоциативный массив: справка и примеры
Замена PostgreSQL - обновление и переход на новую систему
For C: что это?