Научная статья на тему 'Внедрение политик безопасности в программные системы обработки информации'

Внедрение политик безопасности в программные системы обработки информации Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
219
55
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
СИСТЕМА ОБРАБОТКИ ИНФОРМАЦИИ / ПОЛИТИКА БЕЗОПАСНОСТИ / АСПЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ / ВИРТУАЛЬНАЯ МАШИНА / ASPECTTALK / INFORMATION PROCESSING SYSTEMS / SECURITY POLICY / ASPECT-ORIENTED PROGRAMMING / VIRTUAL MACHINE

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Стефанцов Дмитрий Александрович

Рассматривается проблема защиты систем обработки информации (СОИ) посредством интеграции их с политиками безопасности (ПБ). Проанализированы существующие методы решения этой проблемы, отмечены их недостатки и предложен оригинальный метод её решения с помощью аспектно-ориентированного программирования (АОП), лишённый этих недостатков. В отличие от традиционных реализаций АОП, в данном методе аспект ПБ присоединяется к СОИ посредством соединительного модуля без изменения программных модулей СОИ и ПБ, написанных независимо друг от друга и от соединительного модуля. Для реализации этого метода созданы инструментальные средства в составе языка АОП AspectTalk, виртуальной машины и транслятора с языка AspectTalk в язык виртуальной машины. Работа содержит краткое описание предложенного метода и перечисленных инструметальных средств его реализации.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

The problem of protecting information processing systems by implementing security policies in them is considered. The existing methods for solving this problem are analyzed, their disadvantages are noted, and the original method is proposed which avoids the noted disadvantages and is based on the aspect-oriented programming. In contrast to traditional aspect-oriented programming implementations, in the proposed method the security policy aspect is joined to the information processing system with the special integration module and without modification of either the information processing system or the security policy aspect that are written independently from each other and from the integration module. For the implementation of the method, the instrumental environment is created including the aspect-oriented programming language AspectTalk, the virtual machine and the translator from AspectTalk into the virtual machine language. The article contains the brief description of both the proposed method and the noted instrumental environment.

Текст научной работы на тему «Внедрение политик безопасности в программные системы обработки информации»

2011 Математические основы компьютерной безопасности №3(13)

МАТЕМАТИЧЕСКИЕ ОСНОВЫ КОМПЬЮТЕРНОЙ БЕЗОПАСНОСТИ

УДК 004.4’2+004.43

ВНЕДРЕНИЕ ПОЛИТИК БЕЗОПАСНОСТИ В ПРОГРАММНЫЕ СИСТЕМЫ ОБРАБОТКИ ИНФОРМАЦИИ

Д. А. Стефанцов Томский государственный университет, г. Томск, Россия E-mail: d.a.stefantsov@isc.tsu.ru

Рассматривается проблема защиты систем обработки информации (СОИ) посредством интеграции их с политиками безопасности (ПБ). Проанализированы существующие методы решения этой проблемы, отмечены их недостатки и предложен оригинальный метод её решения с помощью аспектно-ориентированного программирования (АОП), лишённый этих недостатков. В отличие от традиционных реализаций АОП, в данном методе аспект ПБ присоединяется к СОИ посредством соединительного модуля без изменения программных модулей СОИ и ПБ, написанных независимо друг от друга и от соединительного модуля. Для реализации этого метода созданы инструментальные средства в составе языка АОП AspectTalk, виртуальной машины и транслятора с языка AspectTalk в язык виртуальной машины. Работа содержит краткое описание предложенного метода и перечисленных инструметальных средств его реализации.

Ключевые слова: система обработки информации, политика безопасности, аспектно-ориентированное программирование, AspectTalk, виртуальная машина.

Введение

Защита информации, хранимой и преобразуемой в системах обработки информации (СОИ), является актуальной проблемой с момента появления многопользовательских компьютерных систем [1]. При разработке защиты таких систем определяется модель нарушителя в виде формального описания набора угроз системе и/или атак на неё, а также политика безопасности (ПБ) в виде набора формальных правил противодействия последним [2]. Невозможность компрометации системы при условии следования правилам ПБ доказывается соответствующими теоремами безопасности [1-3].

Одной из первых формальных ПБ, разработанных для реализации в вычислительных системах, является модель Белла — ЛаПадулы [1]. Обзор большинства существующих моделей безопасности можно прочитать в [3]. Министерством обороны США представлена классификация вычислительных систем на основе реализации ПБ для определённых моделей нарушителя [4].

Помимо политик разграничения доступа, в понятие ПБ будем включать любые требования к защите СОИ, например использование криптографических средств защиты информации и специальных методов преобразования информации, таких, как фильтрация и кодирование.

Программную составляющую защищённой СОИ можно разделить на две части (подсистемы)—часть, реализующую целевую обработку информации (далее — часть

ОИ), и часть, реализующую программную модель ПБ (далее — часть ПБ). Примерами подобной модели могут служить следующие алгоритмы и структуры данных, реализующие действия, предписываемые ПБ:

1) учётные записи пользователей, списки прав доступа — при реализации политики разграничения доступа;

2) алгоритмы шифрования и цифровой подписи, криптографические протоколы, хранилища ключевой информации — при реализации криптографической защиты данных;

3) алгоритмы фильтрации вводимых данных для предотвращения SQL-инъекций и XSS-атак.

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

При изменении модели нарушителя соответствующие изменения вносятся в часть ПБ, что может повлечь за собой необходимость изменения части ОИ. Примером подобных изменений может служить реализация политики мандатного разграничения доступа SELinux для операционной системы (ОС) GNU/Linux, ранее обладавшей только дискреционной политикой разграничения доступа [5]. Тесная интеграция программных реализаций СОИ и ПБ является препятствием к внесению изменений в ПБ.

Примером СОИ, в которой части ОИ и ПБ реализованы раздельно, может служить ОС Mac OS X 10.4. В ней при необходимости организации доступа субъекта системы к её объекту вызывается специальная функция подсистемы kauth [6]. Эта функция опрашивает множество специальных модулей, ответственных за реализацию политики разграничения доступа. На основании ответов, полученных от модулей, функция вычисляет ответ подсистемы безопасности на запрос доступа: разрешение или отказ. Модули, выносящие решение в соответствии с некоторой ПБ, разрабатываются и реализуются независимо от ядра ОС в соответствии со специальными правилами и могут быть загружены в память ОС администратором системы. Таким образом, для реализации некоторой политики разграничения доступа с помощью подсистемы kauth необходимо описать совокупность модулей на некотором языке программирования, скомпилировать их и загрузить в память ОС. На рис. 1 схематически изображена работа ОС с реализованной в ней подсистемой kauth.

Гм]

,

Гм] Гм] Гм] Гм] Гм]

Ядро ОС

Рис. 1. Подсистема kauth ОС Mac OS X 10.4: цепочки модулей M определяют возможность предоставления доступов J

Подсистема kauth реализована также в ОС NetBSD [7]. В работе [8] показана возможность реализации механизма jail ОС FreeBSD в ОС NetBSD средствами подсистемы kauth.

К недостаткам подсистемы каи^ можно отнести невозможность реализации ПБ, не являющейся политикой разграничения доступа.

Автором разработана технология и инструментальная среда создания защищённых СОИ в виде совокупности независимых частей ОИ и ПБ произвольного вида, соединяемых способом, исключающим необходимость их изменения. В основе этого способа лежит аспектно-ориентированное программирование (АОП) [9], модифицированное для случая, когда одна из объединяемых подсистем реализует ПБ, а именно: интеграция частей ОИ и ПБ осуществляется при помощи простых соединительных модулей, которые зависят одновременно от текста программы ОИ и текста присоединяемого аспекта ПБ. Части ОИ и ПБ и соединительные модули представляются в виде исходных текстов на языке АОП Аэрес1Та1к [10], специально разработанном для этой цели. В нём исходные тексты частей ОИ и ПБ являются описаниями классов объектов их предметных областей, а соединительные модули устанавливают соответствие между классами этих частей. В процессе трансляции соответствующие классы объединяются в один. Трансляция выполняется в язык интерпретируемой виртуальной машины (ВМ).

Краткое сообщение об этих средствах создания защищённых СОИ можно найти в [11]. Более развёрнутое изложение основных элементов данной технологии является целью настоящей работы.

1. Краткая характеристика АОП

АОП — это способ программирования, при котором главная подсистема (часть, выполняющая основную функцию системы) может быть реализована независимо от подчинённой подсистемы (части, выполняющей дополнительную функцию — например, реализацию ПБ) [10].

Рассмотрим СОИ, реализованную с помощью традиционного процедурного подхода и состоящую из программы Р и библиотеки Ь (рис. 2). Если в точках 3 программы Р необходим вызов процедуры Г библиотеки Ь, он будет осуществлён явно, что сделает текст программы Р зависимым от текста библиотеки Ь. В случае замены или удаления библиотеки Ь необходимо изменение текста программы Р.

Р

Рис. 2. Использование традиционного подхода в программировании. Текст программы Р зависит от текста библиотеки Ь

Разработка программ с помощью АОП основана на использовании неявных вызовов процедур. Рассмотрим СОИ, состоящую из программы Р и аспекта А (рис. 3). Аспект — это библиотека специального вида, состоящая из описаний состояний программы, а также специальных алгоритмов. Между описаниями и алгоритмами устанавливается соответствие: всякий раз, когда программа достигает состояния, подхо-

дящего под описание С, запускается соответствующий этому описанию алгоритм Д. При этом 3 — это точки выполнения программы, в которых достигаются состояния, подходящие под описание С, и осуществляется неявный вызов алгоритма Д. В данном случае текст аспекта А зависит от текста программы Р, к которой этот аспект применяется, но текст программы Р не зависит от текста аспекта А. К недостаткам данного варианта АОП можно отнести зависимость аспектов от программы, к которой они применяются, что затрудняет перенос аспектов в другие СОИ [12].

Рис. 3. Использование АОП. Текст аспекта А зависит от текста программы Р

АОП не является самостоятельным способом программирования, но реализуется в виде расширения некоторого традиционного способа программирования [12]. А именно, программа Р и алгоритм Д могут быть реализованы без применения аспектов. Аспектное расширение традиционного подхода — это присутствие описаний С состояний программы Р.

2. Метод защиты СОИ с помощью АОП

Опишем метод создания защищённых СОИ средствами АОП, в котором тексты программы и аспектов разрабатываются независимо друг от друга, а для интеграции частей используются специальные соединительные модули, которые зависят одновременно от текста программы и текста присоединяемого аспекта (рис. 4). Соединительные модули предполагаются много проще соединяемых ими частей СОИ.

Рис. 4. СОИ получена интеграцией частей с помощью соединительных модулей

Части ОИ и ПБ предполагаются представленными в виде исходных текстов на объектно-ориентированном языке программирования. Предметной областью части ОИ является целевая предметная область СОИ, предметной областью части ПБ является политика безопасности. Исходные тексты частей ОИ и ПБ — это описания классов объектов соответствующих предметных областей.

Предлагаемая технология основана на установлении соответствия между классами объектов данных предметных областей. На рис. 5 показано соответствие между классами двух предметных областей: Ишх-подобной ОС и дискреционной политики разграничения доступа.

Часть ОИ Часть ПБ

Рис. 5. Диаграмма классов и примесей Unix-подобной системы обработки файлов

Классы подчинённой системы (в данном случае — ПБ) называются примесями, а соответствие примесей части ПБ и классов части ОИ обозначается «mix». По данному соответствию на этапе трансляции происходит объединение классов и примесей в составной класс, множество член-данных которого — это объединение множеств член-данных соответствующих класса и примесей, а множество член-функций — объединение множеств член-функций соответствующих класса и примесей (рис. 6). Соответствие «mix» является альтернативной реализацией механизма множественного наследования.

Файл

Член-данные Член-функции

Имя Открыть

Дата Считать

Записать

Закрыть

Объект

Член-данные Член-функции Конверты

Идентификатор владельца Идентификатор группы Права доступа владельца Права доступа группы Права доступа прочих польз. Авторизовать Доступ

