Материал: лекция_C++ (2)_у

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Об'єктно-орієнтоване програмування

ЛЕКЦІЯ 2.

СУЧАСНІ ІНТЕГРОВАНІ СЕРЕДОВИЩА. ВБУДОВАНИЙ ВІДЛАДЧИК.

БІБЛІОТЕКА ПРОГРАМ І КЛАСІВ

План

1. Сучасні інтегровані середовища.

2. Вбудований відладчик.

3. Библиотеки программ и классов.

4. Структурне програмування.

1. Сучасні інтегровані середовища

Інтегроване середовище (IDE – Integrated Development Environment) є деяким єдиним комплексом для розробки програм. Вона дозволяє легко створювати, відкривати, переглядати, редагувати, зберігати, компілювати і відлагоджувати будь-які програми. Управляє роботою IDE набір команд меню. Комплекс сучасних IDE є великим набором інструментальних засобів для побудови програм. У цьому комплексі об'єднуються транслятори, система управління роботою компіляцій, редактори, редактори ресурсів, стандартні бібліотеки, довідковий матеріал, приклади програм, система відладки програм і система управління процесом відладки, які демонструють можливості використання операторів мови. Інтегроване середовище містить опції для свого налаштування, яке відповідає вимогам користувача. Детальний опис IDE міститься в документації. Виклад всіх можливостей IDE зажадав би об'ємного посібника. І вивчити всі ці можливості IDE – складне завдання із-за великого об'єму інформації. Але принцип роботи з IDE простий, і він присутній у всіх інформаційних системах. Всі можливості управління і налаштування IDE поміщені в командах меню і їх опціях. Багато хто з можливостей IDE має автоматичні значення за умовчанням, які дозволяють середньостатистичному користувачеві легко готувати програму і запускати її. Потужні можливості IDE потрібні при розробці великих інформаційних систем. Для учбової мети немає особливої необхідності знати на перших кроках всі складні можливості IDE. Оскільки матеріал курсу освоюється не на реальних завданнях, а на невеликих за об'ємом завданнях середньої складності, то для успішного освоєння курсу треба, аби користувач умів:

  1. завантажити (запустити) IDE;

  2. користуватися редактором IDE;

  3. користуватися файловою системою IDE;

  4. користуватися системою допомоги і підказок IDE;

  5. користуватися системою компіляції і запуску програм;

  6. виходити з IDE.

Тут ми спеціально не ідентифікуємо імена команд меню, які виконують перераховані завдання. Кожне інтегроване середовище (Borland C/C++, Visual C++, Visual C++ 6, Builder C++, Delphi) ці завдання виконує своїм набором команд меню. Команди з будь-якої вищепереліченою IDE легко і швидко демонструються на комп'ютері на практичних заняттях. У міру зростання складності програм, що складаються, поступово освоюються складніші можливості конкретного інтегрованого середовища. При розробці великих програмних систем обійтися без знань глибших можливостей IDE не можна. Слабке знання IDE може привести до невиправданої трудомісткості при проектуванні програм і недоліків кінцевого продукту. Але подібні системи краще використовувати і вивчати при проектуванні великих програм. Необхідність в IDE виникла якраз при розробці великих і дуже великих програм. Тому дуже важко демонструвати можливості інтегрованого середовища на учбових прикладах. Трудність не в демонстрації, а в неефективності і громіздкості використання потужного інструментарію IDE для простих модельних завдань. Виходить стрілянина з гармати по горобцеві. І в цьому випадку важко мотивувати необхідність вивчення IDE там, де щось можна реалізувати простіше. Крім того, при розгляді модельних завдань програмування багато можливостей інтегрованого середовища просто стають незатребуваними. Тут виникає ще один методичний аспект. Детальне вивчення IDE насправді вимагає повнокровного учбового курсу зі своїм набором модельних завдань, вміст яких направлений не на складання програм для обробки структур даних, а на демонстрацію можливостей IDE. Тому (на думку авторів) найбільш ефективне вивчення інтегрованого середовища зводиться до демонстрації деяких принципових можливостей IDE на простих прикладах, залишаючи студентам право, в міру необхідності, освоювати глибші можливості самостійно. Відмітимо, що поняття вбудований відладчик, генератори коди / застосувань фактично є елементами, які формують, разом з іншими можливостями, структуру IDE.

2. Вбудований відладчик

Відладка програми, тобто усунення можливих помилок або в алгоритмі рішення задачі, або в його реалізації, є дуже важливим і трудомістким процесом. Як правило, пошук помилок в програмі відбувається на безлічі простих тестів з відомими рішеннями. Залишаємо за дужками складне питання про достатність і коректність пропонованих тестів. У завданнях, на яких перевіряється програма, як правило, відомий не лише результат, але і всі проміжні значення змінних, які беруть участь в алгоритмі рішення. У сучасному інтегрованому середовищі присутній відладчик, який призначений для тестування програми. Відладчик – це програма, яка може:

  1. виконувати іншу програму по одній команді;

  2. зупиняти виконувану програму на заданій команді, яка називається точкою останову (або контрольною крапкою);

  3. переглядати значення змінних в пам'яті.

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

встановити курсор на ім'я змінної;

натискувати Ctrl+F7;

натискувати Enter.

