
3.2.4. Фреймы
Фрейм (англ, frame - каркас или рамка) предложен М.Минским в 70-е гг.
Minsky в своей работе [29] определил фрейм как "структуру данных для представления стереотипных (стандартных) ситуаций". Эту структуру он наполнил самой разнообразной информацией: об объектах и событиях, которые следует ожидать в этой ситуации, и о том, как использовать информацию, имеющуюся во фрейме. Идея состояла в том, чтобы сконцентрировать все знания о данном классе объектов или событий в единой структуре данных, а не распределять их между множеством более мелких структур вроде логических формул и порождающих правил. Такие знания либо сосредоточены в самой структуре данных, либо доступны из этой структуры (например, хранятся в другой структуре, связанной с фреймом) [119].
С каждым фреймом ассоциируется разнообразная информация (в том числе и процедуры); например, информация о том, как пользоваться данным фреймом, каковы ожидаемые результаты выполнения фрейма, что делать, если ожидания не оправдались, и т.п. Фрейм можно представить в виде сети, состоящей из вершин и отношений (дуг). Верхние уровни фрейма фиксированы и представляют сущности, всегда истинные в ситуации, описываемой данным фреймом. Нижние уровни заканчиваются слотами, которые заполняются конкретной информацией при вызове фрейма.
С каждым слотом фрейма связаны описания условий, которые должны быть соблюдены, чтобы могло произойти означивание слота. В простейших случаях эти условия могут сводиться к указанию семантических категорий, которым должно удовлетворять значение слота.
Преимущества подхода, основанного на фреймах, заключаются в следующем [21]: концепция фреймов естественным образом интегрируется с концептуальным моделированием предметной области; структуры фреймов хорошо описываются средствами объектно-ориентированного проектирования; эффективно поддерживаются возможности наследования; обеспечивается иерархическое представление предметной области.
<Имя фрейма> Таблица 3.2
Имя слота |
Указатель наследования |
Указатель атрибутов |
Значение слота |
Демон |
Слот 1 |
|
|
|
|
Слот 2 |
|
|
|
|
… |
|
|
|
|
Слот N |
|
|
|
|
Таблица 3.3
Описание слотов (терминалов)
Имя слота |
Имя фрейма |
<имя дерева> |
Тип данных |
Указатель наследования |
Указатель атрибутов |
<параме-тры> |
Слот 1 |
Фрейм1 |
|
|
|
|
|
Слот 2 |
-‘’- |
|
|
|
|
|
… |
|
|
|
|
|
|
Слот М |
-‘’- |
|
|
|
|
|
Слот 1 |
Фрейм2 |
|
|
|
|
|
… |
-‘’- |
|
|
|
|
|
Слот N |
-‘’- |
|
|
|
|
|
В скобках < > указаны необязательные поля.
Предположим, что цепочка «КВАДРАТ ПРЯМОУГОЛЬНИК ПАРАЛЛЕЛОГРАММ ТРАПЕЦИЯ ЧЕТЫРЕХУГОЛЬНИК МНОГОУГОЛЬНИК» представляет знания о плоских геометрических фигурах, которые можно использовать для логических рассуждений о форме участков. Каждый узел в этой цепи имеет связанную с ним структуру записей (фрейм), формат которой приведен ниже.
NAME (ИМЯ):
Number of sides (Количество сторон):
Length of sides (Длины сторон):
Size of Angles (Углы):
Area (Площадь):
Price (Цена):
Практически все слоты фрейма Многоугольник придется оставить незаполненными, поскольку ничего нельзя сказать о сторонах и углах типичного многоугольника. Однако для слота Количество сторон в качестве значения по умолчанию можно установить 4, поскольку подавляющее большинство земельных участков имеет форму четырехугольника. Таким образом, все земельные участки, информация о форме контура которых отсутствует, будут полагаться четырехугольными. Слот Площадь также нельзя заполнить, но известно, как вычислить площадь многоугольника, располагая другой информацией о нем. Любой n-сторонний многоугольник можно разбить на п-2 треугольника, вычислить их площади и затем просуммировать результаты. Программу, реализующую эту процедуру, можно подключить к слоту Площадь. Процедуры, подключенные к структуре данных и запускаемые на выполнение при появлении запроса или обновлении информации в структуре, называют демонами. Те демоны, которые по запросу вычисляют некоторые значения, называются демонами по требованию (IF-NEEDED) [119].
Полезно также иметь демон, который при заполнении слота Площадь сразу вычислял бы цену участка. Эта процедура относится к другому типу демонов — демонам добавления (IF-ADDED) — и подключается также к слоту Площадь. Теперь при обновлении или установке значения слота Площадь автоматически будет вычислена цена участка, а результат будет помещен в слот Цена.
Перейдем к следующему уровню в иерархии фреймов. Для фрейма Четырехугольник совершенно очевидно нужно установить значение 4 в слот Количество сторон. Это значение будет наследоваться фреймами на каждом из последующих уровней иерархии. Вычислять площадь и цену всех фигур, представленных фреймами последующих уровней, можно тем же способом, что и для многоугольника. Поэтому описанные выше демоны также могут быть унаследованы всеми последующими фреймами.
Фреймы, представляющие все последующие разновидности четырехугольников, наследуют значение из слота Количество сторон фрейма Четырехугольник. Но в каждом из этих фреймов можно реализовать свою процедуру вычисления площади, лучше учитывающую особенности именно данного вида фигур. Например, площадь трапеции можно вычислить как произведение высоты на среднюю длину оснований, а фреймы прямоугольника и квадрата могут унаследовать эту процедуру у параллелограмма, площадь которого равна произведению основания на высоту.