Рубрика: 2. Теория программирования

Теоретические аспекты программирования

Про JavaScript (не для JavaScript программистов).

Последние полтора месяца пишу для одного своего заказчика графический движок на JavaScript (HTML5/Canvas), который будет рисовать в браузере некоторые их инженерные схемы. Параллельно консультирую штатных программистов, у которых не очень большой опыт работы с JavaScript-ом. При кажущейся простоте JavaScript не создан для легкого написания надежного кода. Для самопроверки пользуюсь jsLint-ом и периодически запускаю google closure […]

Поиск. КМП-алгоритм

Недавно на досуге решил написать алгоритм КМП  (Кнута — Морриса — Пратта) для Scala. Изначально, мне нужно было решить простенькую задачку — найти последовательность байт в потоке байтов. Сделал на Java. Потом, решил сделать тоже самое на Scala. Занятно, но в стандартной библиотеке коллекций Scala используется именно КМП поиск. Вот мой вариант.

Самый лучший Singleton

Из всех существующих на момент написания этого поста реализаций шаблона Singleton (одиночка) мне больше всего нравится эта: public class Singleton { // Private constructor prevents instantiation from other classes private Singleton() {}   /** * SingletonHolder is loaded on the first execution of Singleton.getInstance() * or the first access to SingletonHolder.INSTANCE, not before. */ private […]

Как рисовать UML диаграммы классов.

Диаграмма классов. Архитекторы программного обеспечения разговаривают на языке UML. Это такая своеобразная программисткая латынь. Использовать UML напрямую для программирования  неудобно, зато многие его понимают и используют для выписывания рецептов описания архитектуры системы. Нарисовал диаграмму классов и стало понятней что к чему. Её поймет и дельфист и жаваист, и сишник и  питоньшик, и сишарпер и рубист […]

Хранение семантических данных. Связка: Jena / Jenabean + Sparql

1. Jena В поисках средств для работы с семантическими данными (semantic web) на java можно наткнуться на  следующие решения: Jena JRDF Sesame В данной статье я хочу рассмотреть работу только с  Jena.  Этот фреймворк достаточно богат по набору  полезных фишек, например он позволяет работать с RDF, RDFS, OWL, осуществлять запросы через  SPARQL, есть возможность читать […]

деревья и реляционные базы данных. вложенные множества.

Для работы с древовидными (иерархическими) структурами в первую очередь следует постараться понять какие действия будут осуществляться часто, а какие эпизодически. Цель статьи не описать все возможные способы хранения таких данных,  а в сжатом виде виде описать два часто встречающихся  подхода и область их наилучшего применения. 1.  Узел хранит информацию о родителе. Это  классика. CREATE TREE_NODE […]

Сортировка за O(N)-время

Случайно наткнулся на статью на java.dzone.com — Fast O(n) Integer Sorting Algorithm! Всегда считал что O(n*log(n) ) это очень хороший показатель.  Например, стандартная реализация сортировки в Java 6 является слегка модифицированным вариантом merge sort, которая  соответственно дает время n*log(n).  Получить ультра ускорялку сортировки можно используя дополнительные хитрости: используя дополнительные знания о самих объектах которые мы сортируем […]

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

GoF Шаблоны проектирования При работе с шаблонами мне интересен был в первую очередь практический аспект.  Сейчас в 2010 году уже существует достаточно много информации и учебников по шаблонам проектирования как в интернете, так и в печатных изданиях. «Классикой жанра» считается книжка «банды четырех» (англ: «Gang Of Four» или просто GoF) — книга написанная Эрихом Гаммой […]

Нефункциональные требования к проектируемому ПО.

Scalability, Extensibility, Maintainablity , Availability, Manageability и Reliability