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

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

Что такое GRASP?

Ответ:

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

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

- Information Expert (Информационный эксперт). Описывает основополагающие принципы назначения обязанностей классам и объектам. Информационным экспертом (объектом, наделенным некоторыми обязанностями) является объект, обладающий максимумом информации, необходимой для выполнения назначенных обязанностей.
- Creator (Создатель). Суть ответственности такого объекта в том, что он создает другие объекты. Сразу напрашивается аналогия с фабриками.
- Controller (Контроллер). Отвечает за обработку входных системных событий, делегируя обязанности по их обработке компетентным классам. В общем случае контроллер реализует один или несколько вариантов использования. Использование контроллеров позволяет отделить логику от представления, тем самым повышая возможность повторного использования кода.
- Low Coupling (Слабая связанность). Если объекты в приложении сильно связаны, то любое их изменение приводит к изменениям во всех связанных объектах. А это неудобно и порождает баги. Вот поэтому необходимо, чтобы код был слабо связан и зависел только от абстракций.
- High Cohesion (Высокая сцепленность). Этот принцип тесно соотносится со слабой связанностью: одно всегда приводит к другому. И это показатель того, что мы не нарушаем single resposibility principle. Вернее сказать, высокая сцепленность получается в результате соблюдения такого принципа из SOLID, как single resposibility principle (SRP).
- Pure Fabrication (Чистая выдумка или чистое синтезирование). Это класс, не отражающий никакого реального объекта предметной области, но специально придуманный для усиления связности, ослабления связанности или увеличения степени повторного использования. Pure Fabrication отражает концепцию сервисов в модели Программирование от предметной области.
- Indirection (Посредник). Шаблон перенаправление реализует низкую связность между классами путем назначения обязанностей по их взаимодействию дополнительному объекту - посреднику.
- Protected Variations (Сокрытие реализации или защищенные изменения). Защищает элементы от изменения других элементов (объектов или подсистем) с помощью вынесения взаимодействия в фиксированный интерфейс. Всё взвимодействие между элементами должно происходить через него. Поведение может варьироваться лишь с помощью создания другой реализации интерфейса.
- Polymorphism (Полиморфизм). Позволяет обрабатывать альтернативные варианты поведения на основе типа и заменять подключаемые компоненты системы. Обязанности распределяются для различных вариантов поведения с помощью полиморфных операций для этого класса. Все альтернативные реализации приводятся к общему интерфейсу.

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

Что такое наследование?

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

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

Что такое наследование?

Ответ:

Если вы порождаете класс от другого класса, это называется наследованием.

Дочерний класс наследует все публичные и защищенные свойства и методы от родительского класса. Дочерний класс также может иметь свои собственные свойства и методы. Наследуемый класс определяется с помощью ключевого слова extends.

Множественное наследование - это когда класс наследует более одного базового класса. Пример: класс, объясняющий ребенка. Этот класс – ребенок – наследует от двух базовых классов, которыми являются мать и отец.

Многоуровневое наследование - это когда класс наследуется от другого класса, который сам является подклассом какого-то другого базового класса. Пример: класс под названием спортивный велосипед, который наследуется от базового класса велосипед. В свою очередь, класс велосипед наследуется от другого класса транспортное средство.

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

Что такое Liskov substitution principle?

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

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

Что такое Liskov substitution principle?

Ответ:

Liskov substitution principle - принцип подстановки Барбары Лисков.

Роберт С. Мартин определил этот принцип так:

"Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом".

Более простыми словами принцип звучит так:

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

Суть принципа в следующем. Если у нас есть класс A и унаследованный от него класс B, то если мы заменим все использования класса A на B, ничего не должно измениться в работе программы. Ведь класс B всего лишь расширяет функционал класса A.

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

Что такое иерархическое наследование?

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

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

Что такое иерархическое наследование?

Ответ:

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

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

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

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

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

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

Ответ:

Например...

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

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

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

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

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

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

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

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

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

Что такое гибридное наследование?

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

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

Что такое гибридное наследование?

Ответ:

Сочетание множественного и многоуровневого наследования известно как гибридное наследование.

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

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

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

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

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

Ответ:

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

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

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

Что такое модификаторы доступа?

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

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

Что такое модификаторы доступа?

Ответ:

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

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

Что такое YAGNI?

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

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

Что такое YAGNI?

Ответ:

YAGNI (аббр. от You ain't gonna need it - "Тебе это не понадобится") - принцип проектирования ПО, при котором в качестве основной цели и/или ценности декларируется отказ от избыточной функциональности. Суть в том, чтобы реализовывать только поставленные задачи и отказываться от избыточного функционала.

#interview
👍11
Шаблон проектирования Builder

Строитель — порождающий паттерн проектирования. Он позволяет создавать сложные объекты пошагово. Строитель дает возможность использовать один и тот же код строительства для получения разных представлений объектов.

От абстрактной фабрики отличается тем, что делает акцент на пошаговом конструировании объекта. Строитель возвращает объект на последнем шаге, тогда как абстрактная фабрика возвращает объект немедленно.

Паттерн Builder может помочь в решении следующих задач:

1. В системе могут существовать сложные объекты, которые сложно или невозможно создать за одну операцию. Требуется поэтапное построение объектов с контролем результатов выполнения каждого этапа.

2. Данные должны иметь несколько представлений. Допустим, есть некоторый исходный документ в формате RTF (Rich Text Format), в общем случае содержащий текст, графические изображения и служебную информацию о форматировании (размер и тип шрифтов, отступы и др.). Если этот документ в формате RTF преобразовать в другие форматы (например, Microsoft Word или простой ASCII-текст), то полученные документы и будут представлениями исходных данных.

Смотреть реализацию
Вопрос с собеседования

Что такое абстракция?

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

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

Что такое абстракция?

Ответ:

Абстракция – это концепция ООП для построения структуры объектов реального мира. Она «показывает» только существенные атрибуты и «прячет» ненужную информацию от посторонних глаз. Основная цель абстракции – скрыть ненужные детали от пользователей. Это одна из самых важных концепций ООП.

#interview
👍9👎2