Михаил Омельченко | AI&IT
5.27K subscribers
976 photos
192 videos
4 files
714 links
ИИ в работе, разработка, веб. Агенты, автоматизация, инструменты. Веду я, Михаил Омельченко, внешний технический директор по ИИ и ментор.

Менторство, реклама и сотрудничество: djwoms.ru
Telegram - @DJWOMS
YouTube - https://www.youtube.com/c/DjangoSchool
Download Telegram
Паттерн Шаблонный метод: простыми словами

Всем привет!

Что такое шаблонный метод?
Шаблонный метод - это паттерн, который определяет "скелет" алгоритма в базовом классе, но позволяет подклассам переопределить некоторые шаги этого алгоритма без изменения его общей структуры. Простыми словами, шаблонный метод представляет собой шаблон для решения определенной задачи, где некоторые шаги могут быть изменены или дополнены в подклассах.

Как это работает?
Представьте, что у вас есть задача разработать приложение для создания различных типов документов: текстовых, электронных таблиц, презентаций и т. д. Вместо того, чтобы реализовывать каждый тип документа отдельно, мы можем использовать паттерн "Шаблонный метод".

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

Преимущества использования паттерна "Шаблонный метод":
✅ Упрощение разработки: шаблонный метод помогает разделить сложный алгоритм на более мелкие шаги, что упрощает разработку и делает код более понятным.

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

✅ Гибкость: подклассы могут изменять или дополнять только нужные шаги алгоритма, оставляя остальную структуру без изменений.

✅ Удобство тестирования: тестирование отдельных шагов алгоритма проще, чем тестирование всего алгоритма целиком.

#IT #программирование #паттерн
👍3
Участники паттерна "Шаблонный метод"
✅ AbstractClass:
определяет шаблонный метод TemplateMethod(), который реализует алгоритм. Алгоритм может состоять из последовательности вызовов других методов, часть из которых может быть абстрактными и должны быть переопределены в классах-наследниках. При этом сам метод TemplateMethod(), представляющий структуру алгоритма, переопределяться не должен.

✅ ConcreteClass: подкласс, который может переопределять различные методы родительского класса.

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


🔥Провожу индивидуальные занятия по python и веб разработке (django, fastapi, flask, javascript).

Обучаю с нуля, а так же провожу консультации для мидлов и синьоров.

Пишите - https://t.me/DJWOMS

#IT #программирование #паттерн
👍4
📢 Паттерн Посетитель простыми словами.

👋Всем привет!

Сегодня поговорим о паттерне "Посетитель".
Этот паттерн проектирования позволяет нам взаимодействовать с различными объектами в нашей программе. Давайте разберемся, что это значит.

Что такое паттерн Посетитель?
Паттерн "Посетитель" помогает упорядочить операции, которые нужно выполнить над объектами, отделяя эти операции от структуры объектов. Он позволяет добавлять новые операции, не модифицируя классы объектов, к которым эти операции применяются. Основная идея заключается в создании класса "Посетитель", содержащего методы для каждой операции, которую мы хотим выполнить над объектами.

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

Мы создаем класс "Посетитель", который содержит методы для каждой операции, которую мы хотим выполнить над зданиями. Затем мы передаем каждое здание в метод "посещения" класса "Посетитель", и он выполняет нужную операцию.

Зачем это нужно?
✅ Разделение операций и объектов: паттерн Посетитель позволяет нам добавлять новые операции без изменения классов объектов, что делает код более гибким и расширяемым.

✅ Читаемость и понимание кода: методы посетителя явно определяют, какие операции выполняются над объектами, что делает код более понятным и легким для поддержки.

✅ Легкость добавления новых операций: при добавлении новых типов зданий или операций над ними, мы просто расширяем класс "Посетитель", не затрагивая другие части системы.

✅ Решение проблемы двойной диспетчеризации: паттерн Посетитель помогает нам избежать проблемы двойной диспетчеризации, когда вызываемый метод зависит от двух объектов (класса объекта и класса операции).

#IT #программирование #паттерн
👍2
Участники паттерна Посетитель

- Visitor:
интерфейс посетителя, который определяет метод Visit() для каждого объекта Element

