Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы к зачету .doc
Скачиваний:
5
Добавлен:
13.08.2019
Размер:
317.44 Кб
Скачать
  1. Абстракция данных. Модули в Турбо-Паскале и в авс-Паскале.

"Абстракция данных" - популярная и в общем неверно определяемая техника программирования. Фундаментальная идея состоит в разделении несущественных деталей реализации подпрограммы и характеристик, существенных для корректного ее использования. Такое разделение может быть выражено через специальный "интерфейс", сосредотачивающий описание всех возможных применений программы. Типичный пример такого интерфейса:

- множество функций, которые могут иметь доступ к структурам

данных, посредством которых представлена "абстракция".

Абстракция данных необходима для:

- разделение труда

- внесение изменений

- раздельная трансляция

- потребность в развитии, в изменении части кода

В АВС:

Модуль – единица трансляции

Unit <имя модуля>

INTERFACE – описания, можно ссылаться вне модуля

IMPLEMENTATION – описания – то, что видно только в данном модуле

BEGIN (INITIALIZATION)

операторы

END (FINALIZATION)

Использование:

- В основной программе можно использовать данные из интерфейса модуля

- Описание модуля в отдельном файле

Инкапсуляция – модуль = капсула (непроницаема)

  1. Подходы к созданию универсального языка программирования

  1. Запись с вариантами

В Паскале существует возможность менять тип конкретного поля в зависимости от ситуации. Такие структуры называются записями с вариантами. Правда, в любой записи может быть только одна вариантная часть, и, если она есть, ее описание должно располагаться за всеми фиксированными частями. Замечательная особенность вариантной части состоит в том, что все варианты как бы «накладываются» друг на друга, т.е. каждому из них выделяется одна и та же область памяти. Это открывает дополнительные возможности преобразования типов.

Турбо Паскаль разрешает использовать записи с так называемыми вариантными полями, например:

type

Forma = record

Name: String;

case Byte of

0: (BirthPlace: String [40]);

1: (Country : String [20];

EntryPort : String [20];

EntryDate : 1..31;

ExitDate : 1..31)

end;

В этом примере тип FORMA определяет запись с одним фиксированным полем NAME и вариантной частью, которая задается предложением CASE ... OF. Вариантная часть состоит из нескольких вариантов (в нашем примере — из двух вариантов: 0 и 1). Каждый вариант определяется константой выбора, за которой следует двоеточие и список полей, заключенный в круглые скобки. В любой записи может быть только одна вариантная часть, и, если она есть, она должна располагаться за всеми фиксированными полями.

var х

mem4 :record

case Byte of

0 : (by : array [0..3] of Byte);

1 : (wo : array [0..1] of Word);

2 : (lo : longint);

end;

В этом примере запись МЕМ4 имеет три варианта, каждый из которых занимает в памяти один и тот же участок из 4 байтов. В зависимости от того, к какому полю записи мы обращаемся в программе, этот участок может рассматриваться как массив из 4 байтов (поле BY), массив из двух целых типа WORD (поле wo) или, наконец, как одно целое число типа LONGINT (поле LO).

Предложение CASE . . . OF, открывающее вариантную часть, внешне похоже на соответствующий оператор выбора, но на самом деле лишь играет роль своеобразного служебного слова, обозначающего начало вариантной части. Именно поэтому в конце вариантной части не следует ставить END как пару к CASE . . OF. (Поскольку вариантная часть — всегда последняя в записи, за ней все же стоит END, но лишь как пара к RECORD). Ключ выбора в предложении CASE . . . OF фактически игнорируется компилятором. Единственное требование, предъявляемое к нему Турбо Паскалем, состоит в том, чтобы ключ определял некоторый стандартный или предварительно объявленный порядковый тип. Причем сам этот тип никак не влияет ни на количество следующих ниже вариантных полей, ни даже на характер констант выбора.

Имена полей должны быть уникальными в пределах той записи, где они объявлены, однако, если записи содержат поля-записи, т. е. вложены одна в другую, имена могут повторяться на разных уровнях вложенности.