Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

Модули і об'єкти у мові Турбо Паскаль 7.0

РефератДопомога в написанніДізнатися вартістьмоєї роботи

Модуль CRT. У ньому зосереджено процедури і функції, щоб забезпечити управління текстовим режимом роботи екрана. З допомогою які входять у модуль програм можна переміщати курсор в довільну позицію екрана, змінювати колір виведених символів і навколишнього їх фону, створювати вікна. З іншого боку, в модуль включені також процедури «сліпого» читання клавіатури та управління звуком. Модуль GRAPH… Читати ще >

Модули і об'єкти у мові Турбо Паскаль 7.0 (реферат, курсова, диплом, контрольна)

Министерство освіти Російської Федерации.

Митний колледж.

Оренбургский Державний Аграрний Университет.

Бузулукское представительство.

КУРСОВА РАБОТА.

з дисципліни «Основи алгоритмів і програмуванням «.

Модулі і об'єкти у мові Турбо Паскаль 7.0.

Керівник работы.

________________Симонова С.В.

" ______ «________________2002г.

Исполнитель.

Студент грн. 34 АСОИ і У.

______________Кислинский С.В.

" ______ «________________2002г.

Бузулук 2002.

Запровадження… …стор. 3.

1 Модули… стр. 4.

1.1 Структура модулей… стр. 6.

1.2 Заголовок модулів і зв’язок модулів друг з другом… стр. 8.

1.3 Інтерфейсна часть… стр. 9.

1.4 Що Співається часть… стр. 10.

1.5 Ініціююча часть… стр. 11.

1.6 Компіляція модулей… стр. 12.

1.7 Доступ до оголошених у модулі объектам… стр. 14.

1.8 Стандартні модули… стр. 15.

2 Объекты… стр. 17.

2.1 Основні засади ООП… стр. 19.

2.2 Инкапсуляция… стр. 20.

2.3 Наследование… стр. 22.

2.4 Полиморфизм… стр. 24.

Заключение

…стр. 26.

Список використовуваних источников… стр. 27.

Додаток А… стр. 28.

У 1992 року фірма Borland International випустила два пакета програмування на використанні мови Паскаль, — Borland Pascal 7.0 і Turbo Pascal 7.0.

Пакет Borland Pascal 7.0 враховує багато новітні досягнення у програмуванні та практиці створення програм, тож включає у собі три режиму роботи: у звичайному режимі ОС MS DOS, в захищеному режимі MS DOS і серед Windows. Маючи розширеними можливостями, пакет Borland Pascal 7.0 тим щонайменше вимагає від використання всіх своїх фізичних можливостей досить велику пам’ять — приблизно 30 Мбайт на жорсткому диску і проінвестували щонайменше 2 Мбайт оперативної памяти.

Пакет Turbo Pascal 7.0 має обмеженими можливостями і що дозволяє працювати лише у звичайному режимі MS DOS. Початкуючому програмісту, очевидно, доцільно розпочати вивчення мови та середовища саме від цього пакета.

Мова характеризується розширеними можливостями порівняно з стандартом, добре розвиненою бібліотекою модулів, дозволяють використовувати можливості ОС, створювати оверлейные структури, організовувати вхід-видобуток, формувати графічне зображення і т.д.

Середовище програмування дозволяє створювати тексти програм, компілювати їх, знаходити помилки і оперативно їх виправляти, компонувати програми із окремих частин, включаючи стандартні модулі, налагоджувати і виконувати налагоджену программу.

У цьому роботі будуть описані основні можливості мови, робота у інтегрованої середовищі, набір стандартних модулей.

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

Паскаль — гнучкий і розвинутий щодо типів даних мову. Привабливими його рекурсивні можливості, і навіть підтримка технології объектно-ориентрованного програмування. 1 Модули.

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

Наявність модулів в Turbo Pascal дозволяє програмувати і налагоджувати програму з частинам, створювати бібліотеки підпрограм та об'єктивності даних, скористатися можливостями стандартних модулів, практично необмежено збільшувати кодову (що містить коди команд) частина программы.

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

Модулі є прекрасний інструмент і розробити бібліотек прикладних програм, тож могутній засіб модульного програмування. Важлива особливість модулів у тому, що компілятор Турбо Паскаля розміщає їх програмний код в окремому сегменті пам’яті. Максимальна довжина сегмента неспроможна перевищувати 64 Кбайта, проте величезну кількість водночас використовуваних модулів лише доступною пам’яттю, що дозволяє створювати дуже великі программы.

Доступ до з описів, функцій і процедурам модуля забезпечує оператор використання Uses, де вказують ім'я модуля. Цей оператор розміщається розділ описів програми, відразу після заголовка. Якщо програмі використовується чимало модуль, а кілька, необхідно вказати імена всіх модулів, перерахувавши їх крізь кому. Винятком є модуль System, посилання який необов’язкова. Цей модуль містить, зокрема, процедури файлового ввода/вывода, процедури і функції до роботи зі рядками і пояснюються деякі другие.

Модуль починається заголовком unit unit_name; де unit_name — ім'я модуля, яке вибирається відповідно до правилами Паскаля. Файл, у якому модуль, зобов’язаний мати те ім'я, як і модуль.

Розберемо за приклад модуль з описом гіперболічних функцій, яких у числі вбудованих функцій мови Паскаль, але це функції досить часто з’являються у прикладних завданнях, і тому має сенс включити їх до складу бібліотечного модуля. Доступ функцій від цього модуля забезпечує оператор використання Uses, де вказують ім'я модуля. Отже, сам модуль виглядає наступним образом.

