ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 28.06.2020
Просмотров: 1685
Скачиваний: 3
СОДЕРЖАНИЕ
Тема 15: Пошук і сортування елементів масиву. Класи алгоритмів сортування
Тема 16: Динамічна пам'ять. Адреси і покажчики
Тема 17: Оголошення покажчиків, виділення та звільнення динамічної пам’яті
Тема 18: Процедури та функції для роботи з динамічною пам’яттю
Тема 19: Символьний тип даних. Упаковані масиви
Тема 20: Процедури та функції для обробки рядків
Тема 21: Структурований тип даних - безліч
Тема 22: Структурований тип даних – записи
Тема 23: Опис файлових змінних. Обробка типізованих файлів
Тема 24: Послідовний та прямий доступ до файлів
Тема 25: Обробка не типізованих файлів
Тема 26: Робота з текстовими файлами
Тема 28: Поняття та робота з процедурами та функціями
Тема 29: Використання модуля CRT. Програмування клавіатури
Тема 30: Використання модуля CRT. Текстове виведення на екран. Програмування звукового генератора
Тема 31: Графічні можливості TP 7.0. Використання бібліотеки Graph
Тема 32: Бібліотечні модулі користувача
Тема 33: Основні принципи ООП. Створення об’єктів. Використання об’єктів
Основні алгоритми обробки масивів
procedure a(var x : real);
implementation
uses crt;
function fact(n:integer):word;
begin
. . .
end;
procedure a;
begin
. . .
end;
. . .
Реалізаційна секція також може бути порожньою.
Ініціалізаційна частина є основним блоком модуля. Оператори цього блоку виконуються першими, а потім виконуються оператори основного блоку головної програми, до якої включено даний модуль.
Для підключення модуля до основної програми відразу після імені програми вказують
uses ім'я модуля;
Припустима вкладеність модулів, причому обмеження на їхній ступінь не накладається.
Компіляція модуля.
Після підготовки вихідного тексту його можна відкомпілювати. Для цього варто встановити в режимі меню Compile опцію Destination у стан Disk. У результаті компіляції (Alt+F9) створюється файл із тим же ім'ям, що і вихідний текст, але з розширенням .tpu.
Можна одночасно компілювати програму і модулі, що підключаються, створивши ехе-файл. Для цього в меню Compile вибираємо чи режим Make, чи Build.
У режимі Make компілюються ті модулі, для яких не мається tpu-файлу, чи якщо tpu-файл “старіше”, ніж відповідний йому pas-файл.
У режимі Build компілюються і підключаються всі модулі, імена яких містяться в реченнях Uses.
У меню Options пункт Directories дозволяє контролювати каталоги в які посилаються відкомпільовані файли:
в опції EXE & TPU directory варто вказати
с:\tp\exe&tpu - куди посилаються ехе і tpu-файли;
в опції Unit directories варто вказати
c:\tp\units; c:\tp\exe&tpu - звідкіля брати tpu-файли (таких каталогів може бути декілька).
Приклад який показує, що спочатку виконується оператор ініціалізаційної частини включеного модуля, а потім оператори головної програми.
Створимо модуль Unit demo_tpu з одним оператором ClrScr, що очищає екран:
unit demo_tpu;
interface
{ця частина порожня}
implementation
uses crt;
begin
clrscr;
end.
і запишемо його під ім'ям demo_tpu.pas. Відкомпілювавши його, одержимо модуль demo_tpu.tpu.
Створимо програму, у якій використовуємо цей модуль
{демонстрація використання модуля demo_tpu.tpu}
uses demo_tpu;
begin
writeln(‘Першим виконався оператор основного’);
writeln(‘блоку модуля demounit.tpu, у результаті’);
writeln(‘чого очистився екран; потім виконалися’);
writeln(‘оператори блоку головної програми, що’);
writeln(‘і надрукували даний текст.’)
end.
Виконавши її, натиснувши Ctrl+F9, переконаємося, що текст буде виведений на чистому екрані.
Питання для контролю:
-
Модуль Unit і його використання.
-
Створення модуля Unit і його загальна структура.
-
Ім'я бібліотечного модуля користувача.
-
Интерфейсная секція.
-
Секція реалізації.
-
Ініціалізаційна частина.
-
Підключення модуля користувача до основної програми.
-
Компіляція модуля користувача.
Тема 33: Основні принципи ООП. Створення об’єктів. Використання об’єктів
Об'єктно-орієнтоване програмування засноване на «трьох китах» - трьох найважливіших принципах, що додають об'єктам нові властивості. Цими принципами є інкапсуляція, спадкоємство і поліморфізм.
Інкапсуляція
Інкапсуляція є об'єднання в єдине ціле даних і алгоритмів обробки цих даних. В рамках ООП дані називаються полями об'єкту, а алгоритми - об'єктними методами.
Інкапсуляція дозволяє в максимальній мірі ізолювати об'єкт від зовнішнього оточення. Вона істотно підвищує надійність програм, що розробляються, оскільки локалізовані в об'єкті алгоритми обмінюються з програмою порівняно невеликими об'ємами даних, причому кількість і тип цих даних зазвичай ретельно контролюються.
В результаті заміна або модифікація алгоритмів і даних, інкапсульованих в об'єкт, як правило, не спричиняє за собою наслідків, що погано просліджуються, для програми в цілому (в цілях підвищення захищеності програм в ООП майже не використовуються глобальні змінні). Іншим важливим наслідком інкапсуляції є легкість обміну об'єктами, перенесення їх з однієї програми в іншу. Можна сказати, що ООП «провокує» розробку бібліотек об'єктів, таких як Turbo Vision.
Спадкоємство
Спадкоємство є властивість об'єктів породжувати своїх нащадків. Об'єкт-нащадок автоматично успадковує від батька всі поля і методи, може доповнювати об'єкти новими полями і замінювати (перекривати) методи батька або доповнювати їх.
Принцип спадкоємства вирішує проблему модифікації властивостей об'єкту і додає ООП в цілому виняткову гнучкість.
При роботі з об'єктами програміст зазвичай підбирає об'єкт, найбільш близький по своїх властивостях для вирішення конкретного завдання, і створює одного або декількох нащадків від нього, які «уміють» робити те, що не реалізоване в батьку.
Послідовне проведення в життя принципу «успадковуй і змінюй» добре узгоджується з поетапним підходом до розробки крупних програмних проектів і багато в чому стимулює такий підхід.
Поліморфізм
Поліморфізм - це властивість родинних об'єктів (тобто об'єктів, що мають одного загального батька) вирішувати схожі по сенсу проблеми різними способами. В рамках ООП поведінкові властивості об'єкту визначаються набором вхідних в нього методів. Змінюючи алгоритм того або іншого методу в нащадках об'єкту, програміст може додавати цим нащадкам відсутні у батька специфічні властивості.
Для зміни методу необхідно перекрити його в нащадку, тобто оголосити в нащадку однойменний метод і реалізувати в нім потрібні дії. В результаті в об'єкті-батьку і об'єкті-нащадку діятимуть два однойменні методи, що мають різну алгоритмічну основу і, отже, різні властивості, що додають об'єктам. Це і називається поліморфізмом об'єктів.
У Турбо Паскалі поліморфізм досягається не лише описаним вище механізмом спадкоємства і перекриття методів батька, але і їх віртуалізацією, що дозволяє батьківським методам звертатися до методів нащадків.
Створення об'єктів
В Турбо Паскалі для створення об'єктів використовуються три зарезервовані слова: object, constructor, destructor до три стандартні директиви: private, public і virtual.
Зарезервоване слово object використовується для опису об'єкту. Опис об'єкту повинен поміщатися в розділі опису типів:
type
Myobject = object
(Поля об'єкту}
{Методи об'єкту}
end ;
Якщо об'єкт породжується від якого-небудь батька, ім'я батька вказується в круглих дужках відразу за словом object:
type
Mydescendantobject = object(Myobject)
. .
end;
Будь-який об'єкт може мати скільки завгодно нащадків, але лише одного батька, що дозволяє створювати ієрархічні дерева спадкоємства об'єктів.
Питання для контролю:
-
Назвіть основні принципи ООП.
-
Поясніть принцип інкапсуляції.
-
Поясніть принцип наслідування
-
Поясніть принцип поліморфізму
-
Створення об’єктів у Турбо Паскалі.
Список літератури
1. Абрамов С.А., Зима Е.В. Початку інформатики. —М.: Наука, 1990.
2. Грогоно П. Програмування мовою Паскаль. - М.: Світ, 1982.
3. Йенсен К., Вирт H. Паскаль. Керівництво для користувача й опис мови. -М.: Фінанси і статистики, 1982.
4. Перминов О.Н. Програмування мовою Паскаль. - М.: Радіо і зв'язок, 1988.
5. Пильщиків В.Н. Збірник вправ по мові Паскаль. - М.:
Павука, 1989.
6. Прайс Д. Програмування мовою Паскаль. Практичне керівництво. -М.: Світ, 1987.
7. Турбо Паскаль 7.0. - К.: Тортово-издательское бюро BHV, 1996.
8. Фараонов В.В. Турбо Паскаль 7.0. Початковий курс. Навчальний посібник.-М.: «Нолидж», 1997.
Додаток А
(довідковий)
Основні алгоритми обробки масивів
Приведено алгоритми, що є базовими для реалізації більш складних алгоритмів обробки масивів при рішенні задач.
1. Підсумовування елементів вектора..
Дано вектор А(n)=a1,a2, …,an... Знайти .
Приклад програми:
const
n = 10;
type massiv = array[1..n] of integer;
var
a : massiv; i, s : integer;
begin
writeln(‘Введіть’,n,’значень елементів вектора:’);
for i := 1 to n do read (a[i]);
{обчислення суми}
for i := 1 to n do s := s+a[i];
writeln(‘сума елементів вектора = ‘,s);
end.
2. Підсумовування елементів матриці.
Дано матрицю A(nXm). Знайти суму елементів матриці. Приклад програми:
const
N = 3; m = 5;
type massiv = array[1..n,1..m]of real;
var
a : massiv; i, j : integer; s : real;
begin
writeln (‘Введіть’,n,’X’,m,’=’,n*m,’елементів матриці:’);
for i := 1 to n do
for j :=1 to m do
read (a[i,j]);
{обчислення суми}
for i := 1 to n do
begin
for j :=1 to m do s := s+a[i,j];
end;
writeln(‘сума елементів матриці = ‘,s:3:1);
end.
4. Підсумовування діагональних елементів двох векторів (обчислення сліду матриці).
Дано квадратну матрицю А(nXm). Обчислити слід матриці.
Приклад програми:
const
n = 4;
турі massiv = array[1..n,1..n] of real;
var
a : massiv; i,j : integer; s : real;
begin
writeln(‘Введіть ’,n,’X’,n,’ = ’,n*n,’ елементів матриці:’);
for i := 1 to n do
for j := 1 to n do
read(a[i,j]);
{обчислення сліду матриці}
for i := 1 to n do s := s+a[i,j];
write(‘Слід матриці = ’,s:3:1);
end.
-
Підсумовування елементів двох векторів.
Для векторів А и В розміром n необхідно обчислити s := a[i]+b[i]; i=1,2…,n...
Приклад програми:
сonst
n = 4;
type massiv = array[1..n] of real;
var
a, b : massiv; i : integer; s: real;
begin
writeln (‘Введіть ‘,n,’ елементів вектора А:’);
for i := 1 to n do read(a[i]);
writeln (‘Введіть ‘,n,’ елементів вектора B:’);
for i :=1 to n do read(b[i]);
{обчислення суми}
for i:=1 to n do s := s + a[i] + b[i];
write(‘Сума векторів А+У = ‘,s:3:1);
end.
5. Підсумовування елементів двох матриць.
Для матриць А и В розміром nXm необхідно обчислити s := a[i,j]+b[i,j] , i=1,2,…,m...
Приклад програми.
const
n = 3, m = 4;
type massiv = array[1..n, 1..m]of real;
var
a,b : massiv; i,j : integer; s : real;
begin
writeln(‘Введіть матрицю А розміром’,n,’X’,m,’:’);
for i:= 1 to n do
for j:= 1 to m do
read(a[i,j]);
writeln(‘Введіть матрицю B розміром’,n,’X’,m,’:’);
for i := 1 to n do
for j:= 1 to m do
read(b[i,j]);
for i:= 1 to n do {обчислення суми}
for j:= 1 to m do
s := s+a[i,j]+b[i,j];
write(‘Сума матриць А+У = ‘,s:3:1);
end.
-
Підсумовування елементів заданого рядка матриці..
Дано матрицю А(nXm). Знайти суму елементів 2-го рядка.
Приклад програми:
const
n = 3, m = 4;
type massiv = array[1..n, 1..m] of real;
var
a : massiv; i,j : integer; s : real;
begin
writeln(‘Введіть матрицю А розміром’,n,’X’,m,’:’);
for i:= 1 to n do
for j:= 1 to m do
read(a[i,j]);
{обчислення суми}
i := 2;
for j := 1 to m do s := s+a[i,j];
write(‘сума 2-го рядка матриці = ‘,s:3:1);
end.
7. Підсумовування елементів рядків матриці.
Обчислити суму елементів кожного рядка матриці А(nXm). Результат вивести у виді вектора В(n).
Приклад програми:
const
n = 3,m = 4;
type massiv = array[1..n, 1..m] of real;
var
a : massiv; i,j : integer; s : real;
begin
writeln(‘Введіть матрицю А розміром’,n,’X’,m,’:’);
for i:= 1 to n do
for j:= 1 to m do
read(a[i,j]);
write(‘Сума кожного рядка матриці виведена у вектор У(‘,n,’) = ‘);
for i:= 1 to n do
begin
s := 0;
for j := 1 to m do s := s+a[i,j];