ООП Flashcards
SOLID - S
Single responsibility principles
у каждого класса 1 зона ответственности по 1му актору
(Модуль должен отвечать за реализацию требований одного актора - группы, состоящей из одного или нескольких лиц, желающих одного и того же изменения)
SOLID - O
Классы (компоненты, модули) открыты для расширения, но закрыты для модификации
Чем полезен:
1) нет необходимости в регрессии
2) меньше вероятность ошибок
SOLID - L
Liskov Substitution Principle
Прицип подстановки Барбары Лисков
Функции, сущности, которы используют родительский тип, должны точно так же работать и с дочерними классами, при этом ничего не должно ломаться.
То есть наследуемый класс должен дополнять, а не замещать поведение базового (родительского) класса.
то есть если у нас есть метод eat() в базовом классе, все его дочерние классы также должны реализовывать этот метод (не возвращать null или выбрасывать exception)
SOLID - I
Interface Segregation Principle (принцип разделения интерфейсов).
Программные сущности не должны зависеть от методов, которые они не используют.
То есть НЕЛЬЗЯ заставлять клиента реализовывать интерфейс, которым он не пользуется. Принцип тесно связан с 3им приципом.
То есть, для каждого клиента (код, который исполняет какую-то функцию => админка, юзер) нужен свой интерфейс, не общий со всеми методами, а только с теми, что он использует.
SOLID - D
Dependency inversion principle (принцип инверсии зависимостей).
Модули верхних уровней не должны зависеть от модулей нижних уровней, и оба типа модулей должны зависеть от абстракций.
Абстракции не должны зависеть от деталей, а детали должны зависеть от абстракций.
Принципы ООП
- Наследование
- Абстракция
- Инкапсуляция
- Полиморфизм
Наследование
Использование уже существующих классов для создания новых
Абстракция
Выделение наиболее важных характеристик и информации об объекте (общие для всех объектов, которые будут наследоваться)
Инкапсуляция
Принцип, при котором атрибуты и поведение объекта объединяется в одном классе, внутрення реализация объекта скрывается от пользователя, а для работы с объектом предоставляется открытый интерфейс (геттеры, сеттеры)
Полиморфизм
Принцип, когда программа может использовать объекты с одинаковым интерфейсом без информации о внутреннем устройстве объекта.
Возможность, используя вызов одного и того же метода, получать разные результаты. Выбор конкретной реализации метода производится динамически на основании конкретного типа вызывающего объекта в процессе выполнения программы.
class Figure {
constructor(width, height) {
this.width = width;
this.height = height;
}
getFigureName() {
console.log(Hi, I am figure
);
}
}
class Triangle extends Figure {
constructor(width, height, color) {
super(width, height);
this.color = color;
}
getFigureName() {
console.log(Hi, I am Triangle
);
}
}