ООП Flashcards

1
Q

Основные принципы ООП - инкапсуляция, наследование и полиморфизм. Как
их можно использовать?

A

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

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

Что такое namespace и для чего он служит? Как ими пользоваться?

A

Один из способов инкапсуляции элементов.

Зарезервированное слово namespace

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

Что такое абстрактные классы и интерфейсы? Зачем они нужны?

a. В каких случаях следует использовать интерфейсы?
b. Что такое трейты? Для чего они нужны?

A

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

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

Что такое позднее статическое связывание? Для чего оно нужно?
a. Привести пример использования в Drupal8.

A

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

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

Что такое паттерны программирования? Для чего они нужны? Примеры

A

Паттерны программирования - описывают типичные способы решения часто встречающихся проблем при поектировании программ
+ проверенные решения
+ стандартизация кода
+ общий программисткий словарь

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

Какие есть типы паттернов? Какую задачу решает каждый из них?

a. Поведенческие
b. Структурные
c. Порождающие

A

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

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

Что такое Инъекция Зависимости (Dependency Injection) (паттерн)? Зачем это
нужно?

A

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

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

Что такое Фабричный метод/фабрика (паттерн)? Зачем это нужно?

A

Фабричный метод - определяет общий интерфейс для создания объектов в базовом классе, позволяя дочерним элементам изменять тип создаваемых объектов. Паттерн предлагает создавать объект не напрямую через new, а через вызов особого фабричного метода. Чтобы система заработала, все возвращаемые объекты должны иметь общий интерфейс (мебель - стол, стулья)
В абстрактной фабрике речь идет уже не о продуктах, а о семействах продуктов (стол и стулья обычные, викторианские, минималистичные и т.д.)
Для начала надо определить общие интерфейсы для отдельных продуктов, далее создается АФ - общий интерфейс создания всех продуктов семейства, который возвращает абстрактные типы продуктов.
Для каждой вариации семейства продуктов создается своя фабрика, реализующая абстрактный интерфейс.

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

Что такое магические методы? Для чего они нужны? Примеры.

A
Зарезервированные методы, начинающиеся с двойного подчерскивания, выполняемые при работе с недоступными свойствами.
\_\_construct
\_\_get
\_\_set
\_\_isset
How well did you know this?
1
Not at all
2
3
4
5
Perfectly