Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Procedure TStudent.Init(Nm,Dt:String; RT:Real);Содержание книги
Поиск на нашем сайте
Begin Name:=Nm; Date:=Dt; Rate:=Rt; End;
Function TStudent.GetName:String; Begin GetName:=Name; End; Function TStudent.GetDate:String; Begin GetDate:=Date; End; Function TStudent.GetRate:String; Begin GetRate:=Rate; End;
Всередині визначення методу його ім’я вже не зв’язується з типом TStudent.
Область дії методів і параметр Self Зауважмо, що в жодному з попередніх прикладів конструкція 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. Який параметр зв’язує об’єкт і його методи в одну область дій?
Тема 2 Об’єктно-орієнтоване програмування в Pascal. Успадковування. Інкапсуляція
Успадкування Присвоювання об’єктів Приховування даних в об’єктах Інкапсуляція Перевизначення методів Підсумок Питання по темі
Успадкування Припустимо, що перед нами поставили таке завдання: доповнити частину об’єктів типу TStudent полем даних Bal дійсного типу. В цьому полі будемо записувати середню оцінку студента згідно з результатами останньої сесії. Таку оцінку мають тідьки студенти, які провчилися в навчальному закладі не менше семестра, вона відсутня у студентів, які щойно були зараховані. Назвемо новий тип TStudent1. Звичайно, ми могли б визначити його, просто продублювавши відповідний опис типу TStudent і додавши нове поле даних. Вийшло б щось таке: TStudent1 =OBJECT Name:String[30]; Date:String[10]; Rate:Real; Bal: Real; END; Однак можна вчинити значно грамотніше і відповідніше до принципів об’єктного програмування. Новий тип успадкує дані і методи від типу TStudent, а нове поле даних ми довизначимо. TStudent1= OBJECT(TStudent) Bal: Real; END; Тип TStudent називається батьківським (parent), тип TStudent1 – дочірнім (child). Фактично цей процес можна продовжувати як завгодно довго: можемо визначити наступний тип, для якого TStudent1 буде батьківським. Найчастіше побудова об’єктно-орієнтованих прикладних програм полягає в побудові такої ієрархії об’єктів. Всі типи, які успадковують тип TStudent, називаються його дочірніми типами, але TStudent1 є безпосереднім дочірнім типом від TStudent, а TStudent є безпосереднім породжуючим типом для TStudent1.
Присвоювання об’єктів З уміння об’єктів успадковувати випливають нові правила присвоювання для змінних типу «об’єкт» (екземплярів). Їм можна присвоювати не тільки значення цього ж типу, але й будь-якого похідного від них. Аналогічне правило сумісності типів діє при передачі в процедуру чи функцію параметрів типу «об’єкт». Наприклад, якщо у програмі оголошені змінні типу «об’єкт» VAR St: Tstudent; St 1: Tstudent 1; то для копіювання значення, записаного у змінній St1, у змінну St2 достатньо виконати присвоювання St:= St1; Подібна операція заповнить поля даних у St значеннями аналогічних полів, успадкованих St1 (тобто полів Name, Date, Rate). Методи таким способом не присвоюються. Оскільки похідний тип завжди має не менше полів даних, ніж прабатьківський, операція можлива саме у такий спосіб: Прабатько:=Спадкоємець; При цьому гарантується заповнення всіх полів змінної, що стоїть зліва. Інакше виникла б невизначеність із «зайвими» полями, присутніми у правій змінній. Щоб уникнути такої невизначеності, забороно ставити «породжений» тип зліва від прабатьківського. Змінні типу «об’єкт» можуть бути динамічними, тобто оголошуватися як вказівники. VAR Dyn_ St: ^ TStudent; Dyn_ St 1: ^ TStudent 1; Після створення динамічних об’єктів процедурою чи функцією New вказівники (як розіменовані, так і самі по собі) можуть присвоюватися один одному. Правила сумісності залишаються тими ж: коректними будуть лише присвоювання вказівників на спадкоємців вказівникам на прабатьків. Dyn_ St: = Dyn_ St1; Dyn_ St ^: = Dyn_ St 1^; Подібні правила діють і по відношенню до формальних-фактичних параметрів: формальний параметр даного об’єктного типу може приймати в якості фактичного параметра об’єкт свого ж типу чи об’єкти всіх дочірніх типів. Якщо визначити заголовок процедури так: Procedure Show_ Fields(Obj: TStudent); то допустимими типами фактичних параметрів можуть бути TStudent i TStudent1. А в такому випадку Procedure Show_ Fields(Obj: TStudent1); допустимий тип фактичних параметрів лише TStudent1.
|
||||
|
Последнее изменение этой страницы: 2021-12-15; просмотров: 65; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.15 (0.007 с.) |