Architecture knowledge Flashcards

1
Q
OOP
Functional Programming
SOLID
Design Patterns
etc.

Какие парадигмы программирования ты знаешь?

A

Структурное программирование
Объектно-ориентированное программирование
Функциональное программирование

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

Как ты понимаешь термин “функциональная декомпозиция”?

A

Рекурсивное разложение модулей на элементарные (доказуемые) единицы.

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

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

Как ты можешь описать структурное программирование.

A

Структурное программирование сильно ограничивает использование операции goto, оставляя условия, циклы и присваивание. Оно позволяет применять к программам функциональную декомпозицию.

По большому счёту, используется почти во всех современных языках программирования.

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

Как ты определишь объектно-ориентированное программирование?

A

ООП - методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определённого класса, а классы образуют иерархию наследования

ООП строится на инкапсуляции, наследовании и полиморфизме.

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

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

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

Как ты понимаешь полиморфизм?

A

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

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

Ad Hoc Полиморфизм - наличие нескольких реализаций для работы с конечным числом типов. Реализуется через перегрузки или динамическую типизацию.

Заметка: понятие полиморфизма всегда тесно связано именно с понятием типа.

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

Какие принципы проектирования обозначаются аббревиатурой SOLID?

A
Single Responsibility Principle
Open-Closed Principle
Liskov Substitution Principle
Interface Segregation Principle
Dependency Inversion Principle
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Как Single Responsibility Principle реализуется на уровне функций?

A

Одна функция - одна операция (один уровень абстракции).

Бывает, что функции нужно выполнять несколько действий. В таком случае все действия должны оставаться на одном уровне абстракции.

Признаком нарушения этого принципа может служить вертикальное секционирование функций. Функцию выполняющую только одну операцию невозможно осмысленно разделить на секции.

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

Как Single Responsibility Principle реализуется на уровне архитектурных единиц (классов, модулей, etc)?

A

У класса (или модуля) может быть только одна причина для изменений.
Может быть только один актор (внешнее API, бухгалтерия клиента, внешняя БД, etc) который может запросить изменения. Это предотвращает создание ненужных зависимостей.

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

Как Open-Closed Principle реализуется на уровне небольших структурных единиц (функций, классов, и т.д.)?

A

Программные сущности должны быть открыты для расширения и закрыты для модификации.

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

Как Open-Closed Principle реализуется на уровне архитектурных единиц?

A

Программные сущности должны быть открыты для расширения и закрыты для модификации.

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

Как реализуется Liskov Substitution Principle с классами?

A

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

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

Хороший антипример - наследование квадрата от прямоугольника.

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

Как реализуется Interface Segregation Principle?

A

Если классы вынуждены реализовывать методы, которые им не нужны, интерфейс нужно разделять.

Реализация ненужных методов создаёт избыточные зависимости.

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

Как Dependency Inversion Principle реализуется на уровне архитектурных единиц?

A

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

Детали должны зависеть от абстракций!

Например, модуль рисовки пикселей должен зависеть от модуля рисовки объектов, а тот в свою очередь должен зависеть от

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

Как ты опишешь паттерн “прототип”? Какие задачи он решает?

A

Прототип позволяет копировать объекты, не вдаваясь в подробности их реализации.

Для этого нужно создать общий интерфейс с методом копирования, а затем вызывать этот метод у объектов классов.

17
Q

Как ты опишешь паттерн “прототип”? Какие задачи он решает?

A

Прототип позволяет копировать объекты, не вдаваясь в подробности их реализации.

Для этого нужно создать общий интерфейс с методом копирования, а затем вызывать этот метод у объектов классов.

18
Q

Как ты опишешь паттерн “одиночка”? Какие задачи он решает?

A

Паттерн одиночка:

  1. Обеспечивает единственность экземпляра объекта класса (всегда возвращается один и тот же объект)
  2. Делает доступ глобальным и ограничивает перезапись полей.

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

В React, например, этот паттерн реализуется в Theme Provider.