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

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

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

Добавлен: 16.09.2024

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

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

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

Начало работы

Завершение работы

Мал. 6. Повна діаграма станів інтерфейсу користувача

Об'єкт Меню відповідатиме за вибір пунктів меню і виклик форми Відкриття, форми Введення і форми Пошуку.

Форма Відкриття повинна здійснювати відкриття або створення файлу. Вона вводитиме ім'я файлу і викликатиме об'єкт Файл для виконання операції відкриття.

Форма Введення повинна вводити дані (прізвище, ім'я, по батькові і телефон) і передавати цю інформацію об'єкту Файл для збереження.

Форма Пошук повинна вводити дані для пошуку (прізвище або ім'я, або і те і інше відразу) і запрошувати пошук телефону за введеними даними.

Всі операції з файлом виконуватиме об'єкт Файл.

Остаточний варіант об'єктної декомпозиції проектованої системи представлений на мал. 7 (порівняєте з результатами процедурної декомпозиції для тієї ж програми, приведеними на мал. 6).

Таким чином, можна сформулювати наступні рекомендації по виконанню об'єктної декомпозиції:

  1. Для складних систем об'єктна декомпозиція повинна виконуватися поетапно: на першому етапі - об'єктна декомпозиція всієї системи, на подальших - декомпозиція об'єктів як підсистем.

  2. При декомпозиції системи в цілому як об'єкти можуть виділятися елементи двох типів:

  • елементи інтерфейсу користувача (вікна меню, вікна повідомлень, вікна форм введення-виводу і так далі);

  • засоби зберігання, організації і перетворення даних (бази даних, файли, протоколи, структури даних і так далі).

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

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


Об'єкти і повідомлення

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

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

Реакція об'єкту на повідомлення може залежати від його стану: так об'єкт Файл, отримавши повідомлення «Додати запис», перш ніж додавати запис, повинен перевірити, чи відкритий відповідний файл, і при закритому файлі повинен видати користувачеві відмову на виконання операції додавання.

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

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

Примітка. Наявність внутрішнього стану об'єктів означає, що порядок виконання операцій має істотне значення.

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

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

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


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

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

Повний список можливих операцій над об'єктами виглядає таким чином:

  • створення об'єкту;

  • знищення об'єкту;

  • модифікація - зміна стану об'єкту; селекція - доступ для визначення стану;

  • ітерація - доступ до вмісту об'єкту по частинах в певній послідовності (використовується за наявності в об'єкті деяких однотипних компонент).

Відповідно, кожне повідомлення, що приймається об'єктом, можетинициировать виконання однієї або декількох операцій вказаних типів.

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

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

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

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

Види операцій над об'єктами і типи відношення між ними визначають особливості реалізації об'єктів.

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


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

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

Об'єкт-змінна

Значення

методи

Об'єкт – абстракция Клас

Стан

Поведінка

Поля

Методи

Об'єкт-змінна

Значення

методи

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

У програмах використовуються змінні типу класу. Такі змінні прийнято називати об'єктами.

Приклад 1 Опис класу (клас Вікно). Хай необхідно розробити клас, змінні якого використовуються для зображення на екрані кольорового прямокутника заданого кольору і розміру (мал. 2). Проектований клас повинен містити поля для збереження параметрів вікна: XI, Yl, X2, Y2 - координати верхнього лівого і нижнього правого кутів і Color - колір.

Х

Цвет

A(x1,y1)

B(x2,y2)

Рис. 2 Вид и параметры окна на экране

Колір

A(x1,y1)

B(x2,y2)

Рис. 2 Вид и параметры окна на экране

ай єдине повідомлення, що обробляється об'єктом, - «Намалювати вікно». Відповідно, клас повинен містити метод, що реалізовує процес малювання об'єкту. Поля об'єкту можна ініціалізувати при створенні Змінній - y(х2 у2) об'єкту, передавши йому повідомлення ініціалізації, що включає значення полів.


Отже, клас повинен містити метод ініціалізації.

Остаточно отримуємо клас, що має наступну структуру:

Клас Вікно:

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

метод Ініціалізувати(аХ 1,aY I,aX2,aY2,aColor)

метод Зобразити

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

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

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

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

<ім'я об'єкту>.< ім'я поля>

або

<ім'я об'єкту>.< ім'я методу>.

Всі методи об'єкту обов'язково мають доступ до всіх полів свого об'єкту. У мовах програмування, що розглядаються далі, це досягається через неявну передачу в метод спеціального параметра - адреси області даних конкретного об'єкту (Self- в Паскалі і this - в C++). Таким чином, зменшується кількість параметрів, явно передаваних в метод.

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

Клас <ім'я класу>

інтерфейс

<оголошення полів і методів класу, до яких можливе звернення ззовні>

реалізація

<оголошення полів і методів класу, до яких неможливе звернення ззовні>

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

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

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