Планирование уроков на учебный год (по учебнику К.Ю. Полякова, Е.А. Еремина, полный углублённый курс, по 4 часа в неделю)



Урок 89
Создание объектов в программе
(§48. Создание объектов в программе)




Содержание урока

Класс Дорога

Класс Машина

Основная программа

Вопросы и задания

Задачи


Класс Дорога


Объектно-ориентированная программа начинается с описания классов объектов. Класс в программе — это новый тип данных. Как и структура (см. § 39), класс — это сложный тип данных, который может объединять переменные различного типа в единый блок. Однако, в отличие от структуры, класс содержит не только данные, но и методы работы с ними (процедуры и функции).

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

Поле — это переменная, принадлежащая объекту.

Значения полей описывают состояние объекта, а методы — его поведение.

Описание класса Дорога в программе на объектной версии Паскаля (здесь имеется в виду FreePascal или Delphi) выглядит так:

type TRoad = class
Length: real;
Width: integer; 
end;

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


1 Буква «Т» в начале названия класса — это сокращение от слова type.



Если мы хотим работать с объектом класса TRoad, в программе нужно объявить соответствующую переменную:

var road: TRoad;

Однако и это ещё не объект, а ссылка (указатель), т. е. переменная, в которой можно сохранить адрес любого объекта класса TRoad. Чтобы создать сам объект в памяти, нужно вызвать специальный метод Create, который называется конструктором. Адрес нового объекта записываем в переменную road:

road:=TRoad.Create;

Созданный объект относится к классу TRoad, поэтому его называют экземпляром класса TRoad.

При описании класса мы ничего не говорили о методе Create. Он добавляется ко всем классам по умолчанию, при его вызове все переменные объекта заполняются нулями 2.


2 Хотя стандарта на этот счёт нет, так сделано во всех объектных реализациях Паскаля.



Конструктор — это метод класса, который вызывается для создания объекта этого класса.

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

road.Length:=60; 
road.Width:=3;

Полная программа, которая создаёт объект «дорога» (и больше ничего не делает), выглядит так:

{$mode objfрс} 
type TRoad = class
Length: real;
Width: integer; 
end;
var road: TRoad; 
begin
road:=TRoad.Create; 
road.Length:=60; 
road.Width:=3 
end.

Строка {$mode objfpc} по форме похожа на комментарий, потому что заключена в фигурные скобки. Однако для компилятора это команда перейти в режим работы с объектами (англ. mode — режим; object — объект; FPC — Free Pascal Compiler — свободно распространяемый компилятор Паскаля).

Начальные значения полей можно задавать прямо при создании объекта. Для этого нужно добавить в описание класса новый конструктор. Конструктору будет передаваться два параметра — начальные значения длины и ширины дороги:

type TRoad = class
Length: real;
Width: integer;
constructor Create(lengthO: real;
width0: integer)
end;

Реализация (программа) конструктора может выглядеть так:

constructor TRoad.Create(length0: real;
width0: integer);
begin
if length0>0 then
Length:=length0 
else Length:=1; 
if width0>0 then
Width:=width0 
else Width:=1;
end;

Здесь проверяется правильность переданных параметров, чтобы по ошибке длина и ширина дороги не оказались нулевыми или отрицательными 3. Теперь создавать объект будет проще:

road:=TRoad.Create (60, 3) ;

Длина этой дороги — 60 единиц, она содержит 3 полосы.

Таким образом, класс выполняет роль «фабрики», которая «выпускает» (создаёт) объекты «по чертежу» (описанию класса) при вызове конструктора.


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




Следующая страница Класс Машина



Cкачать материалы урока






Наверх