home.social

#ооп — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #ооп, aggregated by home.social.

  1. Интеграционный хаб в SAP HR — строим гибкость в ритме трансформаций

    Как с помощью Clean ABAP и Low-code ускорить выгрузки в 5 раз Привет, Хабр! Меня зовут Дмитрий, я работаю ведущим разработчиком в Lenta tech («Группа Лента»). В этой статье я разберу архитектуру решения, где технические инструменты — наследование классов и абстрактные типы данных — работают на конкретные бизнес-цели. Я поделюсь нашими принципами по созданию гибкого ядра, способного за считанные дни подключать новых потребителей без риска для стабильности системы.

    habr.com/ru/companies/lentatec

    #SAP #ABAP #Архитектура_ИТсистем #Импортозамещение #ООП #Интеграция_данных #ретейл #lowcode #ttm #hr_tech

  2. Интеграционный хаб в SAP HR — строим гибкость в ритме трансформаций

    Как с помощью Clean ABAP и Low-code ускорить выгрузки в 5 раз Привет, Хабр! Меня зовут Дмитрий, я работаю ведущим разработчиком в Lenta tech («Группа Лента»). В этой статье я разберу архитектуру решения, где технические инструменты — наследование классов и абстрактные типы данных — работают на конкретные бизнес-цели. Я поделюсь нашими принципами по созданию гибкого ядра, способного за считанные дни подключать новых потребителей без риска для стабильности системы.

    habr.com/ru/companies/lentatec

    #SAP #ABAP #Архитектура_ИТсистем #Импортозамещение #ООП #Интеграция_данных #ретейл #lowcode #ttm #hr_tech

  3. Интеграционный хаб в SAP HR — строим гибкость в ритме трансформаций

    Как с помощью Clean ABAP и Low-code ускорить выгрузки в 5 раз Привет, Хабр! Меня зовут Дмитрий, я работаю ведущим разработчиком в Lenta tech («Группа Лента»). В этой статье я разберу архитектуру решения, где технические инструменты — наследование классов и абстрактные типы данных — работают на конкретные бизнес-цели. Я поделюсь нашими принципами по созданию гибкого ядра, способного за считанные дни подключать новых потребителей без риска для стабильности системы.

    habr.com/ru/companies/lentatec

    #SAP #ABAP #Архитектура_ИТсистем #Импортозамещение #ООП #Интеграция_данных #ретейл #lowcode #ttm #hr_tech

  4. Интеграционный хаб в SAP HR — строим гибкость в ритме трансформаций

    Как с помощью Clean ABAP и Low-code ускорить выгрузки в 5 раз Привет, Хабр! Меня зовут Дмитрий, я работаю ведущим разработчиком в Lenta tech («Группа Лента»). В этой статье я разберу архитектуру решения, где технические инструменты — наследование классов и абстрактные типы данных — работают на конкретные бизнес-цели. Я поделюсь нашими принципами по созданию гибкого ядра, способного за считанные дни подключать новых потребителей без риска для стабильности системы.

    habr.com/ru/companies/lentatec

    #SAP #ABAP #Архитектура_ИТсистем #Импортозамещение #ООП #Интеграция_данных #ретейл #lowcode #ttm #hr_tech

  5. Чистая архитектура на практике: перестаём ломать сервис при каждом релизе

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

    habr.com/ru/articles/1034758/

    #clean_architecture #clean_code #architecture #программирование #проектирование_систем #шаблоны_проектирования #ооп #hexagonal_architecture #grasp #solid

  6. Чистая архитектура на практике: перестаём ломать сервис при каждом релизе

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

    habr.com/ru/articles/1034758/

    #clean_architecture #clean_code #architecture #программирование #проектирование_систем #шаблоны_проектирования #ооп #hexagonal_architecture #grasp #solid

  7. Чистая архитектура на практике: перестаём ломать сервис при каждом релизе

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

    habr.com/ru/articles/1034758/

    #clean_architecture #clean_code #architecture #программирование #проектирование_систем #шаблоны_проектирования #ооп #hexagonal_architecture #grasp #solid

  8. Чистая архитектура на практике: перестаём ломать сервис при каждом релизе

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

    habr.com/ru/articles/1034758/

    #clean_architecture #clean_code #architecture #программирование #проектирование_систем #шаблоны_проектирования #ооп #hexagonal_architecture #grasp #solid

  9. Переопределение классов ядра Joomla с помощью плагина на примере MVCFactory

    Разработчики сайтов, веб-мастера, рассматривая Joomla как CMS, чаще всего используют компоненты ядра такими, какие они есть. Но компоненты ядра, обеспечивающие CRUD-ы в Joomla, следует рассматривать ещё и как примеры использования Joomla в качестве фреймворка. Иногда реалии проекта таковы, что требуется внести изменения именно в логику классов ядра Joomla. Я покажу это на нескольких примерах: как исхитрялись раньше и какие возможности появились в современных версиях Joomla. Сразу оговорюсь: речь не о том, чтобы править файлы ядра. Это плохая идея почти всегда. При обновлении Joomla такие изменения будут потеряны, а сопровождать их потом придётся вручную. Речь о другом: как изменить точку создания MVC-классов компонента через плагин и DI-контейнер, не залезая в core-файлы. Ну и приятный бонус - Joomla-археология и немного красивого и ужасного треша из практики 😎

    habr.com/ru/articles/1033646/

    #joomla #joomla_6 #mvcfactory #mvc #override #декоратор #ооп

  10. Создаем Java обертку для C++ класса в Android приложении, а также реализуем обратные вызовы из нэйтива

    Кратко расскажу о себе и о том, зачем возникла необходимость в подобном. Я более десяти лет пишу приложения под Android, около 5 лет под IOS, и сейчас переношу свои наработки под десктопы. Приложения мои предназначены для сисадминов, это SSH клиент, сетевые сканеры и тд. В общем, самое сложное - не сам интерфейс, а то, что под капотом. Когда я лишь начинал, я думал, что остановлюсь на платформе Android и стал пилить все на Java. Но затем осознал свою ошибку и исправил ее. На данный момент все мои приложения состоят из двух частей: общего для всех систем ядра на С++ и платформозависимого интерфейса, написанного на Java/Swift/C++ в зависимости от системы. Оговорюсь сразу, эта статья будет лишь своего рода вступлением. Я покажу, как работать с объектно-ориентированным кодом на C++ в Java оболочке (в JNI нам доступен экспорт С функций). Инициализировать объект, делать из него вызовы, удалять, при этом имея аналогичный класс в оболочке, будто бы наш код был написан на Java. Задача эта не слишком сложная, но прежде чем опытные прогеры закрыли эту статью, я оговорюсь, что в следующей части мы уже будем работать с каллбэками - вызовами Java листенеров из нашего С++ кода, а вот это уже задача совсем нетривиальная, требующая понимания работы JNI и Dalvik. Но обо всем по порядку. Итак, у нас есть некий CPP класс и Java оболочка. Через JNI мы можем вызывать только С-функции, то есть не объектный код. Так как же нам работать с ООП? Главная проблема - не столько вызовы, сколько хранение адреса объекта нативного класса. Лично для себя я нашел решение - хранить его в Java классе, как long. То есть, у нас получается приблизительно такой код:

    habr.com/ru/articles/1017486/

    #Java #C++ #ООП #Dalvik #JNI #android

  11. Изучаем ООП на C++! В выпуске — объектная модель, инкапсуляция и жизненный цикл объектов с понятными примерами. Отлично для студентов и практиков, кто хочет укрепить базу и писать код грамотнее. Загляните и прокачайте навыки! #cpp #Cplusplus #ООП #OOP #Инкапсуляция #ОбъектнаяМодель #Программирование #Russian
    video.lernado-base.ru/videos/w

  12. Агглютинативный код: почему будущее IT требует смены лингвистического фундамента

    Каждые несколько лет IT-индустрия переживает очередной ренессанс. Мы пишем новые языки программирования - Rust для безопасной работы с памятью, Go для идеальной конкурентности, Swift для экосистемности. Мы плодим новые фреймворки, стандарты и сетевые протоколы, пытаясь превзойти существующие ограничения. Но в погоне за оптимизацией мы не замечаем главного: мы продолжаем строить новые "небоскребы" на старом, потрескавшемся логическом фундаменте. И этот фундамент - это не кремний и не машинный код. Это естественный человеческий язык, на котором думают создатели этих IT-технологий. Проблема современного "зоопарка" технологий, усложнения синтаксиса и бесконечных архитектурных компромиссов кроется в том, что мы перетащили баги человеческой речи в парадигмы программирования. Не понимая, что этот лингвистический фундамент и есть наше главное ограничение.

    habr.com/ru/articles/1002926/

    #архитектура_систем #парадигмы_программирования #ооп #system_design #лингвистика #алгоритмы #агглютинативные_языки #qazna #orda

  13. Связывание абстрактных классов со свойствами в python

    В данной статье хочу поделиться своим опытом по абстрактным классам. Думаю это будет полезно как разработчикам, только начинающим свой путь, так и уже имеющим опыт. В материале можно посмотреть, как изящно связать свойства и абстрактные классы с реализацией принципа DRY . Для начал кратко пробежимся по определениями и терминам, и далее ответим на вопросы, которые могут логично вытекать из этих определений. Абстрактные классы - это базовые классы, определяющие каркас с методами, обязательными для реализации в наследниках и служащими для создания интерфейсов, однако сами экземпляры таких классов создать нельзя. Абстрактные методы - методы с декоратором @abstractmethod, которые обязаны быть реализованы в дочерних классах. Абстрактный класс может содержать как обычные, так и абстрактные методы. Свойство - реализуется через декораторы @property (для чтения) и @<name>.setter (для изменения и валидации) обеспечивая инкапсуляцию, делая API удобным, при этом позволяя менять внутреннюю реализацию без изменения внешнего кода.

    habr.com/ru/articles/1002538/

    #Абстрактный_класс #свойство #python #property #setter #ООП #dry #наследование_в_python #абстрактные_классы #валидация_данных

  14. [Перевод] Энди Хант «Говори, а не спрашивай»

    В своем кратком тексте 1998 года Энди Хант, отталкиваясь от закона Деметры и принципа разделения команд и запросов, просто и понятно излагает один из важных принципов объектно-ориентированного проектирования — «говори, а не спрашивай». Этот принцип учит делегировать объектам ответственность за их данные, что позволяет создавать слабосвязанные и устойчивые к изменениям системы.

    habr.com/ru/articles/990790/

    #история_it #ооп #проектирование_и_рефакторинг #java #eiffel

  15. [Перевод] Стив Фриман, Нэт Прайс, Тим Маккиннон, Джо Уорнc «Мокируем роли, а не объекты»

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

    habr.com/ru/articles/988518/

    #история_it #ооп #тестирование #java #mock #tdd

  16. Эволюция плеера RUTUBE: от монолита к гибким модулям

    Принимая архитектурные решения, часто так или иначе приходится идти на компромисс: между качеством и скоростью разработки, сложностью реализации и удобством поддержки, быстротой решения бизнес-задачи и гибкостью. Со временем небольшие уступки накапливаются и проект покрывается легаси. Даже если исправно разгребать техдолг, то в любом случае на достаточно длинной дистанции решения и технологии устареют, и станет невозможно обойтись «генеральной уборкой» — потребуется смена архитектуры. В статье расскажу, как мы столкнулись с неизбежной необходимостью переделки веб-плеера RUTUBE — сервиса, который существует с 2006 года, пережил несколько смен команд и парадигм разработки и при этом достаточно большой и высоконагруженный, чтобы нельзя было «просто так взять и всё переписать».

    habr.com/ru/companies/habr_rut

    #rutube #mobx #ооп #видео #hls #ui #dependency_injection

  17. ООП в Python на пальцах: Пишем свою текстовую RPG с нуля

    Как объяснить новичку разницу между Классом и Объектом так, чтобы он запомнил это навсегда? Представить, что Класс — это чертеж робота, а Объект — сам робот. В этой статье я раскладываю принципы ООП (Объектно-Ориентированного Программирования) на понятные атомы. Никакой сухой академической теории — только живой код на Python. Мы пройдем путь от простых переменных до масштабируемой системы классов на примере создания RPG-игры. В конце вас ждет домашнее задание для закрепления материала.

    habr.com/ru/articles/969088/

    #ооп #ооп_python #python #python3 #python_class #python_для_начинающих

  18. Паттерны ООП в 10 минутах от вас… Поведенческие шаблоны с примерами на Java

    Ночь. Курсор мигает, как маяк в тумане. Логи шепчут о том, что в коде — своя улица, свои правила и кодекс общения. Объекты — не безмолвные элементы системы. У каждого свой характер, привычки и слабости. Один щёлчок и поведение меняется: кто-то отдаёт приказы, кто-то внимательно прислушивается, а кто-то терпеливо ждёт сигнала. Эта статья — карта такого города. Всем привет! Меня зовут Бромбин Андрей и сегодня разберёмся в поведенческих паттернах ООП. Короткие определения, идеи через ясные метафоры и рабочие примеры на Java. Всё это для того, чтобы система не трещала по швам, а решения были ясными, предсказуемыми и поддерживаемыми. Шаблонизироваться

    habr.com/ru/companies/ruvds/ar

    #java #ruvds_статьи #ооп #паттерны_проектирования #программирование #kotlin #разработка_программного_обеспечения #gof #банда_четырёх #бэкенд

  19. Паттерны ООП c примерами на Java: порождающие шаблоны

    Привет! Меня зовут Бромбин Андрей. В этой статье мы рассмотрим порождающие паттерны ООП. Обсудим, что такое хороший дизайн и почему не стоит начинать всё с нуля каждый раз, когда перед нами новая задача. Также разберёмся, где эти паттерны действительно помогают и какую пользу несут — всё это с наглядными примерами на Java, приближёнными к реальным. Всем нам хочется делать больше и тратить на это меньше времени. Браться за новые задачи смелее и выполнять их эффективнее. В этом нам и помогают паттерны: они дают рабочую схему для типовых кейсов, чтобы не выдумывать решение каждый раз с чистого листа. Шаблонизироваться

    habr.com/ru/companies/ruvds/ar

    #java #ruvds_статьи #паттерны_проектирования #gof #kotlin #javaразработка #ооп #проектирование_и_рефакторинг #проектирование_систем

  20. [Перевод] Доктор Алан Кей о смысле «объектно-ориентированного программирования»

    Оригинал В 2003 году Алан Кей, признанный автор термина «объектно-ориентированное программирование», ответил на вопросы исследователя Штефана Рама. В этом письме он раскрывает первоначальный замысел ООП, который значительно отличается от того, чему большинство из нас учат сегодня. Публикуем перевод этого исторического документа.

    habr.com/ru/articles/946868/

    #ооп #smalltalk #simula #история_it

  21. Внедрение зависимостей (Dependency Injection DI), SOLID, ошибки выделения абстракций и чуть-чуть психологии

    Мне тут попалась идеальная статья про DI в который нашелся очень интересный пример для разбора. Есть фундаментальные основы, которые почему то никто не хочет сформулировать, а начинающим разработчикам, которые впервые сталкиваются с концепцией DI, в первую очередь надо бы рассказать эти фундаментальные основы, но почему то нет желающих это сделать и у меня даже есть предположения, почему это не получается, я попробую их как-то выразить в том числе. Я знаю что искать ошибки в статьях начинающих на Хабре это плохой тон, и я вряд ли выйду в плюс с такой статьей, но как говорится: Платон мне друг, но истина дороже. В предыдущей статье мы выяснили как создать два класса (Хост и Енкодер, класс А и класс В) один из которых (А) не может работать без использования функций другого класса (В, а может, и без данных из этого класса В не может работать), но при этом совершенно не зависит от этого класса В! То есть класс А может запросто работать с любым другим классом (C, D, … ) вместо класса В, при некотором условии изложенном в предыдущей статье. По моему, та статья может быть хорошей разминкой для понимания концепции Внедрения Зависимостей. И, определенно, эта статья может считаться продолжением темы практической архитектуры ПО.

    habr.com/ru/articles/938512/

    #dependency_injection #dependencies #di #ооп #архитектура #архитектура_приложений #космотекст

  22. Хватит страдать: Выбросьте ООП и ECS. Есть путь проще

    Десятилетиями нам рассказывают, что есть только два пути: громоздкие иерархии ООП или стерильная бюрократия ECS. Нас заставили поверить в то, что создание игр — это выбор между анархией и диктатурой. Это ложь. Оба этих пути — ненужные усложнения. Есть прямой и эффективный способ, который мы променяли на модные, но непрактичные примочки. Эта статья — о том, как вернуться к здравому смыслу.

    habr.com/ru/articles/935552/

    #ООП #ecs #entitycomponentsystem #entitycomponent #kissпринцип #kiss #архитектура #архитектура_системы #паттерны_проектирования

  23. Java и ООП: путешествие туда и обратно

    Недавно на подкасте Spring АйО мы обсуждали новые свитчи в Джаве — с паттерн‑матчингом и деструктуризацией. Я тогда ещё выразил мнение, что всё это неправославно, по‑зумерски и отход от принципов ООП. Не от инкапсуляции, полиморфизма и наследования, а вообще от подхода. Новые свитчи будут провоцировать разработчиков писать код по‑новому, а не так, как завещали нам наши далёкие предки. С нарушением традиций, норм и устоев. Как учит Кейси Муратори, если вы понимаете о ком я. Но какие они вообще были эти устои? Каким было ООП, когда всё только началось и чем это отличается от свитчей, до которых мы в конце концов докатились?

    habr.com/ru/companies/spring_a

    #java #oop #c++ #simula #история_it #ооп #Кейси_Муратори

  24. GIMP Script-Fu ООП. Обобщённые функции

    Библиотека функций к Script-fu Готовя эту статью я интересовался, что там в других языках, что там за "дженерики"? Все языки разбирать не буду, но скажу одно: Generic function использующиеся в ЛИСПе и современые дженерики различаются как НЕБО и ЗЕМЛЯ. За дженерики в современных языках в основном ратуют строго типизированные языки, всем понятно, что писать кучу однотипного кода просто глупо. Не скажу точно, кто стоит у истоков современных "дженериков", но пожалуй одним из ранних их проявлений это ШАБЛОНЫ в С++. Почему все остальные языки типа явы и ей подобных, решили назвать свои шаблоны дженериками мне не понятно. (у меня есть язвительное замечание, что хотели как в лиспе, но получилось как всегда). Но дело в том что в ПОДОБНЫХ дженериках языки с динамической типизацией просто не нуждаются. Функция list работает с любыми типами данных, ШАБЛОНЫ не нужны! А в С++ именно контейнеры стали основной побудительной силой использования дженериков, это просто хранилища которые хранят значения, если Си мы можем обойтись (void *) и потом привести тип к нужному, то С++ решил пойти по типобезопасному пути, ну немного "потолстев" в коде. Ну а что же там у современных его последователей? Рассмотрим Go. Пытаясь избавиться от типа, вводят обобщённую переменную T, но понимая, что сделать то с ней ничего нельзя(кроме как хранить и выдать обратно), пытаются как то её ТИПИЗИРОВАТЬ!!! Вводят КОНТРАКТ! А что делать когда в функции надо будет делать сложение? Надо будет к этому контракту добавить ещё контракт аддитиве? а умножение? или ещё что то? в любом случае код функции БЕДЕН! именно в силу того что мы не знаем что может прилететь нам в типе Т. Я вам расскжу что такое НАСТОЯЩИЕ ДЖЕНЕРИКИ.

    habr.com/ru/articles/933466/

    #ооп #generics #generic #lisp #scheme #gimp #scriptfu

  25. SOLID: Не панацея, а инструмент. Осваиваем на практике

    Запутались в SOLID? Устали от сухой теории? Понимаем SOLID на практике! Простые объяснения, реальные примеры кода и самое главное — интерактивные задания , чтобы закрепить каждый принцип! Узнайте, когда SOLID — ваша "конфетка от головной боли". Понять SOLID

    habr.com/ru/articles/933386/

    #Принципы_SOLID #Практические_задания #Для_начинающих #ООП #Изучение_программирования #Как_использовать_SOLID #SOLID #srp

  26. Когда State уже не спасает: путь к Statechart

    В мире разработки программного обеспечения управление состоянием объекта - одна из фундаментальных задач. Когда поведение объекта должно меняться в зависимости от его внутреннего состояния, разработчики часто обращаются к паттерну State . Однако здесь и возникает путаница: его нередко отождествляют с более общей концепцией — State Machine (Конечный автомат), а то и вовсе не видят разницы. Погрузимся в мир управления состояниями — от простого к сложному!

    habr.com/ru/articles/931962/

    #state #statemachine #java #architecture #oop #oop_patterns #ооп #архитектура

  27. Про архитектуру приложений для тех кому мало Чистой архитектуры

    Помню, когда я был джуном и даже миддлом, меня очень волновал вопрос: как же должна выглядеть структура приложения по умным книжкам и всяким бест-практисам. На тот момент я уже повидал разные варианты архитектур, и все они выглядели корявыми, нелогичными, возникшими спонтанно из чьих-то костылей. Лет пять назад я обнаружил для себя Чистую архитектуру Дяди Боба и на некоторое время успокоился, пока поток новых источников постепенно не начал менять мое отношение и к этой книге. Но, если вы решили для себя, что Чистая архитектура - это ваш окончательный выбор, то я точно не буду вас отговаривать, потому что, на мой взгляд, это однозначно лучше, чем, наверное, 90% того, что вам встретится на рынке. Впрочем, эта статья для тех, кому этого не достаточно: для тех, кто хочет глубже понимать эволюцию мысли в области дизайна приложений, основные вызовы и идеи. Раньше мы в 3 частях [ 1 , 2 , 3 ] пробежались по основным идеям архитектуры систем. Поэтому, если вы ищете информацию по System Design, микросервисам и топологии команд, то вам туда. Эта же статья про архитектуру внутри кодовой базы: она посвящена концепциям программирования, влияющим на структуру приложения, поэтому описывает не только архитектурные подходы, но и иные идеи, оставляющие на дизайне свой отпечаток.

    habr.com/ru/articles/931866/

    #ООП #функциональное_программирование #рефакторинг #гексагональная_архитектура #шаблоны_проектирования #структурный_дизайн #yagni #domaindriven_design

  28. SOLID, DRY, KISS, YAGNI и др. принципы разработки, пугающие новичка в IT

    Разработка — это не только про код, но и про подходы. В этой статье я постарался собрать и объяснить ключевые принципы проектирования, которые часто упоминают в собеседованиях, в статьях на Medium и в комментариях на GitHub, такие, как SOLID, DRY, KISS, YAGNI, APO, BDUF, бритва Оккама. 📌 Что внутри: 1. Понятные объяснения без перегрузки теорией 2. Примеры на Java (но подойдут и другим разработчикам) 3. Иллюстрации и метафоры, чтобы не уснуть Будет полезно как новичкам, которые только слышали про SOLID и др. подходы в проектировании, так и разработчикам, которые хотят освежить знания или взглянуть на принципы под другим углом.

    habr.com/ru/articles/925208/

    #ооп #принципы_разработки #solid #dry #kiss #yagni #apo #bduf #бритва_оккама #best_practices

  29. Дескрипторы Python. Подробное руководство

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

    habr.com/ru/articles/914650/

    #дескриптор #дескрипторы #descriptor #descriptors #python #class #ооп #ооп_python

  30. Гайд на полиморфизм. Основные идеи

    Полиморфизм, сколько в этом слове красивого и даже таинственного. Происходит от греческого πολύμορφος что означает — многообразный. В программировании это понятие встречается часто и обыденно для понимания большинством программистов. Но так ли это на самом деле?

    habr.com/ru/articles/910194/

    #полиморфизм #ооп #polymorphism #функциональное_программирование #rust #c# #java #typescript #kotlin #go

  31. Разбираем архитектуру. Часть 1. Чистая архитектура и её корни: история и взаимосвязи

    Предисловие Цель этой статьи - объединить и кратко изложить все базовые архитектурные подходы: их терминологию, концепции и отличительные черты. Собрать всё воедино, чтобы можно было относительно быстро вникнуть в основы. Я решил написать серию статей, посвящённых различным аспектам проектирования программных систем, но первоначальной идеей было показать архитектурное решение моего pet-проекта на FastAPI — пример реализации «чистой архитектуры» с использованием современного стека: Python3.13, FastAPI, Uvicorn, Nginx, PostgreSQL, Alembic, Celery, Redis, Pytest, Filebeat, Logstash, Elasticsearch, Kibana, Prometheus, Grafana, Docker и Docker Compose. Однако по мере проработки деталей стало очевидно: чтобы обсуждать структуру приложения предметно и аргументированно, необходимо сначала заложить общую теоретическую основу, чтобы читатель понимал, о чем речь. Так родилась идея вынести базовые концепции архитектуры и проектирования в отдельную публикацию — не перегружать материал сразу всем, а построить серию объёмных, но логично связанных статей.

    habr.com/ru/articles/905148/

    #чистая_архитектура #чистый_код #ооп #проектирование_систем #терминология #шаблоны_проектирования #луковичная_архитектура #гексагональная_архитектура #solid #grasp

  32. [Перевод] Линус Торвальдс: Критика C++ — Комплексный анализ

    Линус Торвальдс, создатель (и великодушный диктатор) Linux, всегда с особой критикой относился к C++, объясняя почему он отвергает его в разработке ядра Linux. Но он не просто резко высказывается против использования C++, а приводит ряд аргументов, которые мы с вами сегодня и рассмотрим.

    habr.com/ru/companies/otus/art

    #c++ #linux #Линус_Торвальдс #ядро_Linux #исключения_в_c++ #RAII #управление_памятью #ооп #абстракции_в_программировании

  33. Контекст и парадигмы программирования

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

    habr.com/ru/articles/888364/

    #ооп #ооп_программирование #net #net8 #python #контекст #сложность

  34. Контекст и парадигмы программирования

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

    habr.com/ru/articles/888364/

    #ооп #ооп_программирование #net #net8 #python #контекст #сложность

  35. Вот здесь точно нужен рефакторинг, есть идеи?

    Бывают пет-проекты, а у нас получился проект с наработками, которые вроде бы могут быть полезны например студентам технических специальностей и просто всем кому интересно поразбираться с возможностями визуализации на C# + WPF, например, или с системой избыточного кодирования. Мы со студентами сделали приложение для анализа характеристик LDPC кодов изначально на Java (Java код тоже присутствует в репозитории) потом я переписал его в виде проекта C# + WPF, чтобы добавить возможность конфигурации статистических экспериментов через визуальный интерфейс, а главное чтобы иметь возможность визуализации результатов экспериментов в виде графиков (обычных, в X, Y осях). Я как раз для работы сделал библиотеку для рисования обычных математических графиков по массивам значений с возможностью масштабирования области просмотра мышкой. Думаю студентам любых технических направлений может пригодиться такая библиотека при том, что весь ее достаточно компактный исходный код (5-7 файлов) локализован в проекте и доступен как для изучения так и для любых изменений и доработок. Под катом ссылка на Гит-репозиторий с исходным кодом и обзор реализованной функциональности со скриншотами.

    habr.com/ru/articles/846204/

    #WPF #ldpc #c# #кодирование #рефакторинг #ооп #java #визуализация #распределение_гаусса

  36. Основы чистого кода на Python (PEP8, SOLID, ООП) ::: часть 1

    Когда вы уже написали несколько своих небольших пет-проектов, вы начинаете понимать что чистый код, архитектура и другие паттерны программирования начинают иметь смысл. В масштабируемых, командный или коммерческих проектах это несет особую ценность. Изучив эти принципы, новички получат представление о построении надежных, гибких и легко тестируемых приложений, что позволит им сохранить ясность кодовой базы и возможность ее сопровождения по мере роста их проектов. В этой статье мы разберем: что такое PEP8, что такое SOLID и какие есть правила написания чистого кода. А во второй части мы разберем что такое poetry, тесты и методологии разработки.

    habr.com/ru/articles/836678/

    #python #clean_code #clean_architecture #pep8 #SOLID #DRY #KISS #unixway #чистый_код #ООП

  37. Как читать текстовые файлы в Python?

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

    habr.com/ru/articles/835216/

    #python #чтение_файлов #работа_с_файлами #чтение_текста #программирование_для_начинающих #программирование_на_python #основы_python #ооп #ооп_python #ооп_программирование

  38. Как читать текстовые файлы в Python?

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

    habr.com/ru/articles/835216/

    #python #чтение_файлов #работа_с_файлами #чтение_текста #программирование_для_начинающих #программирование_на_python #основы_python #ооп #ооп_python #ооп_программирование

  39. Как читать текстовые файлы в Python?

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

    habr.com/ru/articles/835216/

    #python #чтение_файлов #работа_с_файлами #чтение_текста #программирование_для_начинающих #программирование_на_python #основы_python #ооп #ооп_python #ооп_программирование

  40. Python — Эволюция создания объектов(первая часть)

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

    habr.com/ru/articles/815305/

    #python #ооп #factory #factory_method #фабрика #фабричный_метод

  41. Рецепты «приготовления» Hibernate, или решаем 5 проблем работы с фреймворком

    Hibernate — очень мощный и функциональный ORM (Object-Relational Mapping) фреймворк. Он связывает базы данных с помощью объектно-ориентированных языков программирования. Однако многие, начиная с ним работать, натыкаются на проблемы производительности или отсутствия нужной функциональности. Многие из этих проблем появляются просто из-за того, что разработчики не умеют его «готовить». В статье делимся рецептами работы с Hibernate и Spring Data JPA: они помогут решить многие проблемы, возникающими при использовании фреймворка.

    habr.com/ru/companies/magnit/a

    #java #hibernate #spring_data_jpa #orm #magnit_tech #базы_данных #ооп

  42. Продвинутое использование форм в Django (на примере Bootstrap и crispy)

    В этой статье поговорим о существующих подходах к рендерингу веб-форм в Django. Обсудим подходы с использованием стандартных средств Django, а также применим сторонние средства для продвинутого управления рендерингом форм на примере пакета django-crispy-forms и фронтенд библиотеки bootstrap 5.

    habr.com/ru/articles/811635/

    #django #python #crispy #bootstrap #forms #serverside #ООП #django_templates #DRY

  43. Введение в коллекции Java

    Собственно говоря, зачем эта статья и для кого? Для тех, кто только начинают свой путь в изучении Java. В этой статье я не буду сильно углубляться в детали каждой коллекции в отдельности, ведь чтобы начать ими пользоваться достаточно хотя бы на базовом уровне понять, что это такое и с чем это «едят».

    habr.com/ru/articles/794178/

    #Java #ООП #collections #коллекции #arraylist #linkedlist