Класи, програмування на мові паскаль

інкапсуляція

Інкапсуляція (Encapsulation) - приховування даних для забезпечення максимально можливої ​​незалежності об'єктів. Доступ до даних тільки з використанням методів роботи з ними всередині класу. Інкапсуляція дозволяє:

  • Приховати від зовнішнього світу внутрішню структуру об'єкта, допускаючи взаємодія з ним тільки через дозволені канали зв'язку. Це виключає можливість неправильних дій над даними з боку зовнішнього світу.
  • Змінювати в процесі розробки кожен клас без впливу на іншу частину програми.

спадкування

Спадкування (Inheritance) - створення нових класів-нащадків, які мають всі властивості класів-предків. Доцільно при створенні нового класу використовувати властивості наявного класу. Вихідний клас називається предок, похідний - нащадок. Клас-нащадок успадковує всі описи і методи класу-предка. Для нього потрібно описати тільки додаткові властивості. Класи утворюють ієрархічне дерево.

Принцип успадкування забезпечує поетапне створення складних класів. Клас-нащадок отримує все поля своїх предків, але не може їх видаляти або перевизначати. Чим нижче знаходиться клас в дереві ієрархії, тим більшими даними розташовують об'єкти цього класу.

поліморфізм

Поліморфізм - використання для різних об'єктів неоднакових методів під однаковими іменамі.Функціонально однакові операції з об'єктами предками і нащадками краще іменувати однаково. При цьому можна перетворювати процедури об'єкта предка. Це називається перевизначенням (або перекриттям). Однойменні методи різних об'єктів робляться унікальними введенням слова virtual (віртуальний) після заголовка методу.

створення класу

Нові класи оголошуються в розділі типів type.

type
<Имя класса> = Class (<Имя предка>)
опис нових даних;
заголовки нових методів;

Клас повинен бути оголошений до створення об'єктів класу. Кожен об'єкт має унікальну копію полів класу, але всі об'єкти класу використовують одні і ті ж методи. Об'єкти створюються при виконанні програми в динамічної пам'яті. Для створення об'єкта використовується метод constructor, а для знищення - destructor.

поля класу

Поля класу - дані, що містяться в класі. Описуються, як змінна будь-якого типу. Поля можуть бути будь-якого типу, в тому числі і класами. За угодою імена полів починають з префікса F (field - поле). Щоб приховати від зовнішнього світу структури класу поля зазвичай розміщуються в групі приватних описів private. Доступ до них здійснюється через властивості.

Рекомендується звертатися до полів за допомогою методів класу. Допускається (але не рекомендується) і пряме звернення. наприклад,

При компіляції воно буде автоматично перетворюватися в виклик методу класу.

властивості класу

Властивість - засіб доступу до полів, які прямо не доступні. Властивості (вони published) дають доступ до полів, безпосередньо недоступним (вони private). Формат властивості:

property <Имя>[Індекси]:<Тип> index <Число> специфікатори;

Ім'я має індекси, якщо властивість - масив. index <Число> присутній, якщо властивість - масив. Специфікатори - визначають дії з властивостями:

property Note: String read FNote;

Методи класу / об'єкта

Метод - підпрограма (процедура або функція), що є членом класу. Об'єктні методи подібні звичайним процедурам і функціям, тільки вони мають ще екстра-параметр self.

Формат виклику методу: <Объект>.<Метод>. Метод оголошується в класі, як звичайна підпрограма з директивою forward. В описі класу знаходиться заголовок методу, а код методу в розділі реалізації методу, де має складене ім'я, що включає тип класу. Спосіб виклику метод, оголошеного в класі, задається модифікатором методу, що вводиться після заголовка методу через крапку з комою. Якщо модифікатора немає, то метод вважається статичним і викликається, як звичайна підпрограма. Методи можуть бути:

Класи мають віртуальні методи, а об'єкти - немає. Це і є відмінність між ними. Для об'єктів досить переоб'явіть той же метод в об'єкті нащадка з ключовим словом virtual для перекриття. Для класів ситуація дещо інша: віртуальні методи повинні бути перекриті з ключовим словом override. Якщо так не зробити, запуститься той же віртуальний метод, що приховує попередній. Ключове слово Inherited НЕ перескочить на успадкований метод, якщо було використано virtual.

абстрактний метод

Абстрактними називаються методи, які визначені в класі, але не містять ніяких дій, ніколи не викликаються і обов'язково повинні бути перевизначені в нащадках класу. Абстрактні методи визначені в класах, основне призначення яких - бути родоначальником ієрархії конкретних класів і дати можливість абстрагуватися від деталей. Абстрактними можуть бути тільки віртуальні і динамічні методи. У FPC такі методи оголошуються за допомогою однойменної директиви. Вона вказується при описі методу:

procedure NeverCallMe; virtual; abstract;

статичний метод

Статичний метод «підключається» при компіляції, тобто його код розміщується в статичної пам'яті. Методи за замовчуванням статичні. При виклику такого методу його реалізація визначається типом змінної об'єкта, для якого метод викликається, а не ім'ям методу. У прикладі дві реалізації методу Draw.

Віртуальні методи

перекриває метод

  • inherited <Метод>. Успадковується вказаний метод. Вибирається від найближчого класу-предка.
  • inherited. Успадковується метод з тим же ім'ям, що у класу-нащадка. Вибирається від найближчого класу-предка.

Схожі статті