Після приміщення змінної у вікно треба перейти до покрокового виконання програми. Покрокове виконання програми відбувається при натисненні клавіші F7 за умови, що курсор знаходиться у вікні робочого поля мови C++. У вікно спостереження можна помістити декілька змінних. Покрокове виконання програми за бажання можна припинити. Для цього треба натискувати Ctrl+F9 і тим самим перейти в робочий режим, тобто в режим безперервного виконання директив.

Якщо програма велика і містить багато рядків, то покрокове виконання програми трудомістке за часом. В цьому випадку можна використовувати точки останову. Аби задати точку останову в інтегрованому середовищі Borland треба:

  1. встановити курсор на рядок останову;

  2. натискувати клавішу F2 або в команді меню DEBUG вибрати варіант Breakpoints.

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

3. Бібліотеки програм і класів

Складаючи програми, ми постійно використовуватимемо деякі функції. Ці функції (наприклад, clrscr(), getch(), cout, printf() і т. д.) входять до складу стандартної бібліотеки. Сучасні завдання настільки складні, що з ними неможливо впоратися, якщо не залучати додаткові

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

У C++ бібліотека функцій містить стандартну бібліотеку шаблонів (STL). Бібліотека шаблонів – це набір класів і функцій загального призначення. За допомогою цього набору можна реалізовувати алгоритми і структури даних, які часто використовуються в процесі обробки інформації. Бібліотека шаблонів складається з трьох основних елементів – контейнерів, алгоритмів і ітераторів.

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

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

Ітератори – це об'єкти, які здійснюють доступ до елементів контейнера. Фактично ітератори грають роль покажчиків. Над ними можна виконувати операції інкремента (++) і декремента (--).

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

Стандартна бібліотека має бути в кожній реалізації мови, аби всі програмісти могли її використовувати. Стандартна бібліотека C++:

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

Надає інформацію про залежні від реалізації аспекти мови (наприклад, про діапазон представлення змінних).

Надає функції (наприклад, sin(), log() і т. д.), які не можуть бути написані оптимально для всіх систем на мові C++.

Надає нетривіальні засоби, такі як потоки ввода/ виводу.

Надає засоби для розширення можливостей, такі як, підтримка нових типів даних. Забезпечує ввод/вывод для визначуваних їм нових типів в стилі ввода/вывода для вбудованих типів.

Служить загальним фундаментом для інших бібліотек.

Пропоновані бібліотекою C++ засобу повинні задовольняти наступним вимогам:

  1. Бути доступними для кожного користувача, у тому числі для творців інших бібліотек.

  2. Бути досить ефективними.

  3. Бути незалежними від алгоритмів, які використовуються при програмуванні.

  4. Бути зручними і досить безпечними в більшості ситуацій.

  5. Бути завершеними в тому, що роблять.

  6. Бути безпечними за умовчанням з точки зору типів.

  7. Добре доповнювати вбудованих типів і операції.

  8. Підтримувати загальноприйняті стилі програмування.

  9. Бути здібними до розширення, аби працювати з типами, яких визначає користувач.

Засоби стандартної бібліотеки розподілені по файлах, а вони згруповані по виконуваних функціях.

4. Структурне програмування

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

Ідеї структурного програмування з'явилися на початку 70-років в компанії IBM, в їх розробці брали участь відомі учені Э. Дейкстра, Х. Мілс, Э. Кнут, С. Хоор.

Структурне програмування засноване на модульній структурі програмного продукту і типових структурах алгоритмів обробки даних різних програмних модулів, що управляють.

Типи структур, що управляють:

– послідовність;

– альтернатива (умова вибору);

– цикл.

Поширено дві методики (стратегії) розробки програм, що відносяться до структурного програмування:

– програмування зверху «вниз»;

– програмування «від низу до верху».

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

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

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

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

 Програмування «від низу до верху», або висхідне програмування – це методика розробки програм, що починається з розробки підпрограм (процедур, функцій), у той час коли опрацювання загальної схеми не закінчилося.

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

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

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

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

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

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

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

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

 Достоїнства структурного програмування:

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

– підвищується ефективність програм (структуризація програми дозволяє легко знаходити і коректувати помилки, а окремі підпрограми можна переробляти (модифікувати) незалежно від інших);

– зменшується час і вартість програмної розробки;

– покращується читабельність програм.

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

– програмування повинне здійснюватися зверху вниз;

– весь проект має бути розбитий на модулі (підпрограми) з одним входом і одним виходом;

– підпрограма повинна допускати лише три основні структури – послідовне виконання, галуження (if, case) і повторення (for, while, repeat).

– недопустимий оператор передачі управління в будь-яку крапку програми (goto);

– документація повинна створюватися одночасно з програмуванням у вигляді коментарів до програми.

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

Контрольні питання:

  1. Що таке інтегроване середовище програмування?

  2. Основні функції відладчика програм.

  3. Вміст бібліотеки функцій в C++ .

  4. Типи структур, що управляють.

  5. Стратегії побудова програмного забезпечення.

  6. Принципи структурного рограммирования.

Література:

  1. Березін Б.І., Березін С.Б. Початковий курс С і C++. — М.: ДІАЛОГ-МІФІ, 1996

  2. Ван Тассел Д. Стиль, розробка, ефективність, відладка і випробування програм. — М.: Світ, 1981.

  3. Подбельський в.в. Мова Си++. — М.: Фінанси і статистика, 1996.

Паппас До., Мюррей У. Программірованіє на С і C++. — Київ: «Ірина»; BHV, 2000.

8