Как стать автором
Поиск
Написать публикацию
Обновить
28.95

ООП *

Объектно-ориентированное программирование

Сначала показывать
Порог рейтинга
Уровень сложности

Умные указатели в современном C++ с точки зрения новичка

Время на прочтение10 мин
Количество просмотров95K

Новые (?) пути управления памятью


Указатели в языках C и C++ — те еще штучки. Они чрезвычайно мощные, но в то же время такие опасные: достаточно небольшого недосмотра, чтобы сломать все ваше приложение. Проблема в том, что управление указателями полностью зависит от вас. За каждым динамическим выделением объекта (например, new T) должно следовать ручное удаление (например, delete T). Забудете это сделать, и в итоге получите хорошенькую утечку памяти.

Более того, динамически выделяемые массивы (например, new T[N]) необходимо удалять с помощью другого оператора (например, delete[]). Поэтому приходится мысленно отслеживать, что вы выделили, и соответственно вызывать нужный оператор. Ошибки с выбором формы приводят к неопределенному поведению, чего при работе на C++ нужно избегать любой ценой.

Другая деликатная проблема заключается во владении. Сторонняя функция возвращает указатель: а не динамически ли были выделены эти данные? Если да, то кто отвечает за очистку? Невозможно получить такую информацию, просто посмотрев на возвращаемый тип.
Читать дальше →

Domain Driven Design: модели вместо требований

Время на прочтение6 мин
Количество просмотров9.4K

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

Решение — подход DDD, Domain Driven Design, было предложено Эриком Эвансом в 2003. Но прежде, чем о нем говорить, необходимо немного углубиться в историю развития разработки софта как такового.

Читать далее →

Про ООП через призму косвенности. И «Галя, отмена!»

Время на прочтение5 мин
Количество просмотров4.9K

Да, мы все знаем, что это такое из первых двух статей по запросу "Что такое ООП?" или из потоковых лекций первых семестров ВУЗа.

Казалось бы, ООП – Объектно ориентированное программирование. Там что-то про классы, что-то про объекты, если повезет, то, возможно, вспомним, что такое абстракция, инкапсуляция, наследование и полиморфизм. Что там еще надо знать?
И хорошо, если ты прочитал нормальную статью, и не будешь объяснять инкапсуляцию вот так: "ну это история про private, данные скрываются!".

Никогда не хотелось копнуть поглубже? Узнать почему у нас есть эти принципы?

Узнать про ООП побольше

Что такое дырявые абстракции? (иллюстрированное руководство)

Время на прочтение5 мин
Количество просмотров9.3K
Абстракции — естественная составляющая разработки программного обеспечения, и они вполне могут протекать.

image

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

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

В этой статье вы узнаете, что такое «дырявая абстракция», почему она возникает и стоит ли вам — серьезному программисту — беспокоиться об этом.
Читать дальше →

Обобщения C#

Время на прочтение3 мин
Количество просмотров12K

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

Читать далее

Запросы к апи с бэка с повтором если был ответ 401 (UnAuthorized) на примере Mercuryo. PHP, Yii2

Время на прочтение6 мин
Количество просмотров2.5K

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

Interceptor->next()

Почему в Python плохой ООП

Время на прочтение10 мин
Количество просмотров42K

В Python ужасный ООП. Кликбейтный тезис, который имеет право на существование. Есть много языков, где ООП представлен не в самом классическом виде, ну или так принято считать. Прототипные JavaScript и Lua, Golang с прикреплением методов и прочие. Но «не такой как все» всегда ли синоним слова «неправильный»?  С чего мы вообще вязли, что ООП в Python не такой каким должен быть ООП? Что вообще является точкой отсчёта «правильности» ООП? Smalltalk или Simula 67? Вроде бы объектно-ориентированное программирование – это просто парадигма.. или уже догма?

Читать далее

От новичка, для новичков: «Event-driven programming. EventEmitter.»

Время на прочтение16 мин
Количество просмотров26K

Вдохновившись документацией MDN, которая позиционирует себя как - Resources for Developers, by Developers, я решил сделать серию статей «От новичка, для новичков», где попытаюсь максимально простым языком рассказывать о разных концепциях в программировании, в основном связанных с JavaScript. Я буду стараться избегать технически-сложного контента, или буду максимально его упрощать.

Это первая статья серии, будет посвящена событийно-ориентированной парадигме применительно к Node.js, а также паттерну «EventEmitter».

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

Читать далее

Dependency Injection Containers (DI контейнеры) в Joomla 4

Время на прочтение5 мин
Количество просмотров1.7K

В Joomla 4 используются контейнеры внедрения зависимостей (DI контейнеры, DIC). Эта статья-перевод (из нового портала документации для разработчиков) призвана объяснить, зачем их внедрили и как их использовать в Joomla. DI контейнеры уже давно существуют в экосистеме PHP, например, Symfony представила эту концепцию в 2009 году. Теперь они доступны и в Joomla.

