С А Вернигоренко - Вивчення основ об'єктно орієнтованого програмування у класах фізико-математичного профілю - страница 3

Страницы:
1  2  3 

1) дві функції записування/читання даних про людину до/з текстового файлу (відповідним функціям, як параметр, має передаватися файловий вказівник);

2) деструктор.

Від класу з даними про людину успадкувати класи робітника та інженера. У цих класах повинні бути оголошені та описані перевизначені функції базового класу.

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

У класі інженера повинні зберігатися дані про назву ВУЗу, який він закінчив, та назву спеціальності (не більше 250 символів).

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

Формат рядка з даними про робітника такий:

1) ціле число, що вказує на код професії (1 - робітник, 2 - інженер);

2) ім'я робітника та його рік народження;

3) номер розряду робітника;

4) кількість опанованих професій.

Формат рядка з даними про інженера наступний:

1) ціле число, що вказує на код професії (1 - робітник, 2 - інженер);

2) ім'я інженера та його рік народження;

3) назва ВУЗу, у якому навчався інженер;

4) назва спеціальності інженера.

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

2 ІваненкоПетро 1982 КПІ технології_та_матеріалознавство

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

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

1) дві функції введення/виведення даних про фігуру (клавіатура, монітор);

2) дві функції записування/читання даних фігури до/з текстового файлу (відповідним функціям, як параметр, має передаватися файловий вказівник);

3) обчислення периметру фігури;

4) обчислення площі фігури;

5) деструктор.

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

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

За властивості класу паралелограма обрати довжини його суміжних сторін та кут між ними у градусах.

У класі круга, крім успадкованої властивості "назва фігури", додатково створити властивість, що позначає довжину його радіуса.

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

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

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

1. Створити клас банківського рахунку. Властивості - тип рахунку (звичайний чи валютний, не більше чотирьох символів), кількість грошей на ньому та унікальний код рахунку (шестизначне число) розташувати у закритій секції. Конструктору рахунка мають передаватися значення усіх його властивостей, крім унікального коду.

Створити клас клієнта, "дружній" класу банківського рахунку. У класі клієнта створити три закриті властивості: ім'я клієнта (не більше 30-ти символів), вказівник на об'єкт його рахунку, код клієнта (шестизначне число). Конструктор цього класу, як параметр, має приймати вказівник на певний рахунок та генерувати унікальний код клієнта, значення якого потрібно надати унікальному коду рахунка цього клієнта. Тобто, код клієнта і код рахунку - це ті властивості, за якими встановлюється належність деякого рахунку певному клієнтові. Крім цього у класі клієнта створити функцію виведення на екран відомостей про клієнта і його рахунок.

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

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

2. Створити клас космічного зонду і космічного корабля.

Клас космічного зонду повинен містити наступні закриті поля: назва зонду; поле для збереження даних, зібраних зондом (не більше 255 символів); вказівник на космічний корабель, який обмінюється даними із зондом. Конструктору цього класу, як параметр, передається назва зонду. Використання інших функцій не передбачається.

У класі космічного корабля мають бути описані такі закриті поля: назва космічного корабля (не більше 30-ти символів); база з даними, зібраними з використанням зондів (двовимірний масив символів не більше, ніж з 10-ти 255-символьних рядків, кожен рядок - це набір даних, прийнятих від зонда); номер рядка бази, у який можна записувати дані; вказівник на зонд, яким керує корабель. Конструктору такого класу, як параметр, передається ім'я космічного корабля. Крім конструктора, у цьому класі описати функцію для виведення на екран вмісту бази даних космічного корабля.

Описати такі глобальні функції.

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

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

3) Функція виведення на екран назви зонда, який виконує команду запиту вказаного космічного корабля.

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

1) передавання команди від космічного корабля до зонду на збирання даних;

2) передавання зібраних даних від зонду до космічного корабля;

3) виведення для обраного корабля назви зонду, з яким він здійснює обмін даними;

4) виведення на екран бази даних обраного корабля.

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

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

Для набуття практичних навичок розв'язування задач, де потрібно використовувати перевантаження стандартних операцій для створюваних класів, можна запропонувати учням такі завдання.

1. Створити клас-оболонку над цілочисельним типом (int) мови Сі. У класі мають бути дві закриті властивості: поле для збереження цілочисельного значення та повідомлення про результат виконання однієї з арифметичних операцій. Створити наступні функцій класу.

