Вопрос с собеседования
Что такое SOLID?
Ответ опубликуем вечером, а пока пишите свои варианты в комментариях!
#interview
Что такое SOLID?
Ответ опубликуем вечером, а пока пишите свои варианты в комментариях!
#interview
Вопрос с собеседования
Что такое SOLID?
Ответ:
SOLID - акроним для пяти основных принципов объектно-ориентированного программирования и проектирования.
Список принципов по порядку: single responsibility, open-closed, Liskov substitution, interface segregation и dependency inversion (русск. - принципы единственной ответственности, открытости/закрытости, подстановки Барбары Лисков, разделения интерфейса и инверсии зависимостей).
Применение всех этих принципов повышает вероятность того, что систему ПО будет легко поддерживать и расширять в течение долгого времени.
Принципы SOLID могут применяться для удаления запахов кода, предписывая программисту выполнять рефакторинг исходного кода, пока тот не станет читаемым и расширяемым. Это часть общей стратегии гибкой и адаптивной разработки.
#interview
Что такое SOLID?
Ответ:
SOLID - акроним для пяти основных принципов объектно-ориентированного программирования и проектирования.
Список принципов по порядку: single responsibility, open-closed, Liskov substitution, interface segregation и dependency inversion (русск. - принципы единственной ответственности, открытости/закрытости, подстановки Барбары Лисков, разделения интерфейса и инверсии зависимостей).
Применение всех этих принципов повышает вероятность того, что систему ПО будет легко поддерживать и расширять в течение долгого времени.
Принципы SOLID могут применяться для удаления запахов кода, предписывая программисту выполнять рефакторинг исходного кода, пока тот не станет читаемым и расширяемым. Это часть общей стратегии гибкой и адаптивной разработки.
#interview
👍7
Шаблон проектирования Observer
Наблюдатель - поведенческий паттерн проектирования. Определяет зависимость типа "один ко многим" между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом и автоматически обновляются.
Когда применять:
- когда после изменения состояния одного объекта требуется что-то сделать в других, но вы не знаете наперёд, какие именно объекты должны отреагировать
- когда одни объекты должны наблюдать за другими, но только в определённых случаях.
Смотреть реализацию
Наблюдатель - поведенческий паттерн проектирования. Определяет зависимость типа "один ко многим" между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом и автоматически обновляются.
Когда применять:
- когда после изменения состояния одного объекта требуется что-то сделать в других, но вы не знаете наперёд, какие именно объекты должны отреагировать
- когда одни объекты должны наблюдать за другими, но только в определённых случаях.
Смотреть реализацию
👍8
Вопрос с собеседования
Каковы основные концепции ООП?
Ответ опубликуем вечером, а пока пишите свои варианты в комментариях!
#interview
Каковы основные концепции ООП?
Ответ опубликуем вечером, а пока пишите свои варианты в комментариях!
#interview
👍4👎1
Вопрос с собеседования
Каковы основные концепции ООП?
Ответ:
- Наследование
- Инкапсуляция
- Полиморфизм
- Абстракция
#interview
Каковы основные концепции ООП?
Ответ:
- Наследование
- Инкапсуляция
- Полиморфизм
- Абстракция
#interview
👍8👎3
Шаблон проектирования Prototype
Прототип - порождающий паттерн проектирования. Он позволяет копировать объекты, не вдаваясь в подробности их реализации.
Когда использовать Прототип?
- Когда конкретный тип создаваемого объекта должен определяться динамически во время выполнения
- Когда нежелательно создание отдельной иерархии классов фабрик для создания объектов-продуктов из параллельной иерархии классов (как это делается, например, при использовании паттерна Абстрактная фабрика)
- Когда клонирование объекта является более предпочтительным вариантом, чем его создание и инициализация с помощью конструктора. Особенно если известно, что объект может принимать небольшое ограниченное число возможных состояний.
Смотреть реализацию
Прототип - порождающий паттерн проектирования. Он позволяет копировать объекты, не вдаваясь в подробности их реализации.
Когда использовать Прототип?
- Когда конкретный тип создаваемого объекта должен определяться динамически во время выполнения
- Когда нежелательно создание отдельной иерархии классов фабрик для создания объектов-продуктов из параллельной иерархии классов (как это делается, например, при использовании паттерна Абстрактная фабрика)
- Когда клонирование объекта является более предпочтительным вариантом, чем его создание и инициализация с помощью конструктора. Особенно если известно, что объект может принимать небольшое ограниченное число возможных состояний.
Смотреть реализацию
👍2
Вопрос с собеседования
Что такое DRY principles?
Ответ опубликуем вечером, а пока пишите свои варианты в комментариях!
#interview
Что такое DRY principles?
Ответ опубликуем вечером, а пока пишите свои варианты в комментариях!
#interview
Вопрос с собеседования
Что такое DRY principles?
Ответ:
DRY, Don't repeat yourself (не повторяйся) - это принцип разработки программного обеспечения, нацеленный на снижение повторения информации различного рода, особенно в системах со множеством слоёв абстрагирования.
Простыми словами: НЕ пишите повторяющийся код, используйте принцип абстракции, обобщая простые вещи в одном месте.
#interview
Что такое DRY principles?
Ответ:
DRY, Don't repeat yourself (не повторяйся) - это принцип разработки программного обеспечения, нацеленный на снижение повторения информации различного рода, особенно в системах со множеством слоёв абстрагирования.
Простыми словами: НЕ пишите повторяющийся код, используйте принцип абстракции, обобщая простые вещи в одном месте.
#interview
Шаблон проектирования Strategy
Стратегия относится к поведенческим шаблонам проектирования. Цель этого паттерна - выделить схожие алгоритмы, решающие конкретную задачу. Реализация алгоритмов выносится в отдельные классы и предоставляется возможность выбирать алгоритмы во время выполнения программы.
Давайте рассмотрим принципы и суть шаблона Стратегия на примерах.
Читать статью
Стратегия относится к поведенческим шаблонам проектирования. Цель этого паттерна - выделить схожие алгоритмы, решающие конкретную задачу. Реализация алгоритмов выносится в отдельные классы и предоставляется возможность выбирать алгоритмы во время выполнения программы.
Давайте рассмотрим принципы и суть шаблона Стратегия на примерах.
Читать статью
👍5
Шаблон проектирования Chain of Responsibility
Цепочка обязанностей - поведенческий паттерн проектирования. Он позволяет передавать запросы по цепочке обработчиков последовательно. Каждый последующий обработчик решает, может ли он обработать запрос сам и стоит ли передавать запрос дальше по цепи.
Самый наглядный пример шаблона — компьютерная сеть. Пусть в сетевой модели есть 4 типа обработчиков — сеть, маршрутизатор, форвардер и сервер. Также есть всего один тип запроса — запрос на обработку сервером. Обработчики ведут себя следующим образом: сеть — просто предает по своей среде запрос, маршрутизатор — передает запрос из одной сети в другую, форвардер — передает запрос конкретному хосту, сервер — обрабатывает запрос.
Узлы сети представляют собой конвейер обработчиков. Запрос — конкретное сообщение. Запрос, двигаясь по цепочке, обрабатывается (маршрутизируется, форвардится) каждым ее узлом и передается дальше. До тех пор, пока не будет окончательно обработан сервером.
Смотреть реализацию
Цепочка обязанностей - поведенческий паттерн проектирования. Он позволяет передавать запросы по цепочке обработчиков последовательно. Каждый последующий обработчик решает, может ли он обработать запрос сам и стоит ли передавать запрос дальше по цепи.
Самый наглядный пример шаблона — компьютерная сеть. Пусть в сетевой модели есть 4 типа обработчиков — сеть, маршрутизатор, форвардер и сервер. Также есть всего один тип запроса — запрос на обработку сервером. Обработчики ведут себя следующим образом: сеть — просто предает по своей среде запрос, маршрутизатор — передает запрос из одной сети в другую, форвардер — передает запрос конкретному хосту, сервер — обрабатывает запрос.
Узлы сети представляют собой конвейер обработчиков. Запрос — конкретное сообщение. Запрос, двигаясь по цепочке, обрабатывается (маршрутизируется, форвардится) каждым ее узлом и передается дальше. До тех пор, пока не будет окончательно обработан сервером.
Смотреть реализацию
👍3
Вопрос с собеседования
Что такое инкапсуляция?
Ответ опубликуем завтра, а пока пишите свои варианты в комментариях!
#interview
Что такое инкапсуляция?
Ответ опубликуем завтра, а пока пишите свои варианты в комментариях!
#interview
Вопрос с собеседования
Что такое инкапсуляция?
Ответ:
Инкапсуляция является частью концепции ООП. Она относится к объединению данных с методами, которые работают с этими данными. Это также помогает ограничить любой прямой доступ к некоторым компонентам объекта.
#interview
Что такое инкапсуляция?
Ответ:
Инкапсуляция является частью концепции ООП. Она относится к объединению данных с методами, которые работают с этими данными. Это также помогает ограничить любой прямой доступ к некоторым компонентам объекта.
#interview
👎1
Подводные камни Singleton: почему самый известный шаблон проектирования нужно использовать с осторожностью
Паттерн «Одиночка» — пожалуй, самый известный паттерн проектирования. Тем не менее, он не лишен недостатков, поэтому некоторые программисты считают его антипаттерном. Разбираемся в том, какие же подводные камни таятся в Singleton’е.
Читать статью
Паттерн «Одиночка» — пожалуй, самый известный паттерн проектирования. Тем не менее, он не лишен недостатков, поэтому некоторые программисты считают его антипаттерном. Разбираемся в том, какие же подводные камни таятся в Singleton’е.
Читать статью
👍6
Вопрос с собеседования
Что такое Open/closed principle?
Ответ опубликуем вечером, а пока пишите свои варианты в комментариях!
#interview
Что такое Open/closed principle?
Ответ опубликуем вечером, а пока пишите свои варианты в комментариях!
#interview
Вопрос с собеседования
Что такое Open/closed principle?
Ответ:
Open/closed principle - принцип объектно-ориентированного программирования, устанавливающий следующее положение:
"Программные сущности (классы, модули, функции и т. п.) должны быть открыты для расширения, но закрыты для изменения".
Это означает, что такие сущности могут позволять менять свое поведение без изменения их исходного кода.
#interview
Что такое Open/closed principle?
Ответ:
Open/closed principle - принцип объектно-ориентированного программирования, устанавливающий следующее положение:
"Программные сущности (классы, модули, функции и т. п.) должны быть открыты для расширения, но закрыты для изменения".
Это означает, что такие сущности могут позволять менять свое поведение без изменения их исходного кода.
#interview
Вопрос с собеседования
Что такое переопределение методов?
Ответ опубликуем вечером, а пока пишите свои варианты в комментариях!
#interview
Что такое переопределение методов?
Ответ опубликуем вечером, а пока пишите свои варианты в комментариях!
#interview
Вопрос с собеседования
Что такое переопределение методов?
Ответ:
Переопределение методов – это концепция объектно-ориентированного программирования. Это особенность языка, позволяющая подклассу или дочернему классу предоставлять конкретную реализацию метода, который уже предоставлен одним из его суперклассов или родительских классов.
#interview
Что такое переопределение методов?
Ответ:
Переопределение методов – это концепция объектно-ориентированного программирования. Это особенность языка, позволяющая подклассу или дочернему классу предоставлять конкретную реализацию метода, который уже предоставлен одним из его суперклассов или родительских классов.
#interview
Вопрос с собеседования
Что такое GRASP?
Ответ опубликуем позже вечером, а пока пишите свои варианты в комментариях!
#interview
Что такое GRASP?
Ответ опубликуем позже вечером, а пока пишите свои варианты в комментариях!
#interview
🤔4👍2🔥1
Вопрос с собеседования
Что такое 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
Что такое 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
Что такое наследование?
Ответ опубликуем завтра, а пока пишите свои варианты в комментариях!
#interview