Читать далее

В чем заключается ценность унаследованного кода

Время на прочтение8 мин
Количество просмотров5.3K
Я консультант по программному обеспечению, и мне приходится работать со многими унаследованными программными системами. Хотя мы обслуживаем клиентов, желающих получить кастомизированный софт, а также клиентов, которым требуется техническая поддержка, нам очень часто приходится работать в «унаследованных» средах, в которых действуют весьма своеобразные требования. Все дело в том, что системы или организации постоянно развиваются.

Неслучайно слово «унаследованный» обладает некоторым уничижительным оттенком в нашей отрасли. Со старыми системами сложно работать. Они нас стесняют, и этих ограничений мы не выбирали. Из-за них приходится тратить время и деньги на решение проблем, которые мы исходно не пытались решить; они усложняют путь от проблемы к решению. Так какова же польза унаследованного кода?
Читать дальше →

Классы значения в Kotlin: прощайте псевдонимы типов?

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров8.4K

С выходом Kotlin 1.5.0, классы значения (известные ранее как inline классы) наконец-таки стабильны и были освобождены от необходимости в аннотации @OptIn. Было много нового в релизе, что также создало много путаницы, так как теперь нам доступны три очень похожих инструмента: typealias, классы данных (data class) и классы значения (value class). Так какой же нам использовать теперь? Можно ли выбросить сразу псевдонимы типов и классы данных и заменить их на классы значения?

Ответы в статье

Как хранить Config в Excel

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров6.1K

Я часто пользуюсь конфигурацией при написании VBA макросов в Excel. Иногда она нужна в формах для сохранения настроек, иногда для сохранения каких-то получаемых в процессе выполнения макроса данных.

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

Сегодня я хотел бы пошагово рассказать о том как я храню и обрабатываю конфигурацию макроса в книге Excel.

Читать далее

Рассылка писем через Unione (php, Yii2)

Время на прочтение9 мин
Количество просмотров2.3K

В статье представлен код позволяющий отправлять транзакционные письма через сервис unione, делать HTTP запросы к REST апи, а так же отправлять обычные email по smtp используя общий класс отправитель различных сообщений.

(new UniversalReader($name))->read()

Ближайшие события

Под капотом у Mobx. Пишем свою реактивную библиотеку с нуля

Время на прочтение23 мин
Количество просмотров17K

Первое мое знакомство с Mobx началось с удивления. Я не понимал всю магию библиотеки и задавал себе вопрос: “А как это возможно?”. Кажется, в ней используются какие-то подкапотные возможности JS или Mobx вообще написан на другом языке. 

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

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

Читать далее

Фасад для python библиотеки

Время на прочтение7 мин
Количество просмотров9.1K

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

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

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

Читать далее

Что такое объект

Время на прочтение5 мин
Количество просмотров17K

Вы задумывались, что такое объект? Что-то из реального мира: человек, машина, здание? Почему?

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

Хочу поделиться своим ООзарением с вами.

Читать далее

Использование ООП подхода для рассылки писем через Unione (php, Yii2)

Время на прочтение7 мин
Количество просмотров2.5K

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

article->open()

Сказ об ООП, пиве, чае и дружбе

Время на прочтение13 мин
Количество просмотров14K

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

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

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

Программировать нужно осознанно.

Читать далее

Программирование в Word: зачем, почему?

Время на прочтение7 мин
Количество просмотров22K


Картинка pch.vector, freepik

Практически каждый из читателей, наверняка не раз (а кто-то и на постоянной основе), имеет потребность в написании и редактировании документов в среде Word.

Однако если подобная деятельность производится с некоторой периодичностью, пытливый ум сразу начинает думать о способах оптимизации своего труда. Одним из таких способов является программирование в среде Visual Basic for Applications,- среде разработки, которая встроена в известные офисные продукты: Word, Excel, PowerPoint и т.д. Статья больше вводная, для тех, «кто совсем не в теме» :-).

Читать дальше →

Вероятно вам не нужен MediatR

Время на прочтение13 мин
Количество просмотров29K

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

препятствование прямому общению между объектами для уменьшения связности;

нацеливание на Message-Oriented архитектуру;

поддержка асинхронного внутреннего обмена сообщениями;

ориентирование на переиспользование объектов.

Эти практики не пустое слово для меня. Кроме того, кажется, что такой способ создания программного обеспечения должен быть совершенно очевидным. Без сомнения, библиотека MediatR очень успешна и широко применяется разработчиками, которые разделяют эти ценности.

Существует множество статей о MediatR, но лишь их малая часть фокусируется на недостатках и помогает определить случаи, когда использование инструмента не имеет смысла. Этот пост один из таких.

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

Также стоит отметить, что эта статья не покрывает положительные аспекты библиотеки, а фокусируется только на недостатках.

Читать далее

Вклад авторов