JavaScript принято считать прототип-ориентированным языком программирования. Но, как ни странно, этим подходом практически никто не пользуется: большинство популярных JS-фреймворков явно или неявно оперируют классами.
В этой статье я хочу рассказать об альтернативном способе программирования на JavaScript, без использования классов и конструкторов — чистым прототип-ориентированным ООП и особенностях его реализации на ECMA Script 5.Читать полностью »
Метка «Программирование» - 21
Нужны ли в JavaScript классы?
2013-06-12 в 20:02, admin, рубрики: class, constructor, javascript, lazy initialization, prototype, Веб-разработка, класс, конструктор, Программирование, прототип, метки: class, constructor, javascript, lazy initialization, prototype, класс, конструктор, ооп, Программирование, прототипПутешествие через вычислительный конвейер процессора
2013-06-03 в 16:58, admin, рубрики: конвейер, магия вуду, Программирование, процессор, метки: конвейер, магия вуду, Программирование, процессорТак как карьера программиста тесно связана с процессором, неплохо бы знать как он работает.
Что происходит внутри процессора? Сколько времени уходит на исполнение одной инструкции? Что значит, когда новый процессор имеет 12, или 18, или даже 31-уровневый конвейер?
Программы обычно работают с процессором, как с чёрным ящиком. Инструкции входят и выходят из него по порядку, а внутри совершается некая вычислительная магия.
Программисту полезно знать, что происходит внутри этого ящика, особенно, если он будет заниматься оптимизацией программ. Если вы не знаете какие процессы протекают внутри процессора, как вы сможете оптимизировать под него?
Эта статья рассказывает, как устроен вычислительный конвейер x86 процессора.
Читать полностью »
Тестирование производительности Python 2.7 при обработке списков различными способами
2013-06-01 в 17:38, admin, рубрики: python, Программирование, производительность, метки: python, Программирование, производительность
В ходе одного из моих питоновских проектов, с большой примесью ООП и обработкой большого числа данных — у меня возник вопрос, а насколько эффективно обрабатывать списки в классе с использованием вызовов его методов, или может использовать вызов внешней функции? Для этого были написаны 24 теста которые показали очень интересные результаты, Кому интересна данная тема, прошу в подробности.
Читать полностью »
Ещё немного о 2D графике под Android
2013-05-29 в 14:00, admin, рубрики: android, графика, кнопки, Песочница, Программирование, метки: android, графика, кнопки, ПрограммированиеЗдравствуйте, читатели !
Не так давно я начал изучать программирование под Android и некоторое время назад столкнулся с проблемой, решением которой хочу поделиться со всеми, кто ещё не начинал, но планирует посвятить себя разработке приложений под эту платформу.
Читать полностью »
Опыт использования Freefem++ и NetGen в программе моделирования аэродинамических процессов
2013-05-28 в 12:46, admin, рубрики: CFD, freefem++, NetGen, математика, моделирование физических процессов, Программирование, разработка, метки: CFD, freefem++, NetGen, моделирование физических процессов, ПрограммированиеВведение
Авторам данной статьи довелось выполнить довольно редкий по своему характеру проект. Требовалось разработать коммерческую программу моделирования процессов движения воздушной среды в чистом помещении. Чистое помещение — это производственное помещение, отвечающее определенным требованиям по чистоте воздуха, температуре и скорости его движения. Основной показатель чистоты — это класс чистоты, который определяется ГОСТом по концентрации частиц в воздухе. Потоки воздуха в чистом помещении направляются так, чтобы обеспечить эффективное удаление пыли и аэрозолей из помещения. Требования могут также ограничивать градиенты температуры в пространстве и во времени. Программа Cleanroom предназначена для использования в качестве инструмента проектировщика чистых помещений. С ее помощью проектировщик должен выполнять размещение оборудования и элементов вентиляции, а по результатам моделирования процессов в воздушной среде определять степень соответствия варианта размещения предъявляемым требованиям по чистоте.
Читать полностью »
Когда полиморфизм терпит неудачу
2013-05-27 в 8:41, admin, рубрики: перевод, переводы, Песочница, Программирование, метки: перевод, Программирование Большинство фанатов ООП одновременно являются и фанатами полиморфизма. Многие хорошие в других отношениях книги (например, «Рефакторинг» Фаулера) впадают в крайность, утверждая, что если вы используете проверки типов во время выполнения (такие как операция instanceof
в Java), то вы, по всей вероятности, в душе злодейский злодей из тех, что пугают маленьких детей операторами switch
.
Вообще говоря, я согласен с тем, что использование instanceof
и его аналогов обычно является признаком недостаточных навыков ООП проектирования. Полиморфизм лучше проверок типов, он делает код гибче и понятнее. Однако, по крайней мере в одном случае, достаточно распространенном чтобы считаться паттерном сам по себе, вы просто не можете использовать полиморфизм. Я бы применил его с удовольствием, честно, и если вы знаете как это сделать – расскажите мне. Но не думаю что это возможно, особенно в статических языках типа Java или C++.
Определение полиморфизма
На тот случай если вы незнакомы с терминологией ООП, полиморфизм – это претенциозное обозначение для концепции позднего связывания. Позднее связывание – это претенциозное обозначение (вы обнаружите здесь паттерн если копнете глубже) для отсрочки решения о том какой метод будет вызван до начала выполнения программы. Когда и будет выполнена проверка соответствия объекта и сообщения (метода).
В языках программирования, ориентированных на производительность, таких как C++, Java или OCaml, методам ставятся в соответствие числа, а для каждого класса заводится таблица его методов, по которой и производится поиск во время выполнения. В языках же отдающих предпочтение гибкости и динамизму, поиск осуществляется с использованием хэширования названий методов. В остальном эти два подхода практически совпадают.
Виртуальные методы сами по себе не создают полиморфизм. Он вступает в игру только когда у заданного класса появляются несколько подклассов, каждый из которых реализует свою особую версию полиморфного метода. В банальнейшем примере из учебника это иллюстрируется тем, что в зоопарке все животные по-разному обрабатывают сообщение неприятноПахнуть()
. Хотя на самом деле, конечно, по моему скромному мнению, все они чертовски схожи, дело просто в величине. Правда, я все еще не решил победит ли гиппопотам жирафа, спросите меня об этом немного позднее.
Объектно-ориентированное мышление
2013-05-27 в 8:24, admin, рубрики: Блог компании Издательский дом «Питер», издательский дом, Программирование, Читальный зал, метки: издательский дом, Программирование
Всем привет. В этом посте мы хотели бы узнать мнение Хабра-общества, нужна ли переводная книга по объектно-ориентированным концепциям. Тема книги интересная, но на сколько она востребована у нас?
Книга на amazon.com
Первая глава в оригинале.
Содержание:
1. Введение в объектно-ориентированные концепции
2. Как научиться мыслить в объектных категориях
3. Продвинутые объектно-ориентированные концепции
4. Строение класса
5. Руководство по проектированию классов
6. Проектирование с применением объектов
7. Освоение наследования и композиции
8. Фреймворки и многократное использование: проектирование с применением интерфейсов и абстрактных классов
9. Построение объектов и объектно-ориентированное проектирование
10. Создание объектных моделей
11. Объекты и переносимые данные: XML и JSON
12. Сохраняемые объекты: сериализация, маршалинг и реляционные базы данных
13. Объекты в веб-сервисах, мобильных и гибридных приложениях
14. Объекты и клиентские/серверные приложения
15. Паттерны проектирования
Читать полностью »
Пишем свой шаблонизатор на Python
2013-05-25 в 21:59, admin, рубрики: python, перевод, переводы, Программирование, Регулярные выражения, шаблонизатор, метки: python, перевод, Программирование, регулярные выражения, шаблонизатор Наверняка многие из вас задумывались о том, как устроены шаблонизаторы, какого его внутреннее устройство и каким образом происходит преобразование в фрагменты HTML-кода, однако не догадывались о каких-то особенностях его реализации. Поэтому давайте реализуем упрощенную версию движка шаблонов и продемонстрируем как это работает «под капотом».
Читать полностью »
Скрываем процесс в диспетчере задач Windows
2013-05-25 в 20:54, admin, рубрики: Delphi, windows, анонимность, Песочница, Программирование, процессы, метки: Delphi, windows, анонимность, Программирование, процессыIntro
Часто анонимность и скрытность играют ключевую роль в успешном выполнении каких-либо действий как в реальности, так и в виртуальности, в частности в операционных системах. В данной статье речь пойдет о том, как стать анонимным в OS Windows. Вся информация предоставлена лишь для цели ознакомления.
Итак, мы попробуем скрыться от глаз пользователя в диспетчере задач Windows. Способ, с помощью которого мы будем этого добиваться является чрезвычайно простым по отношению к тем, которые основаны на перехвате ядерных( часто недокументированных ) функций и на создании собственных драйверов.
Суть метода: поиск окна Диспетчера Задач -> поиск в нем дочернего окна( списка ), содержащего имена всех процессов -> удаление из списка нашего процесса.
Как видно, что с нашим процессом никаких манипуляций производиться не будет: он как работал, так и будет себе работать. Так как стандартный рядовой пользователь Windows, как правило, не использует никаких других тулз для просмотра запущенных процессов на его компьютере, то это лишь сыграет нам «на руку». Процесс в большинстве случаев обнаружен не будет.
Что использовалось для исследования:
1) Spy++ от Microsoft ( для изучения иерархии дочерних окон Диспетчера задач )
2) OllyDBG для просмотра функций, используемых диспетчером для получения снэпшота процессов.
3) Собственно, сам taskmng.exe( Диспетчер задач )
А давайте я вам расскажу про градиенты!
2013-05-24 в 21:42, admin, рубрики: java, Алгоритмы, градиент, обработка изображений, Программирование, метки: java, Алгоритмы, градиент, обработка изображений, Программирование
скрин финального результата
В этой статье я рассказываю о том, как я изобрел свой личный велосипед, рисующий градиент практически как в фотошопе. Сразу предупреждаю, алгоритм ужасно медленный и неоптимизированный. Оптимизацией и рассмотрением какого-нибудь популярного алгоритма градиента я собираюсь заняться во второй части статьи
Зачем?
Как-то захотелось мне реализовать программную отрисовку градиентов, максимально похожих на фотошоповские. Никакой конкретной цели у меня не было, так, интересная задачка на вечер. В качестве языка была выбрана Java. Важной идеей было то, что я хотел написать этот алгоритм именно своими силами, не подглядывая в чужие алгоритмы.
Читать полностью »