Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: ооп, паттерны

Расскажи про принципы Solid

Этот вопрос проверяет знание пяти ключевых принципов объектно-ориентированного проектирования (ООП)

Короткий ответ

SOLID — это пять принципов ООП:

  • Single Responsibility (Единственная ответственность) — Класс должен решать только одну задачу.

  • Open-Closed (Открытость/закрытость) — Код должен быть открыт для расширения, но закрыт для изменений.

  • Liskov Substitution (Подстановка Лисков) — Подклассы должны заменять родительские классы без ошибок.

  • Interface Segregation (Разделение интерфейсов) — Лучше много маленьких интерфейсов, чем один большой.

  • Dependency Inversion (Инверсия зависимостей) — Зависимости должны строиться на абстракциях, а не на конкретных классах.

Длинный ответ

  1. Single Responsibility Principle (SRP)

    Каждый класс должен отвечать только за одну задачу. Если класс делает слишком много, его сложно поддерживать.

    Пример нарушения:

    class User {
    	constructor(name) { this.name = name; }
    	saveToDatabase() { /* ... */ }
    	sendEmail() { /* ... */ }
    	generateReport() { /* ... */ }
    }

    Исправление:

    class User { /* Только данные */ }
    class UserRepository { saveToDatabase() { /* ... */ } }
    class EmailService { sendEmail() { /* ... */ } }
  1. Open-Closed Principle (OCP)

    Классы должны быть расширяемыми без изменения их исходного кода.

    Пример:

    class Logger {
    	log(message) { console.log(message); }
    }
    // Расширяем, не меняя Logger
    class FileLogger extends Logger {
    	log(message) { /* запись в файл */ }
    }
  2. Liskov Substitution Principle (LSP)

    Подклассы должны заменять родительские классы без нарушения логики программы.

    Нарушение:

    class Bird {
    	fly() { /* ... */ }
    }
    class Penguin extends Bird {} // Пингвины не летают!

    Исправление:

    class Bird {}
    class FlyingBird extends Bird { fly() {} }
    class Penguin extends Bird {} // Теперь корректно
  3. Interface Segregation Principle (ISP)

    Клиенты не должны зависеть от методов, которые они не используют.

    Проблема:

    interface Worker {
    	work(): void;
    	eat(): void;
    }
    class Robot implements Worker {
    	eat() {} // Роботу не нужно есть!
    }

    Решение:

    interface Workable { work(): void; }
    interface Eatable { eat(): void; }
    
    class Robot implements Workable { work() {} }
  4. Dependency Inversion Principle (DIP)

    Зависимости должны строиться на абстракциях (интерфейсах), а не на конкретных классах.

    Пример:

    interface Database {
    	save(data: string): void;
    }
    class MySQLDatabase implements Database { /* ... */ }
    class UserService {
    	constructor(private db: Database) {} // Зависим от абстракции
    }

Вывод:
SOLID помогает писать гибкий, понятный и легко тестируемый код.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    3

  • Сложность:

    10

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#ооп

#паттерны

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию