Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pascal.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
3.44 Mб
Скачать

Контрольні питання

  1. У чому полягає основна відмінність між даними статичної та динамічної структури?

  2. Які дані належать даним динамічної структури?

  3. Які існують різновиди зв’язаних динамічних даних?

  4. У чому особливість оголошення даних динамічної структури?

  5. За допомогою яких процедур відбувається розподіл пам’яті під динамічні змінні?

  6. Який стан може приймати вказівник?

  7. Яку дію виконують процедури New та Dispose?

  8. Що так черга як структура даних?

  9. Що таке стек як структура даних?

  10. Скільки вказівників необхідно задля роботи з чергою?

  11. Які дії необхідно виконати для створення черги?

  12. Скільки вказівників необхідно задля роботи із стеком?

  13. Які дії необхідно виконати для створення стеку?

  14. Як додати або видалити елемент стеку?

Практична робота №12

Об’єктно-орієнтоване програмування

Мета роботи: засвоїти матеріал щодо можливостей TurboPascal при створенні об’єктів.

Теоретичні відомості

Виділення з програми процедур і функцій має не тільки оптимізуюче значення (частини програми, що повторюються, оформлюються в підпрограми), але і дає можливість спростити програмування. Добре написані процедура або функція повинні бути «чорною скринею» для програміста (при використанні підпрограм). Йому важливо знати що робить дана функція, як передати в неї параметри і як одержати результат. Те, як побудована функція йому знати зовсім не обов'язково.

Пояснимо термін «чорна скриня». Припустимо, що ви маєте пристрій з прозорим корпусом, біля якого є кнопки і екран, на якому відображається результат. В цьому випадку, ви можете дізнатися як відбувається отримання результату при натисненні кнопок. Якщо ж закрасити корпус чорною фарбою, вийде «чорна скриня», якою можна користуватися, але не можна дізнатися принцип її роботи.

Досить часто зустрічаються ситуації, коли створюються декілька функцій і процедур, що працюють з однаковим набором даних. Наприклад, в Windows для кожного вікна, що ми бачимо на екрані, існує набір змінних, які зберігають стан цього вікна: координати лівого верхнього кута, розмір вікна і інші параметри. Крім того в Windows є процедури і функції для роботи з вікнами: відобразити вікно, перемістити вікно тощо. Виникає ідея об’єднати разом і функції, і дані, з якими вони працюють. Це дозволяє, зокрема, не передавати інформацію про конкретне вікно через параметри.

Можна навести ілюстрований приклад. Кожен з нас вміє користуватись телевізором. По суті ми маємо «чорну скриню» (у зазначеному вище сенсі), у якої ми маємо можливість зчитувати поточний стан (наприклад, номер каналу), задані параметри (наприклад, колір телевізора), а також впливати на поточний стан (перемикати канали, міняти гучність). Програма, яка написана в об’єктно-орієнтованому стилі відповідає наступному набору вказівок:

Телевізор! Увімкнись!

Телевізор! Перемикнись на 1 канал!

Телевізор! Вимкни звук!

....

1 Поняття «об'єкт»

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

В результаті: в кожному екземплярі об'єкту є деякий набір змінних (вони можуть мати різні типи), а всім екземплярам об'єкту відповідає набір методів, за допомогою яких відбувається робота з об'єктом. Добре реалізований об'єкт буде «чорною скринею», робота з ним здійснюватиметься тільки за допомогою методів.

Для опису об'єкту використовується синтаксис, аналогічний опису запису:

type<ім’я об’єкту>=object

<список імен полів>:<тип полів>;

....

<список імен полів>:<тип полів>;

<оголошення метода>

...

<оголошення метода>

end;

Опис методу аналогічний попередньому опису функції (службове слово forward не використовується).

Після опису об'єкту описуються методи:

procedure <ім’я об’єкту>.<ім’я метода> <параметри>

<опис процедури>

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

Приклад 1:

Приведемо реалізацію об'єкту «вікно» (для реалізації інтерфейсу за допомогою модуля crt). Можна вважати, що вікно задається координатами лівого верхнього кута і розмірами по горизонталі і вертикалі (з урахуванням рамки вікна), а також мати прапорець видимості (true означає, що вікно на екран виведено).

type СWindow=object

x,y:integer; {координати вікна}

lenx,leny:integer; {розміри вікна}

visible:boolean; {прапорець видимості}

procedure Init(x,y,lenx,leny: integer);

procedure Show;

function isVisible:boolean;

end;

procedure СWindow.Init(x,y,lenx,leny:integer);

{задає початкові параметри вікна}

begin

Self.x:=x;

Self.y:=y;

Self.lenx:=lenx;

Self.leny:=leny;

visible:=true;

end;

procedure СWindow.show;

{рисує вікно}

var i,j:integer;

begin

textbackground(blue);

gotoxy(x,y);

write(╔); {ALT+201}

for i:=1 to lenx-2 do write('='); {ALT+205}

write('╗') {ALT+187}

for j:=y+1 to y+leny-2 do

begin

gotoxy(x,j);

write('║'); {ALT+186}

for i:=1 to lenx-2 do write(' '); {ALT+205}

write('║'); {ALT+186}

end;

gotoxy(x,y+leny-1);

write('╚'); {ALT+200}

for i:=1 to lenx-2 do write('='); {ALT+205}

write('╝'); {ALT+188}

visible:=true;

end;

function CWindow.isVisible:boolean;

begin

isVisible:=visible;

end;

Для створення екземпляра даного об'єкту можна використовувати стандартні способи оголошення змінних і створення динамічних змінних.

var Window:CWindow;

begin

Window.Init(20,5,40,10);

Window.Show;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]