{$N+} unit hyp_fun; interface type.

Float = Extended; function sinh (x: Float): Float; function cosh (x: Float): Float; function tanh (x: float): Float; implementation var t: Float; function sinh (x: Float): Float; begin t := Exp (x); sinh := 0.5*(t — 1.0/t); end; function cosh (x: Float): Float; begin t := Exp (x); cosh := 0.5*(t + 1.0/t); end; function tanh (x: Float): Float; begin t := Exp (2.0*x); tanh := (t — 1.0) / (t + 1.0); end; end.

Зарезервовані слова interface і implementation відіграють значної ролі. Кожен модуль має частини (секції), озаглавлені цими словами. Секція interface (вона називається интерфейсной секцією) містить описи констант, типів, змінних і процедур, доступних з викликає програми чи модуля. Секція implementation (секція реалізації) містить вихідний код програми. Вона може також утримувати локальні описи, такі як var t: Real; із нашого примера.

Кожен модуль починається з зарезервованого слова unit і закінчується словом end, за якій слід точка. І тому end не потрібно відповідного слова begin, хоча можна й його безпосередньо перед end. Оператор type на початку нашого модуля визначає тип Float, який у цьому разі еквівалентний типу Extended. Вказавши, праворуч від знака рівності будь-який інший еквівалентний тип, можна змінити точність обчислення гіперболічних функций.

1.1 Структура модулей.

Модуль має таку структуру:

|Unit module_name | |Interface | |Інтерфейсна секція | |Implementation | |Секція реалізації | |Секція ініціалізації |.

Рис. 1. Структура модуля.

Тут Unit (зарезервоване слово (одиниця), починає заголовок модуля; name (ім'я модуля (правильний ідентифікатор). Interface — інтерфейсна секція — містить ті описи типів, змінних та інших об'єктів даних, які можна залучити до інших програмах чи модулях. Секція реалізації починається з зарезервованого слова implementation. Усі описи, які у секції реалізації, є локальними, їх область дії - даний модуль. Але тут утримуватися повні описи функцій і процедур модуля. Остання частина модуля — секція ініціалізації. Вона то, можливо пустій і утримувати лише зарезервоване слово end чи містити виконувані оператори, виконують необхідне по ініціалізації (наприклад, по присвоюванню початкових значень змінним) модуля.

Як приклад розглянемо модуль func1 /див. додаток А/, яким розширено обчислювальні можливості Турбо Паскаля, оскільки він містить функції, відсутні в стандартних модулях системи. Серед «стандартних» функцій — синус (Sin), косинус (Co), арктангенс (ArcTan), експонента (Exp), натуральний логарифм (Ln), квадрат числа (Sqr) і квадратний корінь потім із нього (Sqrt). У модулі func1 є тангенс (Tan), арксинус (ArcSin) і арккосинус (ArcCos), функції перекладу градусної заходи у радианную і навпаки (Degrees_to_Radians, Radians_to_Degrees), набір гіперболічних функцій (Sinh, Cosh, Tanh), і навіть десятковий логарифм (Log10) і довільна ступінь числа (Power).

Нагадаю математичне визначення гіперболічних функций:

[pic].

[pic].

[pic].

У прикладі інтерфейсна секція містить описи речовинного типу float, і навіть константу Infinity — «нескінченно велике значення». Безкраїсть треба розуміти, зрозуміло, у смисл машинної арифметики, як значення, близький до максимально допустимому для типу Extended. Далі йдуть заголовки функцій модуля.

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

При програмуванні арксинуса і арккосинуса треба враховувати то, що це функції - багатозначні. У нашому випадку обчислюється «головне значення», лежаче в інтервалі [-(/2, (/2] (для арксинуса) чи [0, (] (для арккосинуса) радіан. І тому використовуються формули, відомі з курсу елементарної математики.

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

1.2 Заголовок модуля і зв’язок модулів друг з другом.

Заголовок модуля складається з зарезервованого слова Unit (наступного його імені модуля. Для правильної роботи середовища Турбо Паскаля і можливості підключення коштів, які полегшують розробку великих програм, це має збігатися безпосередньо з ім'ям дискового файла, куди поміщається вихідний текст модуля. Якщо, наприклад, маємо заголовок.

Unit Global; то вихідний текст відповідного модуля повинен будуть показані у дисковом файлі GLOBAL.PAS. Ім'я модуля служить щодо його зв’язки з іншими модулями і основний програмою. Ця зв’язок встановлюється спеціальним предложением.

Uses.

Тут Uses — зарезервоване слово (использует);

— список модулів, із якими встановлюється зв’язок; елементами списку є імена модулів, відокремлювані друг від друга комами, наприклад:

Uses CRT, Graph, Global:

Якщо оголошення Uses… використовується, він повинен відкривати розділ описів програми. Модулі може використати інші - модулі. Пропозиція Uses в модулях може вийти або відразу за зарезервированным словом Interface, або відразу по слову Implementation.

1.3 Інтерфейсна часть.

Через інтерфейс здійснюється взаємодія програми з модулем (модуля з модулем). У інтерфейсі вказуються константи, типи, перемінні, процедури і функції, які можна використані основний програмою (модулем) при виклик цього модуля.

Інтерфейсна частина відкривається зарезервированным словом Interface. У цієї маленької частини містяться оголошення всіх глобальних об'єктів модуля (типів, констант, змінних і підпрограм), які повинні стати доступними основну програму і/або іншим модулями. При оголошенні глобальних підпрограм в интерфейсной частини зазначається лише їх заголовок, например:

Unit Cmplx;

Interface.

type.

complex = record.

re, Im: real.

end;

Procedure AddC (x, у: complex; var z: complex);

Procedure MulC (x, у: complex; var z: complex);

Якщо нині у основну програму написати предложение.

Uses Cmplx; то програмі стануть доступними тип Complex і ще дві процедури (AddC і МulC з модуля Cmplx.

Зазначимо, що підпрограм в интерфейсной частини автоматично супроводжується їх компіляцією з допомогою дальньої; моделі пам’яті. Отже, забезпечується доступом до підпрограмам з програми та інших модулей.

Слід враховувати, що це константи і які змінюються, оголошені интерфейсной частини модуля, як і глобальні константи і які змінюються програми, поміщаються компілятором Турбо Паскаля у єдиний сегмент даних (максимальна довжина сегмента 65 536 байт). Порядок появи різних розділів оголошень і кількість то, можливо довільним. Якщо в интерфейсной частини з’являються зовнішні підпрограми чи підпрограми в машинних кодах, їх тіла (тобто. зарезервоване слово External, у першому разі, і машинні коди разом із словом Inline (у другому) повинні слідувати відразу право їх заголовками в виконуваної частини модуля (над интерфейсной). У интерфейсной частини модулів не можна використовувати випереджувальний описание.

У інтерфейсах різних модулів неприпустимо циклічне звернення друг до друга, т.к. компілятор у разі неспроможна встановити связей.

1.4 Що Співається часть.

Що Співається частина охоплює всі підпрограми модуля. Вона може також включати локальні мітки, константи, типи і переменные.

Що Співається частина починається зарезервированным словом Implementation і має описи підпрограм, оголошених у интерфейсной частини. У ньому можуть оголошуватися локальні для модуля об'єкти — допоміжні типи, константи, перемінні і блоки, і навіть (мітки, якщо їх використовують в яка ініціює части.

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

Unit Cmplx;

Interface type complex = record; re, im: Real; end;

Procedure AddC (x, у: complex; var r: complex);

Implementation.

Procedure AddC; begin z. re := x. re + y. re; z, im := x. Im * y. im; end; end.

Локальні перемінні і константи, і навіть все програмні коди, породжені при компіляції модуля, вкладаються у загальний сегмент памяти.

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

1.5 Ініціююча часть.

У окремих випадках перед зверненням до модуля слід провести його ініціалізацію (наприклад, встановити зв’язку з тими чи інші файлами з допомогою процедури Assign, форматувати якісь перемінні тощо.). Необхідні дії полягають можна виконати в секції ініціалізації модуля. Ця секція починається словом begin, після сягає виконувані оператори, та був поміщається слово end. (до точки), наприклад: begin.

Assign (F1, ‘ FILE1. DAT ‘); end.

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

Unit FileText;

Interface.

Procedure Prlnt (t: string);

Implementation var f: Text; const name = «OUTPUT. TXT » ;

Procedure Print; begin.

WriteLn (f, p. s); end;

{Початок яка ініціює частини:} begin.

Assign (f, name);

Rewrite (f);

{Кінець яка ініціює частини:} end.

Слід пам’ятати, що найбільші оператори секції ініціалізації виконуються єдиний разів у момент запуску программы.

Якщо ініціалізація модуля непотрібна, то секції поміщається лише слово end.

1.6 Компіляція модулей.

Серед Турбо Паскаля є кошти, управляючі способом компіляції модулів і які полегшують розробку великих програмних проектів. У частковості, визначено три режиму компіляції: COMPILE, МАЦІ і BUILD. Режими відрізняються лише у спосіб зв’язку, компилируемого модуля чи основний програми коїться з іншими модулями, оголошеними у пропозиції USES.

При компіляції модуля чи програми як COMPILE все упоминающиеся у пропозиції USES модулі би мало бути попередньо откомпилированы, й одержують результати компіляції перебувають у однойменні файли з розширенням .TPU. Наприклад, тоді як програмі (модулі) є предложение.

Uses Global; то, на диску в каталозі, оголошеному опцією UNIT DIRECTORIES, мав би перебувати файл GLOBAL.TPU. Файл з розширенням TPU (від анг. Turbo Pascal Unit) створюється внаслідок компіляції модуля.

У режимі МАЦІ компілятор перевіряє наявність TPU-файлов кожному за оголошеного модуля. Коли якійсь з файлів що невиявлений, система намагається відшукати однойменний файл з розширенням .PAS, тобто. файл з вихідним текстом модуля, і, якщо .PAS-файл знайдено, приступає до її компіляції. З іншого боку, у тому режимі система стежить за можливими змінами вихідного тексту будь-якого використовуваного модуля. Якщо PAS-файл (вихідний текст модуля) внесено певні зміни, незалежно від цього, чи є вже у каталозі відповідний TPU-файл чи ні, система здійснює його компіляцію перед компіляцією програми. Понад те, якщо зміни внесені до интерфейсную частина модуля, то будуть перекомпилированы ще й все інші модулі, які звертаються щодо нього. Режим МАЦІ, в такий спосіб, істотно полегшує процес розробки великих програм з безліччю модулів: програміст позбувається необхідності ознайомитися з відповідністю існуючих TPU-файлов їх вихідному тексту, оскільки система робить це автоматически.

У режимі BUILD існуючі TPU-файлы ігноруються, і системи намагається відшукати (і компілювати) відповідний PAS-файл кожному за оголошеного у пропозиції USES модуля. Після компіляції як BUILD програміст може мати певності у цьому, що врахують усі зроблених ним зміни у будь-якій з модулей.

Підключення модулів до основну програму та його можлива компіляція здійснюються у порядку їх оголошення пропозиції USES. При перехід до черговому модулю система попередньо відшукує все модулі, куди він посилається. Посилання модулів друг на друга можуть утворювати деревоподібну структуру будь-якої складності, проте забороняється явне чи непряме звернення модуля перед самим собою. Наприклад, неприпустимі такі объявления:

Unit A; Unit B;

Interface Interface.

Uses P. S; Uses A;

Implementation Implementation end. end.

Це обмеження можна обминути, якщо «сховати» пропозицію USES в виконувані частини залежних модулей:

Unit A; Unit B;

Interface Interface.

Implementation Implementation.

Uses B; Uses A; end. end.

Річ у тім, що Турбо Паскаль дозволяє посилання частково откомпилированные модулі, що відповідає випереджаючому опису підпрограми. Якщо інтерфейсні частини будь-яких двох модулів незалежні (це неодмінна умова!), Турбо Паскаль зможе ідентифікувати все глобальні ідентифікатори у кожному з модулів, після чого откомпилирует тіла модулів звичайним способом.

1.7 Доступ до оголошених у модулі объектам.

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

{UNIT Cmplx};

INTERFACE.

{…}.

type.

complex = record;

re, Im: real;

end.

Procedure AddC (x, у: complex: var z: complex);

Procedure SubC (x, у: complex; var z: complex);

Procedure MulC (x, у: complex; var z: complex);

Procedure DIvC (x, у: complex; var z: complex);

const.

з: complex = (re: 0.1; Im: -1);

IMPLEMENTATION.

{…—. — … — — — ——… }.

PROCEDURE AddC;

begin.

z.re := x. re + y. re;

z. Im := x. im + у. Im;

end {AddC};

PROCEDURE SubC;

begin.

z .re := x. re — y. re;

z. im := x. Im — y. Im;

end {SubC};

PROCEDURE MulC;

begin.

z.re := x. re * y. re — x. im * y. im;

z.lm := x. re * y. im + x. im * y. re;

end {MulC};

PROCEDURE DivC;

var zz: real;

begin.

zz :=sqr (y.re) + sqr (y.im);

z.re := (x.re * y. re + x. im * y. im) / zz;

z.lm := (x.re * y. im — x. lm * y. re) / zz;

end {DIvC}:

END.

Текст цього модуля слід розмістити у файл CMPLX.PAS. Його можна відкомпілювати, створивши TPU-файл, після чого програмі стануть доступні процедури з библиотеки.

1.8 Стандартні модули.

У Турбо Паскале є вісім стандартних модулів, у яких міститься велика число різноманітних типів, констант, процедур та зняття функцій. Цими модулями є SYSTEM, DOS, CRT, PRINTER, GRAPH, OVERLAY, TURBO3 і GRAPHS. Модулі GRAPH, TURBOS і GRAPHS зберігають у однойменних ТPU-файлах, інші входять до складу бібліотечного файла TURBO.TPL. Лише модуль SYSTEM підключається до будь-якої програмі автоматично, й інші стають доступні тільки після зазначення їх імен із списку, пов’язаному зі словом USES. Нижче наводиться коротка характеристика стандартних модулів. Модуль SYSTEM (до нього входять все процедури і функції стандартного Паскаля, і навіть вбудовані процедури і функції Турбо Паскаля, які увійшли до інші стандартні модулі (наприклад, INC, DEC, GETDIR тощо.). Як зазначалося, модуль SYSTEM підключається до будь-якої програмі незалежно від того, оголошено він у пропозиції USES чи ні, тому його глобальні константи, перемінні і підпрограми вважаються умонтованими в Турбо Паскаль. Модуль PRINTER робить доступним висновок текстів на матричний принтер. У ньому визначається файлова змінна LST типу TEXT, яка пов’язують із логічним пристроєм PRN. Після підключення модуля можуть виконати, наприклад, така программа:

Uses Printer; begin.

WriteLn (LST, «Турбо Паскаль »);

end.

Модуль CRT. У ньому зосереджено процедури і функції, щоб забезпечити управління текстовим режимом роботи екрана. З допомогою які входять у модуль програм можна переміщати курсор в довільну позицію екрана, змінювати колір виведених символів і навколишнього їх фону, створювати вікна. З іншого боку, в модуль включені також процедури «сліпого» читання клавіатури та управління звуком. Модуль GRAPH містить великий набір типів, констант, процедур і функцій керувати графічним режимом роботи екрана. З допомогою підпрограм, які входять у модуль GRAPH, можна створювати різноманітні графічні зображення виводити на екран текстові написи стандартними чи розробленими програмістом шрифтами. Підпрограми модуля GRAPH після відповідної настройки можуть підтримувати різні типи апаратних графічних коштів. Налаштування на що у розпорядженні програміста технічні засоби графіки здійснюється через спеціальні програми — драйверами, які входить у бібліотечний файл GRAPH. TPU, але поставляються разом із. Модуль DOS. У модулі зібрані процедури і функції, що відкривали доступ програмам до засобів дискової операційній системи MS DOS. Модуль OVERLAY. Він необхідний розробки громіздких програм з перекриттями. Як мовилося раніше, Турбо Паскаль забезпечує створення програм, довжина яких лише доступною оперативної пам’яттю ПК. Більшість IBM-сумісних ПК доступна програмі пам’ять становить близько 580 Кбайт (без інструментальних оболонок типу Norton Commander і самої системи Турбо Паскаль). Пам’ять таких масштабів достатня більшість застосувань, тим щонайменше, використання програм з перекриттями знімає це обмеження. Два бібліотечних модуля TURBO3 і GRAPH3 запроваджені для сумісності з ранньої версією 3.0 системи Турбо Паскаль.

2 Объекты.

Базовим в объектно-ориентированном програмуванні є поняття об'єкта. Об'єкт має певні властивості. Стан об'єкта ставиться значеннями його ознак. Об'єкт «знає», як вирішити певні завдання, тобто має методами рішення. Програма, написана з використанням ОВП, складається з об'єктів, які можуть опинитися взаємодіяти між собой.

Раніше зазначалося, що програмна реалізація об'єкта представляє собою об'єднання даних, і процедур їх опрацювання. У Турбо Паскале є тип object, що можна вважати узагальненням структурного типу record. Змінні об'єктного типу називаються екземплярами об'єкта. Тут потрібен уточнення — примірник лише формально може бути перемінної. Його опис дається у пропозиції описи змінних, але насправді примірник — щось більше, ніж звичайна переменная.

На відміну від типу «запис», об'єктний тип містить як поля, описують дані, але й процедури і функції, описи яких зберігають у описі об'єкта. Ці процедури і функції називаються методами. У описі об'єкта фактично містяться лише шаблони інтерпретацій методам, необхідних компілятору для перевірки відповідності кількості параметрів та його типів при зверненні до методів. Ось приклад описи об'єкта: type.

Location = object.

X, Y: Integer; procedure Init (InitX, Inity: Integer); function GetX: Integer; function GetY: Integer; end;

Тут описується об'єкт, котрі можуть використовуватися надалі, скажімо, в графічному режимі призначеним визначення становища на екрані довільного графічного елемента. Об'єкт описується з допомогою зарезервованих слів object… end, між якими перебувають описи полів і методів. У прикладі об'єкт містить два поля для зберігання значень графічних координат, і навіть описи процедури і двох функцій — це методи даного об'єкта. Процедура варта завдання початкового становища об'єкта, а функції - для зчитування його координат.

Зарезервоване слово private дозволяє обмежити доступом до полях об'єкта. Наступного прикладі доступом до змінним X і Y можлива лише через методи об'єктного типу Location: type.

Location = object procedure Init (InitX, Inity: Integer); function GetX: Integer; function GetY: Integer; private.

X, Y: integer; end;

У секції private можуть і методи объекта.

Повне опис методів, тобто опис реалізації, має перебуває після описи об'єкта. Імена методів складові і складаються з імені об'єкту і імені методу, розділених точкою: procedure Location. Init (InitX, Inity: Integer); begin.

X: = InitX;

Y: = InitY; end;

fuction Location. GetX: Integer; begin.

GetX: = X; end;

fuction Location. GetY: Integer; begin.

GetY: = Y; end;

Коли об'єкт описаний, у програмі можна використати його екземпляри, тобто перемінні зазначеного об'єктного типу: var.

GrMarket: Location;

2.1 Основні засади ООП.

Елементи объектно-ориентированного програмування з’явилися торік у початку 70-х у мові моделювання Симула, потім набули своє розвиток, й у час ОВП належить до провідних технологій програмування. У Турбо Паскале підтримка цій технології з’явилася, починаючи з версії 5.5 (1989 год).

Основна мета ОВП, як і більшості інших підходів до програмування, — підвищення ефективності розробки програм. Ідеї ОВП виявилися плідними і в цьому застосування у мовами програмування, а й у інших галузях Computer Science, наприклад, в області розробки операційних систем.

Поява объектно-ориентированного програмування була пов’язана із тим наглядом, що комп’ютерні програми є опис дій, виконуваних над різними об'єктами. У ролі останніх можуть виступати, наприклад, графічні об'єкти, запис у базах даних чи сукупності числових значень. У традиційних методах програмування зміна даних чи правив і методів їх опрацювання часто зумовлювало необхідності значного зміни програм. Будь-яке істотне зміна програми — це велика неприємність для програміста, оскільки у своїй збільшується ймовірність помилок, унаслідок чого зростає час, необхідне «доводки» програми. Використання ОВП дозволяє вийти із ситуації з мінімальними втратами, зводячи необхідну модифікацію програми до її розширенню і доповнення. Відразу зазначу, що ОВП перестав бути панацеєю від усіх програмістських бід, та його цінність як передовий технології програмування незаперечна. Вивчення ідей методів объектно-ориентированного програмування — невідь що просте завдання, проте освоєння ОВП може істотно спростити розробку й налагодження складних программ.

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

2.2 Инкапсуляция.

У Турбо Паскале кошти объектно-ориентированного програмування пов’язані із трьома зарезервованими словами: OBJECT CONSTRUCTOR і DESTRUCTOR і двома стандартними директивами: PRIVATE і VIRTUAL.

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

Tpoint = object.

X, Y: Integer; {Координати точки}.

Color:word; {Колір точки).

Visible: Boolean; {Ознака світності}.

Procedure Setlocation (NewX, NewY: integer);

{Задає нове становище, крапки над екрані}.

Procedure SetCoforfNewColor: word); {Встановлює колір точки}.

Procedure SetVislble (VIS: Boolean);

{Виводить чи гасить точку).

Procedure GetLocatIon (var Xloc, YLoc: integer);

{Повертає координати точки}.

Function GetColor: word;

{Повертає колір точки).

Function GetVislble: Boolean;

{Повертає ознака світності точки}.

end; {Кінець описи об'єкта ТРOINT).

У цьому вся прикладі описується об'єкт TPOINT, являє собою дані і силові методи (процедури і функції), необхідних роботи з графічними точками на екрані ПК. Зауважимо, що инкапсулированные об'єкт процедури і функції називаються методами. Як кажуть, кожна точка характеризується деяким набором даних (своїми координатами X і У, кольором COLOR ознакою світності VISIBLE). Ці даними визначено все необхідні алгоритмічні дії. З допомогою цих змінних можна здійснювати всіх передбачених, в об'єкті дії, наприклад, для змінних типу TPOINT можна висвітлити чи погасимо, будь-який пункт, перемістити її за екрану, змінити цвет.

Цілком ймовірно, що описування об'єкту і використання об'єктних змінних багато в чому схоже письмо речей та використання записів: инкапсулированные в об'єкті дані і силові методи стають доступні з допомогою оператора приєднання WITH чи з допомогою составных имен, наприклад: if Point. GetVisible then Polnt. SetVisible (False);

При описі об'єкта спочатку, описуються все инкапсулированные в ньому дані, та був — методи доступу до цих даним. Як методів використовуються процедури і функції, і навіть конструктори і деструкторы.

Отже, вказівку методів в описах об'єкта подібно їх випереджаючому опису. Оскільки дані і нові методи инкапсулированы щодо одного об'єкті, всі дані автоматично стають глобальними, стосовно будь-яким методам і може використовуватися у яких довільним чином. Точніше кажучи, будь-який метод об'єкта працює із невидимим оператором WITH, які забезпечують йому доступ всім полях (як побачимо далі, поля можуть потрапляти оголошенні типу, і після проголошення методу й у сенсі не бути йому глобальними). При зверненні до методу йому передається особливий ідентифікатор SELF, являє собою узагальнену ім'я примірника об'єкта. Будь-який метод може використовувати ідентифікатор SELF, щоб явно зазначити приналежний об'єкту метод чи полі. Наприклад: type ТСоо = record.

X.Y: integer;

end;

TPoint = object.

X, Y: integer;

Procedure lnit (Coo: TCoo);

end;

Procedure TPofntfCoo: TCoo):

begin.

with Coo do.

begin.

Self.X := X;

Self.Y := Y;

end;

end;

2.3 Наследование.

Будь-який об'єкт можуть оголосити нащадком раніше описаного об'єкта. І тут він успадковує всі дані й фізичні методи объекта-родителя і може доповнювати їх своїми даними і методами. При оголошенні объекта-потомка за словом OBJECT в круглі дужки вказується ім'я объекта-родителя. У об'єкта то, можливо хоч греблю гати нащадків, але один батько. При оголошенні объекта-потомка TUNE перераховано лише ті дані й ефективні методи, яких ще замало в объекте-родителе TPOINT, інші TLINE автоматично успадковує від свого родителя.

Отже, опис объекта-потомка TLINE еквівалентно такому опису об'єкта TLINE_ANOTHER: type.

TLine_Another = object.

X, Y Integer; {Координати початку лінії}.

Color word; {Колір линии).

Visible Boolean; (Ознака светимости).

XE.YE: Integer; {Координати другого конца).

Procedure SetLocation (NewX, NewY: integer);

{Задає нове становище початку лінії).

Procedure SetColor (NewColor: word);

{Встановлює колір лінії).

Procedure SetVIsible (Vis: Boolean);

{Виводить чи гасить линию}.

Procedure GetLocation (var XLoc, YLoc: integer);

{Повертає координати початку линии}.

Function GetColor: word;

{повертає колір линии}.

Function GetVisible: Boolean;

{Повертає ознака світності линии}.

Procedure SetLIneLocationfxl. X1,Y1,x2, y2: integer);

{Задає нове становище лінії на экране}.

Procedure GetLineLocatlon (var x11, y1l, x2l, y2l):integer);

{Повертає координати лінії}.

Procedure SetLineVJsible (vis: Boolean);

{Виводить чи гасить лінію)} end; {Кінець описи об'єкта TLIne_Another}.

На цьому прикладу видно найголовніша перевага наслідування: при описі объекта-потомка вам не потрібно наново описувати вже що у объекте-родителе поля та фізичні методи. Нащадок просто використовує їх за потрібне чином заради реалізації необхідних від цього дій, у яких потребує нащадок, (це описати специфічні йому поля методи, відсутні в объекте-родителе.

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

Як і будь-яке інше дерево, дерево об'єктів має «корінь» (об'єкт є прабатьком від інших об'єктів ієрархії, і «галузі» породжені від цього нащадки. Принаймні пересування від кореня до гілкам і переходу з галузі на гілка об'єкти розростаються за розмірами, приєднуючи себе дедалі нові поля та фізичні методи. Якщо ієрархія об'єктів добре продумана, кожному її рівні до объекту-родителю додаються лише необхідні поля та художні засоби, у такому розростанні насправді немає нічого. Понад те, компоновщик Турбо Паскаля старанно перевірить откомпилированную програму і віддалить з неї всі зайве — зокрема в виконується програму (ЕХЕ-файл) ні включені методи, котрі за якимабо причин не використовують у программе.

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

2.4 Полиморфизм.

Объект-потомок може лише доповнювати поля та художні засоби батька, але і заміняти методи батька налаштувалася на нові (заміняти поля батька не можна!). Наприклад, замість правила SETLINEVISIBLE ми могли в об'єкті TLINE оголосити правило SETVISIBLE, що у цьому випадку перекриє (замінить собою) однойменне правило объекта-родителя TPOINT. Через війну, до найрізноманітніших родинним об'єктах TPOINT і TUNE можна було б застосовувати однойменні правила SETVISIBLE, щоб забезпечити подібні в смисловому плані дії - показати або ж зробити невидимим графічний об'єкт. Властивості, що дозволяє називати різні алгоритмічні дії одним ім'ям, називається полиморфизмом.

У Турбо Паскале є можливість зв’язування даних із методами на етапі виконання програми — таке зв’язування називається пізнім. При пізньому зв’язуванні описання об'єкта відповідний метод доповнюється стандартної директивою VIRTUAL. Такі методи називаються віртуальними. У на відміну від цього методи, із якими здійснено раннє зв’язування (на етапі компіляції), називаються статическими.

Поява директиви VIRTUAL в оголошенні методу хіба що попереджає компілятор: «Поки не знаєш, що хочу. Мине часзапроси зразок!». Зустрівшись із таким оголошенням, компілятор нічого очікувати встановлювати зв’язок об'єкта з методом. Натомість він створить спеціальну таблицю, що називається таблицею віртуальних методів (ТВМ). У цьому таблиці зберігаються адреси точок входу всіх віртуальних методів. До кожного типу об'єкта створюється своя ТВМ й у примірник об'єкта користується цією єдиною для об'єктів такого типу таблицею. ТВМ забезпечує працюючу програму механізмом зв’язування об'єкта з полями. Фактичне зв’язування здійснюється з допомогою звернення до конструктору — спеціальному методу, якого в подібний до звичайній процедурі, але у заголовку замість PROCEDURE містить зарезервоване слово CONSTRUCTOR. У час звернення до конструктору до спеціального полі об'єкта заноситься адресу потрібної ТВМ, в результаті чого все віртуальні методи (зокрема і успадковані від батьків!) отримують доступом до за потрібне полям.

Конструктор може звертатися до віртуальному методу і навіть взагалі бути порожнім, тобто. не не матиме ніяких виконуваних операторів (як у нашому прикладі), тим щонайменше, об'єкт буде инициализирован правильно. Річ у тім, що заголовок CONSTRUCTOR наказує компілятору створити спеціальний набір машинних інструкцій, який инициализирует ТВМ і виконується момент звернення до конструктору до виконання його (конструктора) змістову частину. У об'єкті то, можливо хоч греблю гати конструкторів, але жодного з них то, можливо виртуальным.

Вибір того, саме — статичним чи віртуальним — може бути метод, залежить від специфіки завдання й Ваших смаків. Проте слід, що статичний метод будь-коли то, можливо перекритий віртуальним і навпаки. Список формальних параметрів статичного методу може відрізнятися від списку на перекрываемом методі, а віртуальних методів обидва списку повинні прагнути бути ідентичні. І, нарешті, віртуальні об'єкти займають кілька велику пам’ять (з допомогою ТВМ) і виклик віртуальних методів виповнюється трохи повільніше, ніж виклик статичних. Проте, завжди, коли може бути, слід віддавати перевагу віртуальним методам, т.к. вони надають програмі додаткову гнучкість. Завжди може бути, що раніше чи пізно ми чи хтось із користувачів нашої бібліотеки захоче модифікувати той чи інший її функції. І тут перекриття віртуальних методів дозволить гранично спростити завдання. Зазначимо, що стандартна функція Турбо Паскаля TypeOf (TObj) повертає посилання ТВМ для об'єкта типу TObj. Цю заслання можна використовувати, наприклад, для перевірки того, з саме об'єктом працює у цей час віртуальний метод:

If TypeOf (Self) — TypeOf (TA) then …

І ще одне зауваження. Між екземплярами родинних об'єктів може бути обмін інформацією зі допомогою операторів присвоювання. Наприклад, якщо PoinTl і Point2 — екземпляри об'єкта TPOINT, то припустимо присвоювання.

Point1 := Point2; чи.

PoinT2 := Point1;

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

Point := Line; але недопустимо.

Line := Point; якщо LINE — нащадок POINT. Це іде за рахунок тій причині, що нащадок містить все поля батька, тому при привласненні нащадка батькові чи матері ці поля отримають правильні значення. Протилежне ж присвоювання залишить без зміни «зайві» поля нащадка, що недопустимым.

При використанні віртуальних правил слід остерігатися присвоювання між екземплярами об'єктів, у разі, пам’ятаймо, що просте присвоювання не заміняє собою ініціацію віртуального об'єкта. Якщо, наприклад, LINE і POINT — віртуальні об'єкти, то присваивание.

POINT:= Line; не ініціює об'єкт POINT, навіть якщо об'єкт LINE був які були ініційований. Після такої присвоювання необхідний виклик конструктора об'єкта POINT перед зверненням до будь-якого віртуальному методу цього объекта.

Заключение

.

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

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

Список використовуваних источников.

1. Абрамов В. Г., Трифонов Н. П., Трифонова Г. Н. Введення у язык.

Паскаль. — М.: Наука, 1988. — 320 с.

2. Абрамов С. А., Зима Є.В. Почала програмування на языке.

Паскаль. — М.: Наука, 1987. — 112 с.

3. Вірт М. Алгоритми і структури данных./Пер. з анг. М.: Мир,.

1989. — 360 с.

4. Грогоно П. Програмування мовою Паскаль. — М.: Світ, 1982.

— 382 с.

5. Дантеманн Дж., Мишел Дж., Тейлор Д. Програмування в среде.

Delphi: Пер. з анг. — Київ: НИПФ «ДиаСофтЛтд.», 1995. — 608 с.

6. Епанешников А., Епанешников У. Програмування серед Турбо.

Паскаль 7.0. — М.: ДИАЛОГ-МИФИ, 1993. — 288 с.

7. Ієнсен До., Вірт М. Паскаль. Керівництво для користувача і опис мови: Пер. з анг. — М.: Фінанси і статистика, 1982.

— 151 с.

8. Матчо Дж., Фолкнер Д. Р. Delphi: Пер. с анг.- М.: БІНОМ, 1995. ;

464 с.

9. Орлик С. В. Секрети Delphi на прикладах: — М.: БІНОМ. — 316 с.

10. Перминов О. Н. Програмування мовою Паскаль. — М.: Радіо і зв’язок, 1988. — 224 с.

11. Пильшиков В. М. Збірник вправ з мови Паскаль: Учеб. посібник для вузів. — М.: Наука, 1989. — 160 с.

12. Прайс Д. Програмування мовою Паскаль: Практ. руководство.

— М.: Світ, 1987. — 232 с.

13. Рубенкинг М. Турбо Паскаль для Windows: У 2 т.; Пер. з анг. ;

М.: Світ, 1993. — 536 с.

14. Фаронов В. В. Турбо Паскаль. У 3-х книгах. Книжка 1. Основи Турбо.

Паскаля. — М.: Учеб.-инж.центр МВТУ-ФЕСТО ДИДАКТИК, 1992. — 304 с.

15. Фаронов В. В. Паскаль і Windows. — М.: Учеб.-инж.центр МВТУ;

ФЕСТО ДИДАКТИК, 1994. — 539 с.

16. Фаронов В. В. Практика Windows-программирования. М.:

Информпечать, 1996. — 247 с.

17. Федоров А., Рогаткин Д. Borland Pascal серед Windows. — Киев:

Діалектика, 1993. — 656 с.

18. Форсайт Р. Паскаль всім: Пер. з анг.- М.: Машиностроение,.

1986. — 288 с.

Додаток А.

(обязательное).

{$N+} unit func1; interface type float = Extended; const.

Infinity = 1.0E+4932; function Tan (x: float): float; function ArcSin (x: float): float; function ArcCos (x: float): float; function Degrees_to_Radians (Degrees: float): float; function Radians_to_Degrees (Radians: float): float; function Sinh (x: float): float; function Cosh (x: float): float; function Tanh (x: float): float; function Log10(x: float): float; function Power (x, Exponent: float): float; implementation const.

Radians_Per_Degree = Pi / 180;

Degrees_Per_Radian = 180 / Pi;

Ln10 = 2.3 025 850 930;

MaxValue = 88.29 619; function Tan (x: float): Float; var.

Consine, Tangent: float; begin.

Consine := Cos (x); if Cosine := 0.0 then if Sin (x)>=0 then.

Tan := Infinity else.

Tan := -Infinity else begin.

Tangent := Sin (x) / Cosine; if Tangent > Infinity then.

Tan := Infinity else if Tangent < -Infinity then.

Tan := -Infinity else.

Tan := Tangent; end; end; function ArcSin (x: float): float; begin if Abs (x) = 1.0 then.

ArcSin := Pi / 2.0 else.

ArcSin := ArcTan (x / Sqrt (1 — x * x)); end; function ArcCos (x: float): float; var.

Result: float; begin if x = 0.0 then.

ArcCos := Pi / 2.0 else begin.

Result := ArcTan (sqrt (1 — x * x) / x); if x < 0.0 then.

ArcCos := Result + Pi else.

ArcCos := Result; end; end; function Degrees_to_Radians (Degrees: float): float; begin.

Degrees_to_Radians := Degrees * Radians_Per_Degree; end; function Radians_to_Degrees (Radians: float): float; begin.

Radians_to_Degrees := Radians * Degrees_Per_Radian; end; function Sinh (x: float): float; var t: float; begin if x > MaxValue then.

Sinh := Ifinity else if x < -MaxValue then.

Sinh := -Infinity else begin t := Exp (x);

Sinh := 0.5 * (t — 1 / t); end; end; function Cosh (x: float): float; var t: float; begin if Abs (x) > MaxValue then.

Cosh := Infinity else begin t := Exp (x);

Cosh := 0.5 * (t + 1 / t); end; end; function Tanh (x: float): float; begin.

Tanh := Sinh (x) / Cosh (x); end; function Log10(x: float): float; begin.

Log10 := Ln (x) / Ln10; end; function Power (x, Exponent: float): float; begin if x > 0.0 then.

Power := Exp (Exponent * Ln (x)) else if x = 0.0 then.

Power := 0.0 else.

WriteLn (‘ Підстава ступеня негативно! '); end; begin end.

Показати весь текст
Заповнити форму поточною роботою