Pattern Guru. Шаблоны проектирования. Архитектура ПО
3.12K subscribers
208 photos
4 videos
97 links
Патерны программирования.
Архитектура ПО.
Микросервисы

@anothertechrock
Download Telegram
Вопрос с собеседования

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

Ответ опубликуем завтра, а пока пишите свои варианты в комментариях!

#interview
Вопрос с собеседования

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

Ответ:

Абстракция:

- Решает проблему на уровне проектирования.
- Помогает скрыть детали реализации.

Инкапсуляция:

- Решает проблему на уровне реализации.
- Обертывает код и данные в единое целое и помогает скрыть их от посторонних глаз.

#interview
1👎1
Вопрос с собеседования

Назовите поведенческие шаблоны и кратко опишите их.

Ответ опубликуем вечером, а пока пишите свои варианты в комментариях!

#interview
👍3
Вопрос с собеседования

Для чего нужен Decorator паттерн в Javascript?
Приведите пример.

Ответ опубликуем вечером, а пока пишите свои варианты в комментариях!

#interview
🥱3
Вопрос с собеседования

В чем разница между классом и структурой?

Ответ опубликуем завтра, а пока пишите свои варианты в комментариях!

#interview
Вопрос с собеседования

В чем разница между классом и структурой?

Ответ:

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

Структура – это определенная пользователем коллекция переменных. Структуры также являются различными типами данных.

#interview
🤮5
Вопрос с собеседования

Для чего нужен Decorator паттерн в Javascript?
Приведите пример.

Ответ:

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

Шаблон декоратора динамически расширяет (украшает) поведение объекта. Возможность добавления нового поведения во время выполнения достигается с помощью объекта Decorator, который «оборачивается» вокруг исходного объекта. Несколько декораторов могут добавлять или переопределять функциональность исходного объекта.

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

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

Пример использования декоратора в JavaScript:

function User(name) {
this.name = name,
this.print = () => console.log(this.name)
}

const jane = new User ('Jane Doe')
jane.print() // 'Jane Doe'

function DecorateWithCity(user, city) {
user.city = city
user.print = function() {
console.log (${this.name} from ${this.city})
}
}

DecorateWithCity(jane, 'NewYork')
jane.print(); //'Jane Doe from New York'


#interview
👍1
Вопрос с собеседования

Зачем нужна инкапсуляция?

Ответ опубликуем завтра, а пока пишите свои варианты в комментариях!

#interview
Вопрос с собеседования

Зачем нужна инкапсуляция?

Ответ:

Инкапсуляция позволяет скрыть данные и обернуть данные и код, который работает над ними, в единое целое.

#interview
1
Вопрос с собеседования

Что такое виртуальные функции?

Ответ опубликуем завтра, а пока пишите свои варианты в комментариях!

#interview
Вопрос с собеседования

Что такое виртуальные функции?

Ответ:

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

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


#interview
👍2🙈2
Вопрос с собеседования

Что такое Dependency inversion principle?

Ответ опубликуем завтра, а пока пишите свои варианты в комментариях!

#interview
Вопрос с собеседования

Что такое Dependency inversion principle?

Ответ:

Dependency inversion principle - принцип инверсии зависимостей.

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

#interview
👎3👍1😁1
Вопрос с собеседования

Назовите поведенческие шаблоны и кратко опишите их.


Ответ:

Поведенческие шаблоны характеризуют способы взаимодействия классов или объектов между собой.

К поведенческим шаблонам относятся:

🔎 Chain of Responsibility (Цепочка Обязанностей). организует независимую от объекта-отправителя цепочку не знающих возможностей друг друга объектов-получателей, которые передают запрос друг другу (object that can fulfill a request).

🔎 Command (Команда). Используется для определения по некоторому признаку объекта конкретного класса, которому будет передан запрос для обработки (when and how a request is fulfilled).

