Как стать автором
Обновить

Разбираем шаблоны проектирования

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

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

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

Представленный в статье материал предполагает знакомство читателя с основами объектно-ориентированного программирования.

Читать далее
Всего голосов 14: ↑9 и ↓5+4
Комментарии9

Kotlin/Golang работа в двух языках

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

Так уж получилось, что у нас в компании используются разные стеки и языки. И в частности у нас есть большое подразделение, основным стеком которого является JVM с Kotlin в качестве языка разработки (вместо ванильной Java, на бэкенде). Но при этом этому же отделу регулярно приходится использовать в работе GoLang.

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

Читать далее
Всего голосов 18: ↑16 и ↓2+14
Комментарии12

Принципы SOLID на JS, теперь точно простым языком, но не очень коротко

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

SOLID — универсальный набор принципов разработки поддерживаемого программного обеспечения. В данной статье я попытался разъяснить свое понимание принципов SOLID в отношении языка JavaScript: особенности реализации, некоторые синтаксические конструкции и, конечно, примеры из жизни. Если вам стало интересно, то прошу под кат.

Читать далее
Всего голосов 15: ↑10 и ↓5+5
Комментарии10

Swagger и полиморфные контракты в .NET 7

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

Не так давно состоялся релиз седьмой версии платформы .NET. Он привнёс множество изменений и интересных нововведений, по которым уже успели пробежаться в рамках новостного обзора.

В этой статье мы рассмотрим развитие сериализации платформы (System.Text.Json) вместе с возможностями, которые она открывает.
Читать дальше →
Всего голосов 42: ↑42 и ↓0+42
Комментарии3

Python: класс Factory, возвращающий собственных наследников

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

Добрый день!

Язык Python для меня не является языком программирования, который я использую в повседневной работе. Для меня более близки ООП языки программирования Java, Object Pascal. Поэтому, не холивара ради, я хочу спросить у сообщества на сколько правильно решение, которое я опишу в данной статье?

Мы все учились понемногу, чему-нибудь...
Рейтинг0
Комментарии5

Микросервисная реализация объектно-ориентированных баз данных

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

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

В данной статье рассматривается реализация ООБД в контексте разработки системы, состоящей из микросервисов, на примере Perst и Db4o. Также будет рассмотрена отдельная реализация с документно-ориентированной базой данных MongoDB, работа с которой имеет много общего с ООБД.

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

Читать далее
Всего голосов 7: ↑6 и ↓1+5
Комментарии2

Флаги командной строки в C++

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

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

Читать далее
Всего голосов 13: ↑8 и ↓5+3
Комментарии4

Казалось бы, простой вопрос: что такое паттерны проектирования?

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

В индустрии разработки ПО есть ряд тем, о которых ведутся споры почти в каждой компании. Я считаю, что история паттернов проектирования — одна из них. Можно найти сколько угодно постов, статей и ответов на Quora/Stackoverflow в пользу и не в пользу паттернов проектирования. Например, на днях я наткнулся на этот старый вопрос на Quora:
«Почему сейчас программисты меньше говорят о паттернах проектирования? Какие паттерны (если они есть) все еще представляют ценность?»
Читать дальше →
Всего голосов 26: ↑24 и ↓2+22
Комментарии3

Обобщай это, обобщай то

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


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

На этот раз мы остановимся на связи между алгебраическими кольцами и алгоритмом поиска выпуклой оболочки множества точек (convex hull).
Читать дальше →
Всего голосов 44: ↑43 и ↓1+42
Комментарии4

Добавление файлов контента в nuget-пакетах

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

Привет! Меня зовут Александр, я старший разработчик в команде, которая занимается оцифровкой документов. Когда мы разрабатываем пакеты библиотек компонентов, иногда возникает необходимость дополнить исполняемый код определенным контентом. Нередко этот контент нужен именно в виде отдельных файлов, а не встроенных ресурсов. Примерами таких задач могут быть различные пакеты .NET-оболочек, которым обычно необходимы исходные библиотеки. Нам же понадобились специальные шрифты во внутрикорпоративной библиотеке конвертации документов.

Мы видели два варианта решения проблемы:

Читать далее
Всего голосов 11: ↑11 и ↓0+11
Комментарии4

7 и 1/2 подходов к проверке атрибутов классов в Python

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

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

Один из сценариев, в котором нам нужна проверка значений — это инициализация экземпляра класса. На первом этапе мы хотим убедиться в правильности вводимых атрибутов, например, адрес электронной почты должен иметь правильный формат xxx@xx.com, возраст не должен быть отрицательным, фамилия не должна превышать 20 символов и т.д.

В этой статье я хочу продемонстрировать 7(с половиной - прим.пер.) вариантов проверки атрибутов класса с помощью встроенных модулей Python или сторонних библиотек. Интересно, какой вариант вы предпочитаете? Если вы знаете другие варианты, пишите в комментариях. Поехали.

Читать далее
Всего голосов 15: ↑15 и ↓0+15
Комментарии8

Тебе не нужно классическое ООП в твоём бэкенд микросервисе

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

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

Читать далее
Всего голосов 51: ↑46 и ↓5+41
Комментарии55

Чем плохо ООП (иногда)

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

ООП используется уже давно, оно применяется в большинстве программ. Но всегда ли ООП является правильным путём? Далеко нет.

Что такое ООП?

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

1. Сокрытие подробностей реализации

Благодаря использованию слоёв абстракций мы можем обеспечить приватность работы внутреннего устройства ПО. Абстрагирование помогает с безопасностью и удобством использования, так как другие разработчики не знают (и не должны знать) внутреннюю реализацию вашего ПО.

2. Разъединённые компоненты

Классы и интерфейсы — это удобный способ превращения конкретных частей кода в единый модуль. Другие части кода могут получать доступ только к тому, что им разрешено.

Читать далее
Всего голосов 46: ↑30 и ↓16+14
Комментарии23

Применение ООП на практике

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

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

Читать далее
Всего голосов 16: ↑15 и ↓1+14
Комментарии17

ООП в F#

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров3.3K

Привет, Хабр!

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

Читать далее
Всего голосов 15: ↑12 и ↓3+9
Комментарии11

Бесплатный e-book по Ruby

Время на прочтение1 мин
Количество просмотров2.4K
Задумывались об изучении объектно-ориентированного программирования, а в частности языка Ruby? С бесплатной книгой жизнь станет легче.

LifeHacker опубликовал небольшую заметку о бесплатной книге, доступной в онлайн или для скачивания (pdf) для тех, кто начинает изучать Ruby.

Книга в легкой и юмористической форме вводит в мир Ruby. Нулевая глава озаглавлена просто и без изысков: «О чем эт вы, мистер?».

В комментариях на LifeHacker посетители вспомнили еще о двух книгах:
Всего голосов 24: ↑20 и ↓4+16
Комментарии12

ООП Практикум PHP5: эмуляция примесей (mixin) в языке

Время на прочтение11 мин
Количество просмотров5K
Как-то вечером для реализации моделей поведения в ORM в моем велосипеде фреймворке мне понадобилось что-то, ведущее себя как примесь (mixin) в Ruby или как метод расширения (extension method) в C# (или как трейт / графт в будущих версиях PHP) Я решил для интереса посмотреть, как у меня получится реализовать примеси на PHP. Если вы не знаете, что такое примесь, не беда, сейчас все расскажу.

Приглашаю последовать за мной в рассуждениях о реализации примесей на PHP и программировании небольшой библиотеки, позволяющей их реализовать. Статья ориентирована на PHP разработчиков начинающего и среднего уровня (главное, чтобы вы хорошо ориентировались в ООП). В процессе я также сделаю небольшую ошибку, касающуюся тонкостей работы PHP 5.3 с классами, через какое-то время на нее укажу и предложу исправить. А также предоставлю свое решение для вашей критики. Приятного чтения.

Читать дальше →
Всего голосов 86: ↑73 и ↓13+60
Комментарии113

Коротко об истории объектно-ориентированного программирования

Время на прочтение6 мин
Количество просмотров28K
Эта статья была написана под влиянием впечатлений, полученных автором в ходе одной дискуссии на Хабре, и представляет небольшую серию переводов материалов из свободных источников об истории объектно-ориентированного программирования, основным из которых является Википедия, плюс абсолютно предвзятые выводы автора из прочитанного материала.

Если вам интересно узнать, какой язык в действительности был первым ООП-языком на свете, могут ли Java и C# называться чистыми ООП-языками, а также проникнуться некоторыми другими деталями, приглашаю вас под кат…

Читать дальше →
Всего голосов 69: ↑57 и ↓12+45
Комментарии172

ООП практикум в PHP5: Анализ ошибок, преимуществ и недостатков двух различных реализаций примесей в PHP

Время на прочтение6 мин
Количество просмотров2.3K
После выхода моей статьи о примесях мы продолжали дискуссии и в комментариях к статье и в личных сообщениях. Сегодня увидел в моем блоге комментарий от читателя, который попросил объяснить, в чем я вижу преимущество своей реализации перед реализацией Леонида Шлейхера.

Я собирался было ответить в комментарии к посту своем же сайте, но неожиданно оказалось, что вопрос довольно интересен. Вернее, не сам вопрос, а анализ, который я провел, подготавливая ответ.
Читать дальше →
Всего голосов 41: ↑30 и ↓11+19
Комментарии68