Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Програмне середовище

 

Від складання програмістом до виконання комп'ютером програма проходить досить тривалий шлях спеціальними службовими програмами, що складають систему автоматизації програмування. З часом слово “автоматизація” випало із наведеного словосполучення, в результаті чого воно перетворилося на систему програмування. Система програмування складається з кількох компонент, а саме: препроцесора (preprocessor), компілятора (compiler), компонувальника (linker), налагоджувача (debugger), об'єднаних спільним інтерфейсом у так зване універсальне середовище розробки програм. Прикладом можуть служити система програмування Visual

C++ і діалогове середовище розробки програм Developer Studio.

 

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

 

Одночасне використання багатьох файлів з текстами різних частин програми — роздільна компіляція — одне з найбільших досягнень систем програмування. Завдяки йому ми ділимо програму на файли, які називаються одиницями трансляції (translation

unit), групуючи у одному файлі тісно зв'язані одну з одною частини програми. В такий спосіб великі за розмірами програми діляться на частини, якими легше управляти.

 

Програмування — це діяльність, яка вимагає великої організованості. Тому при складанні програм дотримуються певних правил доброго тону, одне з яких полягає в розділенні визначень і обчислень між файлами двох типів: файлів заголовків (header) і файлів реалізації. Файли заголовків обробляються препроцесором, файли реалізації готуються препроцесором для подальшої обробки компілятором. Тому їх звичайно називають початковими файлами (source

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

 

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

 

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

. До файлу root.cpp ми запишемо текст функції root. Програмний код для випробування цієї функції ми помістимо у файл main.cpp

. Проект, заповнений вхідними файлами, зображено на малюнку

 

 

Пам'ятаємо, що компіляція цих двох файлів виконуватиметься нарізно. Виникає питання, звідки компілятор зрозуміє зміст ідентифікатора root

? В принципі можливі два рішення. Перше — це помістити сам файл root.cpp до файлу main.cpp

, де він використовується. Це було б не дуже вдале рішення, бо незрозуміло, як поступати у випадку одночасного використання у багатьох файлах. Друге рішення, саме воно прийняте в системах програмування, полягає у створенні допоміжного заголовного файлу root.h

, який міститиме не всю інформацію про функцію root, а лише ту, яка необхідна для обробки її виклику компілятором, так звану сигтатуру функції:

 

//root.h

double root (double x, double eps);

 

 

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

яких починається символом #. Зокрема файл main.cpp міститиме директиву #include

?root.h?, виконання якої препроцесором полягає у включенні тексту з файлу

заголовку root.h до початкового файлу main.cpp. Наведемо його текст

 

//main.cpp

//Спочатку системні заголовки

#include "stdafx.h"

#include <iostream>

#include <сmath>

using namespace std;

 

#include "root.h"

int main()

{

cout << "The square root of 2 calculated with"<<endl

<<" a standart fuction is "<<sqrt(2.0)<<endl;

cout <<" your function is "<< root(2.0,0.000001)<<endl;

return 0;

}

 

 

Як бачимо, початковий файл містить ще декілька файлів, що приєднаються препроцесором.

Це службові файли (вони не зображені на малюнку). Файл stdafx.h генерується

системою програмування Visual C ++ (ми не будемо більше наводити цю директиву

в наступних прикладах). Два інші описують стандартні бібліотеки: бібліотеку

вводу і виводу iostream (вона потрібна для обслуговування вихідного потоку

cout) та бібліотеку математичних функцій cm ath, звідки береться, наприклад,

функція обчислення квадратного кореня sqrt. Директива using namespace std

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

через cout позначено стандартний вихідний потік.

 

Відповідного доповнення вимагатиме також файл root.cpp, в якому вжито стандартну

функцію fabs обчислення абсолютної величини дійсного числа

 

//root.cpp

#include <сmath>

double root (double x, double eps)

{

double s=0.5*x;

double t;

do

{

t=s;

s=(s+x/s)*0.5;

}

while ((fabs(s-t)/s)>eps);

return s;

};

 

Тепер коротко про призначення інших компонент системи програмування. Після

того, що будуть проінтепретовані команди препроцесора, файли повних текстів

потраплять на вхід компілятора, який збере з них так звані об'єктні коди. Компілятор

— центральна компонента системи програмування, мета якого полягає у створенні

цільового (англійською мовою object) коду. Об'єктний код ще не призначено

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

на кожен початковий файл. Об'єктні коди містять взаємні посилання один на одного,

а також посилання на бібліотеки. Об'єктні коди поступають на вхід компонувальника.

Його завдання зібрати їх разом, доповнити необхідними компонентами бібліотек

та перетворити на виконавчу програму (executable program, exe

- file).

 

На замовлення компілятор може доповнити об'єктні коди спеціальними командами

спостереження за ходом виконання програми. Тоді виконанням програми займеться

налагоджувач, який дозволить прослідкувати за перебігом виконання: призупинити

виконання програми, проконтролювати значення змінних, тощо.

 

 

<== предыдущая лекция | следующая лекция ==>
Об'єктно-орієнтовне програмування | Арифметичні типи даних: операції, вирази, зведення типів у виразах
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 1713; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.019 сек.