Уроки C++ програмування.

30.07.2015

Урок 2: &quotШагаем далі. Об’єктно орієнтоване програмування С++.&quot
Проект: «Дистанційне навчання програмістів.
Інформатика, мови програмування».

можна тільки НАВЧИТИСЯ!»

Урок 2: Крокуємо далі. Об’єктно орієнтоване програмування С++.

Добрий день!

Будемо за першим зробленим кроком робити наступний?

Звичайно, тільки так.

Тоді крокуємо разом далі. Інакше перший крок буде марним, якщо за ним не піде другий і так далі все нові й нові кроки.

1. Що таке об’єктно ориенитированное С++ програмування?

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

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

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

Отже, доводжу до Вас перша і найпоширеніша помилка: програмування на З++ — це об’єктно орієнтоване програмування. Це далеко не так.

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

Але тоді у якому ж випадку і за яких обставин можна, потрібно, вигідно і має сенс використовувати концепцію об’єктної орієнтованості?

Давайте в цьому розберемося не поспішаючи. Щоб добре розуміти, в чому ж тут справа, і де, як кажуть, «собака зарита»?

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

Елементарний вихід був знайдений в розділенні праці. На Обчислювальному центрі стали повсюдно вводити посаду оператора, якому доручалася робота з введення інформації в пам’ять ЕОМ. Тепер програміст міг більшу частину свого робочого часу проводити за свої робочим столом: думати і програмувати, але він повинен був ще й готувати завдання оператору. Це, звичайно, дещо підвищило ефективність його праці. Але не настільки різко. Програміст все ж волів сам виходити зі своїм завданням для налагодження на комп’ютер.

В той час апаратні засоби і, зокрема, пам’ять ЕОМ, були ще вельми обмежені. Комп’ютерні збої були дуже частим і вельми поширеним явищем.

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

— Fortran — для вирішення інженерних завдань;

— Cobol — для вирішення економічних завдань;

— Pascal — для навчання методів структурного програмування.

Були запропоновані нові методики в програмуванні, наприклад, структурне програмування. Це були видатні спроби осмислити проблеми організації праці програміста і Обчислювального центру в цілому. Вони дали свої позитивні результати.

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

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

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

Були введені поняття об’єктів, класів і інші нововведення, які і роблять З++ об’єктно-орієнтованим.

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

2. Процедурне і об’єктно орієнтоване програмування.

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

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

Наприклад, розглянемо задачу поповнення вкладу на ощадному рахунку в банку. При процедурному підході перше, що приходить на розум — це дробити поставлене завдання на більш дрібні самостійні частини — підзадачі. В даному випадку можна запропонувати задачі «Внести вклад» наступні завдання:

  • збереження першого вкладу;
  • розрахунок нового балансу:
    1. пошук попереднього балансу;
    2. додавання нової суми вкладу;
    3. запам’ятовування нового балансу. /LI>

Цей підхід наочно зображено нижче на наступному малюнку:

Уроки C++ програмування.

На цьому малюнку Ви бачите «дерево» підпрограм. Але із збільшенням складності завдання кількість «гілок» «дереві» зростає. І якщо розв’язувана задача занадто велика, то і кількість підзадач стає величезним і важкокерованими. У такому випадку навіть групі програмістів буде вельми складно осмислити всю задачу в цілому і стежити за її розвитком і реалізацією окремими програмістами.

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

В об’єктно орієнтованому програмуванні програміст йде від такого поділу задачі на дрібні частини. Він намагається побачити задачу як якусь «абстракцію» реального світу. Його цікавлять взаємодії між цими ідеалізованими «абстракціями» — об’єктами реального світу. Таким чином, він повинен, використовуючи свій досвід і знання, побачити ці «абстракції», розпізнати їх у своїй задачі. Давайте повернемося до нашого прикладу з сберкнижкой і вкладами. Які тут є реальні об’єкти?

Очевидно, що це рахунок в банку і ощадна книжка. Як вони взаємодіють? Коли проводиться перший внесок, то запис про нього вноситься в ощадну книжку. При повторних внески потрібно обчислювати новий баланс: сума вкладу має бути додана до вже наявної на ощадкнижці. Але ця операція додавання є невід’ємним властивістю самої ощадкнижки. Вам потрібно пред’явити нову підсумкову суму вкладу. Якщо зобразити це на малюнку, то все буде виглядати приблизно так:

Уроки C++ програмування.

Таким чином, при об’єктно орієнтованому підході виділені два взаємодіючих об’єкта: рахунок в ощадному банку (SavingsAccount) і ощадна книжка (TransactionRegister). Зверніть увагу на те, що при новому об’єктно орієнтованому підході рішення задачі наочно зображено вже не деревом, як це було перш, а деяким графом. На цьому малюнку видно, що проект задачі представлений у вигляді двох об’єктів. Цим об’єктам зіставлені певні властивості, і схема задачі стала значно простіше, ніж при процедурному підході, коли вся завдання расчленялась на безліч підзадач — підпрограм.

На цьому наш новий урок закінчено. На цьому на сьогодні все.

Рекомендована література:

Короткий опис статті: об’єктно орієнтоване програмування

Джерело: Уроки C++ програмування.
Урок 2: &quotШагаем далі. Об’єктно орієнтоване програмування С++.&quot
Проект: «Дистанційне навчання програмістів.
Інформатика, мови програмування».

Також ви можете прочитати