Зауважмо, що в жодному з попередніх прикладів конструкція
WITH обєкт DO …;
не зустрічається у явному вигляді. Поля даних об’єкта легко доступні за допомогою методів об’єкта. Хоча у вихідному коді поля даних об’єкта і тіла методів розділені, насправді вони сумісно використовують ту саму область дій. Саме тому один з методів TStudent може містити оператор
GetRate:=Rate;
без жодного кваліфікатора перед Rate. Можна сказати, що всередині методів об’єкта діє неявний оператор WITH. Наслідком цього є те, що формальні параметри методу, якщо такі є, не можуть співпадати за іменем ні з одним полем відповідного об’єкта.
Якщо об’єкт викликає метод, то виконується неявний оператор:
WITH Self DO метод;
що зв’язує об’єкт і його методи в одну область дій.
Неявний оператор WITH виконується шляхом передачі невидимого параметра методу кожного разу, коли цей метод викликається. Цей параметр називається Self і насправді він є 32-розрядним вказівником на екземпляр об’єкту, що здійснює виклик методу. Метод GetName, що стосується типу TStudent, приблизно еквівалентний опису
Procedure TStudent.GetName:String;
Begin
GetName:=Self.Name;
End;
хоча такий опис не зовсім коректний. Фактично, параметр Self є начебто невидимим полем об’єкту типу TStudent (чи будь-якого іншого об’єктного типу), доступ до якого здійснюється так само, як і до будь-якого іншого поля об’єкта.
Звичайно нема необхідності у використанні цього параметра, оскільки генерований Pascal-ем код обробляє його автоматично. Однак у деяких ситуаціях, коли, наприклад, об’єкти різних типів мають поля зі співпадаючими іменами або треба звернутися до об’єкту в цілому (взяти його адресу, порівняти його з іншим об’єктом цього ж типу), можна використовувати параметр Self явно. (Ми це будемо робити в Лабораторній роботі 1-2).
Підсумок
Об’єкт у розумінні мови Pascal – це така структура, компонентами якої є взаємозв’язані дані різних типів і процедури та функції, що ці дані використовують. Компоненти-дані називаються полями об’єкта, а компоненти-процедури і функції називаються методами. Поля даних повинні бути оголошені перед оголошенням методу. Якщо об’єкт викликає метод, то виконується неявний оператор:
WITH Self DO метод;
що дає змогу звертатися до полів об’єкта без додаткових кваліфікаторів.
Питання по темі
1. Компоненти-дані називаються ________ об’єкта, а компоненти-процедури і функції називаються _____________
2. Назвати ключове слово для позначення типу «об’єкт»
3. Як у загальному випадку звертатися до полів об’єкта?
4. Які складові частини програми можуть звертатися до полів об’єкта по імені
5. Який параметр зв’язує об’єкт і його методи в одну область дій?