- ConcreteVisitor: конкретные классы посетителей, реализуют интерфейс, определенный в Visitor.

- Element: определяет метод Accept(), в котором в качестве параметра принимается объект Visitor

- ConcreteElementA / ConcreteElementB: конкретные элементы, которые реализуют метод Accept()

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


🔥Провожу индивидуальные занятия по python и веб разработке (django, fastapi, flask, javascript).
Обучаю с нуля, а так же провожу консультации для мидлов и синьоров.
Пишите - https://t.me/DJWOMS

🌐 #IT #программирование #паттерн
📢 Паттерн Адаптер простыми словами

Привет!

Сегодня о паттерне "Адаптер". Этот паттерн проектирования помогает соединять несовместимые части программы. Давайте разберемся, что это значит.

Что такое паттерн Адаптер?

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

Как это работает?

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

Мы создаем класс "Адаптер", который имитирует интерфейс предыдущей библиотеки, но внутри использует новую библиотеку. Это позволяет нам перейти на новую библиотеку, не изменяя остальной код нашего приложения.

Зачем это нужно?

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

✅ Упрощение интеграции со сторонними компонентами: если у нас есть несовместимые части кода, паттерн Адаптер помогает нам соединить их и обеспечить их взаимодействие.

✅ Повторное использование кода: с помощью Адаптера мы можем использовать существующие классы, предоставляя им новые интерфейсы.

🌐 #IT #программирование #паттерн
👍2
Участники паттерна Адаптер

- Target: представляет объекты, которые используются клиентом.

- Client: использует объекты Target для реализации своих задач.

- Adaptee: представляет адаптируемый класс, который мы хотели бы использовать у клиента вместо объектов Target.

- Adapter: собственно адаптер, который позволяет работать с объектами Adaptee как с объектами Target.

В заключение

Паттерн Адаптер - это мощный инструмент, который помогает нам соединять несовместимые компоненты программы. Он позволяет нам использовать и переиспользовать код, упрощает интеграцию с другими компонентами и упрощает переход на новые технологии.


🔥Провожу индивидуальные занятия по python и веб разработке (django, fastapi, flask, javascript).

Обучаю с нуля, а так же провожу консультации для мидлов и синьоров.

Пишите - https://t.me/DJWOMS

#IT #программирование #паттерн
👍2
Классы контроллеры для FastAPI | JunovNet

Стрим сегодня в 18:00 мск

Расскажем о своей библиотеке контроллеров для FastAPI, которая предлагает новый подход к созданию эндпоинтов. Мы объясним и продемонстрируем как использовать библиотеку.

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


https://youtube.com/live/RxI69AS5PD8?feature=share
🔥10👍1
Паттерн Мост: простыми словами

Всем привет.

Что такое паттерн Мост?
Паттерн Мост - это структурный паттерн проектирования, который позволяет разделить абстракцию и реализацию компонентов, чтобы они могли изменяться независимо друг от друга. Он позволяет отделить абстракцию (интерфейс или абстрактный класс) от конкретной реализации, чтобы они могли варьироваться независимо друг от друга.

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

Зачем это нужно?
✅ Разделение абстракции и реализации: паттерн Мост позволяет отделить абстракцию от конкретной реализации, что упрощает изменение их независимо друг от друга.

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

✅ Читаемость и поддерживаемость: паттерн Мост делает код более читаемым, понятным и легким для сопровождения, так как различные компоненты имеют явные и отделенные роли.

#IT #программирование #паттерн
👍1
Участники паттерна Мост

-Abstraction:
определяет базовый интерфейс и хранит ссылку на объект Implementor. Выполнение операций в Abstraction делегируется методам объекта Implementor.

- Implementor: определяет базовый интерфейс для конкретных реализаций. Как правило, Implementor определяет только примитивные операции. Более сложные операции, которые базируются на примитивных, определяются в Abstraction.

- ConcreteImplementorA и ConcreteImplementorB: конкретные реализации, которые унаследованы от Implementor.

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


🔥Провожу индивидуальные занятия по python и веб разработке (django, fastapi, flask, javascript).
Обучаю с нуля, а так же провожу консультации для мидлов и синьоров.
Пишите - https://t.me/DJWOMS

#IT #программирование #паттерн
👍2
📢 Паттерн Компоновщик простыми словами

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

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

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

Зачем это нужно?

✅ Единообразный доступ: паттерн Компоновщик позволяет единообразно обращаться к отдельным объектам и группам объектов, что делает работу с ними более простой и интуитивной.

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

✅ Гибкость: паттерн Компоновщик позволяет добавлять и удалять объекты в иерархии, не затрагивая клиентский код.

✅ Увеличение повторного использования: объекты могут быть повторно использованы в различных иерархиях, что способствует повторному использованию кода.

🌐 #IT #программирование #паттерн
Участники паттерна Компоновщик

❇️ Component:
определяет интерфейс для всех компонентов в древовидной структуре

❇️ Composite: представляет компонент, который может содержать другие компоненты и реализует механизм для их добавления и удаления

❇️ Leaf: представляет отдельный компонент, который не может содержать другие компоненты

В заключение
Паттерн Компоновщик помогает упростить работу с иерархической структурой объектов и обеспечивает единообразный доступ к каждому отдельному объекту и группам объектов. Это делает код более понятным и гибким.


🔥Провожу индивидуальные занятия по python и веб разработке (django, fastapi, flask, javascript).
Обучаю с нуля, а так же провожу консультации для мидлов и синьоров.

Пишите - https://t.me/DJWOMS

🌐 #IT #программирование #паттерн
👍2
🧐 Что такое паттерн Декоратор? 

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

Как это работает? 

Возьмем пример с кофейней. У нас есть базовый класс "Кофе", который предоставляет базовый функционал и мы хотим добавить дополнительные опции, такие как "молоко", "сироп" или "взбитые сливки", не изменяя класс "Кофе". Мы можем использовать паттерн Декоратор, создавая для каждой опции отдельный декоратор, который оборачивает базовый объект "Кофе" и добавляет дополнительную функциональность. 

Зачем это нужно? 

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

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

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

#IT #программирование #паттерн
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Участники паттерна Декоратор

🔶 Component:
 абстрактный класс, который определяет интерфейс для наследуемых объектов.

🔶 ConcreteComponent: конкретная реализация компонента, в которую с помощью декоратора добавляется новая функциональность.

🔶 Decorator: собственно декоратор, реализуется в виде абстрактного класса и имеет тот же базовый класс, что и декорируемые объекты. Поэтому базовый класс Component должен быть по возможности легким и определять только базовый интерфейс. 

🔸 Класс декоратора также хранит ссылку на декорируемый объект в виде объекта базового класса Component и реализует связь с базовым классом как через наследование, так и через отношение агрегации. 

🔶 Класс ConcreteDecorator: представляют дополнительные функциональности, которыми должен быть расширен объект ConcreteComponent. 


🔥Провожу индивидуальные занятия по python и веб разработке (django, fastapi, flask, javascript). 
Обучаю с нуля, а так же провожу консультации для мидлов и сеньоров. 

Пишите - https://t.me/DJWOMS 

🌐 #IT #программирование #паттерн
❤2🤔2
💣 Паттерн Фасад

Многословное программирование может быть сложным для понимания, но паттерн Фасад поможет нам сделать его понятным и доступным.

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

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

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

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

Использование паттерна Фасад имеет свои преимущества:

❇️ Упрощает использование сложных систем и библиотек;

❇️ Улучшает понимание и читаемость кода;

❇️ Позволяет изменять внутреннюю реализацию без изменения внешнего интерфейса.

#IT #программирование #паттерны
Участники паттерна Фасад

🔶 Классы являются компонентами сложной подсистемы, с которыми должен взаимодействовать клиент.

🔶 Client взаимодействует с компонентами подсистемы.

🔶 Facade - непосредственно фасад, который предоставляет интерфейс клиенту для работы с компонентами.

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


🔥Провожу индивидуальные занятия по python и веб разработке (django, fastapi, flask, javascript).

Обучаю с нуля, а так же провожу консультации для мидлов и сеньоров.