🔎 Iterator (Итератор). Позволяет последовательно обойти все элементы коллекции или другого составного объекта, не зная деталей внутреннего представления данных (how an aggregate's elements are accessed, traversed).

🔎 Mediator (Посредник). Позволяет снизить число связей между классами при большом их количестве, выделяя один класс, знающий все о методах других классов (how and which objects interact with each other).

🔎 Memento (Хранитель). Сохраняет текущее состояние объекта для дальнейшего восстановления (what private information is stored outside an object, and when).

🔎 Observer (Наблюдатель). Позволяет при зависимости между объектами типа «один ко многим» отслеживать изменения объекта (number of objects that depend on another object; how the dependent objects stay up to date).

🔎 State (Состояние). Позволяет объекту изменять свое поведение за счет изменения внутреннего объекта состояния (states of an object).

🔎 Strategy (Стратегия). Задает набор алгоритмов с возможностью выбора одного из классов для выполнения конкретной задачи во время создания объекта (an algorithm).

🔎 Template Method (Шаблонный Метод). Создает родительский класс, использующий несколько методов, реализация которых возложена на производные классы (steps of an algorithm).

🔎 Visitor (Посетитель). Представляет операцию в одном или нескольких связанных классах некоторой структуры, которую вызывает специфичный для каждого такого класса метод в другом классе (operations that can be applied to object(s) without changing their class(es)).

🔎 Interpreter (Интерпретатор). Для определенного способа представления информации определяет правила (grammar and interpretation of a language).

#interview
Please open Telegram to view this post
VIEW IN TELEGRAM
5👎1
Вопрос с собеседования

Что такое Interface segregation principle?


Ответ:

Interface segregation principle
- принцип разделения интерфейса (много специализированных интерфейсов лучше, чем один универсальный).

Иными словами, большие, объемные интерфейсы надо разбивать на мелкие. При этом клиенты маленьких интерфейсов должны знать только о тех методах, которые необходимы им в работе. Также при изменении метода интерфейса не должны меняться клиенты, которые этот метод не используют.


#interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Вопрос с собеседования

Какие антишаблоны вы знаете?


Ответ:

Например...

🚩 Big ball of mud (Большой Ком Грязи). Термин для системы или просто программы, которая не имеет хоть немного различимой архитектуры. Как правило, включает в себя более одного антишаблона. Этим страдают системы, разработанные людьми без подготовки в области архитектуры ПО.

🚩 Yo-Yo problem (Проблема Йо-Йо). Возникает, когда необходимо разобраться в программе, иерархия наследования и вложенность вызовов методов которой очень длинны и сложны. Программисту вследствие этого необходимо лавировать между множеством различных классов и методов, чтобы контролировать поведение программы. Термин происходит от названия игрушки йо-йо.

🚩 Magic Button. Возникает, когда код обработки формы сконцентрирован в одном месте и, естественно, никак не структурирован.

🚩 Magic Number. Наличие в коде многократно повторяющихся одинаковых чисел или чисел, объяснение происхождения которых отсутствует.

🚩 Gas Factory (Газовый Завод). Необязательный сложный дизайн для простой задачи.

🚩 Analiys paralisys (Паралич анализа). В разработке ПО проявляет себя через чрезвычайно длинные фазы планирования проекта, сбора необходимых для этого артефактов, программного моделирования и дизайна, которые не имеют особого смысла для достижения итоговой цели.

🚩 Interface Bloat (Распухший Интерфейс). Термин, используемый для описания интерфейсов, которые пытаются вместить в себя все возможные операции над данными.

🚩 Accidental complexity (Случайная сложность). Проблема в программировании, которой легко можно было избежать. Возникает вследствие неправильного понимания проблемы или неэффективного планирования.

#interview
Please open Telegram to view this post
VIEW IN TELEGRAM
5
Вопрос с собеседования

Что такое GRASP?


Ответ:

GRASP (аббр. General Responsibility Assignment Software Patterns, русск. - общие шаблоны распределения обязанностей) - шаблоны проектирования, используемые для решения общих задач по назначению обязанностей классам и объектам.

Известно девять GRASP-шаблонов:

1️⃣ Information Expert (Информационный эксперт). Описывает основополагающие принципы назначения обязанностей классам и объектам. Информационным экспертом (объектом, наделенным некоторыми обязанностями) является объект, обладающий максимумом информации, необходимой для выполнения назначенных обязанностей.

2️⃣Creator (Создатель). Суть ответственности такого объекта в том, что он создает другие объекты. Сразу напрашивается аналогия с фабриками.

3️⃣ Controller (Контроллер). Отвечает за обработку входных системных событий, делегируя обязанности по их обработке компетентным классам. В общем случае контроллер реализует один или несколько вариантов использования. Использование контроллеров позволяет отделить логику от представления, тем самым повышая возможность повторного использования кода.

4️⃣ Low Coupling (Слабая связанность). Если объекты в приложении сильно связаны, то любое их изменение приводит к изменениям во всех связанных объектах. А это неудобно и порождает баги. Вот поэтому необходимо, чтобы код был слабо связан и зависел только от абстракций.

5️⃣ High Cohesion (Высокая сцепленность). Этот принцип тесно соотносится со слабой связанностью: одно всегда приводит к другому. И это показатель того, что мы не нарушаем single resposibility principle. Вернее сказать, высокая сцепленность получается в результате соблюдения такого принципа из SOLID, как single resposibility principle (SRP).

6️⃣ Pure Fabrication (Чистая выдумка или чистое синтезирование). Это класс, не отражающий никакого реального объекта предметной области, но специально придуманный для усиления связности, ослабления связанности или увеличения степени повторного использования. Pure Fabrication отражает концепцию сервисов в модели Программирование от предметной области.

7️⃣ Indirection (Посредник). Шаблон перенаправление реализует низкую связность между классами путем назначения обязанностей по их взаимодействию дополнительному объекту - посреднику.

8️⃣ Protected Variations (Сокрытие реализации или защищенные изменения). Защищает элементы от изменения других элементов (объектов или подсистем) с помощью вынесения взаимодействия в фиксированный интерфейс. Всё взвимодействие между элементами должно происходить через него. Поведение может варьироваться лишь с помощью создания другой реализации интерфейса.

9️⃣ Polymorphism (Полиморфизм). Позволяет обрабатывать альтернативные варианты поведения на основе типа и заменять подключаемые компоненты системы. Обязанности распределяются для различных вариантов поведения с помощью полиморфных операций для этого класса. Все альтернативные реализации приводятся к общему интерфейсу.

#interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31
Вопрос с собеседования

Зачем нужна инкапсуляция?

Ответ опубликуем завтра, а пока пишите свои варианты в комментариях!

#interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥1