Для построения информационной модели и проведения ее анализа
будем опираться на общий методологический аппарат, методы прикладной математики
и информатики на уровне применения базовых понятий [2,3]. Прежде чем
использовать объекты, которые относятся к категории Глоссарий в своей
целенаправленной деятельности по построению модели для этой понятийной
категории и формулированию задач, необходимо выполнить несколько предварительных
шагов, которые предписываются Теорией принятия решений [4]:
феноменологическое описание, структуризация проблемы, система классификации,
выделение целей – критериев - альтернатив.
Такой подход, в том числе, позволит понять логику в
обосновании ответов на вопросы. Если мы используем категорию «объект» для
построения модели глоссария, то информатика предопределяет базовые принципы при
проведении анализа: абстрагирование, наследование, инкапсуляция и полиморфизм [9].
В частности, требование инкапсуляции необходимо учитывать при классифицировании
глоссариев, для уменьшения влияния междисциплинарных проблем.
Рисунок 1. Обобщенная классификация Глоссариев
Аналогичными смысловыми понятиями являются следующие
информационные объекты – глоссарий, словарь, список терминов и сокращений,
терминологический справочник. Глоссарий состоит из статей. Статья, как минимум,
содержит термин и тело описания. Тело описания — это определение термина.
В различных приложениях часто возникают задачи, где во времени меняется сама структура системы [4, 5, 6, 7]. Большинство этих примеров относится к иерархическим структурам, графам и, соответственно, их определенной разновидности – к деревьям. Каждое из перечисленных приложений имеет свои особенности, которые приводят к постановке специфических задач и специальных методов их решения. Добавление в этот перечень задачи «Организация систем глоссариев и словарей», основано на рекуррентных правилах построения. Приведем несколько примеров таких задач:
Для постановки и решения задач с изменяемой структурой системы обычно используется формализм теории графов. Кроме использования традиционной нотации графов, для конечных помеченных графов применяется их матричное представление в виде матрицы смежностей или матрицы инциденций [2]. Эквивалентность этих представлений элементарно доказывается существованием взаимно однозначного соответствия элементов графа и соответствующей ему матрицы.
Таблица 1. Промежуточный состав уровней орграфа.
Для орграфа A процедура закончилась на третьем шаге. После этого шага уровень 1 не содержит ни одного внутреннего узла. Это противоречит требованию ацикличности. Нарушение требования не пустоты уровня орграфа произошло при исключении узлов 3 и 5. Необходимо проверить и откорректировать их описание в Глоссарии, затем перестроить орграф и повторить процедуру проверки Глоссария.
Среди цитируемых и использованных работ следует выделить монографию «Методология: словарь системы основных понятий» [1], особенно в ее формате гипертекста. Аналогичным примером Глоссария в подобном формате является «Электропедия: словарь электротехнических терминов и понятий» http://www.electropedia.org/.
Общая презентация по теме "Глоссарии и Иерархии" см. https://sec2017.blogspot.com/2019/03/blog-post.html
Два главных правила, общих для построения любого Глоссария:
- Новое определение термина базируется на ранее определенных терминах.
- Подстановка описания термина не меняет смысл исходного текста.
В различных приложениях часто возникают задачи, где во времени меняется сама структура системы [4, 5, 6, 7]. Большинство этих примеров относится к иерархическим структурам, графам и, соответственно, их определенной разновидности – к деревьям. Каждое из перечисленных приложений имеет свои особенности, которые приводят к постановке специфических задач и специальных методов их решения. Добавление в этот перечень задачи «Организация систем глоссариев и словарей», основано на рекуррентных правилах построения. Приведем несколько примеров таких задач:
- Административная структура организации, система военной субординации.
- Организация систем связи, системы снабжения складов и баз.
- Построение номенклатуры товаров или изделий определенной категории (частично).
- Организация ассоциативной памяти в компьютере.
- Феодальная структура географического района.
- Организация систем глоссариев и словарей.
- Процессы аналитической иерархии.
Такая классификация прикладных систем позволяет наследовать
многие практические результаты из этих смежных областей [8]. С учетом
требования инкапсуляции связанные с Глоссарием задачи уместно разделить на два типа:
- Структурные, которые связаны с общими свойствами модели данных [6].
- Аналитические, которые связаны с выявленными внутренними эмерджентными характеристиками модели, зависящими от семантики данных [7, 10].
Глоссарий — это конечная иерархия
Для постановки и решения задач с изменяемой структурой системы обычно используется формализм теории графов. Кроме использования традиционной нотации графов, для конечных помеченных графов применяется их матричное представление в виде матрицы смежностей или матрицы инциденций [2]. Эквивалентность этих представлений элементарно доказывается существованием взаимно однозначного соответствия элементов графа и соответствующей ему матрицы.
Другим эквивалентным представлением конечных матриц, но возможно
большой размерности и в первую очередь для так называемых «разреженных» матриц,
матриц с большим числом нулевых элементов, используются специальные списочные
структуры [3]. Эквивалентность этих представлений также доказывается
существованием взаимно однозначного соответствия элементов матрицы и элементами
списка.
Традиционная нотация помеченного графа G = ( N, L Í [N X N] ),
где N = { ni } – узлы графа, а L = { (ni , nj) } - дуги графа.
На рисунке 2 приведена списочная структура в формате IDEF1x, допускающая эквивалентное представление элементов графа. Относящиеся к графу поля данных в таблицах Node и Link выделены синим цветом, другие таблицы и поля будут далее использованы для иных целей.
где N = { ni } – узлы графа, а L = { (ni , nj) } - дуги графа.
На рисунке 2 приведена списочная структура в формате IDEF1x, допускающая эквивалентное представление элементов графа. Относящиеся к графу поля данных в таблицах Node и Link выделены синим цветом, другие таблицы и поля будут далее использованы для иных целей.
Такая информационная структура позволяет различать
между узлами симметричные дуги графа (ni , nj) и (nj , ni). Строго говоря приведенную списочную структуру можно
использовать и для мультиграфов, и для псевдографов, поэтому конкретная
структурная разновидность графа может определяться в соответствии с составом хранимых
данных.
Рисунок 2. Списочный способ для представления графа общего
вида
Для дальнейшего рассмотрения понадобится определение Иерархии, которое базируется на общих математических понятиях теории графов [2]
и свободное от использования содержательных интерпретаций [7, 12]. Следует
отметить, что Иерархии всегда появляются там, где у операции, порождающей связи узлов, есть свойства коммутативности и ассоциативности в результате
однонаправленного процесса с запоминанием.
Иерархией
называется безконтурный ориентированный граф, в котором существует узел с
нулевой полустепенью исхода, связанный путями с каждым узлом с нулевой полустепенью
захода.
Ориентированный граф означает, что все дуги в графе несимметричны. У дуги существует только одно направление, которое задается начальным и конечным узлом, а отмечается стрелкой. Маршрутом называется чередующаяся
последовательность узлов и связывающих их дуг. Путь - это маршрут, в котором
все узлы различны. В безконтурном графе любой маршрут — это путь.
Полустепень исхода узла od(n) – это число дуг
с началом в этом узле, а полустепень захода узла id(n) –
это число дуг, заканчивающихся в этом узле.
Для безконтурных орграфов справедлив принцип ориентированной
двойственности. Для любой теоремы об орграфах можно сформулировать
соответствующую двойственную теорему, заменив каждое понятие на обратное [2].
Применительно к списочному способу представления графа (рис.2) можно не
использовать в таблице Link либо
поле Node_In и
соответствующую связь L_In, либо поле
Node_Out и
соответствующую связь.
Рисунок 3. Примеры трех иерархий [12].
Введем ряд обозначений для глоссария G = { gi } , gi = (ti, Si) . Интерпретация этих обозначений в
соответствии с определениями - глоссарий G состоит из
набора статей gi , где каждая
статья содержит, как минимум, название термина ti и текст Si
, раскрывающий его содержание.
Для того, чтобы перейти к формальной структуре H глоссария
G необходимо определить
операцию Et (Extract terms)
по извлечению списка термов TS из текста статьи S глоссария, например,
Et: (TH\t, S)® TS , где TH
= { ti } - список всех tiÎ G , tÇTS
=Æ (1)
если TH это список всех термов G,
то операция Et
определяет для терма t подмножество термов TS Í TH\t ,
которые содержатся в тексте S [11].
Если глоссарий соответствует главным правилам своего
построения, то его можно моделировать графом, со структурой конечной иерархии. Доказательство
основано на следующих трех шагах.
Шаг 1. Правилу 1 соответствует соотношение (1) для любой
статьи g = (t, S) глоссария. Все термы статьи соответствуют узлам в H.
Связи между термами определения и термом статьи ({ ti }, t)
соответствуют ориентированным дугам в H. Из такого способа построения следует, что H – орграф.
Шаг 2. Докажем свойство ацикличности (безконтурности) H. Предположим
обратное, пусть существует некоторый маршрут в H, в котором
начальный и конечный узлы (термы) совпадают. Поскольку каждому узлу соответствует статья глоссария, то каждому узлу маршрута соответствует
исполнение процедуры определения нового терма. Правило 2 построения глоссария
соответствует возможности «запоминания» предыдущих результатов. Для последнего узла маршрута возникает противоречие с необходимостью переопределения терма, уже определенного для начального узла.
Шаг 3. Определим два непустых множества узлов (термов) TO и TI из
безконтурного орграфа H для которых od(*)=0 и id(*)=0, соответственно. Добавим статью g’ = (t’, Т0) , где терм t’ - соответствует названию
глоссария, тогда граф H’, в соответствии с
определением, является конечной иерархией.
Пример структурной задачи.
Задача. Для конкретного глоссария определить его соответствие
главным правилам построения. При наличии нарушений этих правил определить
возможные места этих нарушений.
Решение. Поставленная задача эквивалентна проверке орграфа на
ацикличность. Несложно построить и заполнить информацией базу данных, например,
на MS Access. Один из способов решения задачи:
Пример. Рассмотрим в качестве примера структурной сортировки два Глоссария и два соответствующих им орграфа A и B. Орграф А содержит два цикла 1®4®3®2®1 и 1®4®5®2®1, орграф B – ациклический (рис. 4).
- Построить и заполнить TH - список всех термов G.
- По соотношениям id()=0, если Et: (TH\t, S)® TS=Æ можно определить подмножество узлов – основание орграфа.
- Ввести понятие уровней узлов в орграфе, посредством определения максимальной длины пути к узлу от основания орграфа.
- Структурная сортировка узлов орграфа по уровням, например, методом «пузырька» даст решение задачи [13].
- Полное заполнение таблицы Link и использование вспомогательных классификаторов существенно упрощают определение структурных нарушений.
Пример. Рассмотрим в качестве примера структурной сортировки два Глоссария и два соответствующих им орграфа A и B. Орграф А содержит два цикла 1®4®3®2®1 и 1®4®5®2®1, орграф B – ациклический (рис. 4).
1)
Разделим множество узлов орграфа на три списка:
- Основание орграфа TI = {a, b, c, d, e}, для этих узлов id()=0.
- Концевые узлы орграфа TO = {Z, Y, d}, для этих узлов od()=0.
- Внутренние узлы T\(TI È TO) = {1, 2, 3, 4, 5}.
2)
В качестве начального уровня выберем список
узлов TI.
3)
Построим следующий список, связанных дугами с
узлами предыдущего уровня, – кандидатов первого уровня.
4)
Если список не содержит внутренних узлов, то
остановка.
5)
Пометим все повторяющиеся узлы нижних уровней.
6)
Если нижний уровень не содержит внутренних
узлов, то остановка.
7)
Повторить с шага 3.
Примеры списков
узлов для орграфов A и B приведены в таблице 1.
Рисунок 4. Примеры орграфов
Метод структурной сортировки узлов орграфа основан на
следующем утверждении: «При наличии непустого множества внутренних узлов
ациклического орграфа их всегда можно распределить по уровням, в зависимости от
максимальной длины пути до узла от одного из узлов основания орграфа. При этом
множество узлов на каждом уровне не пусто».
Таблица 1. Промежуточный состав уровней орграфа.
Для орграфа A процедура закончилась на третьем шаге. После этого шага уровень 1 не содержит ни одного внутреннего узла. Это противоречит требованию ацикличности. Нарушение требования не пустоты уровня орграфа произошло при исключении узлов 3 и 5. Необходимо проверить и откорректировать их описание в Глоссарии, затем перестроить орграф и повторить процедуру проверки Глоссария.
Для орграфа В процедура завершилась на 6-ом шаге. Все «проходные»
узлы орграфа B
распределились по 5 уровням (3) (2) (1) (4) (5), соответственно. Следовательно,
орграф B
– ациклический.
Задача использования глоссариев относится к задачам системного типа, поскольку решение задачи существенно зависит от внешнего окружения, от прикладного ландшафта системы, в которой применяется глоссарий. Как правило, такие задачи относятся к категории слабо формализуемых, поэтому будем фиксировать все производимые предположения.
Практическая реализация процедуры Et потребует
определенных инженерных навыков. Методы прикладного решения задачи поиска
структурных нарушений сводятся к написанию соответствующих SQL запросов.
Совместное использование глоссариев.
Задача использования глоссариев относится к задачам системного типа, поскольку решение задачи существенно зависит от внешнего окружения, от прикладного ландшафта системы, в которой применяется глоссарий. Как правило, такие задачи относятся к категории слабо формализуемых, поэтому будем фиксировать все производимые предположения.
Предположение 1.
Рассмотрим совместное использование двух глоссариев.
Под совместным использованием понимаем следующие сценарные
условия:
- Осуществляется разработка одного, рабочего глоссария.
- Рабочий глоссарий удовлетворяет «главным правилам построения» и построен его ациклический орграф.
- Для рабочего глоссария определены узлы основания орграфа, которые определены в базовом глоссарии.
- Базовый глоссарий составлен ранее.
Задача о совместном использовании двух глоссариев
заключается в обеспечении соответствия «главным правилам построения» единой
системы.
Совместное использование глоссариев может быть двух типов:
- С объединением терминов рабочего и базового глоссариев.
- С инкапсуляцией терминов базового глоссария.
Конкретизируем задачу с учетом классификации глоссариев в
проекции R&D (табл. 1). Отмеченные серым
цветом клетки таблицы показывают области, где глоссарии обычно не используются.
Цифрами указаны типы глоссариев, которые могут быть усовершенствованы и кем.
Наиболее часто создаются и актуализируются терминологические глоссарии. Выбор
способа совместного использования глоссариев, в том числе, зависит от степени
публичной доступности и от возможности актуализации базового глоссария.
В большинстве случаев под разработкой глоссариев подразумевается
создание справочников терминов, которые
составляются на корпоративном уровне для ограниченного круга пользователей.
Использование единой терминологической базы для организации групповой деятельности
является независимой задачей системного типа, в том числе, относящейся к задачам
учета квалификационных требований [14].
Например, общая процедура составления глоссария терминов
предметной области может иметь следующий вид (рис. 5). Предложенная логика
построения модели позволяет выявить границы применимости процедуры построения и
найти им разумное объяснение. Создавая и совершенствуя глоссарии на
терминологическом уровне, появляются термины, относящиеся к узлам основания
орграфа, которые по процедуре построения глоссариев должны определяться ранее,
например, на энциклопедическом уровне. Однако, по этой процедуре построения могут
быть термины, относящиеся к узлам основания на лингвистическом уровне.
Компьютерная индустрия предлагает инженерное решение этой
проблемы, которое повсеместно используется в современном мире – это применение
свойства инкапсуляции. В данном конкретном случае, с глоссариями, предполагаем,
что справочники инкапсулируемого уровня составлены верно, а термины не требуют
более глубокой структурной декомпозиции. Глоссарии на лингвистическом уровне
инкапсулируются для других уровней, предоставляя все свои термины в качестве
базового интерфейса.
Решение вопросов обеспечения полноты, целостности,
непротиворечивости смысла и других для глоссариев на лингвистическом уровне обеспечивается
прикладной лингвистикой, гуманитарными науками, системой образования и
методологией. Например, одна из существующих систем образования предполагает
знакомство со словарями Webster или Oxford dictionary,
с подтвержденным уровнем понимания смысла и логики использования ключевых
терминов и понятий экзаменами SAT, ACT, GRE, GMAT, SSAT.
Таким образом показано, что принципиальное свойство мульти
дисциплинарности при создании справочников требует проведения системного
анализа для задач их использования и накладывает определенные сертификационные
ограничения на квалификацию участников работ. Такое требование несколько
неожиданно для задач из области системного анализа, но для большинства задач из
прикладных областей деятельности является традиционной практикой.
Пусть G(2) – рабочий глоссарий, G(1)
– базовый.
Совместное
использование с инкапсуляцией.
Вариант использования глоссариев с инкапсуляцией выбирается
в том случае, когда по разным причинам внесение изменений в G(1) затруднено.
Инкапсуляция базового глоссария G(1) = (T(1), S(1)) ® Н(1) = ( Т(1),
Æ), т.е. имеем только общий список узлов Т(1), а их связи не рассматриваем. Т(1) = Т(1) È TI(2) и/или TI(2)=T(1)Ç TI(2), т.е. узлы основания рабочего глоссария G(2) определены в G(1).
Для рабочего глоссария G(2) = (T(2), S(2)) ® Н(2) = ( Т(2),
{{tj}, ti), где {tj}=Et:(T(2)\ti,Si). Соответственно, для совместного использования глоссариев
с инкапсуляцией H= ((Т(1) È T(2)), {{tj}, ti), где {tj} = Et: ((Т(1) È T(2))\ti, Si).
Если T(1) Ç T(2) = TI(2), то несложно показать, что при операции
объединения может произойти пополнение узлов основания ациклического орграфа H(2) с добавлением соответствующих связей. В противном
случае может потребоваться перестроение глоссария G(2).
Совместное
использование с объединением.
Вариант совместного использования глоссариев выбирается в
том случае, когда возможно внесение изменений в базовый глоссарий G(1). Под изменениями подразумевается уточнение
определений терминов или их переопределение. При внесении изменений в базовый
глоссарий необходимо учитывать модель жизненного цикла G(1).
- Объединение двух глоссариев - это простая теоретико-множественная операция объединения его компонент G = G(1) È G(2) = (T, S), которому соответствует орграф Н.
- Обеспечим ацикличность орграфа H ® H’ = (T’, {Et: (T’\ti, S’i), ti}).
- Построим орграф H’(1) = (T(1), {Et: (T(1)\ti, S’i), ti}), которому соответствует измененный базовый глоссарий G(1) = (T(1), S’(1)).
- Вычислим множество узлов T” = T’ \ T(1). Дополним T” узлами T+1 из T’, до которых длина пути равна 1, тогда T’(2) = T” È T+1.
- Искомый рабочий глоссарий G’(2) = (T’(2), S’(2)).
Такая процедура построения основана на том факте, что удаление
вершин и ребер не нарушает структурных свойств ациклического орграфа.
Аналитические задачи.
Можно сформулировать два основных направления, из которых
возникают аналитические задачи с глоссариями:
- из потребности в кластеризации больших глоссариев,
- из моделей применения глоссариев для обработки больших объемов данных.
Задача кластеризации большого глоссария в некотором смысле
является обратной задачей к задаче совместного использования двух глоссариев с
инкапсуляцией. Сценарий выделения целевого терминологического кластера может
быть следующим:
- Пусть внешним источником для кластеризации является некоторый классификатор.
- Отмечаются термины глоссария, относящиеся к классификатору.
- Выделяется система понятий, описывающих эти термины и составляющих целевой кластер.
- Минимизируется состав узлов основания терминологического кластера.
Аналитические задачи, связанные с выявленными внутренними
эмерджентными характеристиками модели и зависящими от семантики данных [7],
возникают из моделей применения глоссариев для обработки и анализа больших
объемов данных. Модели применения глоссариев чаще всего связаны с областью методологического
обеспечения интеллектуальной деятельности, например, анализ текстов на
терминологическую избыточность или, наоборот, на недостаточную полноту.
Модели применения глоссариев, модели анализа эволюции
системы глоссариев, модели информационного взаимодействия с другими
технологиями и системами компьютерной индустрии являются предметом
самостоятельных исследований.
Выводы.
Глоссарий относится к одной из многих слабо формализуемых
понятийных категорий. Категория Глоссарий имеет практическую
целесообразность в силу интуитивной простоты своего применения. Поскольку
большинство недостатков Глоссария и, соответственно, методов
составления глоссария, учтено при разработке относительно новой концепции
«Онтология прикладной области», то нет особой актуальности в исследованиях в
области методов их составления и использования.
Глоссарий предназначен для упрощения понимания смысла
текста, за счет формирования семантических связей между используемыми ключевыми
понятиями. Однако сам глоссарий не содержит требований и средств для
формального представления этих структурных связей.
Расширение прикладного значения Глоссариев, например, с
целями:
потребует проведения дополнительного системного анализа этой темы с позиций ИТ архитектуры.
- методологического обеспечения интеллектуальной деятельности (агрегация, декомпозиция, избыточность, полнота, непротиворечивость),
- улучшения качества деятельности коммерческих бюро технического перевода,
- оказания услуг и деятельности в направлении повышения качества корпоративной информации [8],
- деятельности в области разработки стандартов и нормативных документов,
- обеспечения самостоятельного консультативного бизнеса по сопровождению масштабных социально-технических проектов,
потребует проведения дополнительного системного анализа этой темы с позиций ИТ архитектуры.
Решение задачи с изменяющейся динамической структурой
сведено к пополнению списочных данных с фиксированной структурой. В процессе
логического обоснования выполнен переход от процедурных правил к структурным
ограничениям. Проблема анализа глоссариев переведена в плоскость значительно
более изученных и исследованных задач.
Несложные расширения предложенной модели, как это будет
показано в дальнейшем, позволяют связать глоссарий с прикладной онтологией, технологиями
Data Mining и
Big Data, сформулировать и решить
в связи с этим полезные прикладные задачи.
Литература и полезные ссылки.
Среди цитируемых и использованных работ следует выделить монографию «Методология: словарь системы основных понятий» [1], особенно в ее формате гипертекста. Аналогичным примером Глоссария в подобном формате является «Электропедия: словарь электротехнических терминов и понятий» http://www.electropedia.org/.
Общая презентация по теме "Глоссарии и Иерархии" см. https://sec2017.blogspot.com/2019/03/blog-post.html
[1] НОВИКОВ А.М., НОВИКОВ Д.А. Методология: словарь системы
основных понятий. – М.: Либроком, 2013. – 208 с. http://www.mtas.ru/biblio/Methodology_g.htm
[2] ХАРАРИ Ф. Теория графов. – М.: Мир, 1973. – 324 с.
[3] ПИССАНЕЦКИ С. Технология разреженных матриц. – М.: Мир.
1988. – 410 с.
[4] ЛАРИЧЕВ О.И. Теория и методы принятия решений. – М.:
Логос, 2003. – 392 с.
[5] АЙЗЕРМАН М.А., КАЯНЕЛЛО Э.Р. Исследования по теории
структур. – М.: Наука, 1988. – 205 с.
[6] АЙЗЕРМАН М.А., ГУСЕВ Л. А., ПЕТРОВ С. В., СМИРНОВА И. М.
Динамический подход к анализу структур, описываемых графами. Автомат. и
телемех., 1977, № 7, 135–151. http://www.mathnet.ru/php/archive.phtml?wshow=paper&jrnid=at&paperid=7406&option_lang=rus
[7] ГУБКО М.В. Математические модели оптимизации
иерархических структур. – М.: ЛЕНАНД, 2006. – 264 с. http://www.mtas.ru/search/search_results_ubs_new.php?publication_id=3087&IBLOCK_ID=10
[8] Глоссарий и обратный перевод. https://sec2017.blogspot.com/2019/02/blog-post.html
[9] Объектно-ориентированное программирование. https://ru.wikipedia.org/wiki/Объектно-ориентированное_программирование
[10] ГУБАНОВ Д.А., МАКАРЕНКО А.В., НОВИКОВ Д.А. Методы
анализа терминологической структуры предметной области (на примере методологии).
УБС, ИПУ РАН, 2013, № 43, 5-33 https://www.researchgate.net/publication/274390719_Metody_analiza_terminologiceskoj_struktury_predmetnoj_oblasti_na_primere_metodologii
[11] ГУБАНОВ Д.А., НОВИКОВ Д.А. Методы извлечения и анализа
терминологических структур смежных предметных областей (на примере методологии).
Онтология проектирования, 2018, т.8, №3, с. 347 - 365 https://www.researchgate.net/publication/328228302_Metody_izvlecenia_i_analiza_terminologiceskih_struktur_smeznyh_predmetnyh_oblastej_na_primere_metodologii
[12] МИШИН С.П. Оптимальные иерархии управления в
экономических системах. – М.: ПМСОФТ, 2004. – 190 с. http://www.mtas.ru/search/search_results.php?publication_id=3060
[13] КНУТ Д.Э. Искусство программирования. Т.3: Сортировка и
поиск – 2 изд. – М.: Вильямс, 2004. – 800 с.
Добавлено несколько простых примеров.
ОтветитьУдалить