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

С этой целью в интерфейсной части модуля определена иерархия объектов, показанная на рис.5.2.

h01351.jpg

Рис.5.2. Иерархия объектов модуля F_EMS

Базовым объектом иерархии является объект TEMSArea. EMS— память в рамках этого объекта рассматривается как массив вида

type

EMSMemory = array [0..Size-1] of Byte,

где Size — длина резервируемой объектом памяти.

Объект TEMSVector порожден от TEMSArea и предназначен для начального структурирования данных. Этот объект рассматривает отображаемую память как набор фрагментов, каждый из которых имеет одинаковую длину в байтах. В стандартном Паскале ему в какой—то степени соответствует одномерный массив из элементов произвольного типа.

От TEMSVector порожден объект TEMSMatrix, имитирующий двумерные массивы стандартного Паскаля. Он перекрывает методы родителя, чтобы обрабатывать обращение к элементам с помощью двух индексов. Как и в стандартном Паскале, элементы в объекте TEMSMatrix располагаются по столбцам: за элементом с индексами 1,1 располагается элемент 1,2 и т.д.

Объект TEMSArray также порожден от TEMSVector и имитирует массив с произвольным количеством измерений. Фактические индексы элемента при обращении к процедурам Setltem и Getltem задаются в виде списка, что не очень удобно, вот почему для моделирования одно— и двумерных массивов используются отдельные объекты.

Объект TEMSType порожден от TEMSArea и имитирует файл с последовательным доступом (ленточный накопитель). Его элементы могут иметь различную длину, поэтому доступ к очередному элементу возможен только после чтения (записи) предыдущего элемента.