Что такое code cohesion & code coupling ?

Спросят с вероятностью 3%




Особенно в ООП, важные концепции для проектирования хорошего и поддерживаемого кода — это связность (cohesion) и связность (coupling).



Code Cohesion (Связность кода)




Связность описывает, насколько элементы внутри модуля или класса относятся друг к другу и насколько они работают вместе для выполнения единой задачи. Высокая связность означает, что все методы и данные в классе или модуле тесно связаны и сфокусированы на выполнении одной задачи.



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

Низкая связность: Компоненты класса слабо связаны и выполняют разнородные задачи. Такие классы или модули трудно понимать и поддерживать.



Пример:

class Order:

def __init__(self, items):

self.items = items



def calculate_total(self):

return sum(item.price for item in self.items)



def add_item(self, item):

self.items.append(item)



def remove_item(self, item):

self.items.remove(item)




В этом примере класс Order имеет высокую связность, так как все его методы связаны с управлением заказом.



Code Coupling (Связность кода)



Связность описывает степень зависимости одного модуля или класса от других модулей или классов. Связность бывает высокой (tight coupling) и низкой (loose coupling).



Высокая связность: Модули или классы сильно зависят друг от друга. Изменение в одном модуле требует изменения в других зависимых модулях. Это затрудняет поддержку и тестирование.

Низкая связность: Модули или классы слабо зависят друг от друга. Изменение в одном модуле минимально влияет на другие модули. Это облегчает поддержку и тестирование.



Пример:


class EmailService:

def send_email(self, recipient, subject, body):

print(f"Sending email to {recipient}")



class OrderProcessor:

def __init__(self, email_service):

self.email_service = email_service



def process_order(self, order):

# Логика обработки заказа

self.email_service.send_email(order.customer_email, "Order Confirmation", "Your order has been processed.")




В этом примере OrderProcessor имеет низкую связность с EmailService, так как EmailService передается в конструктор как зависимость и может быть легко заменена.



Преимущества



1️⃣Улучшенная поддерживаемость: Классы и модули с высокой связностью и низкой связностью легче поддерживать и изменять.

2️⃣Повышенная повторная используемость: Компоненты с высокой связностью могут быть повторно использованы в других частях системы.

3️⃣Легкость тестирования: Классы и модули с низкой связностью легче изолировать и тестировать.

4️⃣Упрощение понимания кода: Высокая связность делает классы и модули более понятными, так как все их части работают вместе для выполнения одной задачи.



Связность (Cohesion): Описывает, насколько элементы внутри модуля или класса связаны и работают вместе для выполнения единой задачи. Высокая связность улучшает поддержку и повторное использование кода.

Связность (Coupling): Описывает степень зависимости одного модуля или класса от других. Низкая связность упрощает поддержку и тестирование кода.



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



👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент



🔐 База собесов | 🔐 База тестовых