Именование

Рис. 7. Внутреннее представление объекта множественного типа

Константа базового типа с порядковым номером К в элементе хранения объекта множественного типа представлена битом с номером

BitNumber = K mod 8

в байте с номером

ByteNumber = (K div 8) – (MIN div 8), где

MIN = Low(Base_Type).

Ord(cyan) = 8, BitNumber(cyan) = 0, ByteNumber(cyan) = 1.

Операции над множествами определяются как теоретико-множественные операции над их характеристическими функциями.

ФАЙЛ – это либо именованная область внешней памяти (жесткого диска, дискеты, компакт-диска, электронного “виртуального” диска), либо логическое устройство – потенциальный источник или приемник информации. С логическими устройствами связаны стандартные аппаратные средства, такие как клавиатура, экран дисплея, принтер. В PASCAL существуют три вида файлов в зависимости от способа хранения информации в них: типизированные (обозначим File_Type), текстовые (тип TEXT) и нетипизированные (тип FILE). С каждым файлом связана специальная структура, называемая дескриптором (описателем), в которой хранится имя файла, дата создания, размер файла, атрибут доступа к файлу и т.п. При описании в программе объекта файлового типа в оперативной памяти создается элемент хранения, в котором размещается дескриптор файла. Размер дескриптора файла фиксирован для файла любого вида (128 байт) и никак не связан с размером файла во внешней памяти.

TypeFile_Type = File of <Name_Type>,

где <Name_Type> - любой тип, кроме файлового.

Sizeof(File_Type) = 128.

Для того чтобы описать совокупность операций, производимых над объектом, пользователь может сконструировать АТД – ПРОЦЕДУРНЫЙ ТИП (обозначим Proc_Type). Любой процедурный тип определяет:

¨ множество возможных действий,

¨ множество объектов, над которыми могут быть произведены эти действия.

Например, процедурный тип

Type DST = PROCEDURE (var P: Point);

определяет возможные действия над объектами типа ТОЧКА. Любая процедура, описание которой совпадает с объявлением типа DST, может рассматриваться как объект типа DST. Например, процедуры

Init(var P: Point); { инициализировать }
Show(var P: Point); { отобразить }
Hide (var P: Point); { стереть }
Move(var P: Point); { переместить }

являются объектами типа DST. В элементах хранения оьъектов процедурного типа размещаются адреса точек входа в соответствующие процедуры (точки запуска – активации процедур). Поэтому множество констант процедурного типа является подмножеством множества адресов оперативной памяти, т.е. подмножеством типа УКАЗАТЕЛЬ (обозначим Pointer_Type), а размер элемента хранения процедурного типа определяется размером элемента хранения типа указатель (см. 2.2.2).

Sizeof(Proc_Type) = Sizeof(Pointer_Type).

Объявление и реализация АТД обычно помещаются в модуль. Рассмотрим абстрактный тип данных ВРЕМЯ. Значение каждого момента времени состоит из 3 атрибутов: старших, средних и младших единиц временной шкалы (например, сутки:часы:минуты) (рис. 8).

 
 


Рис. 8. Элемент хранения АТД “ВРЕМЯ”

UNIT Time;

{ Раздел объявлений АТД ВРЕМЯ }

Interface

{ Описание атрибутов }

TTimer =record

hour, minute, second: word

end;

{ Описание действий по обработке объектов типа ВРЕМЯ }

{ Инициализация атрибутов объекта типа ВРЕМЯ }

Procedure Init (var t: TTimer);

{ Приращение значения времени }

Procedure Add (var t: Ttimer; dt: word);

{ Преобразование значения времени во внутреннее представление }

Procedure TtoReal (t: Ttimer; var r: real);

{ Преобразование значения времени из внутреннего представления }

Procedure RealtoT (r: real; var t: TTimer);

{ Раздел реализации действий по обработке объектов типа ВРЕМЯ }

Implementation

Procedure Init (var t: TTimer);

begin

...

end;

...

end.

Использование модуля Time:

UNIT Main;

uses Time;

var t1,t2: Ttimer; r: real;

begin

Init (t1); Add(t1,10); TtoReal(t1,.r);...

end.

2. идентификация объектов

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

¨ именование

¨ указание.

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

type Point = record X, Y: word еnd; type Circle = record R: word; Center: Point Еnd; { тип ТОЧКА } { тип ОКРУЖНОСТЬ }
var C: Circle; С C.R C.Center.Y   { длина дистанции доступа равна 0} { длина дистанции доступа равна 1 } { длина дистанции доступа равна 2 }

Для того чтобы сократить время обращения к атрибутам объектов, используется оператор присоединения

WITH <квалидент> DO begin <присоединяемый фрагмент> end;

Например,

with C do begin R:=10; writeln(Center.Y) end;

При работе с массивами объектов и массивами однородных свойств идентификация осуществляется на основе индексирования (нумерации). Индекс определяет порядковый номер объекта (или свойства) и является уточненным именем в представлении агрегата.

Доступ к объекту, идентифицируемому именем (в том числе именем, уточненным индексом), реализуется на основе вычисления адреса элемента хранения объекта (см. 4.1).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: