ООП и паттерны Flashcards

1
Q
  1. Основные принципы ООП - инкапсуляция, наследование и полиморфизм. Как их можно использовать?
A
  • Инкапсуляция - принцип, когда класс скрывает в себе логику работы с данными и сами данные, выставляя наружу только публичные методы.
    (ограничение доступа одних компонентов к другим)

Делая свойство приватным, предотвращаем изменение его значения не через set метод.

  • Наследование - принцип, при котором один класс(наследник) переиспользует все поля и методы другого класса(суперкласс).

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

  • Полиморфизм - принцип, предполагающий взаимозаменяемость объектов с одинаковым интерфейсом

Язык PHP поддерживает полиморфизм в том смысле, что позволяет использовать вместо экземпляров родительского класса экземпляры подкласса.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q
  1. Что такое namespace и для чего он служит? Как ими пользоваться?
A

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

Пространства имен объявляются с помощью зарезервированного слова namespace. Файл, содержащий пространство имен, должен содержать его объявление в начале перед любым другим кодом, кроме зарезервированного слова declare.
use импорт классов из других namespace
as создание псевдонима

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q
  1. Что такое абстрактные классы и интерфейсы? Зачем они нужны?
A

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

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

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

A

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

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

b. Что такое трейты? Для чего они нужны?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q
  1. Что такое паттерны программирования? Для чего они нужны? Примеры.
A

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

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

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

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

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q
  1. Что такое Инъекция Зависимости (Dependency Injection) (паттерн)? Зачем это нужно?
A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q
  1. Что такое Фабричный метод/фабрика (паттерн)? Зачем это нужно?
A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q
  1. Что такое магические методы? Для чего они нужны? Примеры.
A

Зарезервированные методы, начинающиеся с двойного подчеркивания, могут вызываться при совершении какого-то действия автоматически.
__get, __set, __isset, __unset
Они позволяют определить, каким образом будут взаимодействовать извне со свойствами, объявленными с модификатором доступа private или protected, либо вообще отсутствующими у объекта.
Метод __construct() автоматически вызывается, когда был создан экземпляр объекта. В нем вы можете задать начальные свойства объекта или установить зависимости.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q
  1. Что такое позднее статическое связывание? Для чего оно нужно?
A

позволяет объектам все также наследовать методы у родительских классов, но помимо этого дает возможность унаследованным методам иметь доступ к статическим константам, методам и свойствам класса потомка, а не только родительского класса.
PHP определят значение для self::NAME во время парсинга, а для static::NAME значение будет определено в момент запуска

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

a. Привести пример использования в Drupal8.

A

Каждый объект, который использует ContainerInjectionInterface (например, контроллеры, формы и блоки), должен реализовать фабричный метод create () для передачи зависимостей в конструктор класса, этот статический метод возвращает новый экземпляр класса с уже внедренной зависимостью, а для того чтобы этот экземпляр был от класса наследника, а не предка вызывается return new static, а не return new self

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

b. Что такое Инверсия Контроля? Зачем она нужна?

A

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

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