В этой статье мы поговорим о новом интерпретируемом языке Loli, рассмотрим синтаксис и сравним с языками C и Python.
Рубрика «ооп» - 12
Loli — новый высокопроизводительный язык
2019-02-24 в 12:37, admin, рубрики: C, высокая производительность, интерпретатор, ооп, язык программированияТри дзена reactive extensions
2019-02-23 в 17:15, admin, рубрики: reactive extensions, rxjs, ооп, ооп/фп, Программирование, проектирование, Проектирование и рефакторинг, функциональное программирование"Reactive Extensions" — это больше, чем фреймворк. Хотя бы потому, что существует практически идентичная реализация (с поправкой на особенности конкретного языка и соответствующих практик оптимизации) под каждый популярный ЯП. Есенин утверждает, что «большое видится на расстояньи». В этой записке я буду отходить на разные «расстоянья» и описывать то, что видится мне.
Читать полностью »
ООП мертво, да здравствует ООП
2019-02-22 в 4:32, admin, рубрики: ecs, entity component system, ood, антипаттерны, ооп, Программирование, Проектирование и рефакторинг, шаблоны проектирования
Источники вдохновения
Этот пост возник благодаря недавней публикации Араса Пранцкевичуса о докладе, предназначенном для программистов-джуниоров. В нём рассказывается о том, как адаптироваться к новым ECS-архитектурам. Арас следует привычной схеме (объяснения ниже): показывает примеры ужасного ООП-кода, а затем демонстрирует, что отличным альтернативным решением является реляционная модель (но называет её «ECS», а не реляционной). Я ни в коем случае не критикую Араса — я большой фанат его работ и хвалю его за отличную презентацию! Я выбрал именно его презентацию вместо сотен других постов про ECS из Интернета потому, что он приложил дополнительные усилия и опубликовал git-репозиторий для изучения параллельно с презентацией. В нём содержится небольшая простая «игра», используемая в качестве примера выбора разных архитектурных решений. Этот небольшой проект позволил мне на конкретном материале продемонстрировать свои замечания, так что спасибо, Арас!
Слайды Араса выложены здесь: http://aras-p.info/texts/files/2018Academy — ECS-DoD.pdf, а код находится на github: https://github.com/aras-p/dod-playground.
Я не буду (пока?) анализировать получившуюся ECS-архитектуру из этого доклада, но сосредоточусь на коде «плохого ООП» (похожего на уловку «чучело») из его начала. Я покажу, как бы он выглядел на самом деле, если бы правильно исправили все нарушения принципов OOD (object-oriented design, объектно-ориентированного проектирования).
Спойлер: устранение всех нарушений OOD приводит к улучшениям производительности, аналогичным преобразованиям Араса в ECS, к тому же использует меньше ОЗУ и требует меньше строк кода, чем ECS-версия!
TL;DR: Прежде чем прийти к выводу, что ООП отстой, а ECS рулит, сделайте паузу и изучите OOD (чтобы знать, как правильно использовать ООП), а также разберитесь в реляционной модели (чтобы знать, как правильно применять ECS).
Читать полностью »
Паттерн Интерактор (Interactor, Operation)
2019-02-02 в 16:30, admin, рубрики: laravel, oop patterns, php, ооп, ПрограммированиеДанный текст представляет собой адаптацию части руководства фрэймворка Hanami под фрэймфорк Laravel. Чем вызван интерес именно к этому материалу? В нём даётся пошаговое описание с демонстрацией таких общих для языков программирования и фрэймворков вещей как:
- Использование паттерна "Интеракторы".
- Демонстрация TDDBDD.
Сразу стоит отметить, что это не только разные фрэймворки с разной идеологией (в частности, что касается ORM), но и разные языки программирования, каждый из которых имеет свою специфическую культуру и сложившиеся "bests practics" в силу исторических причин. Разные языки программирования и фрэймворки тяготеют к заимствованию друг у друга наиболее удачных решений, поэтому несмотря на различия в деталях, фундаментальные вещи не различаются, если мы конечно не берём ЯП с изначально разной парадигмой. Достаточно интересно сравнить, как одну и туже задачу решают в разных экосистемах.
Итак, исходно мы имеем фрэймворк Hanami (ruby) — достаточно новый фрэймворк, идеологически больше тяготеющий к Symfony, с ORM "на репозиториях". И целевой фрэймворк LaravelLumen (php) с Active Record.
JavaScript: Публичные и приватные поля классов
2019-02-02 в 10:19, admin, рубрики: class, ecma, javascript, private fields, proposals, public fields, static fields, ооп, Разработка веб-сайтовНесколько предложений расширяют существующий синтаксис классов в JavaScript новой функциональностью. Эта статья объясняет новый синтаксис публичных полей классов в V8 v7.2 и Chrome 72, а также грядущих приватных полей.
Вот пример кода, который создает экземпляр класса IncreasingCounter:
const counter = new IncreasingCounter();
counter.value;
// logs 'Getting the current value!'
// → 0
counter.increment();
counter.value;
// logs 'Getting the current value!'
// → 1
Отметим, что обращение к value выполняет некоторый код (вывод сообщения в лог) перед тем, как вернуть значение. Теперь спросите себя: как бы Вы реализовали этот класс на JavaScript?
Композиция против наследования, паттерн Команда и разработка игр в целом
2019-02-01 в 15:53, admin, рубрики: banana monkey, composition, inheritance, javascript, архитектура, ооп, Программирование, разработка игр
Дисклеймер: По-моему, статья об архитектуре ПО не должна и не может быть идеальной. Любое описанное решение может покрывать необходимый одному программисту уровень недостаточно, а другому программисту — слишком усложнит архитектуру без надобности. Но она должна давать решение тем задачам, которыё поставила перед собой. И этот опыт, вместе со всем остальным багажом знаний программиста, который обучается, систематизирует информацию, оттачивает новыки, и критикует сам себя и окружающих — этот опыт превращается в отличные програмные продукты. Статья будет переключаться между художественой и технической частью. Это небольшой эксперимент и я надеюсь, что он будет интересным.
— Слушай, я тут придумал отличную идею игры! — гейм-дизайнер Вася был взъерошен, а глаза — красные. Я ещё попивал кофе и холиварил на Хабре, чтобы убить время перед стенд-апом. Он выжидательно посмотрел на меня, пока я закончу писать в комментариях человеку, в чем он не прав. Он знал, что пока справедливость не восторжествует, а правда не будет защищена — смысла продолжать со мной разговор нету. Я дописал последнее предложение и перевел на него взгляд.
— В двух словах — маги с маной могут кастовать заклинания, а воины могут сражаться в близком бою и тратить выносливость. И маги и воины могут двигаться. Да, там ещё можно будет грабить корованы, но это уже следующей версии сделаем, короче. Покажешь прототип после стенд-апа, окей?
Он убежал по своим гейм-дизайнерским делам, а я открыл IDE.
Архитектурный шаблон «Итератор» («Iterator») во вселенной «Swift»
2019-01-26 в 14:40, admin, рубрики: iOS, ios development, ios programming, iOS разработка, oop patterns, pop, protocol, protocol-oriented programming, protocols, swift, swift development, swift разработка, ооп, разработка под iOS«Итератор» – один из шаблонов проектирования, которые программисты чаще всего не замечают, потому что его реализация, как правило, встроена непосредственно в стандартные средства языка программирования. Тем не менее, это тоже один из поведенческих шаблонов, описанных в книге «Банды четырех» (“Gang of Four”, “GoF”) “Шаблоны проектирования” (“Design Patterns: Elements of Reusable Object-Oriented Software”), и понимать его устройство никогда не помешает, а иногда даже может в чем-то помочь.
Читать полностью »
«Свет мой — зеркальце! — скажи, да дуал мой покажи…»: спроектируй один хороший фреймворк и получи второй в подарок
2019-01-25 в 13:27, admin, рубрики: ооп, Программирование, функциональное программированиеКамни древних храмов умеют разговаривать, но мало кто им внемлет. Вселенная наполнена звуками, которые мы, люди, не слышим; цветами, которые не видим: иногда дело в объективных ограничениях тела и духа, но бывают также и субъективные причины — недостаток знаний и навыков или неумение ими пользоваться в повседневной практике. Яркий пример второго в мире программирования — сигнатуры функций. Дети ОО-мира в лучшем случае мыслят интерфейсами — это близко, но «не совсем то» и чем внимательнее становишься, тем больше это превращается в «совсем не то». А сигнатуры функций тоже умеют разговаривать.
Читать полностью »
Как победить дракона: переписываем вашу программу на Golang
2019-01-24 в 6:10, admin, рубрики: dapp, Go, golang, ruby, werf, Анализ и проектирование систем, архитектура, Блог компании Флант, ооп, переписывание, Программирование, Проектирование и рефакторинг, проектирование по, рефакторингТак случилось, что ваша программа написана на скриптовом языке — например, на Ruby — и встала необходимость переписать ее на Golang.
Резонный вопрос: зачем вообще может понадобится переписывать программу, которая уже написана и нормально работает?