Пишите - https://t.me/DJWOMS

#IT #программирование #паттерныпроектирования
👍3
👀 Паттерн Приспособленец

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

Как это работает? 

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

Почему это полезно?

🔶 Экономия памяти: паттерн Приспособленец позволяет нам использовать общие ресурсы вместо создания отдельных копий для каждого объекта. Это особенно полезно, когда у нас есть большое количество объектов или когда ресурсы ограничены.

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

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

#IT #программирование #паттерн
Please open Telegram to view this post
VIEW IN TELEGRAM
Участники паттерна Приспособленец

❇️ Flyweight: определяет интерфейс, через который приспособленцы-разделяемые объекты могут получать внешнее состояние или воздействовать на него.

❇️ ConcreteFlyweight: конкретный класс разделяемого приспособленца. Реализует интерфейс, объявленный в типе Flyweight и при необходимости добавляет внутреннее состояние. Причем любое сохраняемое им состояние должно быть внутренним, не зависящим от контекста.

❇️ UnsharedConcreteFlyweight: еще одна конкретная реализация интерфейса, определенного в типе Flyweight, только теперь объекты этого класса являются неразделяемыми.

❇️ FlyweightFactory: фабрика приспособленцев - создает объекты разделяемых приспособленцев. Так как приспособленцы разделяются, то клиент не должен создавать их напрямую. Все созданные объекты хранятся в пуле. В примере выше для определения пула используется объект Hashtable, но это не обязательно.

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

Если запрошенного приспособленца не оказалось в пуле, то фабрика создает его.

В заключении

Паттерн Приспособленец - позволяет использовать разделяемые объекты сразу в нескольких контекстах. Данный паттерн используется преимущественно для оптимизации работы с памятью.



🔥Провожу индивидуальные занятия по python и веб разработке (django, fastapi, flask, javascript).

Обучаю с нуля, а так же провожу консультации для мидлов и сеньоров.

Пишите - https://t.me/DJWOMS

#IT #программирование #паттерн
👍1😐1
🤔 Паттерн Прокси

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

Как это работает?

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

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

Почему это полезно?

✅ Защита и контроль: паттерн Прокси позволяет нам добавить безопасность и контроль доступа к объектам. Мы можем управлять разрешениями и ограничениями, чтобы предотвратить несанкционированный доступ или выполнить дополнительные проверки перед выполнением операции.

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

✅ Разделение ответственностей: паттерн Прокси помогает нам разделить функциональность и ответственности между прокси и реальным объектом. Это делает код более чистым и понятным, а также упрощает поддержку и расширение системы.

#IT #программирование #паттерн
Участники паттерна Прокси

❇️ Subject: определяет общий интерфейс для Proxy и RealSubject. Поэтому Proxy может использоваться вместо RealSubject.

❇️ RealSubject: представляет реальный объект, для которого создается прокси.

❇️ Proxy: заместитель реального объекта. Хранит ссылку на реальный объект, контролирует к нему доступ, может управлять его созданием и удалением. При необходимости Proxy переадресует запросы объекту RealSubject.

❇️ Client: использует объект Proxy для доступа к объекту RealSubject.


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


🔥Провожу индивидуальные занятия по python и веб разработке (django, fastapi, flask, javascript).

Обучаю с нуля, а так же провожу консультации для мидлов и сеньоров.

Пишите - https://t.me/DJWOMS

🌐 #IT #программирование #паттерн
🔥2👍1
Паттерн Абстрактная фабрика.

Всем привет 🖖

Паттерн Абстрактная фабрика - это как фабрика обуви. Она помогает нам создавать разные типы обуви в зависимости от нашего выбора, не заботясь о деталях её создания.

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

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

Почему это полезно?

✅ Гибкость и расширяемость: абстрактная фабрика позволяет нам легко добавлять новые типы объектов, следуя общему интерфейсу. Мы можем расширять функциональность без изменения существующего кода.

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

❇️ Логическая группировка объектов: абстрактная фабрика позволяет создавать семейства связанных объектов, которые взаимодействуют и работают вместе. Это помогает улучшить организацию кода и его читаемость.

#IT #паттерны
👍2