Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_ ООП_укр_рус14.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
250.37 Кб
Скачать

МІНІСТЕРСТВО ОСВІТИ, НАУКИ, МОЛОДІ

ТА СПОРТУ УКРАЇНИ

Одеський національний політехнічний університет

Кафедра системного програмного забезпечення

Методичні вказівки до виконання лабораторних робіт

з дисципліни

"Обєктно орієнтоване програмування"

для студентів інституту комп’ютерних систем

з базової підготовки за напрямком 6.050103

«Програмна інженерія»

Затверджено

На засiданнi кафедри

системного програмного

забезпечення

протокол № вiд

Одеса ОНПУ 2014

Загальні положення

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

Кожній студент повинен вибрати варіант завдання до лабораторної роботи відповідно власному номеру у списку навчальної групи.

Кожний протокол повинен мати текст завдання, опис класів, текст програми, що його застосовує, декілька контрольних прикладів (тестів), що перевіряють основні функціональні можливості класу, отримані результати перевірки. Для лабораторних робіт, що застосовують середовища Visul C++ або Java у протоколі слід навести схеми чи малюнки меню та вікон діалогу.

На кожному лабораторному занятті потрібно виконати не менше ніж одну лабораторну роботу. Запізнення із захистом лабораторних робіт враховується при обчисленні рейтингу студента.

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

Оцінювання лабораторної роботи виконується виходячи з наступних вимог.

- Завдання до лабораторної роботи має бути повністью виконаним.

- Протокіл має бути оформлен за правилами, що наведені у методичних вказівках.

- Тестування програми повинне відповідати її функциональним можливостям програми.

- Студент повинен знати теоретичний матеріал, який пов’язаний з завданням до лабораторної роботи.

- Студент повинен пояснити усі рішення, які він прийняв розв’язуючи задачу.

- Студент повинен захистити лабораторну роботу у строк.

Перші дві вимоги обов’язкові. Виконання кожньої з останніх чотирьох вимог оцінюється у 0,3 бала. За бездоганне виконання роботи, що предсталена у строк студент отримує 1,4 бала. Таким чином, максимальний «внесок» лабораторних робіт у оцінку модульного контолю становить 10 балів.

Короткі теоретичні зведення

Об'єктно-орієнтоване програмування на мовi С++

У мові С++ є три базові конструкції, що дозволяють створювати об'єктно-орієнтовані програми: class, struct і union. Найбільшими функціональними можливостями володіє class. При програмуванні на мові С++ прийнята стандартна термінологія об'єктно-орієнтованого програмування: під класом розуміють опис спільності об'єктів (подібно типу даних), а під об'єктом - конкретний примірник цієї спільності (подібно перемінної визначеного типу).

Опис класу

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

Створимо клас location (місце розташування деякого об'єкта на площині).

сlass location

{ int x,y; //закрита частина

public:

void init(int,int); //відкрита частина

int getx();

int gety();

};

Якщо функції - члени класу описуються поза класом, то їхні імена обов'язково повинні містити префікс, що вказує на їхню приналежність до класу. Префікс і ім'я з'єднуються знаком операції ‘::’:

void location::init(int x1,int y1){x=x1; y=y1;}

int location::getx(){return x;}

int location::gety(){return y;}

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

Роздивимося приклад роботи з об'єктом класу.

void main()

{location L1; //опис об'єкта

L1. init(10,10);//ініціалізація об'єкта

int k=L1. getx();//одержання значення х об'єкта

int n=L1. gety();//одержання значення y об'єкта

int m=x;//помилка! Спроба звернутися до закритої області класу

- - - - - - - -

}

Inline - функції

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

На inline - функції накладаються жорсткі обмеження - вони не можуть містити операторів, що управляють послідовністю обчислень.

Функція - член класу, описана усередині класу, автоматично стає inline - функцією. Проте, використовуючи ключеве слово inline можна перетворити деяку функцію в inline- функцію і за межами опису класу. Наприклад:

inline int location::gety(){return y;}

Ініціалізація. Конструктори

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

сlass location

{ int x,y;

public:

location(int x1,int y1){x=x1;y=y1;}

int getx(){ return x;}

int gety();{return y;}

};

Якщо в опис класу введений конструктор, то при описі об'єкта класу автоматично викликається конструктор. Нижче приведений приклад створення об'єкта класу location.

void main()

{location L1(10,10); //опис об'єкта й ініціалізація об'єкта

int k=L1. getx();

int n=L1. gety();

- - - - - - - -

}

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

Class location

{ int x,y;

public:

location(int x1,int y1){x=x1;y=y1;}

location(int x1){x=x1;y=1;}

location(){x=10;y=10;}

int getx(){ return x;}

int gety();{return y;}

};

Нижче приведений приклад створення об'єктів класу location із використанням усіх трьох конструкторів.

void main()

{location L1(20,30), //x=20,y=30

location L2(50), //x=50,y=1

location L3, //x=10,y=10

location L4=100; //x=100,y=1

- - - - - - - -

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]