Видео курс по шаблонам проектирования. Понятие паттерна - видео уроки ITVDN
ITVDN: курсы программирования
Видеокурсы по
программированию

    Выбери свою IT специальность

    Начать бесплатно

    Выбери свою IT специальность

    Начать бесплатно

      Видео курс по шаблонам проектирования

      ×

      Вы открыли доступ к тесту! Пройти тест

      Вы действительно хотите открыть доступ к тестированию по курсу Шаблоны проектирования на 40 дней?

      ВИДЕОУРОК №2. Понятие паттерна

      Войдите или зарегестрируйтесь для того чтоб продолжить просмотр бесплатного видео
      В данном видео уроке рассматривается структура курса “Шаблоны проектирования” и производится краткий обзор книги “Приемы объектно-ориентированного проектирования. Паттерны проектирования” с обсуждением всех ее достоинств и недостатков. Также автор презентует книгу «Design Patterns via C#», которая в доходчивом, понятном и упрощенном виде объясняет назначение и применение паттернов в создании программного обеспечения.
      Читать дальше...
      Технически, паттерны (шаблоны) проектирования - это всего лишь абстрактные примеры правильного использования небольшого числа комбинаций простейших техник ООП. Видео урок представит простые примеры, показывающие правильные способы организации взаимодействий между классами или объектами.
      Читать дальше...
      Этот видео урок из "Курса шаблоны проектирования" посвящен UML (англ. Unified Modeling Language — унифицированный язык моделирования) — язык графического описания для объектного моделирования в области разработки программного обеспечения. UML является языком широкого профиля, это — открытый стандарт, использующий графические обозначения для создания абстрактной модели системы, называемой UML-моделью. Данный видеоурок познакомит вас c базовыми возможностями и подходами к проектированию с помощью языка UML.
      Читать дальше...
      Данный видео урок из курса "Шаблоны проектирования" познакомит Вас с понятием конечного автомата, вариантами его описания и логикой построения простейших конечных автоматов.
      Читать дальше...
      Видео урок раскроет понятие парадигмы программи́рования, которая является совокупностью идей и понятий, определяющих стиль написания компьютерных программ. Это способ концептуализации, определяющий организацию вычислений и структурирование работы, выполняемой компьютером. Этот видеоурок расскажет Вам об основных современных парадигмах объектно-ориентированного программирования, которые поддерживаются платформой .NET.
      Читать дальше...
      Данный видео урок дает базовые знания о регулярных грамматиках, и основных способах их применения в программировании.
      Читать дальше...
      Видео урок посвящен паттерну Abstract Factory, который предоставляет клиенту интерфейс (набор методов) для создания семейств взаимосвязанных или взаимозависимых объектов-продуктов, при этом скрывает от клиента информацию о конкретных классах этих объектов-продуктов.
      Читать дальше...
      Видеоурок посвящен паттерну проектирования Builder, который помогает организовать пошаговое построение сложного объекта-продукта так, что клиенту не требуется понимать последовательность шагов и внутреннее устройство строящегося объекта-продукта, при этом в результате одного и того же процесса конструирования могут получаться объекты-продукты с различным представлением (внутренним устройством).
      Читать дальше...
      Видео урок посвящен шаблону проектирования Factory Method, который предоставляет абстрактный интерфейс (набор методов) для создания объекта-продукта, но оставляет возможность, разработчикам классов, реализующих этот интерфейс самостоятельно принять решение о том, экземпляр какого конкретного класса-продукта создать. Паттерн Factory Method позволяет базовым абстрактным классам передать ответственность за создание объектов-продуктов своим производным классам.
      Читать дальше...
      Видеоурок расскажет о паттерне Prototype, который предоставляет возможность создания новых объектов-продуктов (клонов), используя технику клонирования (копирования) созданного ранее объекта-оригинала-продукта (прототипа). Паттерн Prototype – позволяет задать различные виды (классы-виды) объектов-продуктов (клонов), через настройку состояния каждого нового созданного клона. Классификация клонов-продуктов производится на основании различия их состояний.
      Читать дальше...
      Видео урок познакомит с шаблоном проектирования Singleton, который гарантирует, что у класса может быть только один экземпляр. В частном случае предоставляется возможность наличия, заранее определенного числа экземпляров.
      Читать дальше...
      Видео урок посвящен паттерну Adapter, он преобразует интерфейс (набор имен методов) одного класса в интерфейс (набор имен методов) другого класса, который ожидают клиенты. Адаптер обеспечивает совместную работу классов с несовместимыми интерфейсами, такая работа без Адаптера была бы невозможна.
      Читать дальше...
      Видео урок посвящен паттерну Bridge, который позволяет отделить абстракцию от элементов ее реализации так, чтобы и абстракцию, и реализацию можно было изменять независимо друг от друга.
      Читать дальше...
      Виде урок расскажет о шаблоне проектирования Composite, который составляет из объектов древовидные структуры для представления иерархий «часть – целое». Позволяет клиентам единообразно трактовать индивидуальные объекты (листья) и составные объекты (ветки).
      Читать дальше...
      Видео урок посвящен паттерну Decorator(декоратор), который динамически (в ходе выполнения программы) добавляет объекту новые возможности (состояние и/или поведение). Композиция, используемая при реализации паттерна Decorator, является гибкой альтернативой наследованию (порождению подклассов) с целью расширения функциональности.
      Читать дальше...
      Видео урок посвящен шаблону проектирования Facade, который предоставляет унифицированный интерфейс (набор имен методов) вместо интерфейса некоторой подсистемы (набора взаимосвязанных классов или объектов).
      Читать дальше...
      Видео урок посвящен шаблону проектированию Flyweight, который описывает правильное применение техники создания «разделяемых объектов», для получения возможности эффективного использования большого числа объектов.
      Читать дальше...
      Видео урок посвящен шаблону проектирования Proxy, который предоставляет объект-заместитель для контроля доступа к другому объекту.
      Читать дальше...
      Видео урок посвящен паттерну проектирования Chain of Responsibility, который позволяет избежать привязки объекта-отправителя запроса к объекту-получателю запроса, при этом давая шанс обработать этот запрос нескольким объектам. Паттерн Chain of Responsibility связывает в цепочку объекты-получатели запроса и передает запрос вдоль этой цепочки, пока один из объектов, составляющих эту цепочку не обработает передаваемый запрос.
      Читать дальше...
      Видео урок расскажет о шаблоне проектирования Command (Команда), который позволяет представить запрос в виде объекта, позволяя клиенту конфигурировать запрос (задавая параметры для его обработки), ставить запросы в очередь, протоколировать запросы, а также поддерживать отмену операций.
      Читать дальше...
      Видео урок посвящен шаблону проектирования Interpreter (интерпретатор), который позволяет сформировать объектно-ориентированное представление грамматики для заданного языка, а также описывает правила создания механизма интерпретации (толкования) предложений этого языка.
      Читать дальше...
      Видео урок посвящен шаблону проектирования Iterator (Итератор), который представляет удобный и безопасный способ доступа к элементам коллекции (составного объекта), при этом не раскрывая внутреннего представления этой коллекции.
      Читать дальше...
      Видео урок посвящен шаблону проектирования Mediator (посредник), который предоставляет объект-посредник, скрывающий способ взаимодействия множества других объектов-коллег. Объект-посредник обеспечивает слабую связанность системы, избавляя объектов-коллег от необходимости явно ссылаться друг на друга, позволяя тем самым независимо изменять взаимодействия между объектами-коллегами.
      Читать дальше...
      Видео урок посвящен поведенческому шаблоны проектирования Memento (хранитель), который не нарушая инкапсуляции, фиксирует и выносит за пределы объекта-хозяина его внутреннее состояние так, чтобы позднее это вынесенное состояние можно было восстановить в исходном объекте-хозяине.
      Читать дальше...
      Видео урок посвящен шаблону проектирования Observer (наблюдатель), который использует связь-отношения зависимости «один ко многим» (один издатель ко многим подписчикам). При изменении состояния одного объекта (издателя), все зависящие от него объекты (подписчики) оповещаются об этом и автоматически обновляются.
      Читать дальше...
      Видео урок расскажет о шаблоне проектирования State (Состояние), который позволяет объекту изменять свое поведение в зависимости от своего состояния. Поведение объекта изменяется на столько, что создается впечатление, что изменился класс объекта.
      Читать дальше...
      Видео урок посвящен шаблону проектирования Strategy (Стратегия), который определяет набор алгоритмов (часто схожих по роду деятельности), инкапсулирует каждый из имеющихся алгоритмов (в отдельный класс) и делает их подменяемыми. Паттерн Strategy позволяет подменять алгоритмы без участия клиентов, которые используют эти алгоритмы.
      Читать дальше...
      Видео урок посвящен паттерну проектирования Template Method, который формирует структуру алгоритма и позволяет в производных классах реализовать, заместить (перекрыть) или переопределить определенные шаги (участки) алгоритма, не изменяя структуру алгоритма в целом.
      Читать дальше...
      Видео урок посвящен шаблону проектирования Visitor (Посетитель), который позволяет единообразно обойти набор элементов с разнородными интерфейсами (т.е. набор объектов разных классов не приводя их к общему базовому типу), а также позволяет добавить новый метод (функцию) в класс объекта, при этом не изменяя сам класс этого объекта.
      Читать дальше...
      ПОКАЗАТЬ ВСЕ
      основные темы, рассматриваемые на уроке
      0:03:59
      Шаблоны и их использование в объективной реальности
      0:08:49
      Паттерны в спорте
      0:10:41
      Фигуры логики и модусы силлогизмов
      0:13:08
      Шаблоны в музыке
      0:15:52
      Порождающие шаблоны в музыке
      0:21:03
      Структурные шаблоны в музыке
      0:27:07
      Поведенческие шаблоны в музыке
      0:30:52
      Главная задача ООП
      0:34:00
      Шаблоны в программировании
      0:36:10
      Определение Паттерна
      0:42:31
      Формат описания паттернов проектирования
      0:49:12
      Каталог паттернов проектирования
      0:52:10
      Техника ООП
      0:53:10
      Фасад Подсистемы
      0:55:14
      Принципы организации каталога
      0:59:34
      Рекомендации по изучению паттернов
      1:05:16
      Разновидности шаблонов
      1:12:31
      Что такое Шаблоны проектирования?
      ПОКАЗАТЬ ВСЕ
      Рекомендуемая литература
      Рекомендуемой литературы к данному уроку не предусмотрено
      Титры видеоурока

      1.1. Понятие паттерна проектирования

      Определение

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

      Паттерны (шаблоны) проектирования – это 23 примера, которые описывают:

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

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

      Метафора

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

      Рассмотрим в качестве метафоры фигурное катание. В фигурном катании можно выделить четыре основных категории базовых элементов: шаги, спирали, вращения и прыжки.

      • Шаги:

      Основной шаг, Шассе, Кроссролл, Подсечка, Беговой шаг, Моухог, Чоктау и др.

      • Спирали:

      Спираль в арабеске, спираль Шарлотты, Y-спираль, Fan-спираль, Спираль-Керриган и др.

      • Вращения:

      Вращение стоя назад, Вращение-заклон, Вращение бильман, Вращение в ласточке (либела) и др.

      • Прыжки:

      Лутц, Тулуп, Флип, Аксель, Риттбергер, Сальхов, Сальто и др.

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

      У каждого базового элемента имеется своя схема исполнения. Чтобы исполнить определенный элемент танца нужно выполнить ряд простейших действий (Разогнаться, повернуться, поднять ногу, расставить руки и пр.).

      Рассмотрим в качестве примера один из базовых элементов – «Axel», который входит в категорию прыжков. На рисунке ниже показана детальная схема исполнения прыжка «Axel» и то как этот элемент разбивается на составляющие.

      Рисунок 1. Схема исполнения прыжка «Axel»

      При проектировании программных систем используется аналогичный подход. Программа строится с учетом наличия готовых подходов, которые представлены своими схемами – шаблонами (паттернами). В общем виде имеется 23 базовых шаблона проектирования программных систем, которые лежат в основе более высокоуровневых и модельно зависимых паттернов (например, паттерны проектирования корпоративных приложений, разработанные Мартином Фаулером, базируются на паттернах из каталога GoF).

      Между элементами, показанными на рисунках 2 и 3 можно провести соответствия. 

      Рисунок 2. Фрагмент танца составленный из двух независимых элементов (шаблонов)

      Рисунок 3. Фрагмент программной системы, составленный из двух независмых элементов (шаблонов)

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

      Рисунок 3. Соответствие

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

       

      1.2. Формат описания паттернов проектирования

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

      Название

      Название паттерна (на Русском языке) отражающее его назначение.

      Также известен как

      Альтернативное название паттерна (если такое название имеется).

      Классификация

      Классификация паттернов производится:

      • По цели (порождающий, структурный или поведенческий)
      • По применимости (к объектам и/или к классам)

      Частота использования

      Низкая                  -   1 2 3 4 5

      Ниже средней       -   1 2 3 4 5

      Средняя               -   1 2 3 4 5

      Выше средней      -   1 2 3 4 5

      Высокая               -   1 2 3 4 5

      Назначение

      Краткое описание назначения паттерна и задачи проектирования, решаемые с его использованием.

      Введение

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

      Структура паттерна на языке UML

      Графическое представление паттерна с использованием диаграмм классов языка UML. На диаграммах показаны основные участники (классы) и связи отношений между участниками.

      Структура паттерна на языке C#

      Программная реализация паттерна с использованием языка C#.

      Участники

      Имена участников (классы которые входят в состав паттерна) и описание их назначения.

      Отношения между участниками

      Описание отношений (взаимодействий) между участниками (классами и/или объектами).

      Мотивация

      Определение потребности в использовании паттерна. Рассмотрение способов применения паттерна.

      Применимость паттерна

      Рекомендации по применению паттерна.

      Результаты

      Особенности и варианты использования паттерна. Результаты применения.

      Реализация

      Описание вариантов и способов реализации паттерна.

      Пример кода

      Дополнительные примеры, иллюстрирующие использование паттерна.

      Известные применения паттерна в .Net

      Использование паттерна в .Net Framework и/или его выражение в языке C#.

       

      1.3. Каталог паттернов проектирования

      Каталог состоит из 23 паттернов. Все паттерны разделены на три группы:

      Порождающие

      1. Abstract Factory (Абстрактная Фабрика)
      2. Builder (Строитель)
      3. Factory Method (Фабричный Метод)
      4. Prototype (Прототип)
      5. Singleton (Одиночка)

      Структурные

      1. Adapter (Адаптер)
      2. Bridge (Мост)
      3. Composite (Компоновщик)
      4. Decorator (Декоратор)
      5. Facade (Фасад)
      6. Flyweight (Приспособленец)
      7. Proxy (Заместитель)

      Поведенческие

      1. Chain of Responsibility (Цепочка Обязанностей)
      2. Command (Команда)
      3. Interpreter (Интерпретатор)
      4. Iterator (Итератор)
      5. Mediator (Посредник)
      6. Memento (Хранитель)
      7. Observer (Наблюдатель)
      8. State (Состояние)
      9. Strategy (Стратегия)
      10. Template Method (Шаблонный Метод)
      11. Visitor (Посетитель)

       

      1.4. Техники ООП

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

      Фабрика - Продукт

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

      См. пример к главе: \RulesOOP (Creating)

      На диаграмме последовательностей можно отследить работу фабричной техники.

       Рисунок 4. Диаграмма последовательностей фабричной техники

      Фасад - Подсистема

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

      См. пример к главе: \RulesOOP (Structural)

      На диаграмме последовательностей можно отследить работу фасадной техники.

      Рисунок 5. Диаграмма последовательностей фасадной техники

       

      Диспетчеризация

      Техника использования диспетчеризации имеет две формы: «Цепочка объектов» и «Издатель-Подписчик». Эти техники были положены в основу поведенческих паттернов.

      Цепочка объектов

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

      См. пример к главе: \RulesOOP (Chain)

      На диаграмме последовательностей можно отследить работу техники «Цепочка объектов».

      Рисунок 6. Диаграмма последовательностей техники "Цепочка объектов».

      Издатель-Подписчик

      При использовании техники «Издатель-Подписчик» - объект-издатель вызывает метод на объекте-подписчике, а объект-подписчик после этого вызывает метод на объекте-издателе. Таким образом объект-издатель уведомляет объекта-подписчика о наступлении некоторого события.

      См. пример к главе: \RulesOOP (Behavioral)

      На диаграмме последовательностей можно отследить работу техники «Издатель-Подписчик».

      Рисунок 7. Диаграмма последовательностей техники "Издатель-подписчик"

       

      1.5. Принципы организации каталога

      Все 23 паттерна классифицируются по двум критериям – цель и применимость (уровень).

       

       

      Цель

      Порождающие

      Структурные

      Поведенческие

      Применимость (уровень)

      К классам

       

      Фабричный метод

       

      Адаптер (класса)

       

       

      Интерпретатор

      Шаблонный метод

       

      К объектам

       

      Абстрактная фабрика

      Одиночка

      Прототип

      Строитель

       

      Адаптер (объекта)

      Декоратор

      Заместитель

      Компоновщик

      Мост

      Приспособленец

      Фасад

       

      Итератор

      Команда

      Наблюдатель

      Посетитель

      Посредник

      Состояние

      Стратегия

      Хранитель

      Цепочка обязанностей

       

      Таблица 1. Принципы организации каталога паттернов.

      Цель паттерна

      Цель паттерна – показывает его назначение.

       

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

      Уровень паттерна

      Уровень паттерна -  показывает область применения паттерна: к классам или к объектам.

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

       

      1.6. Рекомендации по изучению паттернов

      Существует две категории программистов, которые решили приступить к изучению паттернов проектирования. Первая категория – начинающие программисты или программисты с небольшим опытом разработки, которые только слышали о таком понятии как паттерны и об их полезности от старших и более опытных коллег. Вторая категория – программисты с опытом разработки, с хорошим пониманием ООП, но по ряду причин не применявшие в своей практике паттерны, при этом осознающие полезность их использования.

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

      Начинающим программистам понадобится немного больше времени для изучения и хорошего понимания паттернов. Им рекомендуется сначала приступить к ознакомлению с диаграммой классов и сравнению классов и связей отношений, изображенных на диаграмме с реализацией паттерна в примере на языке C#. Такой подход позволит закрепить понимание простейших техник ООП, которые используются при построении паттерна. Для достижения большего эффекта есть смысл при изучении кода паттерна параллельно рисовать диаграмму объектов (овалы - символизирующие объекты в памяти и стрелки – показывающие как одни объекты ссылаются на другие).

      Начать рассмотрение паттерна лучше всего с тела метода Main, сперва ознакомившись с интерфейсом взаимодействия используемых объектов. Далее есть смысл переходить к знакомству с классами используемых объектов.

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

      Важно понимать, что паттерн - это формула, а пример использования паттерна - это пример применения этой формулы. Формула – первична, ее применение – вторично. Для создателей каталога паттернов формула была вторична. В основу этого каталога была положена докторская диссертация Эриха Гаммы – а это значит сначала исследования в области построения объектно-ориентированных систем, затем формализация результатов исследований и представление их в виде 23 паттернов (формул). Разработчикам исследовать ничего не нужно, им не нужно порождать новых знаний и делать открытий, им просто требуется использовать готовые паттерны (формулы) в повседневной работе для решения проектных задач.

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

       

      1.7. Рекомендации по применению паттернов

      Использовать паттерны просто для тех, кто знает наизусть все 23 паттерна (всех участников и связи отношений между ними). 23 паттерна – это «таблица умножения» проектировщика. Как трудно производить расчеты без знания таблицы умножения, также трудно проектировать приложения без знания паттернов.

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

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

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

      Пакеты подписки с доступом ко всем курсам и сервисам

      Пакеты подписки с доступом ко всем курсам и сервисам

      Стартовый
      • Все видеокурсы на 3 месяца
      • Тестирование по 10 курсам
      • Проверка 5 домашних заданий
      • Консультация с тренером 30 мин
      49.99 $
      25.00 $
      Подписка
      Базовый
      • Все видеокурсы на 6 месяцев
      • Тестирование по 16 курсам
      • Проверка 10 домашних заданий
      • Консультация с тренером 60 мин
      89.99 $
      45.00 $
      Подписка
      Премиум
      • Все видеокурсы на 12 месяцев
      • Тестирование по 24 курсам
      • Проверка 20 домашних заданий
      • Консультация с тренером 120 мин
      169.99 $
      85.00 $
      Подписка
      комментарии и обсуждения
      Notification success
      Мы используем cookie-файлы, чтобы сделать взаимодействие с нашими веб-сайтами и услугами простым и значимым.