войти зарегистрироваться

C++Про абстракции и метод рефакторинга «Extract method» из песочницы

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

SQLПрименение метамодели при проектировании баз данных с несколькими абстрактными слоями (часть 2)

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

Первая часть: http://habrahabr.ru/blogs/sql/119317/

SQLПрименение метамодели при проектировании баз данных с несколькими абстрактными слоями

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

Персональные блоги Высокоуровневая абстракция в программировании. Наш друг и враг

Большая часть прогресса, который мы наблюдаем за окном, это результат человеческой лени. Лень было красить забор кисточкой, изобрели валик. Лень было красить валиком, изобрели пульверизатор. Ну Вы поняли. Какое это все имеет отношение к программированию? Самое непосредственное!

Друг


Первые программисты манипулировали такими понятиями как «0» и «1» и это было долго и непонятно. Человеческая лень предложила при помощи ноликов и единичек написать программу преобразующую MOV, ADD, JMP в новые нолики и единички, понятные процессору.

JAVAВсе хорошо в меру или наконец-то в Java появился универсальный логгер

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


Вы будете смеяться. Когда «сommon-logging» пришел с универсальной системой протоколирования, абстрагирующей ваш println (я знаю, вы можете написать регистратор, который отправляет SMS и запускает ракеты), я думал: «как это здорово»!

Но увлекшись обобщениями трудно остановиться. Только J2EE сообщество способно запроектировать 12 уровней абстракций для организации системы выборочного универсального протоколирования.

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

Библиотека SLF4J является альтернатвой разработке Apache Common Logging для обобщения протоколирования. Она делает все правильно: дает регистратор, а не журнал. Более того, регистратор является интерфейсом, который удобно использовать с заглушками EasyMock. Наконец, SLF4J дает очень простой и разумный подход: комбинацию JAR c интерфейсом и JAR с одной из нескольких реализаций. Вот и все, никакой магии с загрузчиками классов и динамическим связыванием. Это идеальное решение для 99.99999% приложений.

А может кому-нибудь написать еще одну надстройку для «Commons-Logging» и «SLF4J»? Ведь в этом случае можно было бы переключаться между ними без какой-либо правки кода. :-)

PHPЧто такое полиморфизм на самом деле. В PHP он тоже существует.

Написать этот пост побудила недавняя статья о полиморфизме. Она вызвала много споров, но знающие люди понимают, что автор написал скорее о наследовании и о переопределении методов, чем о полиморфизме. Не буду говорить ни хорошее ни плохое о той статье, а просто расскажу, что такое полиморфизм на самом деле. Дабы начинающие php-программисты не остались в заблуждении.

PHPАбстракция БД

Когда я только начинал писать на PHP, ООП я владел, пожалуй, на уровне синтаксиса, не более. В то время мне вполне хватало функций mysql_*. Со временем, опыта становилось больше, я начинал задумываться об оптимизации. Этот топик описывает эволюцию моего кода.

Ненормальное программированиеwww.contextfreeart.org — программирование на службе искусства

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

Сегодня наткнулся на интересный проект: contextfree

Все помнят курс теории компиляторов с университета? contextfree — генератор изображений на основе контекстно-свободных грамматик. Терминалами выступают простые графические примитивы (CIRCLE, SQUARE, TRIANGLE и т.д.). Нетерминалы задаем мы. Правила вывода могут включать в себя так называемые преобразования (повернуть, отразить, сдвинуть, поменять цвет). На основе этой простой модели можно получать очень интересные вещи… буквально несколькими строчками кода.

Начнем с простого примера:
startshape JustASquare //Начальный символ грамматики

background { b -1 } //Здесь мы задаем фон. b -1 - означает преобразование
//По умолчанию фон белый (brightness = 1), мы изменяем brightness до 0.

rule JustASquare { // Здесь мы задаем простое правило.
SQUARE { b 1 r 45 } // Белый квадрат, повернутый на 45 градусов.
}



ПрограммированиеМногоуровневая абстракция

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

Данная статья содержит лишь теорию. Практической будет следующая статья (постараюсь чередовать).