Основні принципи об’єктно-орієнтованого програмування

 

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

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

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

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

 

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

Подальше зростання складності та розмірів програмного забезпечення розвивало можливості структурування даних, дозволяло описувати типи даних користувача. Одночасно виникла необхідність розмежувати доступ до глобальних даних програми, тому з’явилася технологія модульного програмування. Вона припускає виокремлення групи процедур та функцій з однаковими глобальними даними в окремі файли, які використовуються в інших програмах як окремо компілюючі модулі: модуль графічних ресурсів, модуль виведення інформації на принтер та інші. Усі змінні в модульних програмах розподіляються на дві частини: відкриті (public), тобто доступні поза модулем в інших програмах, та закриті (private) – доступ до яких може бути тільки в межах процедури. Такий підхід значно поліпшив розробку програм кількома програмістами, кожний з яких розробляв свій окремий модуль, який можна було використовувати в інших програмах. Таку технологію програмування підтримувала, наприклад, мова C. Недоліком модульного програмування була обмеженість у розмірі програми. Так, при використанні програмістом понад 100 000 операторів зростала складність міжмодульних інтерфейсів, тому передбачити взаємовплив окремих частин програми було практично неможливо.

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

 

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

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

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

При використанні об’єктно-орієнтованих програм вимоги до об’єму пам’яті такі, як і при традиційному програмуванні, при цьому склад програми став більш компактний, а процес її вдосконалення - полегшений.

Об’єктно-орієнтований підхід використовує такі технологічні засоби, як спадкування, поліморфізм, композицію та наповнення. Усе це сприяє проектуванню складних об’єктів на основі більш простих. Ці засоби є характеристичними особливостями об’єктно-орієнтованого програмування як такого.

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

 

При використанні об’єктно-орієнтованих програм вимоги до об’єму пам’яті такі, як і при традиційному програмуванні, при цьому склад програми став більш компактний, а процес її вдосконалення - полегшений.

Об’єктно-орієнтований підхід використовує такі технологічні засоби, як спадкування, поліморфізм, композицію та наповнення. Усе це сприяє проектуванню складних об’єктів на основі більш простих. Ці засоби є характеристичними особливостями об’єктно-орієнтованого програмування як такого.

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

 

 

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

Загалом, цей механізм не є характеристичною особливістю об’єктно-орієнтованої технології. Існують програми, що послуговуються механізмом подій, проте не є об’єктно-орієнтованими. Управління подіями є процесом, що його, як правило, покладають на операційну систему. Прикладом такої системи може слугувати операційна система Microsoft Windows.

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

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

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

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

Розробляючи к ласи об'єктів, слід відповісти на такі питання:

- Скільки класів потрібно для реалізації об'єктів, отриманих при

декомпозиції задачі?

- Які дані необхідно описати як поля класу?

- Які методи, що визначають поведінку об'єктів, треба помістити до класу?

- Чи зв'язані між собою класи задачі? Чи потрібна ієрархія класів?

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

 

(базами даних, мережним оточенням), забезпечення синхронізації процесів для систем рівнобіжної обробки тощо.

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

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

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