Пятница, 21.09.2018, 05:34
Главная Регистрация RSS
Приветствую Вас, Гость
Меню сайта
Ссылки
Статистика
Реклама
01
 
Реклама
Поиск
Друзья сайта
Работа, база вакансий и резюме  Белый каталог сайтов - RabOnline.ru/dir Результаты антивирусного сканирования
Реклама
01

Страница: 1 2 3 4 5 6 7   

Структура исходных текстов программы на языке Object Pascal в Delphi.

Программа на Object Pascal состоит из основной части и нескольких модулей (библиотек), подключаемых на этапе компиляции к основной части программы. Наличие этих модулей не обязательно. Основная часть программы состоит из одного или нескольких разделов, каждый из которых начинается с определенного ключевого слова (Program, uses, const, Label, Type и Var). Если в существовании раздела нет необходимости, то ключевое слово, открывающее его, не указывается. Основная часть программы содержится в отдельном файле и имеет расширение dpr и ее содержание, в большинстве случаев, не требует вмешательства программиста. Создание и обновление основной части программы берет на себя среда разработки. Исполняемый ехе-файл, получаемый в результате компиляции программы, имеет имя, указанное в заголовке основной части программы.

Модуль (библиотека), так же, как и основная часть программы, содержится в отдельном файле и состоит из двух основных секций — интерфейсной (начинается ключевым словом interface), в которой описываются типы данных, константы и переменные, доступные внешним частям программы, и описательной (начинается ключевым словом implementation), в которой описываются идентификаторы, доступные только этому модулю. Еще две секции необязательны, и включаются в модуль для выполнения инициализационных (initialization) и деинициализационных (f inalization) действий.

Подключение модулей к основной части программы или к другим модулям производится в разделе подключения модулей (Uses) по имени, указанном в заголовке модуля после ключевого слова Unit.

Пример описания констант в программе на Object Pascal.

Константы — это идентификаторы, вместо которых на этапе компиляции программы подставляются реальные значения. Для описания констант предназначена секция, которая начинается ключевым словом Const.

Const

MyName = 'Michael Suharev';{Описание строковой константы}

MyAge = 25; {Описание числовой константы}

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

Const

ProcessorType: Integer = 4;{Описание целочисленной константы с начальным значением 4}

Пример описания переменных

Переменные — это идентификаторы, вместо которых на этапе компиляции подставляются адреса хранимой в памяти информации, доступной для чтения или записи. Важным свойством переменной является ее тип, указывающий на то, каким образом следует работать с данной переменной. Для описания переменных предназначена секция, которая начинается ключевым словом Var.

Var

MyName: AnsiString; {Описание строковой переменной типа AnsiString}

MyAge: Shortlnt; {Описание числовой целочисленной переменной типа Shortlnt}

Пример описания пользовательских типов данных

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

Туре

Mylnteger: Integer; {Описание типа данных, эквивалентного типу Integer}

THuman = Record {Описание типа данных Thuman, представляющего собой запись}

MyName: AnsiString; {Поле записи типа AnsiString}

MyAge: Shortlnt; {Поле записи типа Shortlnt}

end;

Пример описания переменных интервального типа, перечислимого типа и множеств. 

Интервальные типы данных (типы-диапазоны) представляют собой подмножества возможных значений стандартных типов данных Integer и Char. Применяются они для более удобного представления информации в программе.

Var

Interval: 'a'..'z'; {Описание переменной, значениями которой могут являться латинские

символы от а до z}

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

Var

Color: (Black, White, Red);{Описание переменной, значениями которой могут являться значения, скрытые под идентификаторами Black, White и Red}

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

Var

ColorSet: Set Of (Black, White, Red);{Описание переменной, значениями которой могут являться значения, скрытые под идентификаторами Black, White и Red в любом сочетании}

Массивы в Object Pascal

Массив — поименованная область памяти, доступ к отдельным частям которой осуществляется по общему имени и индексу соответствующей части. Все части (элементы) массива имеют один и тот же тип, причем любой из стандартных или нестандартных, описанных к моменту объявления массива. В частности, элементы массива также могут являться массивами. В этом случае мы имеем дело с многомерными массивами. Описание массива производится в разделе описания типов данных (после ключевого слова Туре) или непосредственно при описании переменной такого типа.

Туре

IntArray = Array[1. .100] Of Char;{Описание типа данных — массива из 100 элементов символьного типа}

Var

Numbers: Array[1..20] Of Integer;{Описание переменной-массива из 20-ти целочисленных элементов}