v

Файл-объект

Член-данные Член-функции Конверты

Имя Дата Открыть Считать Записать Закрыть

Идентификатор владельца Идентификатор группы Права доступа владельца Права доступа группы Права доступа прочих польз. Авторизовать Доступ (открыть)

Рис. 6. Объединение класса и примеси на этапе трансляции

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

Рассмотренный механизм примесей похож на описанный в [12], однако в [12] примесь реализована в виде базовой конструкции языка. Предлагаемый же подход основан на реализации в языке протокола метаобъектов [13] в качестве базовой конструкции с последующей реализацией примесей на самом языке программирования. Это позволяет упростить семантическую модель языка и не различать примеси, модифицирующие алгоритмы, и примеси, модифицирующие структуры данных, как это сделано

в [12].

Таким образом, реализован следующий метод построения СОИ, защищённых ПБ:

1) часть ОИ описывается в терминах классов;

2) часть ПБ описывается в терминах примесей;

3) соединительные модули описываются в виде сопоставлений класс — примесь, а

также указания шаблонов для алгоритмов-конвертов.

3. Краткая характеристика языка AspectTalk

Для создания СОИ, защищённых с помощью АОП, необходим специальный аспектно-ориентированный язык программирования (АОЯП), на котором описываются программа и её аспекты. Первым АОЯП принято считать AspectJ [14, 15] —расширение объектно-ориентированного языка программирования Java. В AspectJ описания C состояний программы P (см. рис. 3) даются в виде набора синтаксических конструкций, и состояние считается достигнутым, если выполняется действие, соответствующее той или иной конструкции языка. В других АОЯП, например в MetaclassTalk [12], под состоянием понимается состояние специальных переменных. О других способах реализации АОП можно прочитать в [16-18].

Для экспериментального исследования изложенного выше метода создания защищённых СОИ разработан и реализован АОЯП AspectTalk [10]. За его основу взят диалект Little Smalltalk объектно-ориентированного языка программирования Smalltalk [19].

Все типы данных в AspectTalk являются объектами. Среди объектов выделяется подмножество, называемое классами. С помощью классов и иерархии их наследования реализуются механизмы создания объектов и установления соответствия между объектами и их член-данными и член-функциями.

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

Язык AspectTalk содержит следующие базовые операции:

1) примитивы ВМ, с помощью которых производятся низкоуровневые действия, такие, как сложение чисел, работа с файлами;

2) посылка сообщения — это базовая операция, которая приводит к вызову член-функции, определяемой в соответствии с иерархией наследования классов;

3) возврат результата — операция, приводящая к завершению работы член-функции и возврату выполнения программы на следующую команду после соответствующей посылки сообщения;

4) присвоение — операция, с помощью которой переменным присваиваются указатели на объекты.

Как и в Smalltalk, в AspectTalk есть специальный тип данных — метаклассы, но, в отличие от Smalltalk, метаклассы в AspectTalk не только являются классами классов, но и позволяют программисту давать ВМ дополнительные указания о работе объектной системы. Эти указания определяются в виде обработчиков операции посылки сообщения от объекта к объекту и наследуются метаклассами в иерархии наследования метаклассов. Более подробное описание языка AspectTalk с примером реализации с его помощью некоторой ПБ можно найти в [10].

4. Краткая характеристика интерпретатора

В большинстве случаев АОЯП разделяется на две составляющие: базовый язык программирования, с помощью которого реализуются основная часть программы и алгоритмы аспектов, и аспектное расширение, с помощью которого аспекты присоединяются к программе. Транслятор с такого языка реализуется, в основном, следующим образом. Этап трансляции разделяется на два шага. На первом шаге программа, написанная на базовом языке программирования совместно с его аспектным расширением, транслируется в программу, содержащую только конструкции базового языка программирования. В результате выполнения этого шага все неявные вызовы процедур аспекта, которые могут быть определены без запуска программы, заменяются на явные в автоматическом режиме. Если вызов процедуры может быть осуществлён на основе информации, доступной только во время выполнения программы, то во всех предположительных местах вызова помещается обращение к специальной библиотеке, которая определяет необходимость вызова процедуры аспекта. На втором шаге осуществляется трансляция с базового языка программирования на язык машины, выполняющей программу.

