
- •Алфавіт мови включає в себе:
- •Лексеми мови. Під лексемами розуміють елементарні конструктивні елементи програми, які є неподільними:
- •Оголошення підпрограм: функцій та процедур. Структурне програмування передбачає побудову програм, яка фактично буде послідовністю звертань до підпрограм.
- •Оператор присвоєння присвоює змінній значення виразу, в якості якого може використовуватися і константа, і змінна, і результат обрахування функції, і група операцій. Оператор має вигляд:
- •Складений оператор. Якщо потрібно деяку групу команд інтерпретувати, їх як одну команду, тобто об’єднати їх в певному контексті, то використовують складені оператори.
- •Оператори вводу-виводу. В мові програмування Turbo Pascal ввід-вивід здійснюється насправді не операторами, а стандартними
- •Оператор розгалуження. В ряді випадків алгоритм розв’язку задачі передбачає розгалуження, тобто можливість виконання декількох різних дій в залежності від значення певної логічної умови.
- •Оператори циклу.
- •Програма знаходження суми чисел 1..10.
- •Програма друкування символів ‘a’..’z’.
- •Програма побудови таблиці істинності для and.
- •Скалярні / прості / стандартні типи даних:
- •Скалярні типи користувача:
- •Наприклад
- •4.Структурокані типи даних:
- •1 Діапазон – одновимірний масив;
- •2 Діапазони – двовимірний ( таблиці, матриці);
- •Наприклад
- •5.Комбіновані структури даних.
- •Варіантна частина у записі може бути лише одна і лише в кінці. Службове слово end є спільним для конструкції record і варіантної частини.
- •Приклади задач з масивами
- •Знайти середнє арифметичне додатніх і від’ємних елементів масиву цілих чисел.
- •Стандартні підпрограми обробки рядків
- •Операції над множинами
- •1. Процедури являють собою дію, тому їх можна використовувати в якості окремого оператора в розділі операторів програми.
- •2. Функції являють собою значення певного типу, крім цього вони можуть використовувати деяку дію, але значення їх є головним. Тому функції використовують як окремі оператори у виразах.
- •Параметри-змінні
- •Без типові параметри
- •Наявність умови зупинки, при якій деякому параметру рекурсії передається деяке значення рекурсії.
- •Чітко визначений алгоритм, при обчисленні кожного вищого рівня рекурсії через попередній рівень.
- •Типізовані.
- •Текстові.
- •Безтипові.
- •Процедура зв’язування певної файлової змінної із конкретним файлом на диску
- •Процедура відкриття файлу для читання
- •Процедура відкривання файлу для запису
- •Процедура закривання файлу
- •Процедура примусового очищення внутрішнього буфера обміну
- •Розглянуті раніше встановлюючи та завершальні підпрограми
- •Процедура читання
- •Процедура запису у файл
- •Функція визначення розміру файла у записі
- •Процедура відсікання хвостової частини файлу
- •Процедура читання з текстового файлу
- •Процедура запису
- •1. Процедура для перейменування файлів
- •2. Процедура видалення файлу
- •Xxxx0 адреса
- •35 Квартира з номером 34 у 13 будинку з номером 12.
- •Файли розміщуються в зовнішній пам'яті, а динамічні структури в оперативній.
- •Типізовані файли фактично є файлами прямого доступу, що означає довільний доступ до елементів. В динамічних структурах доступ до елементів виключно послідовний.
- •Здійснюватиметься рух по дереву до крайнього лівого елемента (найменшого).
- •Це значення друкується.
- •Робиться один крок вправо і послідовність 1-3 повторюється відносно нової поточної вершини.
- •Заголовок.
- •Інтерфейс на частина.
- •Розділ реалізації. В реалізації описуються всі компоненти мови, які мають бути невидимі зовні.
- •Процедури управління виконанням програм
- •Функції перетворення типів
- •Процедури і функції для змінних порядкового типу
- •Математичні функції
- •Процедури та функції роботи з рядками
- •Процедури та функції управління динамічною пам’яттю
- •Функції роботи з вказівниками і адресні функції
- •Процедури вводу-виводу і роботи з файлами і каталогами
- •Інші процедури і функції
- •Змінні та константи модуля
- •Змінні модуля crt
- •Процедури і функції модуля crt
- •Перепризначення файлів вводу-виводу
- •Процедури роботи з екраном
- •Процедури і функції управління курсором
- •Процедури роботи з рядками
- •Функції допиту клавіатури
- •Процедури управління кольором
- •Процедури управління вбудованим динаміком і таймером
- •Використання клавіш редагування рядків
- •Використання командних символі
- •Типи драйверів
- •Типи шрифтів
- •Ініціалізація графіки класифікація типів драйверів і відео режимів
- •Ініціалізація і завершення відеорежиму
- •Обробка помилок ініціалізації
- •Процедури роботи з відеорежимами
- •Переключення між текстовим і графічним режимами
- •Побудова зображень на екрані система координат
- •Управління поточним вказівником
- •Графічні вікна
- •Відображення точки на екрані
- •Відображення відрізків прямих ліній
- •Побудова прямокутників
- •Побудова многокутників
- •Побудова дуг, еліпсів і кіл
- •Робота з текстом
- •Відображення рядків
- •Відображення числової інформації
- •Управління параметрами зображення встановлення кольору
- •Встановлення палітри
- •Функції управління операційним середовищем
- •Процедури управління процесами
- •Процедури обслуговування переривань
- •Програми, резидентні в пам'яті
- •Процедури роботи з датою і часом
- •Процедури і функції перевірки стану диску
- •Процедури і функції роботи з файлами
- •Інші процедури і функції
- •Поля даних оголошуються на початку, а методи після них.
- •При оголошенні методів у структурі задаються лише заголовок відповідної підпрограми (подібно до інтерфейсу в модулях).
- •Окремі методи можуть використовувати інші методи цього ж об’єкта, тому вони повинні бути оголошенні в певному порядку.
- •Ini; {ініціалізація графіки}
- •Віртуальним варто оголошувати лише той метод, який:
- •Постановки задачі;
- •Наявними програмними ресурсами;
- •Вимогами по швидкодії, використанням ресурсів еом.
Віртуальним варто оголошувати лише той метод, який:
а). перевизначається у кожному нащадку, тобто в кожному працює по-своєму;
б). входить у склад реалізації іншого методу у предку;
в). містить у реалізації віртуальній, має успадкуватися нащадками без пере визначення.
„Один раз віртуальний – все життя віртуальний”. Це означає, що на деякому рівні ієрархії класів певний метод був оголошений віртуально, то на всіх нижчих видів ієрархії, тобто у всіх нащадках цей метод повинен перевизначеним і віртуальним.
Віртуальні методи можуть працювати дійсно як віртуальні або як звичайні методи. Необхідний режим пізнього зв’язування, якщо ж цього режиму немає, то віртуальний метод працює як звичайно.
Тема: Конструктори та деструктори.
Вище було сказано, що віртуальність методу залежить від режиму зв’язування коду методу із іменем об’єкта. Перемикання режимів раннього і пізньог7о зв’язування здійснюється за допомогою застосування спеціальних методів, що називаються конструкторами та деструкторами.
Метод конструктор використовується для активізації режиму пізнього зв’язування, після явного виклику одного із конструкторів деякого об’єкта. Всі методи, які оголошуються як віртуальні будуть працювати як віртуальні.
Конструктор оголошується за допомогою службового слова CONSTRUCTOR, що замінює procedure або function відповідно. Все решта в оголошенні методу залишається без змін.
В якості конструктора переважно використовують якийсь із ініціалізуючих методів об’єкта, проте конструктор може мати пусту ініціалізацію, тобто цей метод нічого не робить, окрім включення пізнього зв’язування.
TYPE
POINT=object
x,y:integer;
c:byte;
f:boolean;
CONSTRUCTOR INIT;
... ... ... ...
END;
CONSTRUCTOR POINT.INIT;
BEGIN
END;
Використання конструкторів повинно здійснюватися згідно наступних правил:
Конструкторів може бути декілька у одного об’єкта. Явний виклик будь-якого з них ініціалізує режим пізнього зв’язування.
Конструктором варто вибирати, або ініціалізуючий метод, або пустий.
Конструктор не може бути віртуальним.
Конструктори можуть успадковуватися при наслідуванні.
Конструктор включає пізнє зв’язування лише для „свого” об’єкта.
Оскільки режим пізнього зв’язування дещо сповільнює роботу програми і збільшує код, то цей режим варто виключати лише при необхідності. Для закриття режиму пізнього зв’язування використовується ще один вид методів - деструктор.
Оголошується деструктор за допомогою службового слова DESTRUCTOR. Це слово замінює відповідно слово procedure або function у заголовку відповідного методу. Як і конструктор деструктор може бути один з значущих методів, який виконує деяку завершальну операцію об’єкта. Також деструктор може бути пустим, тоді його основне призначення закрити режим пізнього зв’язування.
Застосування деструктора варто проводити згідно з наступними правилами:
Деструкторів у об’єкта може бути декілька. Пізнє зв’язування закривається явним викликом будь-якого з них.
В якості деструктора варто вибирати, або завершальний метод, або пустий метод.
Деструктор може бути віртуальним.
Деструктори можуть успадковуватися за принципом наслідування.
Свій режим зв’язування у об’єкта закриває свій деструктор.
Таким чином для реалізації методу рух у попередньому прикладі потрібно, щоб оголошення структури класу point або circle мало наступний вигляд:
TYPE
POINT=object
x,y:integer;
c:byte;
f:boolean;
CONSTRUCTOR INIT;
PROCEDURE SETCOORD (xx,yy:integer);
PROCEDURE SETCOL (cc:byte);
FUNCTION GETXX: integer;
FUNCTION GETYY: integer;
PROCEDURE ON; virtual;
PROCEDURE OFF;virtual;
PROCEDURE RUH(dx,dy:integer);
DESTRUCTOR DONE;
END;
CIRCLE=object(POINT)
r:integer;
PROCEDURE SETR(rr:integer);
FUNCTION GETR : integer;
PROCEDURE ON; VIRTUAL;
PROCEDURE OFF; VIRTUAL;
END;
... ... ...
{реалізація методів}
VAR
a:POINT;
b:CIRCLE;
BEGIN
b.SETCOORD(200,200);
b.SETCOL(9);
b.SETR(20);
b.INIT;
b.RUH(50,50);
b.DONE;
END.
Тема: Динамічні об’єкти.
Можна будувати відповідні вказівні типи. Застосування вказівників дозволяє оперувати із динамічними об’єктами. Використання саме динамічних об’єктів є зручним у тих випадках, коли структура цих об’єктів і реалізація їх поведінки є достатньо громісткою, а отже код у пам'яті виявиться великим.
В статичній пам'яті не вдасться розмістити достатню кількість таких об’єктів, при цьому можуть бути задачі, в яких кількість об’єктів не є фіксованою, тобто вони постійно утворюються і знищуються.
Оголошення динамічних об’єктів здійснюється за звичайним правилом побудови вказівних типів.
TYPE
POINT=object
... ... ...
END;
CIRCLE=object(POINT)
... ... ...
END;
PPOINT=^POINT;
PCIRCLE:=^CIRCLE;
VAR
a:POINT;
b:CIRCLE;
pa:PPOINT;
pb:PCIRCLE;
Так оголошені вказівники на об’єкти класів є статичними змінними – це чотирибайтні числа-адреси у пам'яті.
Створюються динамічні об’єкти явним викликом
New(pa);
New(pb);
При цьому в динамічній пам'яті відводиться ділянка відповідного розміру, що відповідає структурі об’єкта.
Задати стан чи реалізувати поведінку через вказівник на динамічний об’єкт можна таким чином:
pa^.SETCOORD(100,100);
pa^.SETCOL(5);
pa^.ON;
Використання процедури New для створення динамічного об’єкту має одну особливість від використання у випадках інших динамічних змінних. Якщо об’єкт має метод конструктор, то цей метод може бути виконаний одночасно із створенням динамічного об’єкта, при цьому ідентифікатор методу вказується другим параметром процедури New.
New(pa,INIT);
New(pb,INIT);
Використання конструктора в якості другого параметру не обов’язково.
Знищуються динамічні об’єкти явним чином.
Dispose(pa);
Dispose(pb);
При цьому відповідні вказівники звільняються від своїх значень і відповідні ділянки пам'яті звільняються від відповідних об’єктів.
Якщо динамічний об’єкт має методи-деструктори, то їх можна одночасно викликати із знищенням динамічного об’єкта, при цьому в якості другого параметру процедури Dispose використовується ідентифікатор деструктора.
Dispose(pa,DONE);
Dispose(pb,DONE);
Тема: Особливості операції присвоєння між динамічними об’єктами.
Між динамічними об’єктами як і між статичними можна виконувати присвоєння, при цьому присвоєння можливе між обертами одного класу та між об’єктами різних класів, що пов’язані принципом наслідування і лише від нащадка до предка, проте операція присвоєння у випадку динамічних об’єктів повинна виконуватися з певною обережністю. Взагалі присвоєння копіює стан і реалізацію поведінки між об’єктами. Якщо операція присвоєння виконується між вказівниками, то про ніяке копіювання стану немає мови.
VAR
pa1,pa2:PPOINT;
pb1,pb2:PCIRCLE;
BEGIN
New(pa1);
New(pa2);
pa2^.SETCOORD(100,100);
pa2^.SETCOL(5);
pa2^.ON;
pa1:=pa2;
Присвоєння виду в даному випадку не скопіює стан і поведінку другого об’єкта до першого, а надасть другому об’єкту два вказівники.
Перший об’єкт втратить свій вказівник і перетвориться у „сміття” у пам'яті. Така ситуація називається структурною невизначеністю, оскільки деякі маніпуляції з двома об’єктами можна буде виконати через вказівник ра1. хоча коди всіх методів другого об’єкта пов’язані з вказівником ра2.
Для того, щоб за допомогою операції присвоєння скопіювати стан потрібно використовувати операцію розіменування вказівника.
Тема: Методи розробки алгоритмів і програм.
Зрозуміло, що багато прикладних задач можна розв’язати різними способами. Вибір методу розв'язку визначається із: