Вход/Регистрация
Технологии программирования
вернуться

Костерин В В

Шрифт:

type

TmyRecord = record

MyField1: String;

MyField2: Integer;

end;

Тип-запись позволяет описывать структурированные переменные, содержащие несколько значений как одного, так и разных типов. В приведенном примере запись TmyRecord содержит поля MyField1 и MyField2, которые соответственно имеют типы String и Integer.

Тип-класс в Object Pascal по виду близок к записи, но отличается от записи возможностью наследования от других классов, а также возможностью описания методов класса. Классом в Object Pascal называется особый тип записи, который может иметь в своем составе поля, методы и свойства. Такой тип также будем называть объектным типом:

type

TMyObject = class(TObject)

MyField: Integer;

Procedure MyMethod1 (X: Real; var Y: Real);

function MyMethod2: Integer;

end;

В примере описан класс TMyObject, который наследуется от класса Tobject. Понятие "наследования классов" и понятие "свойства" будут подробно рассмотрены далее. Пока можно определить понятие свойства как поле, которое доступно не напрямую, а через посылку сообщений особым методам.

Класс TMyObject имеет поле MyField и методы MyMethod1 и MyMethod2. Нужно заострить внимание на том, что классы могут быть описаны либо в секции интерфейса модуля Interface (под модулем здесь понимается файл с исходным кодом вида Unit), либо на верхнем уровне вложенности секции реализации Implementation. He допускается описание классов внутри процедур и других блоков кода.

В случае если класс включает в себя поле с типом другого класса, разрешено опережающее объявление класса как в следующем примере:

type

TFirstObject = class;

TSecondObject = class (TObject)

Fist: TFirstObject;

{…}

end;

TFirstObject = class(TObject)

{…}

end;

Код методов описывается ниже по тексту объявлений классов, например:

Procedure TMyObject.MyMethod1(X: Real; var Y: Real);

begin

у:= 5.0 * sin(X);

end;

function TMyObject.MyMethod2: Integer;

begin

{…}

MyMethod2:= MyField + 3;

end;

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

var

AMyObject: TMyObject;

Согласно обычному языку Borland Pascal, переменная AMyObject должна содержать в себе весь экземпляр объекта типа TMyObject (код и данные вместе) — статический объект. Но в Delphi все объекты динамические, поэтому, не вдаваясь в подробности, выполним оператор:

{действие по созданию экземпляра объекта}

AMyObject:= TMyObject.Create;

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

var

К: Integer;

{…}

AMyObject.MyMethod1(2.3, Z);

К:= 6 + AMyObject.MyMethod2;

Методы — это процедуры и функции, описанные внутри класса. Как видно, посылка сообщений в Object Pascal близка к вызову процедур языка Pascal, но имени вызываемой процедуры или процедуры-функции предшествует имя конкретного объекта, например: AMyObject.

Опишем два объекта AMyObject, BMyObject одного класса TMyObject:

var

AMyObject,

BMyObject: TmyObject;

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

На самом деле методы у разных объектов одного класса общие. Другими словами, они реализуются общим кодом, расположенным только в одном месте памяти. Это экономит память. В приведенном примере вызов методов:

AMyObject.MyMethod1(2.3, Z);

  • Читать дальше
  • 1
  • ...
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: