EngineerSpock

Шаблоны проектирования на Python

999 

Курс даёт всеобъемлющий обзор GoF паттернов (шаблонов) проектирования на практике на языке Python.

Курс даёт всеобъемлющий обзор паттернов (шаблонов) проектирования на Python на практике. Этот курс покрывает шаблоны посредством:

  • использования самой новой версии Python
  • использования современных подходов программирования: инъекции зависимостей, реактивное программирование и т.д.
  • использования современных средств разработки таких как PyCharm
  • дискуссий различных вариаций паттернов и различных подходов

На этом курсе мы рассмотрим все шаблоны проектирования из книги «банды четырёх», а также их различные современные вариации с поправками и использованием особенностей языка Python.

Что такое паттерны проектирования?

Паттерны проектирования — это типовые решения типовых задач. Впервые были введены в оборот в 1994 году с выходом книги Design Patterns: Elements of Reusable Object-Oriented Software за авторством Erich Gamma, John Vlissides, Ralph Johnson and Richard Helm (которых часто именуют бандой четырёх).

Оригинальная книга была написана с использованием C++ и Smalltalk, но с тех пор паттерны проектирования были адаптированы ко всем известным языкам программирования: C#, Java, Python и даже к тем ЯП, которые, строго говоря, не являются объектно-ориентированными, такими как Java Script.

На самом деле, мы видим шаблоны проектирования повсюду: в любых библиотеках, видим их встроенными в сами языки программирования. Так что вы даже не всегда осознаёте, что ими пользуетесь.

Какие паттерны разобраны на курсе?

Курс покрывает все паттерны проектирования из книги банды четырёх. Вот полный список тем:

  • Принципы проектирования SOLID: принцип единственной ответственности (SRP),  принцип открытости / закрытости (OCP), принцип подстановки Лисков (LSP), принцип разделения интерфейсов (ISP), принцип инверсии зависимостей (DIP)
  • Паттерны порождения: строитель, фабрики, прототип, одиночка
  • Структурные паттерны: адаптер, мост, компоновщик, декоратор, фасад, приспособленец, прокси
  • Поведенческие паттерны: цепочка зависимости, команда, интерпретатор, итератор, медиатор, хранитель, наблюдатель, состояние, стратегия, шаблонный метод, посетитель

Видео о курсе

Материалы курса

Введение в SQL
  • Основные концепции
  • Реляционная модель и SQL
  • Почему PostgreSQL
  • Инсталируем PostgreSQL
  • Типы данных в PostgreSQL
  • Создание БД
  • Создание таблиц
  • Отношение "один ко многим"
  • Отношение "один к одному"
  • Отношение "многие ко многим"
  • Создаём Northwind
Простые запросы с SELECT
  • Полная выборка
  • Выборка и элементарные арифметические операции
  • DISTINCT
  • COUNT
  • ДЗ "простые выборки"
  • ДЗ "простые выборки" - Решение
  • WHERE
  • AND, OR
  • BETWEEN
  • IN & NOT IN
  • ORDER BY
  • MIN, MAX, AVG
  • ДЗ "простые выборки-2"
  • ДЗ "простые выборки-2" - Решение
  • LIKE
  • LIMIT
  • Check on NULL
  • GROUP BY
  • HAVING
  • UNION, INTERSECT, EXCEPT
  • ДЗ "группировка, сопоставление, сортировка"
  • ДЗ "группировка, сопоставление, сортировка" -
  • Решение
Соединения - Joins
  • Знакомство с соединениями
  • INNER JOIN
  • LEFT, RIGHT JOIN
  • SELF JOIN
  • USING & NATURAL JOIN
  • AS - псевдонимы
  • ДЗ "Joins"
  • ДЗ "Joins" - Решение
Подзапросы
  • Введение в подзапросы
  • WHERE EXISTS
  • Подзапросы с квантификаторами ANY, ALL
  • ДЗ "Подзапросы"
  • ДЗ "Подзапросы" - Решение
DDL - управляем БД и таблицами
  • Управляем таблицами
  • ДЗ 1 по DDL
  • ДЗ 1 по DDL - Решение
  • Primary Key
  • Foreign Key
  • Check
  • Default
  • Sequences
  • Sequences & Tables
  • INSERT
  • UPDATE, DELETE, RETURNING
  • ДЗ 2 по DDL
  • ДЗ 2 по DDL - Решение
Проектирование БД
  • Введение в процесс проектирования
  • Базовые рекомендации
  • Нормальная Форма (НФ)
Представления (Views)
  • Введение в представления
  • Создание представлений
  • Обновляемые представления
  • Опция Check
  • ДЗ "Views"
  • ДЗ "Views" - Решение
Логика с CASE, COALESCE и NULLIF
  • CASE WHEN
  • Введение в COALESCE и NULLIF
  • COALESCE и NULLIF на практике
  • ДЗ "Логика"
  • ДЗ "Логика" - Решение
Функции SQL и PL\pgSQL
  • Введение в функции
  • Наша первая функция
  • Скалярные функции
  • IN, OUT, DEFAULT
  • Возврат наборов данных
  • Введение в PL\pgSQL
  • Возврат и присвоение
  • Декларация переменных
  • IF / ELSE
  • Циклы
  • RETURN NEXT
  • ДЗ "Функции"
  • ДЗ "Функции" - Решение
Ошибки и их обработка
  • Введение
  • RAISE на практике
  • ДЗ "Ошибки и их обработка"
  • ДЗ "Ошибки и их обработка" - Решение
Приведение типов данных
  • Введение в приведение типов данных
  • Приведение типов данных на практике
Индексы
  • Введение в индексы. Немного "кишочков"
  • Методы сканирования
  • Виды индексов
  • EXPLAIN, ANALYZE
  • Построение простого индекса и индекса по двум колонкам
  • Индексы по выражениям
  • "Сложный" индекс для поиска по тексту
Массивы
  • Введение в массивы
  • Инициализация, срезы
  • Массивы и операторы
  • VARIADIC и FOREACH
  • ДЗ "Массивы"
  • ДЗ "Массивы" - Решение
  • ДЗ "Циклы"
  • ДЗ "Циклы" - Решение
Пользовательские типы
  • Домены
  • Композитные типы
  • Перечисления
  • ДЗ "Пользовательские типы"
  • ДЗ "Пользовательские типы" - Решение
Продвинутая группировка с CUBE и ROLLUP
  • Введение в группировку
  • GROUPING SET, ROLLUP, CUBE
  • ДЗ "Продвинутые группировки"
  • ДЗ "Продвинутые группировки" - Решение
Знакомство с psql
  • Введение в psql
  • Знакомство с psql на практике
Импорт данных
  • Импорт csv. Введение
  • Импортируем csv на практике
CTE - Common Table Expressions
  • Введение и CTE на практике
  • Рекурсивный CTE
Оконные функции
  • Введение в оконные функции
  • Оконные функции на практике
  • Ранжирование
  • Возврат N-записей
  • ДЗ "Оконные функции"
  • ДЗ "Оконные функции" - Решение
Транзакции
  • Введение в транзакции
  • Уровни изоляции
  • Транзакции на практике
  • ДЗ "Транзакции"
  • ДЗ "Транзакции" - Решение
Триггеры
  • Введение в триггеры
  • Построчные триггеры
  • Триггеры на утверждения
  • ДЗ "Триггеры"
  • ДЗ "Триггеры" - Решение
Безопасность в postgresql
  • Введение в безопасность
  • Создаём роли, изымаем права с public
  • Права на уровне БД и схемы
  • Права на уровне таблиц
  • Права на уровне колонок
  • Права на уровне строк
  • Изымаем все права и удаляем роли
Бонус
  • Бонусная лекция

Чему вы научитесь

  • Распознавать и применять паттерны
  • Оценивать применимость того или иного паттерна в конкретной ситуации
  • Проводить рефакторинг существующего кода с привнесением паттернов

Для кого этот курс

Это — курс для опытных (как минимум очень хорошо знакомых с Python) разработчиков, которые хотят познакомиться с современными вариантами реализации паттернов (а не только книжными устаревшими).

FAQ

Введение в Python
  • Скачать исходный код
  • Присоединиться к чату в Telegram
  • Почему Python?
  • Python с технической точки зрения
  • Python 2 vs Python 3
  • Стандартная библиотека
  • Редакторы кода для Python
  • Инсталлируем дистрибутив Anaconda
  • Введение в Anaconda
  • Jupyter Notebook не запускается через Anaconda Navigator?
  • Базовые сведения о Python
