Неконтрольований доступ до даних
В процедурній програмі існує два типи даних. Локальні дані містяться всередині функції (процедури) і призначені для використання винятково цією функцією. Наприклад, в програмі складського обліку функція, що здійснює виведення запису на екран, може використовувати локальні дані для збереження інформації про цей запис. Локальні дані функції недоступні нікому, крім самої функції, і не можуть бути зміненими іншими функціями.
Якщо ж існує необхідність сумісного використання одних і тих же даних іншими функціями, то дані повинні бути оголошені як глобальні. Це, як правило, стосується найважливіших даних програми. Прикладом може бути вже згадана облікова книга. Будь-яка функція має доступ до глобальних даних. Схема, що ілюструє концепцію локальних і глобальних даних, приведена на рисунку 1.
Рисунок 1 Глобальні і локальні дані
Великі програми звичайно містять значне число функцій і глобальних змінних. Проблема процедурного підходу полягає в тому, що число можливих зв’язків між глобальними змінними і функціями може бути дуже великим. Через це ускладнюється структура програми і в неї складно вносити зміни. Зміна структури глобальних даних може вимагати переписування всіх функцій, що працювали з цими даними. Така проблема виникне, наприклад, якщо розробник вирішить збільшити довжину коду товару. При таких змінах нелегко швидко визначити, які функції необхідно скорегувати, виправлені функції можуть некоректно працювати з іншими глобальними даними. Отже, будь-яка зміна тягне за собою цілу низку наслідків.
Моделювання реального світу
Друга, ще важливіша проблема процедурного підходу полягає в тому, що відокремлення даних від функцій виявляється малопридатним для відображення картини реального світу, оскільки реальні речі (машини, тварини, люди, елементи інтерфейсу програми) являють собою сукупність властивостей і поведінки.
Властивості.Прикладами властивостей (характеристик) для людей можуть бути колір очей чи місце роботи, для машин – потужність двигуна, для програмно створеної кнопки – розмір, колір, надпис, координати лівого верхнього кута, видимість. Таким чином, властивості об’єктів рівносильні даним в програмах.
Поведінка– це деяка реакція об’єкту у відповідь на зовнішній вплив. По відношенню до раніше згаданої кнопки це може бути її реакція при переміщенні над нею курсора мишки, при одинарному клацанні, при подвійному клацанні і т.д.
Отже, ні окремо взяті дані, ні окремо взяті функції не спроможні адекватно відобразити об’єкти реального світу.
Об’єктно орієнтований підхід
Основоположною ідеєю ООП є об’єднання даних і дій, що проробляються над цими даними, в одне ціле, яке називається об’єктом.
Функції об’єкту, що називаються методами (інша назва – функції-члени), звичайно призначені для доступу до даних об’єкта (приклад – проводимо мишкою над екранною кнопкою і вона змінює свій розмір та колір). Якщо необхідно зчитати якісь дані об’єкту, треба викликати відповідний метод, що виконає зчитування і поверне потрібне значення. Прямий доступ до даних неможливий. Дані приховані від зовнішнього впливу, що захищає їх від випадкової зміни. Кажуть, що дані і методи інкапсульовані. Терміни приховування та інкапсуляція даних є ключовими в описі об’єктно орієнтованих мов.
Якщо необхідно поміняти дані об’єкта, то, очевидно, ця дія також буде покладатися на методи об’єкту. Ніякі інші функції не можуть міняти дані класу. Такий підхід полегшує написання, відлагодження і використання програми.
Типова програма на об’єктно орієнтованій мові програмування, наприклад, на С++, складається з сукупності об’єктів, що взаємодіють між собою, викликаючи методи один одного. Структура такої програми приведена на рисунку 2.
Рисунок 2. Об’єктно-орієнтований підхід
Можна уявляти собі об’єкти чимось схожим на відділення компанії – бухгалтерію, відділ продажів, відділ кадрів та інші. Такий поділ є важливою частиною структурної організації фірми. В більшості компаній обов’язки чітко розподілені між підрозділами, і в кожного підрозділу є дані, з якими він працює: в бухгалтерії – заробітна плата, у відділу продажів – відомості, що стосуються торгівлі, у відділу кадрів – персональна інформація про співробітників.
Співробітники кожного відділу здійснюють операції тільки з тими даними, які стосуються їхнього підрозділу. Це дозволяє слідкувати за діяльністю компанії та контролювати її, а також підтримувати цілісність інформаційного простору компанії. Наприклад, бухгалтерія несе відповідальність за інформацію по заробітній платі. Якщо у менеджера відділу продажів виникне потреба в такій інформації, він посилає запит компетентній особі, яка повинна знайти, обробити і відіслати потрібну інформацію. Саме таким чином об’єкти створюють таку організацію програми, що забезпечує цілісність її даних.
Характеристики об’єктно орієнтованих мов
Далі ми розглянемо кілька основних елементів, що входять до складу об’єктно-орієнтованих мов, зокрема до складу мови С++.
Об’єкти
Першою проблемою при розв’язуванні задачі за допомогою ООП є проблема розбивання її на об’єкти. Мислення в термінах об’єктів виявляється значно простішим і наочнішим, ніж у термінах функцій, оскільки програмні об’єкти схожі на об’єкти реального світу.
Що повинне представлятися в програмі у вигляду об’єктів? Це залежить від типу задачі і уяви розробника. Можливі такі варіанти:
Ø Фізичні об’єкти
· Автомобілі при моделюванні вуличного руху
· Елементи схеми при моделюванні електромережі
· Країни при створенні економічної моделі
· Літаки при моделюванні диспетчерської системи
Ø Елементи інтерфейсу
· Вікна
· Кнопки
· Меню
· Випадаючі списки
· Поля введення і поля редагування
· Графічні об’єкти (лінії, прямокутники, круги)
· Миша, клавіатура, дискові пристрої, принтери
Ø Структури даних
· Масиви
· Стеки
· Черги
· Дерева
· Зв’язані списки
Ø Групи людей
· Співробітники
· Студенти
· Покупці
· Продавці
Ø Сховища даних
· Інвентарні описи
· Перелік номенклатур
· Списки співробітників
· Словники
Відповідність між програмними і реальними об’єктами є наслідком об’єднання даних і функцій. Ні одна програмна модель, створена на основі процедурного підходу, не відображала існуючі речі так точно, як це вдалося зробити за допомогою об’єктів.
Класи
Коли ми говоримо про об’єкти, то кажемо, що вони є екземплярами класів. Розглянемо таку аналогію. Практично всі комп’ютерні мови мають стандартні типи даних, у мові С є цілий тип int. Ми можемо визначити змінні таких типів у наших програмах:
int day;
int divisor;
int n;
Так описані змінні відразу дістають певні властивості (наприклад, розмір sizeof), визначаються операції, які можна з ними проводити (додавання, віднімання, множення, ділення націло, остача від ділення). Подібним способом ми можемо визначати об’єкти класу, як це показано на рисунку 3. Клас є свого роду формою, що визначає, які дані і функції будуть включені в об’єкт класу. При оголошенні класу не створюються ніякі об’єкти цього класу, по аналогії з тим, що існування типу int ще не означає існування змінних цього типу.
Рисунок 3. Клас і його об’єкти
Таким чином, клас є описом сукупності схожих між собою об’єктів. Об’єкт класу часто називають також екземпляром класу.
Дата добавления: 2015-08-26; просмотров: 639;