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

ООП *

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

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

Люди не понимают ООП

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

«ООП для меня означает лишь обмен сообщениями, локальные ограничения и защиту, сокрытие состояния процесса и крайне позднее привязывание», — Алан Кэй (человек, придумавший термин «объектно-ориентированное программирование»)1

Похоже, многим не нравится объектно-ориентированное программирование. Первое, что приходит в голову, когда слышишь эту трёхбуквенную аббревиатуру — это пример с автомобилем, наследование, геттеры, сеттеры и ObjectFactoryFactorySingleton.

Мне это всегда казалось довольно странным. Мне не только нравится ООП, я ещё и считаю, что часто это лучший/наиболее очевидный способ моделирования задачи. И ниже я расскажу, почему.
Читать дальше →
Всего голосов 87: ↑84 и ↓3 +81
Комментарии 112

Новости

7 причин некачественного кода в Unity-проектах

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

Хорошего, годного кода в проектах на Unity мало. Поддержка унаследованных Unity-проектов представляет обычно немалые сложности, а разработка часто сталкивается с неестественными трудностями.

Почему так? Казалось бы - Unity это просто, да и толковых программистов вроде хватает. Или всё не так очевидно?

Пробуем выделить 7 причин низкого качества кода в Unity-разработке.

Читать далее
Всего голосов 17: ↑15 и ↓2 +13
Комментарии 24

Велосипедим связанный список на Wolfram

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

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

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

Ниже реализация структуры данных LinkedList на Wolfram Language.

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

GRASP. Часть 1 — Информационный эксперт

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

Привет!

Сегодня я хочу поговорить про GRASP. В то время как многие знакомы с SOLID, GRASP, хотя и известен, мало кто в геймдеве воспринимает его всерьёз (или хотя бы знают о нем). GRASP расшифровывается как общие шаблоны распределения ответственностей. Самые часто упоминаемые принципы GRASP известны гораздо шире, чем сам список, в который они включены. Это знаменитые слова про низкую связность и высокое зацепление.

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

Истории

Сто паттернов для разработки корпоративных программ. Часть 2.1

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

В этой статье представлены такие паттерны, как Abstract Document, Monad, Object Mother, Object Pool, Step Builder. Примеры приведены на .NET 7 и C#. Приятного чтения.

Продолжение в статье "Сто паттернов для разработки корпоративных программ. Часть 2.2".

Читать далее
Всего голосов 12: ↑2 и ↓10 -8
Комментарии 57

Сто паттернов для разработки корпоративных программ. Часть первая

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

В этой статье рассмотрены все паттерны проектирования из "Банды четырёх" с примерами на языке программирования C#. Для самых терпеливых имеются дополнительные паттерны.

Это первая статья из серии "Сто паттернов для разработки корпоративных программ". Следующие статьи будут посвящены паттернам из книг Мартина Фаулера и Роберта Нистрема.

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

Dependency Injection контейнеры .NET, допускающие полиморфное поведение

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


Иногда случается так, что при разработке приложения на платформе .NET с внедрением зависимостей и сервисами от контейнера требуется поддержка полиморфного поведения.

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

Однако стандартный DI контейнер платформы долгое время не давал этой возможности.

В рамках этой статьи я решил напомнить альтернативы для решения этой задачи на тот случай, если вы ещё не успели переехать на .NET 8 или работаете в каком-нибудь Иннотехе, где в наличии только зеркало NuGet-пакетов, выпущенных до начала 2022 года.
Читать дальше →
Всего голосов 60: ↑57 и ↓3 +54
Комментарии 146

2d движок для игр Javascript Game Engine (JsGE)

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

Привет всем. Меня зовут Артурас, я пишу на Javascript. Полтора года назад я уволился из оффшорной компании и решил написать свой движок для браузерных 2d игр. Сегодня - делюсь результатами.

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

Перевод третьей части учебника Patterns.dev

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

И снова всем привет! Продолжение к переводу второй части книги Patterns.dev

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

Напомню, что авторы Patterns.dev:
Лидия Холли — штатный консультант и преподаватель по разработке программного обеспечения, которая в основном работает с JavaScript, React, Node, GraphQL. Она также занимается наставничеством и проводит личные тренинги.
Эдди Османи — технический менеджер, работающий над Google Chrome. Его команды работают над такими проектами, как Lighthouse, PageSpeed ​​Insights, Chrome User Experience Report и другими.

Материал книги будет полезен не только React‑разработчикам, но и всем, кто так или иначе интересуется или сталкивается с frontend‑разработкой. Это ознакомительная часть перевода учебника https://www.patterns.dev/. Перевод всей третьей части учебника можно найти здесь.

P. P. S.: Третья часть взята из книги: https://www.patterns.dev/, переведена на русский язык. Книга находится под лицензией CC BY-NC 4.0

Данный адаптированный материал распространяется на условиях лицензии Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)

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

100 вопросов для подготовки к собесу Python

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

Доброго времени суток!

Представляю подборку из 100 вопросов с собесов на позицию джуна Python-разработчика. На Хабре есть неплохие статьи на тему подготовки к собеседованию и всё в таком духе, но прямо набора вопросов/ответов на понимание Python в формате чек-листа не встречал.

Для кого статья?

Читать далее
Всего голосов 56: ↑53 и ↓3 +50
Комментарии 54

Победа над ORM путем кодогенерации

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

Сразу хочу отметить перед читателем, что это не просто вольные рассуждения на тему, а в том числе и презентация моей библиотеки для Python, которую можно найти на github и установить через pip, и которая трудится в моей многопользовательской игре как SQL движок проекта.

