ВУЗ:
Составители:
Рубрика:
23
Рассмотрим теперь подробнее, как работает программа из прим е-
ра 2.2. Строка
WriteLn('Square of triangle 1: ', t1.Square);
приводит к вызову метода Square для объекта t1. В качестве параметра
ему передается адрес , который хранит переменная t1.
Следующей выполняется первая строка из реализации метода
Square:
p:=self.Perimeter/2;
Здесь тот же самый объект уже адресует указатель self. Таким образом ,
метод Perimeter снова вызывается для объекта t1 и подсчитывает сумму
его полей.
Далее исполнение возвращается в метод Square, завершающий
вычисление площади треугольника t1, и затем в основную программу.
Двумя строками ниже вызов п одпрограммы Square производится
уже для объекта t2, поэтому именно его адрес будут содержать указатели
self в ходе выполнения методов Square и Perimeter и, следовательно,
именно его поля будут участвовать в вычислениях.
Следует отметить, что использование указателя self не является
обяз а тельным: к полям и методам текущего объекта можно обращаться
просто по их именам . Мы, однако, не будем пока использовать эту воз-
можность.
2.4. Области видимости членов класса
Особенности классов , описанные до сих пор , не дают ничего
принципиально нового по сравнению с модулями. Единственным за-
метным отличием яв ляет ся более четкое определение перечня подпро-
грамм, которые можно применить к заданному типу. Эта возможность,
однако, мало способствует достижению нашей основ ной цели — созда-
нию абс т рактных типов , не позволяющих пользователю видеть детали
своей реализации. Для решения данной задачи применяется специал ь-
ный механизм ограничения доступа к членам класса — задание их об-
ластей видимости.
В Object Pascal объявлению любого члена в интерфейсе класса
может предшествовать одно из зарезервированных слов : private (за кры-
тый), protected (защищенный), public (открытый), а также published
(опубликованный) и automated (автоматизированный), опред еляющее
его видимость. Если не указано ни одно из них, то член имеет ту же об-
ласть видимости, что и пред шествующий ему. Это позволяет объединять
Рас с м от рим т еперь под робнее, как работ ает програм м а из прим е-
ра 2.2. Ст рока
WriteLn('Square of triangle 1: ', t1.Square);
прив од ит к в ы з ов у м етод а Square д л я объект а t1. В качес т в е парам ет ра
ем у перед ает с я ад рес , которы й хранит перем енная t1.
Сл ед ующей в ы пол няет с я перв ая с т рока из реал из ации м етод а
Square:
p:=self.Perimeter/2;
Зд ес ь тот же с ам ы й объект уже ад рес ует указ ател ь self. Т аким образ ом ,
м етод Perimeter с нов а в ы з ы в ает с я д л я объект а t1 и под с чит ы в ает с ум м у
егопол ей.
Дал ее ис пол нение в оз в ращает с я в м етод Square, з ав ерш ающий
в ы чис л ение пл ощад и т реугол ь ника t1, и з ат ем в ос нов ную програм м у.
Дв ум я с т рокам и ниже в ы з ов под програм м ы Square произ в од ит с я
уже д л я объект а t2, поэ том у им енноегоад рес буд ут с од ержат ь указ ат ел и
self в ход е в ы пол нения м етод ов Square и Perimeter и, с л ед ов ат ел ь но,
им енноегопол я буд ут учас т в ов ат ь в в ы чис л ениях.
Сл ед ует от м ет ит ь , что ис пол ь з ов ание указ ат ел я self не яв л яет с я
обяз ат ел ь ны м : к пол ям и м етод ам т екущего объект а м ожно обращат ь с я
прос то по ихим енам . М ы , од нако, не буд ем пока ис пол ь з ов ат ь эт у в оз -
м ожнос т ь .
2.4. О б ласти видимо сти членов класса
Ос обеннос т и кл ас с ов , опис анны е д о с их пор, не д ают ничего
принципиал ь но нов ого по с рав нению с м од ул ям и. Е д инс т в енны м з а-
м ет ны м отл ичием яв л яет с я бол ее чет кое опред ел ение перечня под про-
грам м , которы е м ожноприм енит ь к з ад анном у т ипу. Э т а в оз м ожнос т ь ,
од нако, м ал ос пос обс т в ует д ос т ижению наш ей ос нов ной цел и — с оз д а-
нию абс т ракт ны хт ипов , не поз в ол яющихпол ь з ов ат ел ю в ид ет ь д ет ал и
с в оей реал из ации. Дл я реш ения д анной з ад ачи прим еняет с я с пециал ь -
ны й м еханиз м ограничения д ос т упа к чл енам кл ас с а — з ад ание ихоб-
л а сте й видимости.
В Object Pascal объяв л ению л юбого чл ена в инт ерфейс е кл ас с а
м ожет пред ш ес т в ов ат ь од ноиз з арез ерв иров анны хс л ов : private (за кры-
тый), protected (за щищ е н н ый), public (открытый), а т акже published
(опубл икова н н ый) и automated (а втома тизирова н н ый), опред ел яющее
егов ид им ос т ь . Е с л и не указ анони од ноиз них, точл ен им еет т у же об-
л ас т ь в ид им ос т и, чтои пред ш ес т в ующий ем у. Э топоз в ол яет объед инят ь
23
Страницы
- « первая
- ‹ предыдущая
- …
- 21
- 22
- 23
- 24
- 25
- …
- следующая ›
- последняя »