1) Конструктор за замовчуванням, а також конструктори копіювання та перетворення (конструктори за замовчуванням та перетворення можна описати як один).

2) Функція введення даних про число з клавіатури. Такій функції мають передаватися наступні параметри: мінімальне та максимальне значення діапазону, з якого потрібно ввести число; повідомлення-запрошення для введення; повідомлення про некоректність введення значення. У тілі функції передбачити можливість повторного введення даних у випадку їх некоректного введення. Для усіх параметрів цієї функції передбачити значення за замовчуванням.

3) Функція виведення даних на екран монітора. Для такої функції передбачити єдиний параметр-повідомлення, що виводиться перед виведенням цілочисельного значення.

4) Функції збереження/завантаження даних класу в/із файл/а. Як параметр, таким функціям має передаватися файловий вказівник.

5) Функції перевантаження арифметичних операцій над цілочисельними даними (+, -, /, *, %, унарний мінус). Для певних операцій у тілі відповідних функцій передбачити можливість переповнення. У разі переповнення повинно формуватись відповідне повідомлення, що має бути збереженим у спеціально створеній для цього властивості класу.

6) Функція виведення на екран значення властивості-повідомлення про помилку виконання арифметичної операції.

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

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

1) Конструктор за замовчуванням. За цим конструктором має створюватися квадрат (0; 1) -

(1, 0). .

2) Функція введення з клавіатури даних про прямокутник.

3) Функція виведення на екран монітора даних про прямокутник.

4) Функції збереження/завантаження в/із файл/у даних про прямокутник.

5) Функції обчислення площі та периметра прямокутника.

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

7) Операція множення прямокутників. Результатом множення двох прямокутників називається прямокутник, що утворюється, як перетин двох прямокутників-множників. Врахувати випадок, при якому два прямокутники не мають спільної частини.

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

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

1) Конструктор за замовчуванням - створюється об'єкт порожньої множини.

2) Конструктор перетворення з цілочисельним параметром в межах від 1 до 26. У результаті використання цього конструктора має бути створена множина із вказаною кількістю літер, починаючи від літери "А" і закінчуючи літерою, номер якої в алфавіті відповідає вказаному цілому значенню.

3) Конструктор копіювання.

4) Функція введення елементів множини з клавіатури. Врахувати, що у множині не може бути двох однакових елементів.

5) Функція виведення елементів множини на екран.

6) Функції збереження/завантаження властивостей класу у/із файл/а. Як параметр, таким функціям має передаватися файловий вказівник.

7) Перевантажена операція надання значення від одного до іншого об'єкта множини.

8) Перевантажені операції додавання, віднімання, множення та унарний мінус для об'єктів класу. Правила виконання операцій такі.

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

б) Різницею множини А та В називають таку множину, яка складається з елементів, що належать множині А і не належать множині В.

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

г) Результатом виконання операції унарного мінуса для множини А є така множина В, що складається лише з тих елементів, що не належать до множини А.

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

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

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

2. Створити клас шаблон динамічного масиву елементів довільного типу. У класі передбачити функції додавання/вилучення рядків та стовпців а також функцію пошуку найменшого серед найбільших елементів кожного рядка . У головній програмі виконати тестування функцій розробленого класу, створивши масив елементів дійсного типу та масив трикутників. Для порівняння об'єктів трикутників використати наступне правило: "з двох трикутників більшим є той, площа якого більша".

ЛІТЕРАТУРА

1. С.О. Бочков, Д.М. Субботин Язык программирования Си для персонального компьютера. - М.: Радио и связь, 1990. - 384 с.

2. Майкл Дж. Янг Visual C++ 6. Полное руководство: Пер. с англ. - К.: Издательская группа BHV, 2000. - 1056 с., ил.

3. Мейерс С. Наиболее эффективное использование С++. 35 новых рекомендаций по улучшению ваших программ и проектов: Пер. с англ.- М: ДМК Пресс, 2000.- 304 с.: ил. (Серия "Для программистов").

4. Морзе Н.В. Основи інформатики. Екзаменаційні білети: запитання та відповіді .- К.: ДиаСофтЮП,

2000. - 160 с.

Страницы:
1  2  3 


Похожие статьи

С А Вернигоренко - Вивчення основ об'єктно орієнтованого програмування у класах фізико-математичного профілю