Міністерство освіти України
Національний університет «Львівська політехніка»
Кафедра автоматизованих систем управління
Методичка до лабораторних з ООП
Лабораторна робота №4з курсу
«Об'єктно-орієнтоване програмування»
Львів 2011
Лабораторна робота № 4
Створення власних класів та об’єктів
Мета: засвоїти основні поняття об’єктно-орієнтованого програмування, навчитися створювати свої об’єкти і будувати програми, засновані на об’єктному підході.
Порядок роботи:
Створити проект для виконання індивідуального завдання.
Оформити звіт для захисту лабораторної роботи за зразком
назва роботи
мета роботи
порядок роботи
короткі теоретичні відомості
алгоритм розв’язку задачі
тексти відповідних модулів проекту
аналіз отриманих результатів та висновки
Питання для самоконтролю
1. Що таке “клас” та “об’єкт”?. Яке вони співвідносяться між собою?
2. Що таке “модуль”. Які існують правила побудови модуля та роботи з ним?
3. Як описати класи та об’єкти в Object Pascal?
4. Що таке “поле” та “метод”? Як описати поля та методи певного класу?
5. Як реалізувати та викликати методи?
6. Що таке “конструктор”, “деструктор” та коли вони викликаються?
Теоретичні відомості
У 80-х роках стали з’являтися перші комерційні системи розробки, у яких була реалізована нова парадигма програмування, так званий об’єктний підхід, що дозволило різко підвищити продуктивність праці програмістів. Підхід був заснований на понятті об’єкта, як екземпляра (представника) певного класу. Клас розглядається як тип даних, у якому поєднуються як поля даних, так і методи їхньої обробки. Об’єкт є змінною цього типу.
Фактично об’єкт став відбивати реальні та абстрактні поняття навколишнього світу. Наприклад, автомобіль характеризується такими полями як марка, тип двигуна, наявність коліс і керма, а файл – назвою та розміром. “Методи” автомобіля визначають його здатність рухатися в потрібному напрямку залежно від значень своїх полів: обсягу наявного бензину, кута повороту керма. З файлу за допомогою методів можна зчитувати дані, змінювати їх і записувати назад.
Використовуючи об’єктно-орієнтоване програмування можна створювати програми, ґрунтуючись на поняттях класу та об’єкта. Працювати зі звичними поняттями людині легше, ніж з абстрактними числами. При цьому можна виділити певний набір класів, що потрібні при створенні найрізноманітніших програм. Ці класи використовуються повторно, без витрати часу на їх програмування. Саме такий підхід і реалізований у системі програмування Delphi.
Використання класів та об’єктів у програмах
Клас у Delphi описується у складі модуля (unit). Модулі – це частини на які розбивається програма. Кожен модуль складається з двох розділів – інтерфейсного (interface) і реалізації (implementation). Усе, що написано в інтерфейсній частині, автоматично стає доступним в програмі, до якої буде підключений модуль. Розділ реалізації є прихованим від доступу з інших програм та модулів.
Модуль описується наступним чином:
Unit {ім’я_модуля;}
interface
{описи типів даних, змінних, констант}
implementation
{реалізація процедур та функцій}
end.
Опис класів
Опис класу в Object Pascal є схожий до опису запису. Головна відмінність у тім, що в класі присутні не тільки поля, але і методи – процедури та функції. Формат опису класу такий:
type {ім’я_класу}=class
{поле1: тип1;}
{поле2: тип2;}
. . .
{поле N: тип N;}
{заголовок_методу1;}
{заголовок_методу2;}
. . .
{заголовок_методу m;}
end;
У заголовку методу подається лише перший рядок – procedure чи function, а за ним ім’я методу і його параметри. Сам текст процедури чи функції, що реалізує метод, пишеться у розділі implementation. При цьому до назви методу спереду дописується через крапку назва класу, щоб дозволити використовувати однакові назви для методів різних класів, які описані в модулі.
У кожного класу є два спеціальних методи – конструктор і деструктор. Конструктор викликається при створенні екземпляра цього класу. У ньому виділяється динамічна пам’ять і задаються початкові значення усіх полів об’єкта. Як правило, конструктор має назву Create.
Деструктор виконується при завершенні роботи з об’єктом. Головне його призначення - звільнення динамічної пам’яті, захопленої змінною-об’єктом. Деструктор як правило має назву Destroy.
Описуються конструктори та деструктори так само, як і звичайні методи-процедури, тільки замість procedure потрібно писати constructor чи destructor.
Для застосування розробленого класу слід описати змінну цього класу (об’єкт) і надалі використовувати звертання до полів та методів подібно до звертання до полів записів, тобто розділяючи крапкою назву об’єкта від назви поля або метода. Винятком є конструктор, який слід викликати в операторі присвоєння:
<назва об’єкта> := <назва класу>.<назва конструктора>.
Після написання модуля його можна відкомпілювати, при цьому на диску створюється новий файл з таким саме ім’ям та розширенням *.dcu . Цей файл можна підключати в будь-яку іншу програму оператором uses.
Завдання.
Написати програму, яка демонструє роботу з класами та об’єктами. Опис класу та реалізацію методів виконати в окремому програмному модулі.
Варіанти завдання
Описати клас для векторів, що задаються координатами кінців у тривимірному просторі. Забезпечити операції додавання та віднімання векторів з одержанням нового вектора (суми чи різниці), обчислення скалярного добутку двох векторів, довжини вектора, косинуса кута між векторами.
Побудувати клас для опису плоскої геометричної фігури: прямокутник. Передбачити методи для створення об’єкта, переміщення на площині, зміни розмірів і обертання на заданий кут.
Описати клас для одномірних масивів рядків фіксованої довжини. Передбачити можливість звертання до окремих рядків масиву по індексах, контроль виходу за межі масиву, виконання операцій поелементного з’єднання двох масивів з утворенням нового масиву, злиття двох масивів із вилученням елементів, що повторюються, вивід на екран елемента масиву по заданому індексу і всього масиву.
Описати клас для одномірних масивів цілих чисел (векторів). Передбачити можливість звертання до окремого елемента масиву з контролем виходу за межі масиву, можливість завдання довільних границь індексів при створенні об’єкта та виконання операцій поелементного додавання та віднімання масивів з однаковими границями індексів, множення та ділення всіх елементів масиву на скаляр, вивід на екран елемента масиву по заданому індексу і всього масиву.
Побудувати клас для опису плоскої геометричної фігури: коло. Передбачити методи для створення об’єкта, переміщення на площині, зміни розмірів і зміни кольору фігури, обертання навколо заданої точки на заданий кут.
Описати клас “множина символів”, який дозволяє виконувати основні операції - додавання та вилучення елемента, перетин, об’єднання та різницю множин.
Описати клас прямокутників зі сторонами, паралельними до осей координат. Передбачити можливість переміщення прямокутників на площині, зміну розмірів, побудову найменшого прямокутника, що містить два заданих прямокутники, і прямокутника, що є спільною частиною (перетином) двох прямокутників.
Описати клас поліномів від однієї змінної, що задаються степенем полінома та масивом коефіцієнтів. Передбачити методи для обчислення значення полінома для заданого аргументу, операції додавання, віднімання та множення поліномів з одержанням нового об’єкта-полінома, вивід на екран опису полінома.
Описати клас, що забезпечує представлення матриці довільного розміру з можливістю зміни числа рядків і стовпців, вивід на екран підматриці будь-якого розміру і всієї матриці.
Побудувати клас для опису плоскої геометричної фігури: еліпс. Передбачити методи для створення об’єкта, переміщення на площині, зміни розмірів і кольору, обертання навколо центру на заданий кут.
Описати клас для представлення раціональних дробів. Забезпечити виконання операцій додавання, віднімання, множення та ділення таких чисел. Передбачите перевірку ділення на нуль.
Побудувати клас для опису плоскої геометричної фігури: трикутник. Передбачити методи для створення об’єкта, переміщення на площині, зміни розмірів і зміни кольору фігури, перевірки, чи два трикутника перетинаються.