ООП — это парадигма программирования, основанная на концепции объектов, которые содержат данные и методы для работы с этими данными. В TypeScript/Angular разработке эти принципы особенно важны для создания поддерживаемого кода.
Определение: Сокрытие внутренней реализации и предоставление контролируемого доступа к данным через публичный интерфейс.
Пример в TypeScript:
class BankAccount {
private balance: number = 0;
public deposit(amount: number): void {
if (amount > 0) {
this.balance += amount;
}
}
public getBalance(): number {
return this.balance;
}
}
Практическое применение в Angular:
private
для сервисов и внутренних методов компонентовОпределение: Возможность создания новых классов на основе существующих с наследованием их свойств и методов.
Пример:
class Animal {
constructor(public name: string) {}
move(distance: number = 0) {
console.log(`${this.name} moved ${distance}m`);
}
}
class Dog extends Animal {
constructor(name: string) {
super(name);
}
bark() {
console.log('Woof! Woof!');
}
}
В Angular:
Определение: Возможность объектов с одинаковой спецификацией иметь разную реализацию.
Два типа:
class Calculator {
add(a: number, b: number): number;
add(a: string, b: string): string;
add(a: any, b: any): any {
return a + b;
}
}
class Bird extends Animal {
move(distance: number = 5) {
console.log('Flying...');
super.move(distance);
}
}
В Angular:
Определение: Выделение существенных характеристик объекта и игнорирование несущественных.
Пример:
abstract class Shape {
abstract getArea(): number;
}
class Circle extends Shape {
constructor(private radius: number) {
super();
}
getArea(): number {
return Math.PI * this.radius ** 2;
}
}
В Angular:
interface User {
id: number;
name: string;
}
Хотя формально не входят в "4 основных", критически важны для Angular:
Каждый класс должен решать только одну задачу.
Пример плохо:
class User {
// Слишком много ответственностей
saveToDB() {...}
sendEmail() {...}
validate() {...}
}
Классы должны быть открыты для расширения, но закрыты для модификации.
Подтипы должны быть заменяемыми для своих базовых типов.
Много специализированных интерфейсов лучше одного общего.
Зависимости от абстракций, а не от конкретных реализаций.
4 основных принципа ООП:
Практическое применение в Angular:
Важность для разработчика:
Понимание этих принципов необходимо для: