Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ещё одна методичка по ЛО.doc
Скачиваний:
18
Добавлен:
23.03.2016
Размер:
433.15 Кб
Скачать

1.3.5. Абстрактные типы данных

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

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

1.3.6. Дополнительные возможности

Кроме основных возможностей, которые непременно должны входить в универсальные языки программирования, есть ряд дополнительных средств, которые либо пока не получили широком распространения среди пользователей, либо связаны в большей степени с внеязыковыми особенностями.

Программа, которая никак не взаимодействует с внешним миром, бесполезна: мы не можем узнать результатов ее работы. Необходимы средства для вывода результатов, например, на печать. Для этого есть специальная процедура PUT, которая печатает значения своих параметров.

Кроме возможности вывода данных программа должна уметь их вводить, чтобы можно было менять исходные данные задачи, которую решает программа. Для этом используется процедура GET, которая вводит некоторые значения и присваивает их своим параметрам.

────────────────────

П р и м е р 1. 11. Ввод и вывод значений перемен-

ных:

I: integer;

F: real;

........

GET(I,F);

PUT(I, F);

────────────────────────

Процедуры PUT и GET, а также другие средства ввода-вывода могут быть собраны в специальном пакете ТЕХТ_IO.

В момент очередном выполнения процедуры GET вводимые значения могли уже кончиться (предыдущие операции ввода ввели все эти значения). В этом случае, конечно, не следует выполнять GET. Чтобы узнать, есть ли еще не введенные значения, используется функция END_OF_FILE, возвращающая значение логическом типа: оно истинно, если значений для ввода уже нет.

На русский язык END_OF_FILE переводится как "конец файла". Что такое файл? Ввод-вывод -- это передача последовательностей значений данных между программой и какими-либо внешними источниками или потребителями. В принципе можно вводить (выводить) несколько независимых последовательностей. Такие последовательности и называются файлами. Мы уже знаем два файла: стандартные файлы ввода (тот, который обрабатывается процедурой GET) и вывода (тот, который обрабатывается процедурой PUT). Эти два файла предопределены -- их не надо описывать в программе. В общем же случае файлы рассматриваются как еще один тип данных и объекты файлового типа описываются так же, как и другие объекты данных. Они также имеют набор атрибутов, с помощью которых конкретизируется их структура и способы обработки. Кроме указанных выше двух назначений файлов они используются для сохранения данных между прогонами программы (например, на магнитном диске) и даже для передачи данных между различными программами, а также при нехватке оперативной памяти как ее расширение.

Предположим, что при выполнении вызова процедуры GET все же обнаружилось, что значений больше нет. Что произойдет в этом случае? Возникнет исключение с именем END_ERROR -- ошибка конца файла. При этом нормальное выполнение программы прекращается, производится некоторая заданная в языке обработка исключения (например, печать сообщения о нем), и после этого программа прекращает работу. Однако программист может задать свою собственную обработку исключения. Для этого в конце программной единицы записывается последовательность операторов, выполняющих необходимую обработку.

────────────────────────

П р и м е р 1. 12. Описание обработчика исключения

END_ERROR:

block

use TEXT_IO: package; -- пакет, содержащий

процедуры ввода-вывода

I: integer;

begin

..........

GET(I);

..........

exception -- начало описания обработчика исключения

END_ERROR: операторы обработки

end block;

────────────────────

Если в этом блоке возникнет исключение END_ERROR, то будут выполнены операторы обработки, выполнение этого блока прекратится и начнет выполняться следующий за этим блоком оператор.

Существуют и другие предопределенные исключения: ошибки при вычислениях, преобразованиях и др. Кроме этого, программист может описывать свои собственные исключения и обрабатывать их.

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

В некоторых языках имеются средства макрообработки, позволяющие производить обработку текста программы перед ее трансляцией: вставку и удаление частей текста, замену другим текстом и т.д. Они обычно используются при компоновке программ для трансляции, при управлении отладкой программы и в некоторых случаях для повышения ее удобочитаемости.