OOP Flashcards

1
Q

Базовые принципы ООП

A

ООП начинается с построения абстракции.

Принципы:
- наследование;
- инкапсуляцию;
- полиморфизм.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Наследование в ООП

A

Это механизм, позволяющий описать новый класс на основе уже существующего с добавлением новых свойств и методов.

Если мы создали модель пассажирского самолета на 120 мест, а потом чуть-чуть доработали увеличив количество мест до 130, нам не потребуется создавать новый чертеж, достаточно лишь указать изменения. Так мы не делаем копию чертежей, мы только описываем, что изменилось в проекте. Это наследование.

class newClass extends oldClass {
constructor(name){
super(name);
}

super - ссылка на родительский property, которая присутствует в каждом методе. С ее помощью мы имеем доступ к методам из базового класса.
У стрелочных функций нет super, при обращении он берется из внешней функции.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Инкапсуляция в ООП

A

Это скрытие каких-то реализаций (от прямого обращения к ним), то есть использование этих реализаций, не думая о том, как именно оно реализовано. Данные в таком случае можно посмотреть, но обратиться к ним - нет. Это контролируемый доступ.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Полиморфизм в ООП

A

Это возможность применения в данном контексте свойств и методов, которые внутри отдельной сущности могут меняться, при этом работая по одному правилу.
Также это возможность иметь множество реализаций одного интерфейса в классах-наследниках в зависимости от выполняемых задач.

Если мы сделали унифицированную модель самолет с определенным размахом крыльев и 2 реактивными двигателями, мы можем быть уверены, что любой из наших самолетов по этой модели сможет сесть на ВПП, предназначенную для данного типа самолета (не зависимо от того как они будут садиться).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Ассоциация в ООП

A

Один объект становится составной частью другого объекта.

Если мы разрабатываем трап, подходящий под этот тип самолета (и, возможно, другие подробные самолеты), пилот самолета при приземлении просит подать именно этот трап.

Бывает 2х видов:
1. Композиция - жизненный цикл дочернего объекта совпадает с жизненным циклом родительского объекта.

Если мы делаем самолет, но двигатель разрабатывает другая команда, нам проще не указывать его на самом чертеже самолета (тем более что один двигатель может использовать на большом количестве самолетов), а только указать «смотри чертеж такого-то двигателя».

  1. Агрегация - жизненный цикл дочернего объекта не зависит от жизненного цикла родительского и может использоваться другими объектами.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

SRP - single responsible principle

A

Один класс должен отвечать только за какую-то одну задачу.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Класс в ООП

A

Это описание того какими свойствами и поведением будет обладать объект.
В классе нельзя писать переменные.

  • Класс не может быть вызван как функция, обязательно слово new в начале.
  • В классе не может быть больше одного constructor.
  • Нельзя сначала создать инстанс, а потом объявить класс, т.к. классы не хойстятся. Поэтому хороший тон описывать каждый класс в отдельном файле.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Объект (инстанс) класса

A

Это экземпляр класса, с собственными состояниями свойств, прописанных в классе.

Это не упорядоченная, динамическая коллекция некоторых свойств.

Если мы произведем реальный самолет это будет инстанс (объект) класса. Он построен по конкретным чертежам, но его параметры изменяются со временем, например, его максимальная и крейсерская скорость может чуть уменьшиться после определенных лет налета.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Свойства класса

A

= переменные = атрибуты объекта = поля объекта

У каждой модели самолета есть общие параметры, например, процент аварийности. Каждое происшествие с любым самолетом этой модели его может изменить. Это статические методы и переменные класса.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Методы класса

A

= поведение = функции = атрибуты объекта

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

this в ООП

A

Это локальная переменная для обращения объекта из своих методов к своим переменным.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

constructor

A

Метод, который автоматически вызывается при создании объекта, может принимать любые аргументы. Он производит первоначальную инициацию объекта и заполняет нужные поля.

В него мы кладем то, что необходимо для создания объекта + начальные его значения.

В constructor обязательно использование this.

При наследовали в constructor желательно всегда вызывать метод родителя, иначе не понятно зачем делать наследованные.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Как выбрать между наследованием и композицией?

A

Если сущность А является сущностью Б, то это наследованные. Если является частью сущности Б, то это композиция.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Абстрактный класс

A

От абстрактного класса нельзя создавать объекты, но можно создавать потомки - обычные классы, а от них уже создавать объекты.
Абстрактный класс помогает установить контракт, который обязывает имплиментировать набор методов в классах потомках.

Некоторый общий чертеж для всех моделей самолетов. По этому чертежу еще нельзя построить реальный самолет, но он уже содержит общие детали реализации.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Интерфейс

A

Это как абстрактный класс, но не класс, а перечисление абстрактных методов (без имплементации).

Задача интерфейса снизить уровень зависимости сущностей друг от друга и добавить больше абстракции.

Нам нужно описать требования для унифицированного самолета, у него должны быть определены такие параметры как грузоподъемность, крейсерская и максимальная скорость, практический потолок (они могут отличаться у разных моделей, но они должны быть), он должен уметь взлетать и, крайне желательно, уметь садиться. Эти требования это интерфейс.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

ISP - interface segregation principle

A

Не создавать “жирные” универсальные интерфейсы.

17
Q

Модификаторы доступа при инкапсуляции

A

public - доступ к атрибуту у любого желающего;

privat (поддерживается JS, по синтаксису начинаются с #) - может обратиться только метод данного класса;

protected (не реализованы на уровне языка, их эмулируют) - как private, но доступ получают и наследники класса в том числе.
Обычно защищенные поля начинаются с “_”, это не синтаксис, а традиция.

18
Q

Полифил

A

Это фрагмент кода, который позволяет использовать современную функциональность в более старых браузерах, не поддерживающих ее по умолчанию.

19
Q

Аксессоры

A

Геттеры - считывают и возвращают значение поля.

get represent() {
return …
}
represent нельзя присваивать, но можно прочитать и тогда вызывается вот эта функция.

Сеттеры (всегда можно передать только один аргумент) - принимают в начале аргумент значение и записывают в поле.

set newAge (value) {
this.age = value;
}
Каждый раз, когда мы передаем что-то в newAge вызывается функция set.

Аксессорами нельзя злоупотреблять, т.к. тогда они становятся очень объемными, код состоит только из них и становиться сложно поддерживаемым.

20
Q

”+” классов

A
  1. Они позволяют хорошо определить структуру данных, структурировать взаимосвязи между сущностями;
  2. Помогают организовывать взаимоотношения между структурами данных;
  3. Позволяют модульно писать в JS (1 файл = 1 класс);
  4. Дают расширяемость за счет наследования и не только.
21
Q

”-“ классов

A
  1. Может получиться classes hell - путаница из классов;
  2. Больше времени на проектирование архитектуры;
  3. Могут убить прозрачность логики;
  4. Не гибкая структура.