Лекція 1 (Вступ)
.docxЛекція 1. ВСТУП У ТЕХНОЛОГІЮ ПРОГРАМУВАННЯ
Основні поняття
Комп’ютерна програма – це:
– [Дейтел] набір інструкцій, за допомогою яких комп’ютер обробляє дані та які змушують його виконувати певні дії в заздалегідь встановленому порядку;
-
[wikipedia] це логічно впорядкована послідовність команд, необхідних для вирішення задачі.
Програмування – це:
-
[wikipedia (uk, ru)] процес створення комп’ютерних програм, тобто розробка програмного забезпечення;
-
[en.wikipedia] процес проектування, написання, тестування, відлагодження та супроводження вихідного коду комп’ютерних програм.
Програміст – спеціаліст, що займається написанням програм для ЕОМ [ru.wikipedia, Толковый словарь по вычислительным системам (1989)]
Мова програмування – це:
-
формальна знакова система для написання комп’ютерних програм. Мову програмування визначає набір лексичних, синтаксичних і семантичних правил, що задають зовнішній вигляд програми і дії, які виконує виконавець (комп'ютер) під її управлінням [ru.wikipedia].
Категорії мов програмування:
І. [Дейтел (2002), с. 43]:
-
Машинні мови.
-
Мови асемблера.
-
Мови високого рівня (Pascal, С, С++, Java, C#, Cobol, Fortran, Python, Visual Basic).
ІІ. [Макконнелл (2005), с. 59]:
-
Мови низького рівня (Асемблер).
-
Мови середнього рівня (C).
-
Мови високого рівня (С++, Java, C#, Cobol, Fortran, Python, Visual Basic).
ІІІ. [en.wikipedia]:
-
Мови низького рівня – мови програмування, що не забезпечують або забезпечують малу абстракцію від структури системи команд комп’ютера. Вони мають справу з регістрами, адресами пам’яті та стеками викликів. Виділяють:
-
Мова першого покоління – машинний код
-
Мова другого покоління – мова асемблера (асемблер).
-
Мови високого рівня – мови програмування з сильною абстракцією від деталей комп’ютера. Мови високого рівня мають справу зі змінними, масивами, об’єктами, булевими виразами, підпрограмами та функціями, циклами, потоками та іншими абстрактними поняттями комп’ютерної науки, віддаючи перевагу зручності використання над оптимальною ефективністю програми. До них відносять Pascal, С, С++, Java, C#, Cobol, Fortran, Python, Visual Basic.
-
Мови дуже високого рівня – мови програмування з дуже високим рівнем абстракції. Ці мови обмежені до дуже специфічних застосувань, цілей чи типів завдань.
Технології написання програм
Зі зміною вимог до програмування змінювались не тільки мови, а й технології написання програм.
Процедурне програмування. Програми розглядались як послідовність процедур, що виконують деякі дії над даними. Процедури або функції являють собою набір певних команд, виконуваних одна за одною. Дані були відділені від процедур, і головним у програмуванні було прослідкувати, яка функція яку викликає і які дані при цьому змінюються. Тобто, при процедурному програмуванні цілковите відділення структур даних від функцій, які ними маніпулюють. Щоб внести ясність у цю плутанину, були розроблені принципи структурного програмування.
Структурне програмування. Основна його ідея відповідає принципу "розділяй і володарюй". Комп’ютерну програму можна було представити як сукупність набору задач. Кожна складна задача повинна була бути розділена на декілька мілких складових. Це ділення слід було продовжувати доти, поки задачі не стануть достатньо простими для розуміння.
Структурне програмування залишається досить успішним способом розв’язання складних задач. Але наприкінці 1980-х років надто очевидними стали його недоліки.
По-перше, не було реалізовано природне бажання думати про дані (записи про студентів) і дії над ними (редагування, сортування, …) як про єдине ціле.
По-друге, програмісти зрозуміли, що вони постійно реалізують нові рішення старих проблем ("винайдення колеса"). Бажання мати можливість багаторазового використання рутинних блоків, що повторюються у різних програмах, цілком природне. Аналог: конструктору кожен раз треба для збирання радіо винаходити діоди і тріоди, а не використовувати стандартні. Розробники програм таких стандартних елементів не мали.
Об’єктно-орієнтоване програмування. ООП надає технологію керування елементами різної складності, створюючи умови для багаторазового використання програмних компонентів і об’єднання даних з методами їх обробки. Сутність ООП у тому, що дані і процедури їх обробки являють єдиний об’єкт, тобто самостійний елемент, який у чомусь ідентичний іншим, але в той же час відрізняється деякими унікальними властивостями.
Складові мови програмування
У тексті на будь-якій природній мові можна виділити чотири основних елементи: символи, слова, словосполучення і речення.
Подібні елементи містить і алгоритмічна мова, але слова називають лексемами (елементарними конструкціями), словосполучення - виразами, а речення - операторами. Лексеми утворюються із символів, вирази - з лексем і символів, а оператори - з символів, виразів і лексем (рис. 1.1).
Алфавіт мови (його символи) - це основні неподільні знаки, за допомогою яких пишуться всі тексти мовою.
Лексема (елементарна конструкція) - мінімальна одиниця мови, має самостійний сенс.
Вираз задає правило обчислення деякого значення.
Оператор задає закінчене опис деякої дії.
Для опису складної дії потрібно послідовність операторів. Оператори можуть бути об'єднані в складений оператор, або блок. У цьому випадку вони розглядаються як один оператор.
Оператори бувають виконувані і невиконувані. Виконувані оператори задають дії над даними. Невиконувані оператори служать для опису даних, тому їх часто називають операторами опису або просто описами.
Кожен елемент мови визначається синтаксисом і семантикою. Синтаксичні визначення встановлюють правила побудови елементів мови, а семантика визначає їх зміст і правила використання.
Етапи створення програми
Об'єднана єдиним алгоритмом сукупність описів і операторів утворює програму на алгоритмічній мові. Для того, щоб виконати програму, потрібно перевести її на мову, зрозумілу процесору - в машинні коди.
Етапи процесу підготовки програми на С [Дейтел (2002), с. 51]:
-
Редагування.
-
Препроцесорна обробка.
-
Компіляція.
-
Компонування.
-
Завантаження.
-
Виконання.
Рис. 1.2 ілюструє ці етапи для мови С ++.
Редагування. Спочатку програму необхідно підготувати за допомогою одного з текстових редакторів. Це вихідний (початковий) код програми (.с, .сp, .cpp). Файл з вихідним текстом – це ще не програма, її не можна запустити і виконати.
Препроцесорна обробка. Препроцесор директиви, містяться в її тексті (наприклад, включення в текст так званих заготовочних файлів - текстових файлів, в яких містяться описи використовуваних в програмі елементів).
Компіляція. Одержаний повний текст програми надходить на вхід компілятора, який виділяє лексеми, а потім на основі граматики мови розпізнає вирази і оператори, побудовані з цих лексем. При цьому компілятор виявляє синтаксичні помилки і в разі їх відсутності будує об'єктний модуль.
Компілятор – програма, що перетворює текст програми на мові високого рівня на еквівалентну програму на машинній мові.
Транслятор – програма, що перетворює програму з однієї мови прогр-ня на іншу.
Інтерпретатор – програма, що виконує покомандну обробку та виконання вихідної програми (без переведення на машинну мову).
Компонування. На цьому етапі формується виконуваний модуль програми, підключаючи до об'єктному модулю інші об'єктні модулі, в тому числі ті, що містять функції бібліотек, звернення до яких міститься в будь-якій програмі (напр., для здійснення виведення на екран). Якщо програма складається з декількох вихідних файлів, вони компілюються окремо і об'єднуються на етапі компонування.
Компонувач (редактор зв'язків, лінкер - від англ. Link editor, англ. linker) – це програма, яка виконує компонування – приймає на вхід один або кілька об'єктних модулів і збирає у виконуваний модуль.
Бібліотека в програмуванні – набір підпрограм і/або класів (об’єктів), що використовуються для розробки програмного забезпечення. В деяких мовах програмування те саме, що модуль, в деяких – декілька модулів. Кожна бібліотека, зазвичай має заголовний файл, у якому містяться прототипи функцій, присутніх у бібліотеці, а також оголошення спеціальних типів даних і макросимволів, що використовують ці функції [uk.wikipedia.org/wiki/ C_(мова_програмування)].
З точки зору ОС та прикладного ПЗ бібліотеки поділяються на статичні та динамічні [ru.wikipedia].
Статичні бібліотеки можуть бути у вигляді початкового тексту, що підключається програмістом до своєї програми на етапі написання, або у вигляді об'єктних файлів, що приєднуються (лінкуються) до виконуваної програми на етапі компіляції (у Microsoft Windows такі файли мають розширення .lib, у UNIX-подібніх ОС — зазвичай .a). В результаті програма включає всі необхідні функції, що робить її автономною, але збільшує розмір.
Динамічні бібліотеки називаються розподілюваними бібліотеками (англ. shared library), або бібліотеками, що динамічно підключаються (англ. Dynamic Link Library, DLL). Це окремі файли, що надають програмі набір використовуваних функцій для завантажування на етапі виконання при зверненні програми до ОС із заявкою на виконання функції з бібліотеки. Якщо необхідна бібліотека вже завантажена в оперативну пам'ять, програма використуватиме завантажену копію бібліотеки. Такий підхід дозволяє зекономити час і пам'ять, оскільки декілька програм використовують одну копію бібліотеки, вже завантажену в пам'ять.
Динамічні бібліотеки зберігаються зазвичай у визначеному місці й мають стандартне розширення. Наприклад, файли .library у логічному томі Libs: у AmigaOS; у Microsoft Windows і OS/2 файли бібліотек загального користування мають розширення .dll; у UNIX-подібних ОС — зазвичай .so; у MacOS — .dylib.
Виконуваний модуль має розширення. ехе і запускається на виконання звичайним чином.
Література
-
Х.М. Дейтел, П.Дж. Дейтел. Как программировать на C++: Пятое издание. Пер. с англ. — М.: ООО «Бином-Пресс», 2008 г. — 1456 с: ил. ISBN: 978-5-9518-0224-8.