# Объектно-ориентированное программирование
Объектно-ориентированное программирование
- методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определённого класса, а классы образуют иерархию наследования
# 1. Инкапсуляция
Инкапсуляция
– отделение и защита внутреннего интерфейса от внешнегоВнутренний интерфейс
– приватные свойства и методы, доступ к которым может быть осуществлен только из других методов классаВнешний интерфейс
– публичные свойства и методы класса, предоставляющие доступ к внутренней реализации- Мы обращаемся с объектами как с единой сущностью, а не как с набором отдельных полей и методов, тем самым скрываем и защищаем реализацию класса. Если клиентский код не знает ничего, кроме публичного интерфейса, он не может зависеть от деталей реализации
# Геттеры и Сеттеры
Геттеры и Сеттеры (Аксессоры)
- доступ к свойствам класса
class User {
constructor() {
this._name = 'Tony';
}
get name() {
return this._name;
}
set name(value) {
this._name = value;
}
}
const user = new User();
user.name = 'Jack';
const name = user.name; // => Jack
# 2. Наследование
Наследование
- описание нового класса на основе уже существующего с частично или полностью заимствующейся функциональностьюSuperClass
- базовый, родительский, предок, надкласс, супер классSubClass
- наследник, дочерний, потомок, подкласс, суб класс, производный
class User {
constructor(name) {
this.name = name;
}
getName() {
console.log(this.name);
}
}
class Admin extends User {
constructor(name) {
super(name);
}
}
const admin = new Admin('Tony');
admin.getName(); // => "Tony"
console.log(admin); // => Object { name: "Tony" }
# 3. Полиморфизм
Полиморфизм
("множество форм") - возможность единообразно обрабатывать объекты с различной реализацией при условии наличия общего интерфейса. «Один интерфейс, множество реализаций»- Позволяет одно и то же имя (например имя метода) использовать для решения внешне схожих, но технически разных задач
Абстрактный метод
- метод без реализацииАбстрактный класс
- если в классе есть хотя бы 1 абстрактный метод, класс является абстрактным, следовательно мы не можем создать экземпляр класса и воспользоваться им, пока не переопределим этот метод, добавляя различную реализацию в подклассах
«Один интерфейс, множество реализаций». Интерфейс - метод draw(). У него есть несколько вариантов реализаций
class Shape {
draw() {
// нет реализации
}
}
class Circle extends Shape {
draw() {
// своя реализация для Circle
}
}
class Square extends Shape {
draw() {
// своя реализация для Square
}
}
class Triangle extends Shape {
draw() {
// своя реализация для Triangle
}
}
const circle = new Circle();
const square = new Square();
const triangle = new Triangle();
circle.draw();
square.draw();
triangle.draw();
# 4. Абстракция
Абстракция
способ представления объекта в программе, позволяющий работать с объектами не вдаваясь в особенности их реализации- Инкапсуляция помогает реализовать абстракцию. Можно абстрагировать внутренне устройство класса