Допускается описание массивов без указания размерностей и, соответственно, пределов изменения индексов:

Var

IntArray: Array Of Integer;{Описание массива целочисленных элементов без указания размерности}

Такие массивы являются динамическими и изначально имеют нулевую длину. Установка размерности и определения ее во время выполнения программы производится так же, как и для строк, с помощью функций SetLength и Length соответственно. Элементы в данном случае нумеруются от нуля. Для определения возможных значений индексов в динамических массивах используются функции Low (возвращает минимальный индекс заданного массива) и High (наибольший индекс).

Использование вариантных переменных в Delphi

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

  • структурных: записей и статических массивов, однако поддерживаются специальные вариантные массивы;
  • ссылочных: типизированных и нетипизированных указателей, а также указателей на экземпляры классов;
  • множественных типов данных.

Преимущества и недостатки вариантных переменных по сравнению с обычными типами данных.

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

Недостатками вариантов являются больший объем к занимаемой памяти и медленное выполнение операций с участием таких переменных.

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

Использование вариантных массивов

Вариантный массив — это один из видов вариантной переменной, информация в которой представляется в виде набора элементов и имеет индексный механизм доступа. Для создания вариантного массива используется функция-конструктор VarArrayCreate, в которой задается размерность массива, интервалы индексации и тип элементов.

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

Использование процедурных переменных

Процедурные переменные — это переменные, являющиеся ссылками на подпрограммы.

Описание процедурного типа определяет:

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

Соответственно, процедурной переменной можно присвоить ссылку только на ту подпрограмму, которая соответствует типу переменной по всем этим параметрам.

Структурные операторы, применяемые в Object Pascal, и их особенности.

В Object Pascal применяются следующие структурные операторы (операторы, управляющие структурой программы):

  • условный оператор if. .Then. .Else (возможно использование сокращенной формы if. .Then), предназначенный для выполнения фрагмента программы при истинности условия, или другого фрагмента программы в противном случае;
  • условный оператор множественного выбора Case. .Of. .Else (с сокращенной формой без секции Else), предназначенный для выполнения фрагмента программы из заданного набора при истинности одного из условий из заданного набора условий, или какого-либо фрагмента программы в случае ложности всех условий набора. Условиями в данном случае совпадение значения заданной в заголовке переменной с одним из значений заданного списка;
  • оператор зацикливания со счетчиком циклов For. . То. . Do (с декрементной модификацией For. .DownTo. .Do), предназначенный для многократного повторения фрагмента программы, расположенного после ключевого слова DO;
  • условный оператор зацикливания с предусловием while. . Do, предназначенный для многократного повторения фрагмента программы, указанного после ключевого слова DO, пока является истинным условие, указанное в заголовке оператора;
  • условный оператор зацикливания с постусловием Repeat. .Until; предназначенный для многократного повторения фрагмента программы, пока не станет истинным условие, указанное после ключевого слова until;

В качестве фрагментов программы, зацикливаемых при использовании операторов зацикливания, или выполняемых при истинности условий в условных операторах и условных операторах зацикливания, может применяться одна команда языка или вызов одной подпрограммы. Для выполнения нескольких команд применяются составные операторы — набор команд, заключенных в ключевые слова begin, end.

Использование подпрограмм в Object Pascal и их разновидности

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

Подпрограммы в Object Pascal, представлены процедурами и функциями. Процедура является обычной подпрограммой, то есть фрагментом программы, имеющим параметры и выполняющим некоторый набор команд языка. Функция, в отличие от процедуры, может возвращать значение (результат работы) в подпрограмму, вызвавшую ее.

Различные механизмы передачи параметров в подпрограммы Delphi 

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

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

  • модификатор var, если значение параметра может использоваться в подпрограмме и для чтения, и для изменения;
  • модификатор Out, если параметр предназначен только для изменения. 

Если модификатор параметра не использован, то параметр передается по значению, и называется параметр-значение. При указании модификатора Const параметр называют параметром-константой, при использовании модификатора Var — параметром-переменной, при использовании модификатора out — параметром для заполнения.

Перегружаемые подпрограммы

В Delphi существует возможность описания нескольких подпрограмм с одинаковыми именами в одной и той же области видимости. Такие подпрограммы называются перегружаемыми. Для того, чтобы компилятор мог выбрать правильную подпрограмму из нескольких перегруженных, они должны отличаться так называемой сигнатурой — последовательностью типов данных в списке параметров. Перегружаемые подпрограммы должны быть помечены ключевым словом overload.

Страница: 1 2 3 4 5 6 7