1 Теоретичні відомості
C++ - універсальна мова програмування високого рівня з підтримкою декількох парадигм програмування: об'єктно-орієнтованої, узагальненої та процедурної. Розроблена Б'ярном Страуструпом (англ. BjarneStroustrup) в AT&T Bell Laboratories (Мюррей-Хілл, Нью-Джерсі) у 1979 році та названа «Сі з класами». Страуструп перейменував мову у C++ у 1983 р. У 1990-х роках С++ стала однією з найуживаніших мов програмування загального призначення. У 1998 році ратифіковано міжнародний стандарт мови С++: ISO/IEC 14882 «StandardfortheC++ ProgrammingLanguage». Поточна версія цього стандарту — ISO/IEC 14882:2003.
Мова C++ з'явився на початку 80-х років. Засновник С++ прагну впозбавити себе й своїх друзів від програмування на асемблері,Сіабо різних інших мовах високого рівня. Очевидно, що найбільше C++ запозичив змови Сі, а також з безпосереднього його попередника мови BCPL. Ці запозичення забезпечили C++ потужними засобами низького рівня, що дозволяють вирішувати складні завдання системного програмування. Але що в першу чергу відрізняє C++ відСі- це різний ступінь уваги до типів і структур даних. Це пов'язано з появою понять класу, похідного класу й віртуальної функції,перейнятих у свою чергу змовиСимула67. Це дає в C++ більш ефективні можливості для контролю типів і забезпечуємо дульність програми[2].
На думку автора мови,розходження між ідеологією Сй C++полягає приблизно в наступному: програма на Свідображає“спосіб мислення” процесора, а C++ - спосіб мислення програміста.
Нововведеннями С++ порівняно з С є:
Підтримка об'єктно-орієнтованого програмування через класи;
підтримка узагальненого програмування через шаблони;
доповнення до стандартної бібліотеки;
додаткові типи даних;
обробка винятків;
простори імен;
вбудовані функції;
перевантаження операторів;
перевантаження імен функцій;
посилання і оператори управління вільно розподіленою пам'яттю.
Відповідаючи вимогам сучасного програмування, C++ наголошує на розробці нових типі вданих найбільше повно відповідним концепціям обраної області знань.
МоваС++ є засобом об'єктного програмування, новітньої методики проектування й реалізації програм. Головною метою творця мови доктора Б’єрна Страуструпа було оснащення мови С++ конструкціями, що дозволяють збільшити продуктивність праці програмістів і полегшити процес оволодіння великими програмними продуктами .Абстракція, реалізація, спадкування й поліморфізм не обхідними властивостями якими володіє мова С++, завдяки чому вона не тільки універсальна, як і мова С, але і є об'єктною мовою.
Переваги мови C++:
Швидкодія. Швидкість роботи програм на С++ практично не поступається програмам на С, хоча програмісти отримали в свої руки нові можливості і нові засоби.
Масштабованість. На мові C++ розробляють програми для самих різних платформ і систем.
Можливість роботи на низькому рівні з пам'яттю, адресами, портами. (Що, при необережному використанні, може легко перетворитися на недолік.)
Можливість створення узагальнених алгоритмів для різних типів даних, їх спеціалізація, і обчислення на етапі компіляції, з використанням шаблонів.
Підтримуються різні стилі та технології програмування, включаючи традиційне директивне програмування, ООП, узагальнене програмування, мета програмування (шаблони, макроси) [3].
Незважаючи на значні переваги C++, успадкувала багато проблем мови C:
Операція присвоювання позначається як =, а операція порівняння як ==. Їх легко сплутати, і така конструкція буде синтаксично правильною, але приведе до неправильної роботи програми, яку важко знайти. Особливо часто це відбувається в операторах if і while, наприклад, програміст може написати if (i=0) замість if (i==0).
Операції присвоювання (=), інкрементації (++), декрементації (--) та інші повертають значення. У поєднанні з великою кількістю операцій це дозволяє, але не зобов'язує, програміста створювати код, що важко читається. З іншого боку, один з основних принципів мов C і C++ — дозволяти програмістові писати в будь-якому стилі, а не нав'язувати «хороший» стиль. До того ж це іноді дозволяє компілятору створювати оптимальніший код.
Макроси (#define) є могутнім, але небезпечним засобом. У мові C++, на відміну від C, необхідність в небезпечних макросах з'являється значно рідше завдяки шаблонам і вбудованим функціям. Але в успадкованих стандартних С-бібліотеках багато потенційно небезпечних макросів.
Дехто вважає недоліком мови C++ відсутність системи збірки сміття. З іншого боку, в C++ є достатньо засобів (класи з конструкторами і деструкторами, стандартні шаблони, передача параметрів за посиланням), що дозволяють майже виключити використання небезпечних вказівників. Проте, відсутність вбудованої збірки сміття дозволяє користувачеві самому вибрати стратегію управління ресурсами. Крім того, збірка сміття серйозно уповільнює роботу програми, і це недолік там, де продуктивність є критично важливою.
Ключовим поняттям в С++ є клас. Клас - це тип, визначений користувачем. Класи забезпечують захист (закриття) даних, гарантовану ініціалізацію даних, не явне перетворення типів для типів, визначених користувачем, контрольоване користувачем керування пам'яттю. Опис класу містить опис даних, що вимагаються для подання об'єктів цього типу й набір операцій для роботи з подібними об'єктами . На відміну від традиційних структур Сй Паскаля , членами класу є не тільки дані, але й функції. Функції - члени класу мають привілейований доступ до даних усередині об'єктів цього класу й забезпечують інтерфейс між цими об'єктами й іншою програмою. При подальшій робот і зовсім не обов'язково пам'ятати про внутрішню структуру класу й механізм роботи убудованих функцій. У цьому змісті клас подібний до електричного приладу - мало хто знає про його пристрій, але всі знають, як ним користуватися.
Об’єктно-орієнтовне програмування – методологія, яка концентрується більше на зв'язках між об'єктами, ніж на деталях реалізації. Дані зв'язку зазвичай розвиваються по принципу дерев, при цьому нові типи об’єктів утворюються із вже існуючих . Об’єктно - орієнтоване програмування (ООП), основане на трьох основних концепціях, які називаються: інкапсуляція, поліморфізм і наслідування.
Інкапсуляція
Суть інкапсуляції полягає в тому, що конструкція об'єкта звичайно захована від очей користувача. Інкапсуляція дозволяє користувачам об'єкта ігнорувати подробиці реалізації, що знижує складність систем. Те, що кінцеві користувачі об'єкта не мають відносини до його реалізації, дуже вигідно, зокрема, при роботі над великомасштабними програмними проектами і бібліотеками .
Ієрархія
При аналізі суті завдання часто буває, що об'єкти мають очевидно схожі структури чи функціональність. Якщо об'єкт чи клас має спільні властивості з іншим об’єктом або класом, то ми маємо справу з простим наслідуванням. Якщо ж у функціональності чи структурі класу присутні риси декількох класів, то має місце випадок множинного наслідування.
Наслідування часто пояснюють як можливість установити відношення "приналежності" між об'єктами, класами і типами даних. Без механізму спадкування вам доведеться постійно повторюватися.
Важливим етапом при розробці ієрархії класів, це врахування ідентифікаторів доступу. По замовчуванню усі поля та методи є закритими, тобто private. До закритих полів ми маємо лише доступ з методів поточного класу. При спробі здійснювати доступ до закритих полів та методів класу, буде отримана помилка компіляції. Якщо нам потрібно здійснити доступ до методів чи полів потрібно оголосити ключове слово public.
Проте згідно стратегії використання класів поля потрібно залишати закритими. Завдяки цьому забезпечується інкапсуляція даних всередині класу. Доступ потрібно відкривати лише до методів класу, забезпечуючи доступ до закритих полів, тобто для встановлення певних значень для закритих полів. Можливий варіант оголошення полів та методів protected, внаслідок цього доступ до відповідних членів буде можливих в самому класі та класі нащадку.
Проте спадковість досить сильно конкурує з обмеженням доступу, адже спадковість вимагає побудови складних класів на базі простих для чого структура базових класів має бути відкритою, проте це суперечить теорії обмеження доступу , адже за її поняттями обмеження доступу захищає деякі елементи від стороннього втручання[4].
Поліморфізм
Поліморфізм – це такий елемент теорії типізації, який дозволяє використовувати одне ім’я для позначення різних дій, що виконується об’єктами різних класів, але мають спільний базовий клас. Поліморфізм дозволяє позначати різні дії за допомогою однаких символів. Це означає, що кожен об’єкт може мати свою реалізацію деякої функції, яку він успадковує від базового класу.
Завдяки мовам високого рівня з'явилася можливість програмувати, використовуючи логічні конструкції з слів і пропозицій, наприклад Let I = 100. Ці команди переводилися в машинну мову інтерпретаторами і компіляторами. Інтерпретатор в міру читання програми послідовно перетворює її команди (або код) у команди машинної мови. Компілятор ж цілком переводить програмний код (лістинг програми) в деяку проміжну форму - об'єктний файл. Цей етап називається компіляцією. Потім компілятор викликає програму компонування, яка перетворює об'єктний файл у виконуваний файл програми. З інтерпретатором працювати простіше, так як команди програми виконуються в тій послідовності, в якій вони записані, що полегшує контроль за виконанням програми. Компілятор ж вносить додаткові етапи компіляції та компонування програми, в результаті чого виходить виконуваний файл, недоступний для аналізу і редагування. Однак скомпільовані програми виконуються швидше, так як переклад команд програми на машинну мову вже стався на етапі компіляції.
Ще одна перевага компільованих мов програмування, таких як C + +, полягає в тому, що отримані програми можуть виконуватися на комп'ютерах без компілятора. При роботі ж з інтерпретуються мовами для виконання готової програми потрібно обов'язково мати відповідну програму-інтерпретатор.
У деяких мовах (наприклад, Visual Basic) роль інтерпретатора виконує динамічна бібліотека. Інтерпретатором мови Java є віртуальна машина (Virtual Machine, або VM). В якості віртуальної машини зазвичай використовується браузер (такий як Internet Explorer або Netscape)[5].
Протягом багатьох років основною перевагою програми вважалася її стислість і швидкість виконання. Програму прагнули зробити якомога менше, оскільки пам'ять коштувала дуже недешево, та й зацікавленість у високій швидкості виконання пояснювалася високою вартістю процесорного часу. Але в міру того як комп'ютери ставали все портативні, дешевше (особливо відчутно дешевшала пам'ять) і швидше, пріоритети змінювалися. Сьогодні вартість робочого часу програміста набагато перевищує вартість більшості комп'ютерів, що використовуються в бізнесі. Зараз великим попитом користуються професійно написані і легко експлуатовані програми. Простота експлуатації означає, що при зміні вимог, пов'язаних з вирішенням конкретних завдань, програма легко перенастроюється без великих додаткових витрат [6].
