Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
infa.docx
Скачиваний:
16
Добавлен:
27.09.2019
Размер:
305.64 Кб
Скачать

2 Статические и динамические объекты программ.

Некоторые свойства объекта и связи с другими объектами остаются неизменными при любом исполнении его

области действия (участка программы, где этот объект считается существующим). Такие свойства и связи называются статическими. Их можно опреде­лить по тексту программы, без ее исполнения [21].

Другие свойства и связи изменяются в процессе исполнения области действия. Их назы­вают динамическими. Например, конкретное значение переменной — динамическое свой­ство. Связь формального параметра с конкретным фактическим в результате вызова про­цедуры — динамическая связь. Размер конкретного массива с переменными границами динамическое свойство.

Часто статические и динамические характеристики называют соответственно характе­ристиками периода компиляции (трансляции) и периода выполнения (runtime), подчерки­вая то обстоятельство, что в период компиляции исходные данные программы неизвестны и, следовательно, динамические характеристики недоступны. Известна лишь информация, извлекаемая непосредственно из текста программы и тем самым относящаяся к любому ее исполнению (т. е. статическая информация).

Если память выделяется (распределяется) в процессе трансляции и ее объем не меня­ется от начала до конца выполнения программы, то такой объект является статическим. Если же память выделяется во время выполнения программы и ее объем может меняться, то такой объект является динамическим.

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

Если память выделяется в процессе трансляции и ее объем не меняется от начала до концв выполнения программы, то такой объект явл. статич. Если память выделяется во время выполн. прогр. и ее объем может меняться, то такой объект – динамический.

3 Ссылочный тип данных. Кроме известных нам статических объектов, многие языки программирования допускают также и динамические объекты. При этом в языках со строгой дисциплиной описаний, на­пример, в Паскале динамический объект не может иметь собственного имени, гак как все идентификаторы языка, кроме идентификаторов стандартных (предопределенных) проце­дур и функций, должны быть описаны в соответствующих разделах программы. Поэтому принято по именовать, а обозначать динамический объект посредством ссылки на него. В Паскале это достигается присоединением символа | (<< стрелочка тут) к имени связываемой с каждым таким объектом переменной — ссылки на этот динамический объект. Переменная-ссылка должна быть описана в разделе объявлений программы как переменная ссылочного типа, в Паскале это раздел переменных var. При этом сама ссылка является статическим объ­ектом. Ссылка занимает всего лишь одно машинное слово, что совсем немного (O(l)) по сравнению с возможным размером растущего динамического объекта. В яз.Си указатель ссылочного типа обозначется *. Ссылочн. тип мб именованным и неименованным.Пример: typedef T*pointer;

Для переменных в точности одного и того же ссылочного типа определены опера­ции присваивания и разыменования и отношение равенства.. Если, например, результатом сравнения р = nil является значение true, то ссылочная переменная р не указывает ни на какой объект. Операция разыменования обеспечивает доступ к значению обозначаемого ссылкой объекта. В Паскале разыменование обозначается стрелкой, приписываемой спра­ва от указателя (р), а в Си — звездочкой слева от него (*р). Операция разыменования имеет аппаратную поддержку в любом современном процессоре (косвенная адресация). «Важно делать различие между переменной-указателем и указуемым объектом и быть очень осторожным при присваивании и сравнении указателей» [84].

Ссылочный тип идентичен адресному

4 Файл. Функциональная спецификация.

Функциональной спецификацией какого-либо типа данных называют внешнее фор­мальное определение этого типа данных, не зависящее ни от языка программирования, ни от конкретной вычислительной машины. Дать формальное определение типа данных это значит задать множество значений этого типа и множество изображений этих зна­чений вместе с правилом их интерпретации (только через изображения можно работать со значениями объектов типа), а также базовое множество атрибутов этого типа, вклю­чающее изображения некоторых выделенных значений, операции и их свойства, отноше­ния и их свойства, функции создания, доступа и модификации объектов этого типа [6]. Обозначим через FT файловый тип с компонентами типа Т.Значениями типа FT являются сколь угодно длинные, по конечные последовательно­сти компонент типа 7 (изображаемые по правилам интерпретации типа компонент 7 ). Такое бесконечное множество значений можно определить формально с помощью опе­рации конкатенации (слияния, склеивания, сцепления) двух файлов, состоящих из ком­понент одного и того же типа: если f1 = {x1,. . ., хm} и f2 = {y1,...,Уn}-> то f1||f2= { x 1 ,… ,хm, y1, . . ., уn}, где || знак операции конкатенации. Тогда множество значений файлового типа строго определяется следующими порож­дающими правилами |72):

