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

ООП *

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

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

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

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

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

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

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

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

Новости

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

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

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

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

Окунутся в чудесный мир бесконечного скрол
Всего голосов 43: ↑24 и ↓19 +5
Комментарии 173

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

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

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

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

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

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

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

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

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

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

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

Истории

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

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

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

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

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

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

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

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

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

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

ООП в Wolfram Mathematica

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Простой ORM для sqlite3

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

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

Не бывало ли вам интересно, как работает изнутри такая идейно простая концепция? Благодаря чему достигается удобство работы? Сегодня мы напишем ORM самостоятельно и узнаем, какие инструменты python нам для этого понадобятся.
Читать дальше →
Всего голосов 50: ↑49 и ↓1 +48
Комментарии 26

Осваиваем модуляризацию: Руководство для начинающих по организации сложных программных систем

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

⚡ Tl;dr


  • Модуляризация — это метод разделения сложных систем на более мелкие удобоваримые части для лучшего управления и восприятия.
  • Она повышает эффективность, надежность и ремонтопригодность программных проектов за счет организации кода в модули.
  • Она снижает когнитивную нагрузку на разработчиков за счет уменьшения объема информации, которую им приходится обрабатывать за один раз, что облегчает понимание сложных систем и предотвращает их «выгорание».
  • Модули при разработке программного обеспечения можно рассматривать как строительные кубики, наподобие деталей «Лего».
  • Каждый модуль имеет уникальный набор общедоступных интерфейсов, структур данных или сообщений, которые служат контрактами для других разработчиков.
  • При работе с модулями важно относиться к ним как к «черным ящикам» и взаимодействовать с ними только через определенные общедоступные интерфейсы, чтобы избежать сильного связывания и повысить модульность системы.
  • Сборки используются для группировки кода в .NET, поскольку они обеспечивают более высокий уровень инкапсуляции (использование внутреннего доступа). Это позволяет разработчикам контролировать уровень доступа другого кода к членам типа и помогает защитить детали реализации типа или элемента.
  • Чтобы сделать реализацию прозрачной для тестирования, можно использовать атрибут в файле csproj и указать имя сборки тестового проекта.
Читать дальше →
Всего голосов 7: ↑6 и ↓1 +5
Комментарии 3

Книга «100 ошибок Go и как их избежать»

Время на прочтение 10 мин
Количество просмотров 5.7K
image Привет, Хаброжители!

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

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

Для опытных Go-разработчиков, хорошо знакомых с синтаксисом языка.
Для кого эта книга
Эта книга предназначена для разработчиков, уже знакомых с языком Go. В ней не рассматриваются его основные понятия — синтаксис или ключевые слова. Предполагается, что вы уже занимались реальным проектом на Go. Но прежде чем углубляться в большинство конкретных тем, удостоверимся, что некоторые базовые вещи понимаются ясно и четко.
Читать дальше →
Всего голосов 10: ↑9 и ↓1 +8
Комментарии 13

Golang. Паттерн Adapter

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

Постараемся рассмотреть шаблоны проектирования на примере языка Go

В первой статье цикла рассмотрим один из самых простых паттернов - Adapter.

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

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

«Чистый» код, нет проблем с производительностью. (плюс анекдот)

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

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

Конечно, мне придется продемонстрировать применение на практике принципов ООП: инкапсуляция, наследование, полиморфизм и то, как они работают.

Конечно, разберем как все это влияет на производительность. Я надеюсь, что получится сформулировать некое подобие ответа на критику постулатов «чистого» кода от достаточно успешного (видимо) иностранного программиста в переводе на Хабре: «Чистый» код, ужасная производительность.

Правила «чистого» кода, изложенные в той статье помогут нам подойти к реализации принципов ООП в нашей задаче.

где анекдот?
Всего голосов 16: ↑5 и ↓11 -6
Комментарии 55

Принципы ООП в примерах для начинающих

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

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

На текущий момент есть различные точки зрения на то, сколько же в ООП всё-таки принципов и в этой статье мы будем считать, что этих принципов четыре: Инкапсуляция, Наследование, Полиморфизм и Абстракция. Примеры будут приведены на языке C#, однако, они очень простые, да и сама суть не зависит от языка, поэтому будет полезна всем начинающим изучать ООП программистам.

Читать далее
Всего голосов 29: ↑19 и ↓10 +9
Комментарии 26

Объектно-ориентированный подход к созданию REST-клиентов, или возможна ли жизнь без Open API

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

Как-то в общении с моим другом-разработчиком из одной крупной софтверной компании у нас зашёл разговор о взаимодействии распределённых команд. В его компании было множество достаточно изолированных команд, каждая из которых разрабатывала свой сервис. В ответ на мой вопрос, как команды расшаривают API, я получил ожидаемый ответ: Open API. Open API, безусловно, прекрасный инструмент, но у него есть ряд недостатков. 

Меня зовут Андрей Зяблин, я главный разработчик в «Магните». Расскажу о том, как распространять API нативным для Java способом и пользоваться им в объектно-ориентированном стиле без использования генераторов кода. 

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

Некоторые советы, которые я почерпнул из книги «100 ошибок в Go»

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

Недавно я закончил читать книгу Тейвы Харсаньи "100 ошибок и как их избежать", и вместо того, чтобы писать рецензию (всем, кто работает с Go, стоит ее прочитать), я решил поделиться четырьмя ошибками, которые показались мне интересными и о которых я раньше не знал.
Читать дальше →
Всего голосов 10: ↑8 и ↓2 +6
Комментарии 11

Приложения алгебры кортежей. Часть 2. Математическая модель вопроса

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

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

Об алгебре кортежей (АК) и ее использовании для логико-семантического анализа было рассказано в моей статье в Хабре. В комментариях к статье предлагалось обратить внимание на функцию SELECT в языке SQL, которая соответствует операции Selection (Выборка) в реляционной алгебре. Эта операцию можно рассматривать как один из вариантов математической модели вопроса.

Предлагаемый здесь вариант смысла вопроса заключается в том, что в вопросе заданы некоторые ограничения (область знания, ситуация, значения некоторых атрибутов и т.д.), которые требуется использовать для того, чтобы найти или вычислить значение определенного атрибута или проверить правильность заданных в вопросе соотношений. Эта семантика применима к восполняющим вопросам типа «Что?», «Где?», «Когда?», к уточняющим вопросам типа «Верно ли, что А?» и к ИЛИ-вопросам типа «Что правильно: А или Б?». Назовем такие вопросы ограничительными. Их можно считать вариантами известной в искусственном интеллекте задачи удовлетворения ограничений.

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

В Java 21 собираются реализовать сопоставление с образцом – так, глядишь, я снова на этот язык перейду

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

Преуведомление

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

Выпуск Java 21 состоялся 19 сентября 2023 года. В этой версии поддерживаются паттерны записи в switch-блоках и выражениях. Такой синтаксис выглядит монументально (как минимум, по меркам Java). Это водораздел, после которого мы вправе говорить, что в Java полноценно поддерживаются паттерны функционального программирования, подобно тому, как это сделано в Kotlin, Rust или C#. Вот и первый пункт, который пробуждает во мне зависть (я Kotlin-разработчик).

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

Как внедрить Prototype в Singleton в Spring с помощью параметра ProxyMode

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

Если просто добавить к определению бина аннотацию @Scope(SCOPE_PROTOTYPE), и использовать этот бин в синглтоне через аннотацию @Autowired – будет создан только один объект. Потому что синглтон создается только однажды, и обращение к прототипу случится тоже однажды при его создании (при внедрении зависимости).

На самом деле вариантов довольно много:

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

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