На головну

ОСНОВИ ОБ'ЄКТОВОГО ПРОГРАММИРОВАНИЯ В СИСТЕМІ ТУРБО-ПАСКАЛЬ

  1. C) дається приклад країни, успішно поєднати у своїй правовій системі ознаки романо-германський системи права із загальним правом.
  2. I. ОСНОВИ МАРКЕТИНГУ
  3. I. Сучасні НПЗЗ в системі мультимодального знеболення.
  4. II. Гра в системі трансляції діяльності та навчання
  5. II.1. основи державності
  6. IV. Основіформальних-ЛОГІЧНИХ ЗАКОНИ
  7. IX. ПРАВОВІ ОСНОВИ ІНФОРМАЦІЙНОГО ЗАБЕЗПЕЧЕННЯ ПРИРОДОКОРИСТУВАННЯ ТА ОХОРОНИ НАВКОЛИШНЬОГО СЕРЕДОВИЩА

об'єкт в ТурбоПаскале - це структура даних, що містить поля даних різних типів і заголовки методів і узагальнююча структуру «Запис» (record).

Синтаксис опису об'єкта:

<ІмяПотомка> =

оbjесt <ІмяПредка> поле;

поле;

...

метод;

...

метод;

end;

На відміну від запису полями об'єкта можуть бути, крім даних, ще й методи, які обробляють ці дані

метод- Це процедура або функція, оголошені усередині опису об'єкта. Синтаксис опису методу:

procedure <Тема> (<параметр1>, <параметр2>: integer),

Метод має доступ до полів даних об'єкта, не вимагаючи передачі їх йому у вигляді параметрів

Оголошення методу всередині оголошення об'єктного типу містить тільки заголовок. Тіло методу визначається поза оголошення об'єкта. Його заголовок повинен містити ім'я об'єкта, якому належить метод. наприклад:

procedure <ТіпОб'екта. метод>

(<Параметр1>, <параметр2>: integer);

begin

...

...

еnd; {Метод}

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

Синтаксис віртуального методу:

procedure <Метод> (<параметр1>, <параметр2>: integer): virtual;

Крім звичайних процедур і функцій, ТурбоПаскаль 6.0 реалізує два спеціальних типи методів: конструктор і деструктор.

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

деструкція - Це спеціальний метод, який звільняє пам'ять «купи» від динамічних об'єктів. Він оголошується з використанням спеціально зарезервованого слова destructor.

Основними відмітними властивостями об'єкта є

- Інкапсуляція - об'єднання записів з процедурами і функціями, які працюють з цими записами;

- Успадкування - завдання об'єкта, потім використання його для побудови ієрархії породжених об'єктів із спадкуванням доступу кожного з породжених об'єктів до коду і даним предка;

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

Розглянемо зміст кожного з перерахованих свойствна прикладі побудови на екрані дисплея точок різних кольорів (зоряного неба).

Інкапсуляція. Основою розв'язання задачі є завдання положення (позиції) окремої точки на екрані, описуваного координатами Х і Y. Для завдання координат підходить тип «запис»:

Pozition = record

X, Y: integer;

end;

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

procedure Init (CoordX, CoordY: integer);

begin

X: = CoordX;

Y: = CoordY;

end;

Потім потрібно знання фактичних значень координат. Для цього вводимо дві функції:

function GetX: integer;

begin

GetX: = X;

end;

function GetY: integer;

begin

GetY: = Y;

end;

За нашим задумом процедура Init і функції GetX і GetY повинні працювати тільки з полями записи Pozition.

Введення об'єктів дозволяє зафіксувати це положення, оголосивши і поля, і дії над ними в єдиній конструкції:

Pozition = object

X, Y: integer;

procedure Init (CoordX, CoordY: integer);

function GetX: integer;

function GetY: integer;

end;

Процедура Init і функції GetX і GetY є методами об'єкта Pozition.

Для ініціалізації екземпляра типу Pozition досить викликати його метод, як якщо б він був полем записи:

var

FirstPozition: Pozition;

...

FirstPozition.Init (10,15);

Метод задається так само, як і процедура в модулі: усередині об'єкта записується заголовок (як в секції Interface модуля); при цьому всі поля, які використовуються мето-дом, повинні передувати його оголошенню. Визначення методу (розшифровка дій) відбувається поза оголошення об'єкта. Ім'я методу повинно передувати назвою типу об'єкта, якому метод належить, супроводжуваним точкою. наприклад,

procedure Pozition. Init (CoordX, CoordY: integer);

begin

X: = CoordX:

Y: = CoordY;

end;

Зауважимо, що імена формальних параметрів методу не можуть збігатися з іменами полів даних об'єкта.

Також як модуль приховує деталі реалізації процедур від користувача, об'єкт може приховувати свої поля і методи. Для цього використовується ключове слово private (особистий). Особисті поля і методи доступні тільки всередині методу. Оголошення виглядає наступним чином:

type

ObjectName = object

поле;

...

поле;

метод;

метод;

private

поле;

...

поле;

метод;

...

метод;

end;

спадкування. Розглянемо точку з координатами Х і Y. Її можна зробити видимою або невидимою, їй можна задати колір, її можна перемістити. Створимо об'єкт з такими можливостями:

Point = object

X, Y: integer; "

procedure Init (CoordX, CoordY: integer);

function GetX: integer;

function GetY. integer;

Visible: Boolean;

Color: Word;

procedure Init (CoordX, CoordY: integer; InitCoIor: Word);

function Is Visible: Boolean;

procedure Show; {показує точку}

procedure Blind; {Стирає точку}

procedure Jump (NextX, NextY: integer); {nepeMeiuaer точку}

end;

Зауважимо, однак, що поля X.Y і методи GetX, GetY практично збігаються з відповідними полями і методами об'єкта Pozition.

Турбо-Паскаль надає можливість врахувати цю ситуацію. Слід вважати тип об'єкта Point породженим типом Pozition, записавши це в такий спосіб:

Point = object (Pozition)

Visible: Boolean;

Color: Word;

procedure Init (CoordX, CoordY: integer; InitColor: Word);

function Is Visible. Boolean;

procedure Show;

procedure Blind:

procedure Jump (NextX, NextY: integer);

end;

Об'єкт Point тепер успадковує властивості об'єкта Pozition. Поля X, Y явно не задані в Point, але Point ними володіє завдяки спадкоємства, тобто можна написати

Point.X: = 17;

Сенс об'єктно-орієнтованого програмування полягає в роботі з полями об'єкта через його методи.

поліморфізм. Припустимо, треба створити об'єкт «гурток». Очевидно, що новий об'єкт повинен мати предком об'єкт Point, володіючи всіма його властивостями, крім того. бути більше за розміром. Однак, зрозуміло, що «висвітлити» точку і зафарбовані коло не вдасться одними і тими ж командами. Турбо-Паскаль дозволяє зберегти нащадку ім'я батьківського методу, «перекриваючи» його. Щоб перекрити батьківський метод, треба просто поставити його з тим же ім'ям, але з іншим тілом (кодом) і, якщо необхідно, з іншим набором параметрів. Такий метод робиться віртуальним і до його оголошенню додається слово virtual. Застосування віртуальних методів накладає обмеження на процедури ініціалізації, які мають бути записані з зарезервованим словом constructor і мати загальне ім'я Init

Кожен окремий екземпляр об'єкта повинен инициализироваться за допомогою окремого виклику конструктора

Для очищення і видалення динамічно розподілених об'єктів існує спеціальна процедура destructorDone.

Деструкція комбінує крок звільнення пам'яті в «купі» з деякими іншими завданнями. Метод деструктора може бути пустиу), оскільки роботу виконує не тільки код тіла, але і код, що генерується Турбо-Паскалем у відповідь на зарезервоване слово destructor.

 




РІШЕННЯ ЛОГІЧНИХ ЗАДАЧ НА пролог | ПРИЗНАЧЕННЯ І ЗАГАЛЬНА ХАРАКТЕРИСТИКА МОВИ | ОСНОВНІ ЕЛЕМЕНТИ ПРОГРАМИ НА Ліспі. СПИСКИ | ФУНКЦІЇ | Базові функції обробки S-виразів | Динамічне управління обчисленням | Рекурсією І ЦИКЛ В ПРОГРАМАХ НА Ліспі | ВВЕДЕННЯ-ВИВЕДЕННЯ ДАНИХ | ПРИКЛАД ПРОГРАММИРОВАНИЯ НА Ліспі | властивості СИМВОЛІВ |

© um.co.ua - учбові матеріали та реферати