Проблемы ORM известны всем, кто хоть раз ими пользовался. Об этом существует множество статей как у нас, так и в зарубежных источниках. Эти проблемы в общем можно объединить довольно сложным термином Object‑relational impedance mismatch, что позволю себе вольно перевести как «Объектно‑реляционная разница потенциалов».

Альтернативой использованию ORM всегда было использование чистых драйверов баз данных и написание сырых SQL запросов, которые в свою очередь очень тяжело поддерживать и рефакторить в реальных проектах.

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

Читать далее
Всего голосов 4: ↑3 и ↓1 +2
Комментарии 51

Шаблоны проектирования — реализация на языке PHP 8.0+

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

В PHP 8.0 добавлен класс mixed. Тип mixed принимает любое значение. Он эквивалентен объединённому типу object|resource|array|string|float|int|bool|null. Доступно, начиная с PHP 8.0.0.

mixed - это, говоря языком теории типов, высший тип. Это означает, что все остальные типы являются его подтипами.

Шаблоны проектирования в ООП делятся на 4 принципиально разных подтипа:

Читать далее
Всего голосов 25: ↑0 и ↓25 -25
Комментарии 24

Как стать Delphi-программистом за час «для самых маленьких»

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

Принято считать, что программирование это сложно, но это миф (все проще чем кажется), и все что нужно чтобы стать программистом это немного упорства и изобретательности.

В этой статье мы получим все базовые навыки, которые нужны Delphi программисту (включая базовые знания RunTime, работу с Com-объектами и Canvas, вводом\выводом, файлами, парсингом, ооп, и тд), по окончании статьи.

Окунутся в чудесный мир бесконечного скрол
Всего голосов 44: ↑24 и ↓20 +4
Комментарии 186

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

Открытый урок «Behaviour Tree в Unity»
Дата 8 февраля
Время 19:00
Место
Онлайн
One Day Offer от УЦСБ
Дата 17 февраля
Время 10:00
Место
Онлайн

Пример для иллюстрации принципов SOLID который я (кажется) понял

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

Это перевод вступления из электронной книги - документа.

Авторы утверждают что:

В этой главе вы увидите, как можно удовлетворить некоторые из распространенных требований корпоративных приложений (приложений для бизнеса), таких как низкая стоимость (простота) сопровождения и тестируемость, применяя слабосвязанный дизайн для вашего приложения. Вы увидите очень простую иллюстрацию этого подхода в примерах кода, которые показывают два разных способа реализации зависимости между классами ManagementController и TenantStore. Вы также увидите, как принципы объектно-ориентированного программирования SOLID связаны с теми же проблемами (имеются ввиду проблемы стоимости сопровождения = исправления ошибок + возможности расширения функциональности и тестируемости).

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

Пишем приложение на Python для подготовки к собеседованиям по Python

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

На конец 2023 года язык программирования Python является самым популярным по индексу TIOBE. Что касается работы, то по количеству вакансий в мире язык Python занимает второе место (после JavaScript/TypeScript). Поэтому у соискателей на должность, где требуется Python, возникает потребность подготовки к собеседованиям.

В этой статье я расскажу о том, как используя Python, можно написать desktop-приложение для ОС Windows, которое поможет быстро, эффективно и абсолютно бесплатно подготовиться к собеседованиям по Python.

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

Способы отображения: существует ли связь между DDD и ООП

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

В ходе обсуждений докладов на Analyst Days возник вопрос о связи Domain-driven design (DDD) с объектно-ориентированным подходом (ООП): оказывается, для большинства она вовсе не так очевидна, как мне представлялось. Подробнее погружаясь в это обсуждение, я понял, что для современной разработки их общность действительно не очевидна, а практики DDD можно применять, не связывая с ООП. Я думаю, что подробное рассмотрение этого вопроса будет полезно для получения комплексного представления и понимания DDD, что сделает его применение эффективнее.

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

Парсер бинарных данных с WPF визуализацией в виде дерева структур и их полей. Структура, управляемая данными

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

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

Адаптированный проект для публичного использования, рабочий на Гите, компилируется в простой exe-файл. Можно скачать как exe-файл, если доверяете своему антивирусу.  Надеюсь, кому-то пригодится. Но чтобы начать пользоваться надо научиться писать XАML определения вложенных структур, по которым работает парсер. Ссылка в конце статьи.

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

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

ООП в Wolfram Mathematica

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

В комментариях к мой статье пользователь @Refridgeratorв ответ на мой вопрос написал, что в Wolfram Language (WL) не хватает следующего:

"ООП, перегрузки операторов, строгой типизации, событийно-ориентированного
программирования, дата-ориентированного программирования, параллельного программирования с примитивами синхронизации, средств отладки, скорости исполнения." (с) @Refridgerator

Я отлично понимаю, что вокруг Mathematica сложились некоторые исторические стереотипы. В них обычно WL представляется как калькулятор на стероидах или просто игрушка, или больше язык запросов, которым можно дополнительно решать уравнения и строить графики. Сегодня я попытаюсь показать, что в языке есть не только лишь графики, уравнения и интегралы. Вряд ли у меня хватит сил написать подробно касательно каждого пункта списка, но я постараюсь объяснить хотя бы часть.

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

Абстрактная фабрика: искусство создания масштабируемого кода

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

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

Что вообще хотим увидеть:

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

C# делегаты изнутри. Можно ли расширить С++ стандарт для поддержки делегатов в стиле C#

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

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

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

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

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