#ооп — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #ооп, aggregated by home.social.
-
Объектно-ориентированное программирование: разбор парадигмы, её силы и ограничений
Объектно-ориентированное программирование (ООП) уже более трёх десятилетий остаётся основой для построения сложных программных систем. Несмотря на рост функционального подхода и отказ от чистого ООП в ряде ниш, именно объекты и классы лежат в фундаменте...
#DST #DSTGlobal #ДСТ #ДСТГлобал #программирование #парадигма #ООП #код #SemanticDB #LOGOSk #LLM #Kotlin #Python #CICD
-
Объектно-ориентированное программирование: разбор парадигмы, её силы и ограничений
Объектно-ориентированное программирование (ООП) уже более трёх десятилетий остаётся основой для построения сложных программных систем. Несмотря на рост функционального подхода и отказ от чистого ООП в ряде ниш, именно объекты и классы лежат в фундаменте...
#DST #DSTGlobal #ДСТ #ДСТГлобал #программирование #парадигма #ООП #код #SemanticDB #LOGOSk #LLM #Kotlin #Python #CICD
-
[Перевод] Грегор Кизалес и др. «Аспектно-ориентированное программирование»
Идеи аспектно-ориентированного программирования до сих пор широко используются в современных языках и фреймворках — достаточно вспомнить их роль в экосистеме Spring. Однако при всей практической востребованности сама парадигма остается как будто в тени. Чтобы немного это исправить, мы публикуем перевод текста Грегора Кизалеса и его коллег из Xerox PARC — первого полноценного манифеста АОП, представленного на конференции ECOOP ’97 и заложившего основы для дальнейших исследований в этой области.
https://habr.com/ru/articles/1058826/
#история_it #анализ_и_проектирование_систем #ооп #аоп #lisp #java
-
Когда может пригодиться экзотика в ООП: миксины/трейты/аспекты
Когда может пригодиться экзотика. Я много раз обращался к использованию множественного наследования в языках программирования и платформах. Но как правило это обращение было больше теоретическим. Я не видел в его применении значительных преимуществ, способных превзойти альтернативные подходы, с учётом рисков его применения. Но в это раз случай представился. И я покажу этот пример.
-
[Перевод] Барбара Лисков «Абстракция данных и иерархия»
Наверное, каждый программист, работавший с объектно-ориентированными языками, хотя бы раз слышал о принципе подстановки Лисков. Однако мало кто знает, о чем именно Лисков писала в своей статье и как она сама формулировала этот принцип. Мы перевели ее доклад, прозвучавший на OOPSLA'87, чтобы дать каждому возможность обратиться к первоисточнику. Прочитав этот текст, вы увидите, насколько более сложным и неочевидным было отношение Лисков к теме наследования.
https://habr.com/ru/articles/1051934/
#история_it #ооп #наследование #smalltalk #анализ_и_проектирование_систем #solid
-
Как я перешёл с React на Angular и не пожалел
Когда я говорю, что перешёл с React на Angular, на меня смотрят примерно так же, как если бы я сказал, что добровольно переехал из Амстердама куда-нибудь в Челябинск. С непониманием и вопросом «а зачем». Если открыть типичный канал про разработку, там будет React, Next.js, React Native, снова React. Джуны учат его как первый фреймворк, мидлы обычно выносят в резюме жирным шрифтом. Angular воспринимается как что-то невероятно сложное, для мега-приложений масштаба «строим город на Луне» и бэкендеров, которым не повезло. Я тоже так думал. У меня за плечами был React, я понимал компонентный подход, умел работать с хуками, знал экосистему. И тут Angular. Готовых инструкций, как перейти с React на Angular, в сети практически нет. Зато есть тысячи статей про обратный путь. Пришлось разбираться самому, и вот что из этого вышло.
https://habr.com/ru/companies/centicore_group/articles/1048598/
#angular #react #фронтенд #TypeScript #RxJS #nx #ооп #архитектура_фронтенда #сравнение_фреймворков #личный_опыт
-
Как я перешёл с React на Angular и не пожалел
Когда я говорю, что перешёл с React на Angular, на меня смотрят примерно так же, как если бы я сказал, что добровольно переехал из Амстердама куда-нибудь в Челябинск. С непониманием и вопросом «а зачем». Если открыть типичный канал про разработку, там будет React, Next.js, React Native, снова React. Джуны учат его как первый фреймворк, мидлы обычно выносят в резюме жирным шрифтом. Angular воспринимается как что-то невероятно сложное, для мега-приложений масштаба «строим город на Луне» и бэкендеров, которым не повезло. Я тоже так думал. У меня за плечами был React, я понимал компонентный подход, умел работать с хуками, знал экосистему. И тут Angular. Готовых инструкций, как перейти с React на Angular, в сети практически нет. Зато есть тысячи статей про обратный путь. Пришлось разбираться самому, и вот что из этого вышло.
https://habr.com/ru/companies/centicore_group/articles/1048598/
#angular #react #фронтенд #TypeScript #RxJS #nx #ооп #архитектура_фронтенда #сравнение_фреймворков #личный_опыт
-
Как я перешёл с React на Angular и не пожалел
Когда я говорю, что перешёл с React на Angular, на меня смотрят примерно так же, как если бы я сказал, что добровольно переехал из Амстердама куда-нибудь в Челябинск. С непониманием и вопросом «а зачем». Если открыть типичный канал про разработку, там будет React, Next.js, React Native, снова React. Джуны учат его как первый фреймворк, мидлы обычно выносят в резюме жирным шрифтом. Angular воспринимается как что-то невероятно сложное, для мега-приложений масштаба «строим город на Луне» и бэкендеров, которым не повезло. Я тоже так думал. У меня за плечами был React, я понимал компонентный подход, умел работать с хуками, знал экосистему. И тут Angular. Готовых инструкций, как перейти с React на Angular, в сети практически нет. Зато есть тысячи статей про обратный путь. Пришлось разбираться самому, и вот что из этого вышло.
https://habr.com/ru/companies/centicore_group/articles/1048598/
#angular #react #фронтенд #TypeScript #RxJS #nx #ооп #архитектура_фронтенда #сравнение_фреймворков #личный_опыт
-
[Перевод] Алан Снайдер «Инкапсуляция и наследование в объектно-ориентированных языках программирования»
Инкапсуляцию и наследование часто преподносят как две неотъемлемые опоры объектно-ориентированного программирования, однако на деле между ними существует глубокое внутреннее противоречие. Статья Алана Снайдера, опубликованная по итогам его выступления на OOPSLA’86, стала одним из первых программных текстов, вскрывших эту проблему на уровне языковых конструкций, и показала, как неаккуратно реализованное наследование способно разрушить инкапсуляцию, а вместе с ней — преимущества модульного проектирования. Работа во многом предопределила дальнейшие дискуссии о хрупком базовом классе, роли контрактов между классами и их потомками и о том, каким должен быть внешний интерфейс класса в условиях наследования.
https://habr.com/ru/articles/1047584/
#история_it #ооп #проектирование #инкапсуляция #наследование #smalltalk #lisp
-
DAO vs Repository и ORM: где заканчивается архитектура и начинается хаос
Всем привет! Я Дмитрий Милов, Python-разработчик компании МУЛЬТИФАКТОР в команде продукта MULTIDIRECTORY, мы разрабатываем собственную службу каталогов. Как это обычно бывает в процессе развития продукта, код постепенно перестает помещаться в привычные рамки. Мы начали обсуждать, какое архитектурное решение лучше подходит нашей системе. Спор об определениях затянулся: у каждого были аргументы, почему одно решение лучше другого. Почему продолжается путаница в концепциях, которые давно описаны и формализованы?
https://habr.com/ru/companies/multifactor/articles/1046664/
#multifactor #программирование #архитектура_приложений #ооп #python #orm #repository #dao #чистый_код #multidirectory
-
[Перевод] Ребекка Вирфс-Брок, Брайан Уилкерсон «Объектно-ориентированное проектирование: ответственностно-ориентированный подход»
В своей программной статье, опубликованной по итогам выступления на OOPSLA '89, Ребекка Вирфс-Брок и Брайан Уилкерсон излагают основы ответственностно-ориентированного подхода. Отталкиваясь от модели «клиент-сервер» и идеи контракта между объектами, авторы показывают, что концентрация на поведении и обязанностях, а не на структуре данных, позволяет максимально раскрыть потенциал инкапсуляции, делая систему более гибкой и устойчивой к изменениям.
https://habr.com/ru/articles/1046520/
#ооп #история_it #проектирование #проектирование_интерфейсов #проектирование_и_рефакторинг
-
DAO vs Repository и ORM: где заканчивается архитектура и начинается хаос
Всем привет! Я Дмитрий Милов, Python-разработчик компании МУЛЬТИФАКТОР в команде продукта MULTIDIRECTORY, мы разрабатываем собственную службу каталогов. Как это обычно бывает в процессе развития продукта, код постепенно перестает помещаться в привычные рамки. Мы начали обсуждать, какое архитектурное решение лучше подходит нашей системе. Спор об определениях затянулся: у каждого были аргументы, почему одно решение лучше другого. Почему продолжается путаница в концепциях, которые давно описаны и формализованы?
https://habr.com/ru/companies/multifactor/articles/1046377/
#multifactor #multidirectory #архитектура_приложений #ооп #python #orm #чистый_код #паттерны #repository #dao
-
DAO vs Repository и ORM: где заканчивается архитектура и начинается хаос
Всем привет! Я Дмитрий Милов, Python-разработчик компании МУЛЬТИФАКТОР в команде продукта MULTIDIRECTORY, мы разрабатываем собственную службу каталогов. Как это обычно бывает в процессе развития продукта, код постепенно перестает помещаться в привычные рамки. Мы начали обсуждать, какое архитектурное решение лучше подходит нашей системе. Спор об определениях затянулся: у каждого были аргументы, почему одно решение лучше другого. Почему продолжается путаница в концепциях, которые давно описаны и формализованы?
https://habr.com/ru/companies/multifactor/articles/1046377/
#multifactor #multidirectory #архитектура_приложений #ооп #python #orm #чистый_код #паттерны #repository #dao
-
DAO vs Repository и ORM: где заканчивается архитектура и начинается хаос
Всем привет! Я Дмитрий Милов, Python-разработчик компании МУЛЬТИФАКТОР в команде продукта MULTIDIRECTORY, мы разрабатываем собственную службу каталогов. Как это обычно бывает в процессе развития продукта, код постепенно перестает помещаться в привычные рамки. Мы начали обсуждать, какое архитектурное решение лучше подходит нашей системе. Спор об определениях затянулся: у каждого были аргументы, почему одно решение лучше другого. Почему продолжается путаница в концепциях, которые давно описаны и формализованы?
https://habr.com/ru/companies/multifactor/articles/1046377/
#multifactor #multidirectory #архитектура_приложений #ооп #python #orm #чистый_код #паттерны #repository #dao
-
SOLID в Python без воды
Открываешь чужой код на Python, а там — Java. Абстрактные базовые классы в местах, где хватило бы простой функции, фабрики фабрик и нагромождение паттернов, усложняющих чтение бизнес-логики. Знакомая картина? Многие разработчики механически переносят архитектурные привычки из строго типизированных языков в Python, создавая переусложненный неидиоматичный код. В этой статье мы возьмем классические правила SOLID и переведем их на язык динамической типизации (Pythonic way). Разберем на реальных примерах, где принципы спасают проект, а где слепое следование им скатывается в карго-культ.
https://habr.com/ru/articles/1045294/
#Python #SOLID #ООП #архитектура #рефакторинг #паттерны_проектирования #чистый_код #pythonic #duck_typing
-
Контекстный менеджер Python: пишем свой with и управляем ресурсами через ООП
Работа с внешними ресурсами — файлами, базами данных или сетевыми соединениями — требует строгой дисциплины. Забыли закрыть соединение? Приложение в итоге столкнется с утечками памяти или исчерпанным пулом коннектов. Чтобы не писать громоздкие и плохо читаемые конструкции try…finally, в Python используется оператор with. Однако многие разработчики применяют его исключительно как встроенный инструмент для функции open(), упуская огромный архитектурный потенциал этой конструкции.
https://habr.com/ru/articles/1044728/
#python #ооп #контекстные_менеджеры #context_manager #оператор_with #dunder_методы #управление_ресурсами #рефакторинг #python3 #чистота_кода
-
MobX или приправа реактивности для JS
Привет, Хабр! Меня зовут Сергей Волков, я фронтенд-разработчик в компании VK. Мы используем MobX для работы с реактивными значениями в веб-приложениях, поэтому я хочу познакомить вас с этим инструментом и показать, почему на него стоит обратить внимание. В этой статье я хочу поделиться своими мыслями о MobX - инструменте, который я искренне полюбил после многих лет разработки интерфейсов. Приятного чтения! :)
https://habr.com/ru/articles/1043240/
#mobx #react #reactjs #reactjs #frontendразработка #frontend #ооп #oop #oop_patterns #mvvm
-
Как проект на лето растянулся на полгода: Делаем свою светодиодную вывеску с управлением по Wi-Fi (ч.1)
Привет! Кто не любит прикольные интерьерные штуки? Я, например, всегда любил вид неоновых вывесок. В какой-то момент мне пришла в голову мысль: а почему бы не сделать свою собственную? Правда, не неоновую, а светодиодную. Да ещё и с кучей эффектов и управлением со смартфона. Так появилась идея для очередного «проекта на лето», реализация которого у меня растянулась на полгода. С виду простая задумка таила в себе кучу технических сложностей и мелочей, которые нельзя было упускать из виду. Добро пожаловать в невероятно интересную историю создания, которую я вам сейчас поведаю… Погрузиться в историю
https://habr.com/ru/articles/1042772/
#esp8266 #arduino #светодиодная_лента #светильники #программирование #электроника #diyпроекты #diy_или_сделай_сам #схемотехника #ооп
-
Первые отзывы на новинки о System Design
Привет, Хаброжители! Спешим поделится с вами первыми рецензиями на предзаказы: «System Design. Проектирование мобильных систем. Подготовка к сложному интервью» и «Object Oriented Design. Подготовка к сложному интервью».
https://habr.com/ru/companies/piter/articles/1037222/
#system_design #подготовка_к_собеседованию #техническое_собеседование #ood #проектирование_систем #предзаказ #ооп
-
Интеграционный хаб в SAP HR — строим гибкость в ритме трансформаций
Как с помощью Clean ABAP и Low-code ускорить выгрузки в 5 раз Привет, Хабр! Меня зовут Дмитрий, я работаю ведущим разработчиком в Lenta tech («Группа Лента»). В этой статье я разберу архитектуру решения, где технические инструменты — наследование классов и абстрактные типы данных — работают на конкретные бизнес-цели. Я поделюсь нашими принципами по созданию гибкого ядра, способного за считанные дни подключать новых потребителей без риска для стабильности системы.
https://habr.com/ru/companies/lentatech/articles/1032614/
#SAP #ABAP #Архитектура_ИТсистем #Импортозамещение #ООП #Интеграция_данных #ретейл #lowcode #ttm #hr_tech
-
Чистая архитектура на практике: перестаём ломать сервис при каждом релизе
У вас небольшой релиз. Вы меняете пару строк кода, выкатываете обновление - и через несколько минут сервис начинает отдавать странные ошибки. Баги появляются в местах, которые вы вообще не трогали. Знакомо? Обычно проблема не в конкретном изменении, а в архитектурной связанности системы: инфраструктурные детали начинают протекать в бизнес-логику, и зависимости между компонентами становятся слишком плотными. Разберём это на примерах. Примеры будут псевдореальные, иначе статья быстро превратится в книгу. Посмотрите на функцию загрузки инвойса:
https://habr.com/ru/articles/1034758/
#clean_architecture #clean_code #architecture #программирование #проектирование_систем #шаблоны_проектирования #ооп #hexagonal_architecture #grasp #solid
-
Чистая архитектура на практике: перестаём ломать сервис при каждом релизе
У вас небольшой релиз. Вы меняете пару строк кода, выкатываете обновление - и через несколько минут сервис начинает отдавать странные ошибки. Баги появляются в местах, которые вы вообще не трогали. Знакомо? Обычно проблема не в конкретном изменении, а в архитектурной связанности системы: инфраструктурные детали начинают протекать в бизнес-логику, и зависимости между компонентами становятся слишком плотными. Разберём это на примерах. Примеры будут псевдореальные, иначе статья быстро превратится в книгу. Посмотрите на функцию загрузки инвойса:
https://habr.com/ru/articles/1034758/
#clean_architecture #clean_code #architecture #программирование #проектирование_систем #шаблоны_проектирования #ооп #hexagonal_architecture #grasp #solid
-
Чистая архитектура на практике: перестаём ломать сервис при каждом релизе
У вас небольшой релиз. Вы меняете пару строк кода, выкатываете обновление - и через несколько минут сервис начинает отдавать странные ошибки. Баги появляются в местах, которые вы вообще не трогали. Знакомо? Обычно проблема не в конкретном изменении, а в архитектурной связанности системы: инфраструктурные детали начинают протекать в бизнес-логику, и зависимости между компонентами становятся слишком плотными. Разберём это на примерах. Примеры будут псевдореальные, иначе статья быстро превратится в книгу. Посмотрите на функцию загрузки инвойса:
https://habr.com/ru/articles/1034758/
#clean_architecture #clean_code #architecture #программирование #проектирование_систем #шаблоны_проектирования #ооп #hexagonal_architecture #grasp #solid
-
Переопределение классов ядра Joomla с помощью плагина на примере MVCFactory
Разработчики сайтов, веб-мастера, рассматривая Joomla как CMS, чаще всего используют компоненты ядра такими, какие они есть. Но компоненты ядра, обеспечивающие CRUD-ы в Joomla, следует рассматривать ещё и как примеры использования Joomla в качестве фреймворка. Иногда реалии проекта таковы, что требуется внести изменения именно в логику классов ядра Joomla. Я покажу это на нескольких примерах: как исхитрялись раньше и какие возможности появились в современных версиях Joomla. Сразу оговорюсь: речь не о том, чтобы править файлы ядра. Это плохая идея почти всегда. При обновлении Joomla такие изменения будут потеряны, а сопровождать их потом придётся вручную. Речь о другом: как изменить точку создания MVC-классов компонента через плагин и DI-контейнер, не залезая в core-файлы. Ну и приятный бонус - Joomla-археология и немного красивого и ужасного треша из практики 😎
https://habr.com/ru/articles/1033646/
#joomla #joomla_6 #mvcfactory #mvc #override #декоратор #ооп
-
Полный гайд по dunder-методам в Python (от новичка до профи)
В Python всё — объект. Но как язык понимает, что делать при сложении двух классов через +, вызове len() или обращении к несуществующему атрибуту? Вся магия скрыта под капотом dunder-методов. Мы собрали полный гайд для разработчиков любого уровня: от правильной инициализации и перегрузки операторов до создания собственных дескрипторов, контекстных менеджеров и жесткой оптимизации памяти через slots . Никакой воды, только практика, живые примеры и то, что реально спрашивают на собеседованиях.
https://habr.com/ru/articles/1033432/
#ython #ООП #dunderметоды #магические_методы #метапрограммирование #дескрипторы #итераторы #генераторы #контекстные_менеджеры #Python_3
-
Объекты и классы — дар божий или проклятие
Я давно вынашивал желание написать эту статью. И, наверное, мне бы стоило потратить некоторое время на то, чтобы написать её чуть более структурно и продуманно, но, пожалуй, я её в таком случае вообще не напишу, так что - статья будет ad hock, прям from the top of my mind. Начнём с того, что в обсуждениях объектного программирования бытуют несколько популярных мнений
https://habr.com/ru/articles/1025200/
#ооп #фп #структурное_программирование #спагеттикод #человек
-
Создаем Java обертку для C++ класса в Android приложении, а также реализуем обратные вызовы из нэйтива
Кратко расскажу о себе и о том, зачем возникла необходимость в подобном. Я более десяти лет пишу приложения под Android, около 5 лет под IOS, и сейчас переношу свои наработки под десктопы. Приложения мои предназначены для сисадминов, это SSH клиент, сетевые сканеры и тд. В общем, самое сложное - не сам интерфейс, а то, что под капотом. Когда я лишь начинал, я думал, что остановлюсь на платформе Android и стал пилить все на Java. Но затем осознал свою ошибку и исправил ее. На данный момент все мои приложения состоят из двух частей: общего для всех систем ядра на С++ и платформозависимого интерфейса, написанного на Java/Swift/C++ в зависимости от системы. Оговорюсь сразу, эта статья будет лишь своего рода вступлением. Я покажу, как работать с объектно-ориентированным кодом на C++ в Java оболочке (в JNI нам доступен экспорт С функций). Инициализировать объект, делать из него вызовы, удалять, при этом имея аналогичный класс в оболочке, будто бы наш код был написан на Java. Задача эта не слишком сложная, но прежде чем опытные прогеры закрыли эту статью, я оговорюсь, что в следующей части мы уже будем работать с каллбэками - вызовами Java листенеров из нашего С++ кода, а вот это уже задача совсем нетривиальная, требующая понимания работы JNI и Dalvik. Но обо всем по порядку. Итак, у нас есть некий CPP класс и Java оболочка. Через JNI мы можем вызывать только С-функции, то есть не объектный код. Так как же нам работать с ООП? Главная проблема - не столько вызовы, сколько хранение адреса объекта нативного класса. Лично для себя я нашел решение - хранить его в Java классе, как long. То есть, у нас получается приблизительно такой код:
-
Создаем Java обертку для C++ класса в Android приложении, а также реализуем обратные вызовы из нэйтива
Кратко расскажу о себе и о том, зачем возникла необходимость в подобном. Я более десяти лет пишу приложения под Android, около 5 лет под IOS, и сейчас переношу свои наработки под десктопы. Приложения мои предназначены для сисадминов, это SSH клиент, сетевые сканеры и тд. В общем, самое сложное - не сам интерфейс, а то, что под капотом. Когда я лишь начинал, я думал, что остановлюсь на платформе Android и стал пилить все на Java. Но затем осознал свою ошибку и исправил ее. На данный момент все мои приложения состоят из двух частей: общего для всех систем ядра на С++ и платформозависимого интерфейса, написанного на Java/Swift/C++ в зависимости от системы. Оговорюсь сразу, эта статья будет лишь своего рода вступлением. Я покажу, как работать с объектно-ориентированным кодом на C++ в Java оболочке (в JNI нам доступен экспорт С функций). Инициализировать объект, делать из него вызовы, удалять, при этом имея аналогичный класс в оболочке, будто бы наш код был написан на Java. Задача эта не слишком сложная, но прежде чем опытные прогеры закрыли эту статью, я оговорюсь, что в следующей части мы уже будем работать с каллбэками - вызовами Java листенеров из нашего С++ кода, а вот это уже задача совсем нетривиальная, требующая понимания работы JNI и Dalvik. Но обо всем по порядку. Итак, у нас есть некий CPP класс и Java оболочка. Через JNI мы можем вызывать только С-функции, то есть не объектный код. Так как же нам работать с ООП? Главная проблема - не столько вызовы, сколько хранение адреса объекта нативного класса. Лично для себя я нашел решение - хранить его в Java классе, как long. То есть, у нас получается приблизительно такой код:
-
Создаем Java обертку для C++ класса в Android приложении, а также реализуем обратные вызовы из нэйтива
Кратко расскажу о себе и о том, зачем возникла необходимость в подобном. Я более десяти лет пишу приложения под Android, около 5 лет под IOS, и сейчас переношу свои наработки под десктопы. Приложения мои предназначены для сисадминов, это SSH клиент, сетевые сканеры и тд. В общем, самое сложное - не сам интерфейс, а то, что под капотом. Когда я лишь начинал, я думал, что остановлюсь на платформе Android и стал пилить все на Java. Но затем осознал свою ошибку и исправил ее. На данный момент все мои приложения состоят из двух частей: общего для всех систем ядра на С++ и платформозависимого интерфейса, написанного на Java/Swift/C++ в зависимости от системы. Оговорюсь сразу, эта статья будет лишь своего рода вступлением. Я покажу, как работать с объектно-ориентированным кодом на C++ в Java оболочке (в JNI нам доступен экспорт С функций). Инициализировать объект, делать из него вызовы, удалять, при этом имея аналогичный класс в оболочке, будто бы наш код был написан на Java. Задача эта не слишком сложная, но прежде чем опытные прогеры закрыли эту статью, я оговорюсь, что в следующей части мы уже будем работать с каллбэками - вызовами Java листенеров из нашего С++ кода, а вот это уже задача совсем нетривиальная, требующая понимания работы JNI и Dalvik. Но обо всем по порядку. Итак, у нас есть некий CPP класс и Java оболочка. Через JNI мы можем вызывать только С-функции, то есть не объектный код. Так как же нам работать с ООП? Главная проблема - не столько вызовы, сколько хранение адреса объекта нативного класса. Лично для себя я нашел решение - хранить его в Java классе, как long. То есть, у нас получается приблизительно такой код:
-
Лингвистическая относительность в программировании — как наше мышление определяет выбор языка и стиль кодирования
Поводом к написанию предыдущей статьи «Шаблоны и принципы деления кода на классы» послужил случай с начинающим программистом, который обратился ко мне за помощью. Однако та история получила неожиданное продолжение, ставшее, в свою очередь, одной из предпосылок уже для этой статьи. И видимо, волей судьбы или просто по забавному стечению обстоятельств, эта история оказалась напрямую связана с комментариями к первой статье, где в ходе жаркого диалога я затронул тему мышления и восприятия кода разработчиком. Так родилась идея поделиться накопившимися за 10-летний стаж наблюдениями и плодами размышлений: - Как стиль написания кода отражает образ мышления разработчика. - Как разработчики воспринимают код программы. - Почему один язык программирования, что называется, «заходит», а другой - нет.
https://habr.com/ru/companies/cinimex/articles/1013914/
#коддинг #java #python #программирование #функциональное_программирование #процедурное_программирование #ооп #ооп_программирование #языки_программирования #языки
-
Изучаем ООП на C++! В выпуске — объектная модель, инкапсуляция и жизненный цикл объектов с понятными примерами. Отлично для студентов и практиков, кто хочет укрепить базу и писать код грамотнее. Загляните и прокачайте навыки! #cpp #Cplusplus #ООП #OOP #Инкапсуляция #ОбъектнаяМодель #Программирование #Russian
https://video.lernado-base.ru/videos/watch/83a10b29-25f3-489a-a8e1-69baece7f479 -
Попытка имитация расширения модуля Elixir как класса ООП
1. Мотивация Как я писал в предыдущей статье https://habr.com/ru/articles/1002748/ при разработке прототипа системы взаимодействующих движков первыми движками оказались тактовые генераторы, задающие время и синхронизацию коллектива движков. Остальные рабочие движки можно было бы стандартно реализовать с помощью нескольких специфических серверов движков, но мне захотелось сделать всё по правилам ООП и испытать выразительную мощь языка Elixir. Т.е. дальнейшую разработку предполагается провести в рамках парадигмы ООП, расширяя модуль «класса» тактовых генераторов. 2. Предварительное исследование В начале поиска решения был расчет на механизм Поведения (behaviour) Elixir. Поэтому более внимательно перечитал учебную литературу, и выяснил, что этот инструмент для схожей, но другой задачи: задание контракта поведения и проверка на этапе компиляции реализации модулем требуемых функций обратного вызова. Ещё я потратил много времени на поиск в Интернете, как коллеги расширяют модули Elixir аля классы ООП и нашел только один источник конференции по этому вопросу [1]. Но я решил вначале самому попробовать пройти путь квеста, чтобы сравнить потом свой результат с чужими. Забегая вперед, могу сказать, что одно решения [1#9] с конференции почти совпало с моим, но там отсутствуют обобщение и выводы, которые я собираюсь вам сообщить в конце. Справка : В статье невольно производится сопоставление ООП и Elixir, из чего можно сделать вывод, что я отношу Elixir к функциональным языкам. Формально это так и есть, но на деле я вслед за ерлангелистом Сашей Юрич [2] расцениваю Elixir преимущественно языком акторов.
-
Агглютинативный код: почему будущее IT требует смены лингвистического фундамента
Каждые несколько лет IT-индустрия переживает очередной ренессанс. Мы пишем новые языки программирования - Rust для безопасной работы с памятью, Go для идеальной конкурентности, Swift для экосистемности. Мы плодим новые фреймворки, стандарты и сетевые протоколы, пытаясь превзойти существующие ограничения. Но в погоне за оптимизацией мы не замечаем главного: мы продолжаем строить новые "небоскребы" на старом, потрескавшемся логическом фундаменте. И этот фундамент - это не кремний и не машинный код. Это естественный человеческий язык, на котором думают создатели этих IT-технологий. Проблема современного "зоопарка" технологий, усложнения синтаксиса и бесконечных архитектурных компромиссов кроется в том, что мы перетащили баги человеческой речи в парадигмы программирования. Не понимая, что этот лингвистический фундамент и есть наше главное ограничение.
https://habr.com/ru/articles/1002926/
#архитектура_систем #парадигмы_программирования #ооп #system_design #лингвистика #алгоритмы #агглютинативные_языки #qazna #orda
-
Связывание абстрактных классов со свойствами в python
В данной статье хочу поделиться своим опытом по абстрактным классам. Думаю это будет полезно как разработчикам, только начинающим свой путь, так и уже имеющим опыт. В материале можно посмотреть, как изящно связать свойства и абстрактные классы с реализацией принципа DRY . Для начал кратко пробежимся по определениями и терминам, и далее ответим на вопросы, которые могут логично вытекать из этих определений. Абстрактные классы - это базовые классы, определяющие каркас с методами, обязательными для реализации в наследниках и служащими для создания интерфейсов, однако сами экземпляры таких классов создать нельзя. Абстрактные методы - методы с декоратором @abstractmethod, которые обязаны быть реализованы в дочерних классах. Абстрактный класс может содержать как обычные, так и абстрактные методы. Свойство - реализуется через декораторы @property (для чтения) и @<name>.setter (для изменения и валидации) обеспечивая инкапсуляцию, делая API удобным, при этом позволяя менять внутреннюю реализацию без изменения внешнего кода.
https://habr.com/ru/articles/1002538/
#Абстрактный_класс #свойство #python #property #setter #ООП #dry #наследование_в_python #абстрактные_классы #валидация_данных
-
Canvas-конфетти без библиотек: пишем систему частиц и физику на чистом JS
Привет! Я Сергей, разработчик. Когда мне понадобилась легкая анимация лайка в стиле YouTube, я столкнулся с проблемой: готовые решения либо слишком тяжелые, либо плохо дружат с прозрачностью в браузерах. Не желая идти на компромиссы, я реализовал систему анимаций на Canvas. В статье поделюсь опытом создания частиц и физики на чистом JS, а также бегло разберу встроенные инструменты браузера для таких задач. Мы будем делать схематичную анимацию фейерверков и конфетти по нажатию на кнопку при помощи JS. Изученные принципы универсальны для любого ЯП. Нам понадобится немного знаний ООП, тригонометрии, физики и совсем чуть-чуть геометрии. Вот что получится в итоге:
https://habr.com/ru/articles/1001462/
#javascript #canvas #HTML5_Canvas #Система_частиц #Чистый_JS #ООП #физика_в_Web #анимация_в_Web
-
[Перевод] Энди Хант «Говори, а не спрашивай»
В своем кратком тексте 1998 года Энди Хант, отталкиваясь от закона Деметры и принципа разделения команд и запросов, просто и понятно излагает один из важных принципов объектно-ориентированного проектирования — «говори, а не спрашивай». Этот принцип учит делегировать объектам ответственность за их данные, что позволяет создавать слабосвязанные и устойчивые к изменениям системы.
https://habr.com/ru/articles/990790/
#история_it #ооп #проектирование_и_рефакторинг #java #eiffel
-
[Перевод] Стив Фриман, Нэт Прайс, Тим Маккиннон, Джо Уорнc «Мокируем роли, а не объекты»
Продолжаем серию публикаций, посвященных истокам лондонской школы тестирования. В статье "Мокируем роли, а не объекты" (2004) авторы совершают ключевой концептуальный переход. Они переосмысливают мок-объекты: из инструмента для изоляции тестов они становятся инструментом для выявления интерфейсов, проектирования взаимодействий между объектами и создания целостной архитектуры системы.
-
Как мы автоматизировали преподавание ООП и обнаружили, что ChatGPT — это не враг, а союзник (с оговорками)
Как мы автоматизировали курс ООП для 360 студентов и открыли неожиданные закономерности. Почему посещаемость важна, а умеренное использование LLM даёт наивысшие баллы. История системы Frieren, которая спасла 7 преподавателей от рутины и показала, как студенты на самом деле учатся в эпоху AI.
https://habr.com/ru/companies/itmai/articles/981114/
#ооп #маи #n8n #python #обучение_программированию #автоматизация
-
[Перевод] Алан Кей об отправке сообщений
В октябре 1998 года, разочарованный упрощенным пониманием ООП, Алан Кей написал сообществу Squeak знаковое письмо. В нем он напомнил, что главная идея Smalltalk, о которой все забыли, — это не классы, а отправка сообщений. Это письмо стало манифестом, отделяющим оригинальную философию объектов от ее популярной интерпретации. Публикуем перевод этого короткого, но исторически важного документа.
-
ООП и Синглтон(На примере простого консольного рендера) в Си
Всем привет, это Stalker320. Я вернулся на Хабр, осознав несколько концепций, с интересным подходом к разработке ПО с использованием Си.
https://habr.com/ru/articles/976256/
#ооп #си #программирование #программирование_игр #консольные_игры
-
Как перестать писать спагетти-код: ключевые идеи ООП
На собеседованиях часто можно услышать вопрос: «Назовите принципы хорошего кода». Даже начинающие, но уже имеющие практический опыт программисты интуитивно понимают: хороший код — это читаемый, переиспользуемый, легко расширяемый и поддерживаемый. Но что обеспечивает эти качества? Ответ кроется в объектно-ориентированном программировании (ООП).
https://habr.com/ru/articles/964836/
#ооп #наследование #полиморфизм #абстракция #инкапсуляция #интерфейсы #классы #композиция #агрегация #декомпозиция
-
Как онтология помогает представить структуру данных и семантику приложения
В больших проектах, которые объединяют множество компонентов, нередко возникают проблемы унификации подходов и понимания связей между всеми сервисами. В результате долгое время у ИТ-команд существовал запрос на новую модель описания структуры данных и семантики приложения. Она появилась благодаря адаптации онтологии под нужны ИТ. Меня зовут Алексей Гуляев. Я архитектор решений в команде VK Tech. В этой статье я расскажу об онтологии в ИТ, вариантах ее использования и нашем кейсе применения онтологического подхода для решения внутренней задачи.
https://habr.com/ru/companies/vk/articles/948492/
#онтология #vk_tech #алгоритмы #ооп #базы_данных #owl #бизнеспроцессы #бизнес
-
Как онтология помогает представить структуру данных и семантику приложения
В больших проектах, которые объединяют множество компонентов, нередко возникают проблемы унификации подходов и понимания связей между всеми сервисами. В результате долгое время у ИТ-команд существовал запрос на новую модель описания структуры данных и семантики приложения. Она появилась благодаря адаптации онтологии под нужны ИТ. Меня зовут Алексей Гуляев. Я архитектор решений в команде VK Tech. В этой статье я расскажу об онтологии в ИТ, вариантах ее использования и нашем кейсе применения онтологического подхода для решения внутренней задачи.
https://habr.com/ru/companies/vk/articles/948492/
#онтология #vk_tech #алгоритмы #ооп #базы_данных #owl #бизнеспроцессы #бизнес
-
Как онтология помогает представить структуру данных и семантику приложения
В больших проектах, которые объединяют множество компонентов, нередко возникают проблемы унификации подходов и понимания связей между всеми сервисами. В результате долгое время у ИТ-команд существовал запрос на новую модель описания структуры данных и семантики приложения. Она появилась благодаря адаптации онтологии под нужны ИТ. Меня зовут Алексей Гуляев. Я архитектор решений в команде VK Tech. В этой статье я расскажу об онтологии в ИТ, вариантах ее использования и нашем кейсе применения онтологического подхода для решения внутренней задачи.
https://habr.com/ru/companies/vk/articles/948492/
#онтология #vk_tech #алгоритмы #ооп #базы_данных #owl #бизнеспроцессы #бизнес
-
Щи: симулятор жестокости» или «Как не надо делать игры»
Данная статья будет полезна начинающим разработчикам игр, да и вообще, любым людям, кто хочет связать свою жизнь с программированием. Я постарался сделать статью интересной и полезной тем, кто не знает программирование, но знание хотя бы основ С++ увеличит удовольствие от статьи.
https://habr.com/ru/articles/933744/
#геймдев #с++ #паттерны #solid #качество_кода #антипаттерны #спагеттикод #ооп #gamedev #юмор
-
Щи: симулятор жестокости» или «Как не надо делать игры»
Данная статья будет полезна начинающим разработчикам игр, да и вообще, любым людям, кто хочет связать свою жизнь с программированием. Я постарался сделать статью интересной и полезной тем, кто не знает программирование, но знание хотя бы основ С++ увеличит удовольствие от статьи.
https://habr.com/ru/articles/933744/
#геймдев #с++ #паттерны #solid #качество_кода #антипаттерны #спагеттикод #ооп #gamedev #юмор
-
Щи: симулятор жестокости» или «Как не надо делать игры»
Данная статья будет полезна начинающим разработчикам игр, да и вообще, любым людям, кто хочет связать свою жизнь с программированием. Я постарался сделать статью интересной и полезной тем, кто не знает программирование, но знание хотя бы основ С++ увеличит удовольствие от статьи.
https://habr.com/ru/articles/933744/
#геймдев #с++ #паттерны #solid #качество_кода #антипаттерны #спагеттикод #ооп #gamedev #юмор
-
Про архитектуру приложений для тех кому мало Чистой архитектуры
Помню, когда я был джуном и даже миддлом, меня очень волновал вопрос: как же должна выглядеть структура приложения по умным книжкам и всяким бест-практисам. На тот момент я уже повидал разные варианты архитектур, и все они выглядели корявыми, нелогичными, возникшими спонтанно из чьих-то костылей. Лет пять назад я обнаружил для себя Чистую архитектуру Дяди Боба и на некоторое время успокоился, пока поток новых источников постепенно не начал менять мое отношение и к этой книге. Но, если вы решили для себя, что Чистая архитектура - это ваш окончательный выбор, то я точно не буду вас отговаривать, потому что, на мой взгляд, это однозначно лучше, чем, наверное, 90% того, что вам встретится на рынке. Впрочем, эта статья для тех, кому этого не достаточно: для тех, кто хочет глубже понимать эволюцию мысли в области дизайна приложений, основные вызовы и идеи. Раньше мы в 3 частях [ 1 , 2 , 3 ] пробежались по основным идеям архитектуры систем. Поэтому, если вы ищете информацию по System Design, микросервисам и топологии команд, то вам туда. Эта же статья про архитектуру внутри кодовой базы: она посвящена концепциям программирования, влияющим на структуру приложения, поэтому описывает не только архитектурные подходы, но и иные идеи, оставляющие на дизайне свой отпечаток.
https://habr.com/ru/articles/931866/
#ООП #функциональное_программирование #рефакторинг #гексагональная_архитектура #шаблоны_проектирования #структурный_дизайн #yagni #domaindriven_design
-
Как сыграть с СХД в имитацию ошибки и выйти победителем? Используем паттерны ООП на C++
Привет, Хабр! Меня зовут Константин Крюков, я разрабатываю систему хранения данных TATLIN.UNIFIED в YADRO. Сейчас мы с командой создаем MeyerSAN — решение, которое имитирует неисправность SAS HDD и SSD и позволяет автоматически тестировать реакцию СХД на ошибки. Мы написали проект на новом стандарте С++ 23 и использовали паттерны объектно-ориентированного программирования. Под катом расскажу, что за решение у нас вышло, как устроена его архитектура. А еще мы вместе вспомним, зачем строить программную архитектуру тщательно и правильно (и не жалеть об утраченном времени на активную разработку).
https://habr.com/ru/companies/yadro/articles/927866/
#ооп #паттерны #паттерны_программирования #c++ #системы_хранения_данных #command #visit
-
Как сыграть с СХД в имитацию ошибки и выйти победителем? Используем паттерны ООП на C++
Привет, Хабр! Меня зовут Константин Крюков, я разрабатываю систему хранения данных TATLIN.UNIFIED в YADRO. Сейчас мы с командой создаем MeyerSAN — решение, которое имитирует неисправность SAS HDD и SSD и позволяет автоматически тестировать реакцию СХД на ошибки. Мы написали проект на новом стандарте С++ 23 и использовали паттерны объектно-ориентированного программирования. Под катом расскажу, что за решение у нас вышло, как устроена его архитектура. А еще мы вместе вспомним, зачем строить программную архитектуру тщательно и правильно (и не жалеть об утраченном времени на активную разработку).
https://habr.com/ru/companies/yadro/articles/927866/
#ооп #паттерны #паттерны_программирования #c++ #системы_хранения_данных #command #visit