Основы Python
  • Обзор основных типов данных
  • Числа и элементарная математика
  • Переменные
  • bool и None
  • Тип string
  • Функции string
  • Форматирование строк
  • Операторы сравнения
  • Операции над файлами
  • Строки и байты: str, bytes, bytearray
  • Основы Python
  • Элементарная арифметика
  • Объявление переменных
  • Работа со строками
  • Решение ДЗ 1-3
  • ДЗ: Основы
  • ДЗ: Основы - Решение
Коллекции, циклы и логика в Python
  • list - список
  • dict - словарь
  • OrderedDict vs dict
  • tuple - кортеж
  • namedtuple - именованные кортежи
  • Логика с условиями
  • set - множество
  • Цикл for
  • list comprehension
  • Цикл while, continue, break
  • Замечания к последующим ДЗ
  • Циклы. ДЗ-1-2
  • Циклы. ДЗ-1-2. Решение
  • Циклы. ДЗ-3 Division by 3 or 5
  • Циклы. ДЗ-4-Joined List
  • Циклы. ДЗ-5-Cards Sum
  • Циклы. ДЗ 3-5. Решение
  • Циклы. ДЗ 6. Определяем Flush
  • Циклы. ДЗ-6-Флеш. Решение
  • Циклы. ДЗ 7. Палиндром
  • Циклы. ДЗ 7 - Палиндром. Решение
  • Домашнее задание: угадай число
  • Решение ДЗ: пишем игру "угадай число"
  • ДЗ "Камень-ножницы-бумага"
  • Решение ДЗ "Камень-ножницы-бумага"
  • Коллекции и циклы
Функции и модули
  • Помощь по функциям
  • Встроенные функции
  • Основы функций
  • Лямбды
  • Вложенные функции и область видимости переменных
  • Декораторы
  • Декоратор @wraps
  • Опросник по функциям
  • Примечание к последующим ДЗ
  • ДЗ: Кто выстрелил быстрее?
  • ДЗ: Ханойские башни
  • ДЗ: Без дуплетов!
  • ДЗ: Мини-судоку
  • Решения ДЗ по функциям
  • Домашнее задание: игра в палочки
  • Решение ДЗ: пишем игру в палочки
Ошибки и исключения. Автоматизированные тесты
  • Основы обработки ошибок
  • Выброс исключений. Кастомные типы исключений.
  • Основы юнит-тестирования
  • Работа с ошибками
ООП в Python
  • Основы классов
  • Атрибуты и методы
  • Константы. Защищённые и приватные атрибуты. Свойства.
  • Статические методы - @staticmethod, @classmethod
  • Наследование и полиморфизм
  • Множественное наследование
  • Миксины
  • Абстрактный класс и модуль ABC
  • Магические методы
  • Примечание к последующим ДЗ
  • ДЗ-1: ФИО
  • ДЗ-2: Класс калькулятора
  • ДЗ-3: Парсинг сотрудника
  • ДЗ-4 "Пицца"
  • ДЗ-5: Окружность
  • ДЗ-6: Смузи
  • ДЗ: 1-3 Решения
  • ДЗ: 4-6. Решения
  • Домашнее задание: крестики-нолики
  • Решение ДЗ: реализуем крестики-нолики
  • ООП в Python
Модули и пакеты
  • PyPi и Pip
  • Модули и пакеты
  • Ещё раз о __name__ и __main__
  • Модули и пакеты
Дополнительно
  • Отладка
  • Реализуем Stack
  • datetime - даты и время
  • Singleton Design Pattern: __new__ и __init__
  • Pickle - консервирование
  • repr and str, eq and ne, eval
  • Deep copy vs Shallow copy
  • Enum - перечисления
  • Работаем с JSON
  • Генераторы
  • Модуль itertools
  • Интроспекция
  • Модуль requests
  • Управление памятью
  • Advanced Topics
Движемся дальше
  • Введение в Линтеры
  • Установка "системного" Python
  • Виртуальное окружение
  • Установка PyCharm
  • Создаём проект в PyCharm
  • Refactoring, Quick Fixes, Debugging в PyCharm
  • Type Hints
  • Введение в dataclasses
Что нового в Python 3.8
  • Обзор нововведений
  • Устанавливаем Python 3.8 и создаём проект
  • Walrus-оператор
  • Навязывание позиционных аргументов
  • Улучшения в системе type hints
  • Перегрузка с @overload
  • Duck Typing и протоколы
  • Упрощённый вывод значений в интерполированных строках
