ООП для чайников. Паттерны проектирования. Декоратор (decorator)

Еще один паттерн из группы структурирующих, — декоратор. Его назначение в том чтобы возложить дополнительные обязанности (прозрачные для клиентов) на отдельный объект, а не на класс в целом. Функциональность обязанностей реализуется в небольших объектах. Преимущество состоит в возможности динамически добавлять эту функциональность до или после основной функциональности объекта ConcreteComponent. Декоратор позволяет разгрузить приложение от классов с похожей функциональностью. Классический пример Декоратора, — это какой-нибудь класс, рисующий прямоугольник, с добавлением декораторов, которые рисуют рамки, заливают цветом или изображением. Причем, применение декоратора, рисующего рамку дважды, нарисует двойную рамку. На диаграмме Декоратор выглядит так: Пример реализации паттерна Декоратор: class

Continue Reading

ООП для чайников. Паттерны проектирования. Компоновщик (composite)

Следующий паттерн, – компоновщик (composite), тоже из группы структурирующих. Компоновщик организует объекты в древовидные структуры для представления иерархии часть-целое. Всевозможные иерархии деревьев страниц в каталогах, файлов в папках являются яркими представителями паттерна Компоновщик. Диаграмма для Компоновщика, выглядит так: Реализовывая Компоновщик, нужно помнить о том чтобы интерфейс Component был максимально дополнен используемыми публичными методами, избавляя клиента от приведения к типу или проверки существования метода (в случае скриптовых языков). Также? стоит сразу позаботиться о максимально удобном функционале для управления элементами (помимо стандартных

Continue Reading

ООП для чайников. Паттерны проектирования. Мост (bridge)

Следующий патерн, также относится к типу структурных, и называется — мост. Смысл этого паттерна в том чтобы отделить абстракцию от реализации. В каком-то смысле он очень похож на адаптер, с той разницей что адаптер, «адаптирует» интерфейсы классов друг к другу, а мост, разделяет их, для того что бы сделать возможным изменение интерфейсов независимо от реализации. Вот как выглядит он выглядит на диаграмме: Этот патерн следует применять, например, когда нужно отвязать интерфейс от реализации во время выполнения. Мост повышает расширяемость, позволяя независимо расширять абстракции и реализации. Пример реализации паттарна Мост на Python: class SortAbstraction: def sortImpl(self, sortImpl): self._sortImpl = sortImpl

Continue Reading

GTD – наука успевать вовремя

Первый раз, мне в руки попала книга Дэвида Аллена задолго до того как это стало культовой и модной штукой. Как и все хорошие книги такого содержания, она совершила очередной «переворот в мозгах», — «как я жил раньше не организовывая и планируя каждый шаг», стучало в голове. Эта книга подталкивают вас к действиям, — но если ничего не предпринимать, суть этого знания начинает ускользать и забываться. Так случилось и со мной. Все же, желание повысить свою эффективность было довольно сильным, поэтому я вернулся к Дэвиду Аллену (надо сказать, не раз), перепробовал различные инструменты, и начал вырабатывать собственную систему, которая постепенно начинает работать для

Continue Reading

ООП для чайников. Паттерны проектирования. Адаптер (adapter)

С недавнего времени, мы в команде завели такую практику как обмен опытом. Сначала мы пробовали просто готовить доклады, на всякого рода интересные темы касающиеся технологий, практик и подходов. Но, этот подход не совсем себя оправдал, и мы стали готовить небольшие доклады на заранее оговоренные темы, например, — паттерны проектирования. Идея состоит в том что мы выбираем несколько паттернов, делаем лаконичный пример использования, на каком-то языке не связанной с основной работой (php). Затем мы собираемся, показываем свои примеры, и обсуждаем конкретный паттерн и реализацию. Так у нас накопилось некоторое количество реализаций на Python, Ruby, Groovy. На самом деле, как мы потом убедились, выбор скриптового

Continue Reading

Google App Engine – знакомство, плюсы и минусы, полезные советы

Google App Engine это платформа предлагаемая компанией Google для веб-разработчиков. Не будет преувеличением, сказать, что проблема роста и разумной экономии на масштабируемости и производительности стоит перед разработчиками с самого начала работы над проектом. С одной стороны, огромное количество стартапов, разработчики которых даже приблизительно не могут представить себе характер и объем нагрузок на сайт, а желая иметь некоторый запас производительности оптимизация, зачастую, начинается с первых строк кода. С другой стороны, надо сказать что приложения, которые должны легко масштабироваться имеют весьма сложную архитектуру внутри, и написание такого кода, тоже весьма специфично. Отдельо нужно упомянуть то, что

Continue Reading

Мониторинг сайтов и уведомление по почте без установленного почтового сервера

По независящим от нас причинам упал сайт, спустя несколько часов только узнали об этом, поэтому было решено, для "быстрого реагирования", сделать мониторинг на локальном сервере, одна беда, он в интранете и почтового сервера на нем нет. В результате был сделан несложный скрипт, позволяющий отправлять отчеты о падении с любого доступного вам почтового адреса (gmail.com, mail.ru, yandex.ru). Поддерживается TLS авторизация для SMTP и HTTPS для протокола мониторинга.

Примеры успешных Semantic Web проложений

Иногда проще один раз увидеть чем сто раз услышать, так и с Semantic Web. Речь пойдет о тех проектах которые встречались мне последнее время, и реализация и успех которых стали возможно именно благодаря rdf, owl, sparql и прочим прелестям семантического веба. Первый проект о котором стоит рассказать это freebase.com, своего рода википедия, построенная по канонам Semantic Web. Сложно даже назвать это проектом, — это целая платформа, позволяющая строить на ней свои приложения, прямо в броузере, используя довольно функциональную IDE: Разработчики отказались от использования SPARQL, в пользу более функционального, по их мнению, json-подобного собственного языка запросов.

Continue Reading

Работа Garbage Collector в Flash Player

Это будет короткий пост об особенностях работы GarbageCollector (сборщик мусора), некоторые из которых были для меня новостью. Во-первых давайте напишем следующий код: import flash.display.Sprite; function onFrame(e: Event) { trace(System.totalMemory); var test = new Sprite(); } addEventListener(Event.ENTER_FRAME, onFrame) Запустив его вы убедитесь что плеер выделяет всё больше и больше памяти для себя, и спустя какое-то время, – начинает освобождать. То есть, память очищается не сразу же, как только на объект все ссылки удалены, а только через какое-то время. Графически это выглядит

Continue Reading

Дайджест ссылок №11

увлекательнейшая история про математика, подсмотрел у Constantiner’a В этом видео (английский, с русскими субтитрами) Ден Пинк, рассказывает о мотивации в духе классических евангелистов. Меня, проняло. Хорошая статья, полезная тем кто посматривает в сторону flex-разработки на Mate. Грант Скиннер, в простых словах говорит о том что беспокоится о преждевременной кончине Flash — себе нервы вредить. Не стоит. Делайте то — что любите. Используете то, что подходит больше для решения ваших задач.

Site Footer

Sliding Sidebar

About Me

About Me

For whom this blog for?

For those who are interested in modern Internet technologies, IT business, startups, management, quality control, personal effectiveness, motivation. Here I write about what is interesting, about problems I faced and solutions I found. I hope it will be interesting to you either.

What motivates me to write?

The desire to improve, to study deeper topics that interest me. Find people with similar problems and tasks, together look for ways out and solutions.

Feel free to contact if you have anything to say to me

Old Flash site with my artistic works and misuc.