Что такое ООП и как оно реализовано в JavaScript/Node.js?

«Что такое ООП и как оно реализовано в JavaScript/Node.js?» — вопрос из категории ООП, который задают на 45% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

ООП (Объектно-Ориентированное Программирование) — это парадигма программирования, в которой программа структурируется вокруг объектов, объединяющих данные (свойства/поля) и поведение (методы).

Основные принципы и их реализация в JavaScript (ES6+):

  1. Инкапсуляция: Сокрытие внутреннего состояния и деталей реализации, предоставление публичного интерфейса.

    class Logger {
      #logLevel = 'INFO'; // Приватное поле (используется #)
    
      setLogLevel(level) { // Публичный метод-сеттер
        this.#logLevel = level;
      }
      log(message) {
        console.log(`[${this.#logLevel}] ${message}`);
      }
    }
  2. Наследование: Возможность создания нового класса (потомка) на основе существующего (родителя).

    class EventEmitter {
      emit(eventName, data) {
        console.log(`Event '${eventName}' emitted with data:`, data);
      }
    }
    
    class MyService extends EventEmitter { // Наследование
      performAction() {
        this.emit('actionPerformed', { timestamp: Date.now() });
      }
    }
  3. Полиморфизм: Способность объектов с одинаковым интерфейсом иметь разную реализацию.

    class DatabaseConnection {
      connect() {
        throw new Error('Method connect() must be implemented');
      }
    }
    
    class PostgresConnection extends DatabaseConnection {
      connect() { console.log('Connecting to PostgreSQL...'); }
    }
    
    class MongoConnection extends DatabaseConnection {
      connect() { console.log('Connecting to MongoDB...'); }
    }
    // Один интерфейс (метод connect), разное поведение
    const connections = [new PostgresConnection(), new MongoConnection()];
    connections.forEach(conn => conn.connect());
  4. Абстракция: Моделирование ключевых характеристик сущности, игнорируя нерелевантные детали (достигается через классы и интерфейсы).

В Node.js ООП активно используется для структурирования бизнес-логики, создания сервисов, моделей данных (например, в ORM типа Sequelize или TypeORM) и построения расширяемых архитектур.

Видео-ответы