Какие знаешь основные принципы SOLID
Python
Junior
Без компании
Какие знаешь основные принципы SOLID
Ответы
SOLID — это пять принципов объектно-ориентированного проектирования, которые помогают создавать гибкий и поддерживаемый код:
- **Single Responsibility (SRP)** — класс должен иметь только одну причину для изменения (одну ответственность).
```
# Плохо: класс и логирует, и сохраняет данные
class User:
def save(self): ...
def log(self): ...
# Хорошо: разделение на два класса
class User:
def save(self): ...
class Logger:
def log(self): ...
```
- **Open-Closed (OCP)** — классы должны быть открыты для расширения, но закрыты для модификации.
```
class Discount:
def apply(self): ...
class VIPDiscount(Discount): # Расширение без изменения базового класса
def apply(self): ...
```
- **Liskov Substitution (LSP)** — подклассы должны заменять родительские классы без изменения поведения программы.
```
class Bird:
def fly(self): ...
class Penguin(Bird): # Нарушение LSP, т.к. пингвины не летают
def fly(self): raise NotImplementedError
```
- **Interface Segregation (ISP)** — клиенты не должны зависеть от методов, которые они не используют.
```
# Плохо: один интерфейс с избыточными методами
class Worker:
def work(self): ...
def eat(self): ...
# Хорошо: разделение интерфейсов
class Workable:
def work(self): ...
class Eatable:
def eat(self): ...
```
- **Dependency Inversion (DIP)** — зависимости должны строиться на абстракциях, а не на конкретных реализациях.
```
class Database(ABC):
@abstractmethod
def save(self): ...
class MySQL(Database): ...
class UserService:
def __init__(self, db: Database): ... # Зависимость от абстракции
```