Cohesion: смысл, примеры и применение
Когезия (cohesion) - это принцип объектно-ориентированного программирования, который определяет степень связности внутри класса или модуля. Высокая когезия означает, что каждый класс или модуль выполняет только одну задачу и имеет узкую область ответственности. Это способствует повышению читаемости, поддерживаемости и переиспользованию кода.
Существует несколько уровней когезии, от самого низкого до самого высокого, каждый из которых является примером разделения ответственностей внутри класса или модуля. Рассмотрим некоторые из них:
- Когезия на уровне "случайной совместимости" (coincidental cohesion):
- Когезия на уровне "логической связности" (logical cohesion):
- Когезия на уровне "последовательной функциональности" (sequential cohesion):
- Когезия на уровне "функциональной связности" (functional cohesion):
- Когезия на уровне "информационного эксперта" (informational cohesion):
- Когезия на уровне "функционального эксперта" (functional expert cohesion):
В классе или модуле содержатся методы или функции, которые не имеют никакой общей тематики и выполняют разные задачи.
class RandomClass:
def method1(self):
# Реализация первой задачи
def method2(self):
# Реализация второй задачи
В классе или модуле собраны методы или функции, которые выполняют похожие операции, но не имеют общего назначения.
class LogicalClass:
def calculate_sum(self):
# Расчет суммы элементов списка
def calculate_average(self):
# Расчет среднего арифметического списка
def find_maximum(self):
# Поиск максимального элемента списка
def find_minimum(self):
# Поиск минимального элемента списка
В классе или модуле присутствуют методы или функции, которые выполняют последовательные этапы общей операции.
class SequentialClass:
def read_data_from_file(self):
# Чтение данных из файла
def preprocess_data(self):
# Предварительная обработка данных
def analyze_data(self):
# Анализ данных
def visualize_data(self):
# Визуализация данных
В классе или модуле содержатся методы или функции, которые выполняют одну общую операцию.
class FunctionalClass:
def calculate_area(self, shape):
if shape == "circle":
# Расчет площади круга
elif shape == "square":
# Расчет площади квадрата
elif shape == "triangle":
# Расчет площади треугольника
В классе или модуле собраны методы или функции, которые оперируют общей информацией и выполняют операции с ней.
class InformationalClass:
def load_data(self):
# Загрузка данных из базы данных
def filter_data(self, condition):
# Фильтрация данных по заданному условию
def display_data(self):
# Вывод данных на экран
В классе или модуле собраны методы или функции, которые относятся к одной определенной области и отвечают за решение задач в этой области.
class FunctionalExpertClass:
def send_email(self):
# Отправка электронной почты
def create_report(self):
# Создание отчета
def generate_invoice(self):
# Генерация счета-фактуры
Высокая когезия способствует лучшей организации и пониманию кода, упрощает его сопровождение и улучшает его возможности для переиспользования. При проектировании классов и модулей важно стремиться к достижению высокой когезии, объединяя операции, относящиеся к одному функциональному блоку, и разделяя операции, которые не связаны между собой. Это позволяет создавать более гибкие и масштабируемые программные системы.