← Назад к вопросам

Сталкивался ли с ООП

1.3 Junior🔥 161 комментариев
#ООП

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Объектно-ориентированное программирование в Node.js

Да, я регулярно применяю принципы ООП в разработке на Node.js Backend. Это один из фундаментальных подходов к архитектуре современных приложений.

Основные концепции ООП

В Node.js я использую классы и объекты для моделирования сущностей предметной области. Например:

class User {
  private id: string;
  private email: string;
  private role: 'admin' | 'user';

  constructor(id: string, email: string, role: 'admin' | 'user' = 'user') {
    this.id = id;
    this.email = email;
    this.role = role;
  }

  public isAdmin(): boolean {
    return this.role === 'admin';
  }

  public getEmail(): string {
    return this.email;
  }
}

const user = new User('123', 'test@example.com', 'user');
console.log(user.isAdmin()); // false

Наследование и полиморфизм

Часто применяю наследование для создания иерархии классов:

class Employee {
  protected name: string;
  protected salary: number;

  constructor(name: string, salary: number) {
    this.name = name;
    this.salary = salary;
  }

  public calculateBonus(): number {
    return this.salary * 0.1;
  }
}

class Manager extends Employee {
  private teamSize: number;

  constructor(name: string, salary: number, teamSize: number) {
    super(name, salary);
    this.teamSize = teamSize;
  }

  public calculateBonus(): number {
    return this.salary * 0.15 + this.teamSize * 100;
  }
}

Инкапсуляция

Использую приватные поля для защиты внутреннего состояния:

class BankAccount {
  private balance: number = 0;

  public deposit(amount: number): void {
    if (amount > 0) {
      this.balance += amount;
    }
  }

  public getBalance(): number {
    return this.balance;
  }
}

Интерфейсы и абстрактные классы

В проектах применяю интерфейсы для определения контрактов:

interface ILogger {
  log(message: string): void;
  error(message: string): void;
}

class ConsoleLogger implements ILogger {
  log(message: string): void {
    console.log(`[LOG] ${message}`);
  }

  error(message: string): void {
    console.error(`[ERROR] ${message}`);
  }
}

Практическое применение в архитектуре

В реальных проектах я применяю SOLID-принципы, которые опираются на ООП:

  • Single Responsibility — каждый класс отвечает за одно
  • Open/Closed — открыт для расширения, закрыт для модификации
  • Liskov Substitution — подтипы должны заменять базовые типы
  • Interface Segregation — много специфичных интерфейсов лучше одного большого
  • Dependency Inversion — зависимости от абстракций, а не реализаций

ООП позволяет писать масштабируемый, поддерживаемый и тестируемый код.