Введение в объектно-ориентированное программирование на языке Object Pascal. Соколов Е.В. - 21 стр.

UptoLike

Составители: 

21
{ Для объектов t1 и t2 вызываются методы Square и Perimeter.
Возвращаемые ими действительные значения выводятся на экран. }
t1.Destroy; t2.Destroy; // объекты удаляются из памяти
ReadLn;
end.
Приведенный код содержит одну новую операцию: удаление объ -
екта из памяти. Вообще, тот факт, что объектная переменная представ-
ляет собой указатель, следует все время учитывать при разработке про-
граммы. Впрочем , проблемы, которые здесь возникают, характерны для
любых динамических переменных.
Прежде всего необходимо внимательно следить за тем , чтобы
объект ной переменной всегда был сопоставлен адрес существующего
объекта. Попытка обращения к полю или методу объекта посредством
переменной , не содержащей реального а дреса, не диагностируется ком -
пилятором и , как правило, вызывает ошибку (исключительную ситуа-
цию класса Access violation наруш ение доступа) во время выполнения
програм мы.
Поскольку объекты размещаются в памяти программистом , он же
должен позаботиться и об их своевременном удалении. Для этого и с -
пользуется инструкция
ИмяОбъекта.Destroy;
Свои особенности имеют и операции над объектами. Так, при-
сваивание a:=b, где a и b некоторые объектные переменные, влечет за
собой не копирование значений полей, а с овмещение указателей: после
нее обе переменные указывают на одну и ту же область памяти. Если до
этого переменная a уже содержала адрес некоторой структуры , то теперь
доступ к ней получить скорее всего не удас тся.
Соответствующую особенность имеет и сравнение д вух объектов .
Если переменные a и b содержат различные адреса, то результатом оп е -
рации a=b будет «ложь» даже в том случае, когда эти объекты принад -
лежат одному классу и их поля имеют одинаковые значения.
Наконец, при использовании объекта в качестве параметра под -
програм мы, последней передается его реальный адрес . Таким образом ,
появляется не всегда желательная воз мож ность модифицировать данный
объект в процессе ее выполнения. Объявление параметра как констант-
ного (использование префикса const) не решает э ту проблему.
{ Для объектов t1 и t2 вызываются методы Square и Perimeter.
  Возвращаемые ими действительные значения выводятся на экран. }

  t1.Destroy; t2.Destroy;        // объекты удаляются из памяти
  ReadLn;
end.


         Прив ед енны й код с од ержит од ну нов ую операцию: уд ал ение объ-
ект а из пам ят и. Вообще, тот факт, что объект ная перем енная пред с т ав -
л яет с обой указ ат ел ь , с л ед ует в с е в рем я учит ы в ат ь при раз работ ке про-
грам м ы . Впрочем , пробл ем ы , которы е з д ес ь в оз никают, характ ерны д л я
л юбы хд инам ичес кихперем енны х.
         Прежд е в с его необход им о в ним ат ел ь но с л ед ит ь з а т ем , чтобы
объект ной перем енной в с егд а бы л с опос т ав л ен ад рес с ущес т в ующего
объект а. Попы т ка обращения к пол ю ил и м етод у объект а пос ред с т в ом
перем енной, не с од ержащей реал ь ногоад рес а, не д иагнос т ирует с я ком -
пил ятором и, как прав ил о, в ы з ы в ает ош ибку (ис кл ючит ел ь ную с ит уа-
цию кл ас с а Access violation — наруш ение д ос т упа) в ов рем я в ы пол нения
програм м ы .
         Пос кол ь ку объект ы раз м ещают с я в пам ят и програм м ис том , он же
д ол жен поз абот ит ь с я и об их с в оев рем енном уд ал ении. Дл я э того ис -
пол ь з ует с я инс т рукция
                               ИмяОбъекта.Destroy;
         Св ои ос обеннос т и им еют и операции над объект ам и. Т ак, при-
с в аив ание a:=b, гд е a и b — некоторы е объект ны е перем енны е, в л ечет з а
с обой не копиров ание з начений пол ей, а с ов м ещение указ ат ел ей: пос л е
нее обе перем енны е указ ы в ают на од ну и т у же обл ас т ь пам ят и. Е с л и д о
э тогоперем енная a уже с од ержал а ад рес некоторой с т рукт уры , тот еперь
д ос т уп к ней пол учит ь с корее в с егоне уд ас т с я.
         Соот в ет с т в ующую ос обеннос т ь им еет и с рав нение д в ухобъектов .
Е с л и перем енны е a и b с од ержат раз л ичны е ад рес а, торез ул ьт атом опе-
рации a=b буд ет «л ожь » д аже в том с л учае, когд а э т и объект ы принад -
л ежат од ном у кл ас с у и ихпол я им еют од инаков ы е з начения.
         Н аконец, при ис пол ь з ов ании объект а в качес т в е парам ет ра под -
програм м ы , пос л ед ней перед ает с я его реал ь ны й ад рес . Т аким образ ом ,
появ л яет с я не в с егд а жел ат ел ь ная в оз м ожнос т ь м од ифициров ат ь д анны й
объект в процес с е ее в ы пол нения. Объяв л ение парам ет ра как конс т ант -
ного(ис пол ь з ов ание префикс а const) не реш ает э т у пробл ем у.




                                          21