Московский государственный университет имени М.В.Ломоносова
Опубликован: 01.11.2004 | Доступ: свободный | Студентов: 11271 / 455 | Оценка: 4.12 / 4.01 | Длительность: 19:20:00
ISBN: 978-5-9556-0077-9
Специальности: Программист
Лекция 9:

Структурированные типы данных языка Object Pascal

< Лекция 8 || Лекция 9: 123 || Лекция 10 >
Аннотация: Приводится синтаксис и семантика объявления производного типа. Вводится понятие множества, массива, записи и файла.

Объявление производного типа

Кроме базовых типов данных, рассмотренных в лекции 6, язык Object Pascal предоставляет простые и структурированные типы данных.

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

Напомним, что к базовым типам относятся:

  • целочисленный тип;
  • действительный тип;
  • логический тип;
  • символьный тип;
  • строковый тип.

К простым типам относятся:

  • порядковый тип;
  • перечислимый тип.

К структурированным типам относятся:

  • множества;
  • массивы;
  • записи;
  • файлы;
  • объектный тип (тип класса);
  • тип ссылки на класс.

Для того чтобы создать переменную производного типа, сначала следует определить этот производный тип. Объявление нового производного типа указывается ключевым словом type.

Объявление произвольного типа как нового имени существующего типа в языке Object Pascal имеет следующее формальное описание:

type имя_нового_типа =
   имя_существующего_типа;

Объявление произвольного типа как нового типа в языке Object Pascal имеет следующее формальное описание:

type имя_нового_типа =
   type имя_существующего_типа;

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

В языке Object Pascal объявление типов и переменных может быть выполнено только в определенных местах программы: секция объявления типа type используется для объявлений типов, а секция var для объявления переменных.

Например:

type TValReal1 = Real;
var
  // Переменные X и Y имеют
  // один и тот же тип
  X: Real;  Y: TValReal1;
type TValReal2 = type Real;
var
  // Переменные X и Y имеют разные типы
  X: Real;  Y: TValReal2;

Множества

язык Object Pascal предоставляет два простых типа, описывающих множества значений. Это:

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

Множество языка Object Pascal - это набор значений порядкового или перечислимого типа. Множество определяется ключевым словом set of.

Создание порядкового и перечислимого типов имеет следующее формальное описание:

Идентификатор = Начальное_значение ..
   Конечное_значение;
Идентификатор = {Значение_i .,...};
Идентификатор = Значение_i..Значение_j;
Идентификатор = set of порядковый
   или перечислимый тип.

Например:

type
  {Объявление перечислимого типа}
  TMyColor = {Red,Blue,Yellow};
  {Объявление типа множество}
  TMyClr = set of TMyColor;
var
  {Объявление переменных созданных типов}
  ValC1, ValC2: TMyClr;
begin
  {Присвоение значения переменной
  типа множество}
  ValC1 := [Blue];
  ValC2 := ValC1+[ Red];
end.

Начальным и конечным значением интервала для порядкового типа могут быть:

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

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

Например:

type TMyInts = 1..500; 
TIntSet = set of TMyInts;
{Объявление переменной типа множества}
var set1: TIntSet;
begin
   {Инициализация переменной
   типа множества}
   set1:=[1,2,3,4];
end.

Над множеством допустимы следующие операции:

  • объединение множеств ( + );
  • разность ( - );
  • умножение ( * );
  • сравнение ( <=, >=, =, <> );
  • принадлежность множеству ( in ).

Например:

type
{Порядковый тип: значения от 1 до 9}
CountType = 1..9;
LowerCharType = 'а'..'я';
AType = (A1, A2, A3, A4, A5);
{Порядковый тип: значения A3, A4 и A5}
AType3 = A3..A5;
{Множество на основе порядкового типа}
ATypeSet = set of AType3;
{Множество  LetterType }
LetterType = set of 'A'..'Z';
var
{Объявление переменной типа множества}
aset: ATypeSet;
begin
{Присвоение значения переменной 
множественного типа}
aset:= [A3] + [A4];
{Вычитание множеств}
aset:= aset - [A4];      
end.

Каждая переменная множественного типа может иметь значение - множество. Для изменения значений переменной множественного типа могут использоваться операции объединения ( + ) и разности ( - ) множеств.

Например:

begin set1:=set1 +[5,6]; end.

Для определения принадлежности значения некоторому множеству используется операция in.

Например:

begin 
 if 5 in set1 
 then ShowMessage(
  'Значение принадлежит множеству set1');
end.
< Лекция 8 || Лекция 9: 123 || Лекция 10 >
Александр Демьяненко
Александр Демьяненко

Можно ли сдавать один и тот же тест несколько раз?
Или же один и тот же тест можно сдать лишь однажды?

Максим Стогний
Максим Стогний

Добрый день!

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

тип_метода (имя_класса::*имя_метода_указателя)
    (список параметров);
тип_функции (*имя_ функции_указателя)
    (список параметров);

при этом можно было  тип_функции во втором описании заменить на тип_метода? Т.е.:

тип_метода (*имя_ метода_указателя)
    (список параметров);