Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ООП_Навч_посібник.doc
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
6.58 Mб
Скачать

11.1.4. Неконтрольований доступ до даних

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

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

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

Велика кількість зв'язків між функціями і групами даних зазвичай породжує декілька додаткових проблем. По-перше, ускладнюється структура коду програми. По-друге, у код програми важко вносити нові зміни. Окрім того, будь-яка зміна структури глобальних даних може вимагати переписування всіх функцій, що використовують ці дані. Наприклад, якщо розробник програми ведення складського обліку вирішить зробити код програми не 5-значним, а 12-значним, то необхідно буде змінити відповідний тип даних з short на long. Це означає, що в усіх функціях, які оперують цими даними, мають бути внесені зміни, щоби дати змогу обробляти дані типу long. Можна навести аналогічний побутовий приклад, коли в супермаркеті з певних причин змінюється розташування відділів, внаслідок чого покупцям доводиться змінювати свій звичний шлях від одного відділу до іншого. Зрозуміло, обурення чи негативні емоції – чекати недовго.

Рис. 11.1. Концепція області видимості глобальних і локальних даних

Рис. 11.2. Структурний підхід до визначення зв'язків між глобальними даними і функціями

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

11.1.5. Відображення картини реального світу

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

Прикладами властивостей (іноді їх називають характеристиками) для людей можуть бути колір очей або місце роботи; для машин – потужність двигуна і кількість дверей. Таким чином, властивості об'єктів рівносильні даним у програмах: вони набувають певні значення, наприклад карий – для кольору очей або 4 – для кількості дверей автомобіля.

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

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