Возможен другой способ реализации транслятора с АОЯП, используемый в данной работе,—в виде ВМ, внутренние структуры данных и алгоритмы которой реализуют программную модель АОЯП, и транслятора с АОЯП в язык ВМ. В этом случае трансляция осуществляется за один шаг — программа, написанная на базовом языке программирования и его аспектном расширении, транслируется в язык ВМ напрямую. Совокупность транслятора и ВМ далее будем называть интерпретатором. Интерпретация менее эффективна по времени и по памяти, чем компиляция, однако реализуется более простым способом и более наглядна.

В интерпретаторе с языка AspectTalk во многом повторяется структура интерпретатора с языка Smalltalk [19]. Основные принципы, применяемые для перевода программы с AspectTalk в язык ВМ, не новы и описаны в [20].

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

помещаются и извлекаются с вершины стека, а также преобразуются специальными командами.

Команды ВМ можно разделить на следующие группы:

— примитивы ВМ;

— команды создания объектов;

— команды, помещающие значение переменной на вершину стека;

— команды, сохраняющие в переменных объект с вершины стека;

— команды, посылающие сообщение объекту, находящемуся на вершине стека (при этом параметры сообщения также берутся из стека);

— команда возврата из процедуры;

— команды удаления и дублирования объекта на вершине стека.

Примитивы ВМ — это операции обращения к ВМ для выполнения низкоуровневых операций, такие, как сложение целых чисел, выделение памяти, вывод строки на экран, работа с файлами и т. д. Поиск переменных по имени осуществляется в соответствии с моделью лексического окружения, описанного в [21].

Основа работы интерпретатора — объектная модель. В этой модели вся система представлена в виде совокупности объектов, посылающих сообщения другим объектам. Получив сообщение, объект осуществляет его диспетчеризацию — поиск процедуры, которая должна быть выполнена в ответ на сообщение, после чего объект возвращает результат работы процедуры отправителю сообщения. Совокупность сообщений, для которых объект может найти соответствующую процедуру, называется протоколом этого объекта. В большинстве систем существует множество объектов, обладающих одинаковым протоколом. Для того чтобы упростить алгоритм поиска процедур для таких объектов, в объектно-ориентированном программировании вводится специальное понятие — класс. Класс — это объект, который осуществляет диспетчеризацию сообщений для объектов, обладающих одинаковым протоколом. Такие объекты называются экземплярами этого класса. Вводится также отношение наследования, которое организует классы в иерархию: потомок может обработать те же сообщения, что и предок, и ещё некоторые дополнительные сообщения.

В свою очередь, метаклассы — это классы классов. Они не только осуществляют диспетчеризацию сообщений, отправляемых классам, но и могут заменить у некоторых классов процедуру диспетчеризации сообщений, посылаемых экземплярам этих классов. Этот механизм называется протоколом метаобъектов и описан в [13]. С помощью этого механизма реализовано АОП в Азрее1Та1к: всякий раз, когда некоторому объекту посылается сообщение, метакласс прерывает его диспетчеризацию и проверяет посылаемое сообщение на соответствие набору регулярных выражений. Если соответствие найдено, то запускается специальный алгоритм-конверт, соответствующий регулярному выражению. Если соответствия не найдено, то метакласс возобновляет диспетчеризацию сообщений через иерархию классов.

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

Заключение

Разработаны технология и инструментальная среда создания защищённых СОИ в виде совокупности независимых частей (подсистем) — ОИ и ПБ произвольного вида,

соединённых простым способом, основанном на АОП, модифицированном для случая, когда одна из подсистем — это реализация ПБ. В составе разработанных средств:

1) язык программирования AspectTalk, обладающий конструкциями базового языка программирования Smalltalk и метаязыковыми конструкциями;

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

2) ВМ, выполняющая операции над данными, описанными на языке AspectTalk;

3) транслятор с языка AspectTalk в язык ВМ.

Разработанная технология предполагает:

1) описане ОИ в терминах классов;

