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

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

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

Добавлен: 16.09.2024

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

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

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

Інтерфейс

Методи

Реалізація

Методи

Мал. 3 Інтерфейс і реалізація класу

З іншого боку доступ до об'єкту регламентується і повинен виконуватися через спеціальний інтерфейс (мал. 3).

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

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

Динамічне створення і знищення об'єктів виконується в процесі роботи програми спеціальними командами.

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

Приклад 2. Заховання реалізації класу (клас Файл - продовження прикладу). Відповідно до результатів об'єктної декомпозиції. Файл повинен реагувати на наступні повідомлення: «Відкрити», «Додати запис», «Знайти запис».

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

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


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

Метод Знайти також спочатку повинен перевіряти, чи відкритий файл. Якщо файл відкритий, метод вьполняет пошук інформації у файлі. Операції перевірки відкриття файлу виконуються в методах Додати і Знайти ідентично, їх можна виділити в окремий метод Проверкаоткритія, який можна описати в секції реалізації.

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

Остаточно для реалізації об'єкту Файл можна запропонувати клас наступної структури:

Клас Файл:

інтерфейс

конструктор Ініціалізувати;

метод Відкрити (ім'я файлу);

метод Додати (прізвище, телефон);

метод Знайти (прізвище);

деструкція Закрить_файл;

реалізація

поле Файловая_переменная;

поле Состояніє_файла;

метод Проверка_откритія;

Кінець опису.

Після визначення структури класу повинні бути розроблені алгоритми методів і призначені типи полів і передаваних параметрів.

У програмі повинна бути використана змінна типу Файл. Оскільки файл в програмі використовується постійно, відповідну змінну краще визначати статично.

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


2. Основні засоби розробки класів

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

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

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

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

Приклад. Спадкоємство (клас Окно_меняющєє_цвет). Побудуємо на базі класу Вікно клас-нащадок, який може змінювати колір вікна на екрані. Для цього до батьківського класу досить додати метод Ізменіть_цвет:

Клас Окно_меняющєє_цвет - батько: клас Вікно:

метод Ізменіть_цвет(аСоlог);

Кінець опису.

Клас Окно_меняющєє_цвет містить всі поля батьківського класу і всі його методи. Додатково об'єкти типу Окно_меняющєє_цвет можуть міняти колір вікна на вказаний в повідомленні «Ізменіть_цвет» (мал. 3).

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

Просте спадкоємство Множинне спадкоємство

Клас-батько

Клас-батько 1

Клас-нащадок

Клас-батько 2


Клас-нащадок

Мал. 2 Ієрархія класів при різних видах спадкоємства

П

Окно

Вікно

оля: X1, Y1, X2, Y2, Color

Методи

Ініціалізувати (X1, Y1, X2, Y2, аColor)

Зобразити

Вікно_змінює_колір

Метод: Змінити колір(аColor)

Мал. 3 Ієрархія класів Вікно і Окно_меняющєє_цвет

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

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

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

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

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

Розрізняють декілька термінів, пов'язаних з конкретними механізмами реалізації поліморфізму для різних випадків:

чистий поліморфізм - використовується для позначення того, що один код функції може по-різному інтерпретуватися залежно від типу аргументів; використовується в мовах високого рівня абстракції, наприклад, в мові LISP або SMALLTALK;

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


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

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

узагальнені функції або шаблони - використовуються в ООП при реалізації в мові класів (наприклад, в C++), що параметризуються, параметрами такого класу є типи аргументів методів класу (розглянуті далі).

Об'єкти

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