1.{} есть файл типа FT (пустая последовательность, пустой файл);

2.если / есть файл типа FT и t есть объект типа Т, то / ||{t} есть файл типа FT

3.никакие другие значения не являются файлами типа FT.

Базовое множество атрибутов файлового типа: 1. операция конкатенации, определенная выше; ее свойство — несимметричность; 2. операции присваивании определяется как покомпонентное копирование одного фай­ла. в другой с сохранением порядка и количества компонент. 3. отношение равенства: два файла, состоящие из компонент одного и того же типа, равны тогда и только тогда, когда они имеют одинаковую длину, а их соответству­ющие компоненты — равные значения; отношение равенства симметрично; 4. функции: создание (порождение пустого файла), доступ (последовательный доступ к каждой компоненте, причем только для чтения значения: чтобы прочитать зна­чение k-той компоненты файла, надо прочитать предварительно k-1 компоненту от начала файла), модификация (дозапись компоненты того же типа и конец фай­ла— фактически это конкатенация файла и новой компоненты типа Т), уничтожение (стирание) файла.

5 Файл. Логическое описание. Физическое представление. Логическое описание — это отображение функциональной спецификации на сред­ства выбранного языка программирования. При выполнении этого отображения могут быть две ситуации: 1) в выбранном языке программирования есть подходящий тип дан­ных; 2) подходящий тип данных в языке не определен.

В первом случае в программу включают описание объектов имеющегося типа в соот­ветствии с синтаксическими правилами этого языка.

Во втором случае необходима декомпозиция объекта на такие составные части, кото­рые могут быть описаны как отдельные объекты программы средствами выбранного язы­ка программирования, или программное моделирование требуемого для решения задачи типа данных. При таком моделировании следует использовать типы данных, определен­ные в языке как базовые, и реализовать необходимые операции и отношения процедурами и функциями.

Физическое представление — это конкретное отображение на память машины объ­ектов программы в соответствии с логическим описанием. Такое отображение всегда свя­зано с линеаризацией структуры [5], так как память машины обычно состоит из некоторых единиц (слов или байтов), пронумерованных последовательными целыми числами, начи­ная с нуля. Используя многомерный массив на языке программирования, иногда необхо­димо знать принцип его линеаризации, и учитывать его при ручной навигации по массиву.

Конструктивные особенности памяти как последовательности слов с произвольным до­ступом обуславливают два вида физического представления объектов в памяти машины: сплошное и цепное.

Сплошное представление — это представление, при котором объект размещается в па­мяти машины в непрерывной последовательности единиц хранения. Например, перемен­ная целого типа представляется на физическом уровне одним машинным словом, состоя­щим из двух, четырех или восьми байтов с последовательными адресами.

Цепное представление — это такое представление, при котором значение объекта раз­бивается на отдельные части, которые могут быть расположены в разных участках памя­ти машины (необязательно подряд), причем эти участки тем или иным способом связаны «в цепочку» с помощью указателей, т. е. они содержат ссылки на следующие части объ­екта. Цепное представление используется, как правило, для динамических структурных объектов (списки, деревья, очереди, стеки и деки).

Для описания файла в Си необходимо объявить переменную предопределённого типа FILE*. Созданный компилятором виртуальный файловый дескриптор может быть дина­мически связан с конкретным файлом, потоком или устройством с помощью функций стандартной библиотеки языка Си.

FILE* <имя объекта - файла>;

В заключение еще раз заметим, что файлового типа в Си нет. Для работы с файлами в стандартной библиотеке Си имеются определения файловых дескрипторов и функций, доступных через заголовочный файл <stdio.h>. Вместо описания файловой переменной в Си необходимо определить переменную-дескриптор файла.

Файлы обычно ассоциируются с устройствами внешней памяти и устр-ами вводы-вывода.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]