2) описание ПБ в терминах примесей;

3) описание соединительных модулей путём сопоставлений класс — примесь и указания шаблонов для алгоритмов-конвертов.

Научная новизна исследования состоит в модификации аспектно-ориентированного подхода в программировании, состоящей в специализации средств метаязыка, а именно: в классическом АОП они используются при написании аспекта совместно с операциями объединения с основной программой, в модификации — только при написании соединительных модулей. Последнее упрощает процедуру повторного использования аспектов: вместо переписывания заново самого аспекта (в классическом подходе) переписывается только соединительный модуль (в новом подходе), который, как правило, много проще присоединяемого аспекта.

Использование разработанных методов и средств позволяет снизить затраты на внесение изменений в ПБ СОИ, а также повторно использовать реализации ПБ при разработке новых программных систем.

ЛИТЕРАТУРА

1. Bell D.E. and LaPadula L. J. Secure computer system: Unified exposition and multics interpretation: Tech. Rep. ESD-TR-75-306. The MITRE Corporation, 1976.

2. Landwehr C. E. Formal models for computer security // ACM Comput. Surv. 1981. V. 13. No. 3. P. 247-278.

3. Девянин П. Н. Анализ безопасности управления доступом и информационными потоками в компьютерных системах. М.: Радио и связь, 2006. 176с.

4. DoD 5200.28-STD (Trusted Computer System Evaluation Criteria) USA: National Computer Security Center, 1985. 116 p.

5. http://www.nsa.gov/research/selinux/index.shtml — Security-Enhanced Linux. 2009.

6. http://developer.apple.com/library/mac/#technotes/tn2127/_index.html — Technical Note TN2127. Kernel Authorization. 2010.

7. http://netbsd.gw.com/cgi-bin/man-cgi?kauth+9+NetBSD-current — NetBSD Kernel Developer’s Manual. kauth. 2009.

8. http://2008.asiabsdcon.org/papers/P3A-paper.pdf — Implementing Jails Under the kauth Framework. 2008.

9. ElradT., Filman R. E., and Bader A. Aspect-Oriented Programming // Commun. ACM. 2001. V. 44. No. 10. P. 29-32.

10. Стефанцов Д. А. Реализация политик безопасности в компьютерных системах с помощью аспектно-ориентированного программирования // Прикладная дискретная математика. 2008. №1. С. 94-100.

11. Стефанцов Д. А. Технология и инструментальная среда создания защищённых систем обработки информации // Прикладная дискретная математика. Приложение. 2009. №1. С.55-56.

12. Bouraqadi N., Seriai A., and Leblanc G. Towards unified aspect-oriented programming // ESUG 2005 Research Conference. Brussels, Belgium, 2005. 22 p.

13. Kiczales G. The Art of Meta-Object Protocol. The MIT Press, 1991. 345 p.

14. http://eclipse.org/aspectj — The AspectJ Project. 2011.

15. Kiczales G., Hilsdale E., Hugunin J., et al. Getting Started with AspectJ // Commun. ACM. 2001. V. 44. No. 10. P. 59-65.

16. Diaz Pace J. A. and CampoM.R. Analyzing the Role of Aspects in Software Design // Commun. ACM. 2001. V.44. No. 10. P. 67-73.

17. Lieberherr K., Orleans D., and Ovlinger J. Aspect-Oriented Programming with Adaptive Methods // Commun. ACM. 2001. V.44. No. 10. P. 39-41.

18. Bergmans L. and Aksit M. Composing Crosscutting Concerns Using Composition Filters // Commun. ACM. 2001. V.44. No. 10. P. 51-57.

19. Goldberg A. and Robson D. Smalltalk 80 —The Language and its implementation. Addison-Wesley, 1983. V. 1. 714 p.

20. Ахо А., Ульман Дж., Сети Р. Компиляторы: принципы, технологии и инструменты. М.: Вильямс, 2003. 768с.

21. АбельсонХ., Сассман Дж. Структура и интерпретация компьютерных программ. М.: Добросвет, 2006. 608 с.

i Надоели баннеры? Вы всегда можете отключить рекламу.