Файл: ОП Конспект лекций - Паскаль.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 28.06.2020

Просмотров: 1634

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Тема 13: Складні типи. Масиви

Тема 14: Багатомірні масиви

Тема 15: Пошук і сортування елементів масиву. Класи алгоритмів сортування

Тема 16: Динамічна пам'ять. Адреси і покажчики

Тема 17: Оголошення покажчиків, виділення та звільнення динамічної пам’яті

Тема 18: Процедури та функції для роботи з динамічною пам’яттю

Тема 19: Символьний тип даних. Упаковані масиви

Тема 20: Процедури та функції для обробки рядків

Тема 21: Структурований тип даних - безліч

Тема 22: Структурований тип даних – записи

Тема 23: Опис файлових змінних. Обробка типізованих файлів

Тема 24: Послідовний та прямий доступ до файлів

Тема 25: Обробка не типізованих файлів

Тема 26: Робота з текстовими файлами

Тема 27: Типізовані константи

Тема 28: Поняття та робота з процедурами та функціями

Тема 29: Використання модуля CRT. Програмування клавіатури

Тема 30: Використання модуля CRT. Текстове виведення на екран. Програмування звукового генератора

Тема 31: Графічні можливості TP 7.0. Використання бібліотеки Graph

PointType = record

Тема 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, переконаємося, що текст буде виведений на чистому екрані.


Питання для контролю:

  1. Модуль Unit і його використання.

  2. Створення модуля Unit і його загальна структура.

  3. Ім'я бібліотечного модуля користувача.

  4. Интерфейсная секція.

  5. Секція реалізації.

  6. Ініціалізаційна частина.

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

  8. Компіляція модуля користувача.


Тема 33: Основні принципи ООП. Створення об’єктів. Використання об’єктів


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

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

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

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

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

Спадкоємство

Спадкоємство є властивість об'єктів породжувати своїх нащадків. Об'єкт-нащадок автоматично успадковує від батька всі поля і методи, може доповнювати об'єкти новими полями і замінювати (перекривати) методи батька або доповнювати їх.

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

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

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

Поліморфізм

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

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


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

Створення об'єктів

В Турбо Паскалі для створення об'єктів використовуються три зарезервовані слова: object, constructor, destructor до три стандартні директиви: private, public і virtual.

Зарезервоване слово object використовується для опису об'єкту. Опис об'єкту повинен поміщатися в розділі опису типів:

type

Myobject = object

(Поля об'єкту}

{Методи об'єкту}

end ;

Якщо об'єкт породжується від якого-небудь батька, ім'я батька вказується в круглих дужках відразу за словом object:

type

Mydescendantobject = object(Myobject)

. .

end;

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


Питання для контролю:

  1. Назвіть основні принципи ООП.

  2. Поясніть принцип інкапсуляції.

  3. Поясніть принцип наслідування

  4. Поясніть принцип поліморфізму

  5. Створення об’єктів у Турбо Паскалі.





Список літератури


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.


  1. Підсумовування елементів двох векторів.

Для векторів А и В розміром 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.



  1. Підсумовування елементів заданого рядка матриці..

Дано матрицю А(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];