Delphi — это императивный структурированный объектно-ориентированный язык программирования.
Введение
Язык программирования Delphi предоставляет богатый набор возможностей по работе с разными типами информационных данных, а именно, множествами, массивами, записям и так далее. При формировании программных продуктов иногда бывает мало тех типов данных, которые имеются в языке программирования. К примеру, иногда удобно совмещать в одной переменой несколько данных одного типа, или организовать сохранение разнотипных данных (к примеру, строки и числа). В Delphi можно создавать свои типы данных на базе уже существующих, путём их комбинации или совмещения. К примеру, чтобы создать упорядоченный список данных, имеющих один тип, применяют массивы (arrays), а, чтобы объединить ряд типов в один, применяют записи (records).
Ещё одним обстоятельством использования собственных типов данных, которое упрощает процедуру создания программы и делает её более удобочитаемой, считается применение множеств. Множества являются именованным комплектом из набора допустимых значений.
Формирование какого-либо типа данных всегда должно начинаться с декларации, или описания формируемого типа данных. Осуществляется это в области заголовка программного модуля и должно начинаться ключевым словом type. Затем, когда уже выполнено определение нового типа данных, выполняется создание переменных нового типа по аналогии с любым простым типом.
Массивы
Массив – это упорядоченная структура, которая состоит из набора элементов одного типа, обладающих общим именем.
Это позволяет при посредстве только одной переменной сохранять большой комплект данных, причём все компоненты массива обладают своим собственным индексом, или индексами, когда массив является многомерным. Объявление массива выполняется при посредстве ключевого слова Array, квадратных скобок, не являющихся обязательными, где указывается количество компонентов массива, и типа данных для компонентов массива:
Array [индексы] of ;
Число индексов равняется размерности массива. К примеру, одномерный массив, являющийся в математике вектором, обладает только одним индексом, а двумерный массив, являющийся матрицей, имеет два индекса и так далее. Объявляется массив следующим образом:
type MyArray1 = array [1..100] of integer;
type MyArray2 = array [1..10, 1..10] of integer;
В первом примере определяется одномерный массив, состоящий из ста компонентов типа целых чисел. Во втором примере определяется двумерный массив, имеющий размерность десять на десять, то есть тоже имеет сто компонентов типа целых чисел. После завершения определения массива, имеется возможность формирования переменных требуемого типа:
var A1: MyArray1;
Ещё одним методом формирования массива может быть единовременное объявление переменной и описания массива:
var A1: array [1..100] of Integer;
Когда требуемый размер массива не определён заранее, то возможно применять динамические массивы. Возможно их определение как с предварительно объявленным типом, так без него, нужно просто сформировать переменную, имеющую своим типом массив:
var DynArray: array of integer;
Но прежде чем начать использовать динамический массив, сначала необходимо назначить для него участок памяти. Осуществить это можно при посредстве операции SetLength, где нужно указать имя динамического массива и требуемый объём памяти:
SetLength(DynArray, 10);
Главным достоинством динамического массива считается возможность изменения объёма выделяемой под массив памяти непосредственно при выполнении программы. Чтобы обратиться к выбранному компоненту массива применяется индекс (или набор индексов) компонента в массиве. К примеру, первым компонентом в массиве типа MyArray1 (array [1..100]) будет элемент, имеющий индекс единица, а конечным элементом будет тот, который имеет индекс равный ста. То есть, для обращения к первому компоненту массива, к примеру, для присвоения ему значения, применяется такой тип записи:
A1[1] := 10;
В этом примере выполняется присвоение компоненту массива А1, имеющему индекс единица, величины десять. Подобным же образом можно считывать данные:
x := A1[1];
В этом примере переменная х получает значение первого компонента массива А1. Следует заметить, что при этом необходимо соблюсти следующие условия:
- Компонент массива, к которому обращается программа, обязан быть существующим.
- Типы данных при присвоении должны совпадать.
Множества
Часто появляется необходимость ограничения допустимых значений переменной лишь частью величин из набора всех возможных для данного типа. К примеру, требуется переменная, имеющая тип Char, которой должны присваиваться значения только из набора, включающего лишь строчные латинские символы. Для разрешения этой проблемы можно использовать подмножество. В нашем примере это будет подмножество символики от a до z. Определяется подмножество следующим образом:
type SmLetter = a..z;
То есть, образован новый тип данных SmLetter, являющийся усечённой версией типа Char. При применении этого типа данных, переменные типа SmLetter не способны принимать значения, не входящие в назначенный диапазон.
Подмножества имеют дальнейшее развитие в виде множеств, или наборов (sets). Они, аналогично подмножествам, могут выделяться в отдельные типы данных, но их диапазон допустимых значений задаётся по-другому. Для задания множества применяется ключевое слово set:
Set of
Если использовать предыдущий пример, то допустимый диапазон, состоящий из строчной латинской символики, определяется так:
type Letters = set of Сhar; var a: Letters; ... a := [a..z];
То есть, определение множества включает два этапа:
- Выполняется определение типа, на базе которого формируется подмножество (Letters).
- Выполняется объявление переменной этого типа (a), и уже к ней присоединяется диапазон значений.