Финальная практика
  • ДЗ-1: считаем гласные
  • ДЗ-2: определяем FULL HOUSE
  • ДЗ-3: уровни сладости
  • ДЗ-4: возрастает или убывает
  • ДЗ-5: Пагинация
  • ДЗ: 1-4 Решения
  • ДЗ-5: Решение
  • Домашнее задание: парсинг римских чисел
  • Решение ДЗ: парсим римские числа
  • ДЗ - Виселица
  • Решение ДЗ - Виселица
  • ДЗ - Верю-не-верю (истина или ложь)
  • Решение ДЗ: верю-не-верю
Допматериалы-1. Введение в многопоточное программирование
  • Терминология
  • Процессы и потоки
  • Виды процессинга
  • GIL
Допматериалы-1. Модуль Threading
  • Однопоточность. Демо проблемы
  • Foreground & Background потоки
  • "Параллельное" исполнение против последовательного
  • Executor API
  • submit-демо
  • map-демо
  • Синхронизация потоков
  • Гонка и Lock
  • Deadlock
  • Демо дэдлока
  • Синхронизация сигналами
  • Применяем Event
  • Семафор
  • Моделируем ночной клуб семафором
  • Барьер
  • Атомические операции
  • Отмена потоков
  • Отмена убийством процесса
  • Базовая отмена с флагом
  • Имплементируем отмену через Unit of Work-паттерн
  • Подытоги
  • Обработка исключений
  • Обработка исключений - Демо
Допматериалы-1. Модуль asyncio
  • Введение в asyncio
  • Простейший пример с asyncio
  • Event Loop. Введение
  • Event Loop. Демо
  • Демо с aiohttp
  • Демо с aiofiles
  • Futures & Tasks
  • Task API - Демо
  • Обёртываем Thread через Future
  • async for
  • Обработка исключений
  • Обработка исключений - Демо
  • Отмена. Введение
  • Отмена с gather
  • Отмена с wait. Кооперативная отмена
  • async IO vs sync IO
Введение в SQL
  • Основные концепции
  • Реляционная модель и SQL
  • Почему PostgreSQL
  • Инсталируем PostgreSQL
  • Типы данных в PostgreSQL
  • Создание БД
  • Создание таблиц
  • Отношение "один ко многим"
  • Отношение "один к одному"
  • Отношение "многие ко многим"
  • Создаём Northwind
Простые запросы с SELECT
  • Полная выборка
  • Выборка и элементарные арифметические операции
  • DISTINCT
  • COUNT
  • ДЗ "простые выборки"
  • ДЗ "простые выборки" - Решение
  • WHERE
  • AND, OR
  • BETWEEN
  • IN & NOT IN
  • ORDER BY
  • MIN, MAX, AVG
  • ДЗ "простые выборки-2"
  • ДЗ "простые выборки-2" - Решение
  • LIKE
  • LIMIT
  • Check on NULL
  • GROUP BY
  • HAVING
  • UNION, INTERSECT, EXCEPT
  • ДЗ "группировка, сопоставление, сортировка"
  • ДЗ "группировка, сопоставление, сортировка" -
  • Решение
Соединения - Joins
  • Знакомство с соединениями
  • INNER JOIN
  • LEFT, RIGHT JOIN
  • SELF JOIN
  • USING & NATURAL JOIN
  • AS - псевдонимы
  • ДЗ "JOINS"
  • ДЗ "JOINS" - Решение
Подзапросы
  • Введение в подзапросы
  • WHERE EXISTS
  • Подзапросы с квантификаторами ANY, ALL
  • ДЗ "Подзапросы"
  • ДЗ "Подзапросы" - Решение
DDL - управляем БД и таблицами
  • Управляем таблицами
  • ДЗ 1 по DDL
  • ДЗ 1 по DDL - Решение
  • Primary Key
  • Foreign Key
  • Check
  • Default
  • Sequences
  • Sequences & Tables
  • INSERT
  • UPDATE, DELETE, RETURNING
  • ДЗ 2 по DDL
  • ДЗ 2 по DDL - Решение
Python & SQL
  • Введение
  • psycopg2
  • ORM и SQLAlchemy
BONUS
  • Бонусная лекция
Это видео курс?

Это видео курс.

Будут ли вебинары?

Нет. Это видео курс.

Можно ли будет задавать вопросы?

На образовательной платформе можно будет задавать вопросы.

Есть ли какие-либо ограничения по времени?

Никаких ограничений по времени нет. Вообще никаких.