ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 10.09.2024
Просмотров: 13
Скачиваний: 0
Об'єктно-орієнтоване програмування
Тема 1: загальні принципи мов програмування. Препроцесор і макрообробка. Етапи вирішення завдань на комп'ютері
План
1. Загальні принципи побудови мов програмування.
2. Препроцесор і макрообробка.
3. Етапи вирішення завдань на комп'ютері.
1. Загальні принципи побудови мов програмування
При проектуванні мови програмування необхідні критерії його оцінки. Мова дуже складна система, і виробити єдині критерії, напевно, неможливо. Цей факт підтверджується наявністю великого числа мов програмування. Розглянемо характеристики, які, на думку деяких провідних фахівців, мають бути присутніми у всіх мовах (Роберт В. Себеста).
Одним з важливих критеріїв є читаність програм, які написані на цій мові. Нагадаємо, що машинний код і мова Асемблер не задовольняють цьому критерію. Програми, які легко зрозуміти, легше в експлуатації. Тут треба звернути увагу, для вирішення яких завдань розроблялася та або інша мова. Якщо мова використовується для вирішення завдань, на які він не був націлений, то програми можуть виявитися важкими для розуміння. Вочевидь, чим ближче синтаксис мови до природних, вживаних в реальному житті конструкцій, тим більше зрозумілих стає код програми.
Простота – найважливіший критерій мови. Мова, що містить багато конструкцій, вивчити складно. Різні програмісти можуть користуватися різними конструкціями, що може привести до взаємного нерозуміння розроблених програм.
Ортогональность – можливість за допомогою невеликого числа базових конструкцій і обмеженим числом способів виразити структури даної мови. Ортогональность мови пов'язана з простотою. Відсутність ортогональности при використанні різних структур наводить до збільшення способів організації елементів програми майже при однакових ситуаціях. Ортогональность дозволяє вирішити важке завдання, використовуючи невеликий набір елементарних конструкцій.
Синтаксис мови робить вплив на простоту програми і її читаність. Для мови важливими є правила формування імен конструкцій, які використовуються в мові.
Велике значення мають ключові слова, за допомогою яких формуються конструкції мови, що управляють. Чим ближче по сенсу ключові слова до прийнятої термінології, яка реально використовується при рішенні задачі, тим програма зрозуміліша і читана.
Форма і сенс директив мають бути зв'язана між собою. Особливо це важливо для розуміння мови на першому етапі її вивчення.
Підтримка абстракцій є важливою характеристикою на сучасному етапі розвитку мов програмування. Абстракція дозволяє використовувати складні структури, не вникаючи в деталізацію формування цих структур. Підтримка абстракції впливає на легкість використання мови.
Програма, складена на мові програмування, має бути надійною. На надійність програми впливають:
-
обробка виняткових ситуацій
-
перевірка типів
-
поєднання імен
-
легкість читання і експлуатації.
Надалі розглянемо ці положення детальніше при вивченні конкретної мови програмування.
Вартість мови програмування залежить від багатьох його характеристик. У вартість мови входять витрати:
-
на навчання програміста
-
створення програми
-
компіляцію програми
-
виконання програми
-
придбання мови
-
низьку надійність
-
експлуатацію програми (внесення виправлень, модифікація, супровід програмного забезпечення).
Отже, для простоти уявлення і читаності алгоритмів, які повинні виконуватися на комп'ютері, застосовуються мови програмування (МП). Програма є алгоритмом рішення деякої задачі. Вона перетворює деяку початкову інформацію. Ця початкова інформація характеризується різними типами даних (числами, символами, рядкам і складнішими структурами). Алгоритм визначає обчислювальні операції, за допомогою яких перетворюється інформація. МП повинні містити угоди про типи інформації, функціях і операторах, за допомогою яких відбувається перетворення даних, і бути влаштованими так, що алгоритм, сформульований у вигляді програми, виконується на комп'ютері. І хоча всі мови націлені на вирішення однакових завдань, проте багато хто з них розрізняється по своїх концепціях.
МП мають схожість з природними мовами і математичними формулами. За допомогою мов встановлюється спосіб запису програм. Одній з проблем при описі мови є те, що користувачі мови абсолютно різні люди. А успіх мови залежить від ясності його опису. Розробники мов програмування повинні вміти визначати спосіб утворення виразів, директив і програмних конструкцій мови. Вивчення мов може бути розділене на дослідження синтаксису і семантики.
Синтаксис мови – це форма, семантика – сенс його директив, виразів, програмних конструкцій.
Отже, зовнішня форма програм на МП встановлюється за допомогою синтаксису мови, яка визначає формальну мову. Синтаксис описується за допомогою певних правил або формул, які задають безліч пропозицій. Знання синтаксичних правил дозволяє встановити, чи належить деяка написана послідовність слів пропозиціям даної мови. Крім того, ці правила визначають структуру пропозицій мови, які дозволяють встановити їх сенс (семантику). Отже, визначення, пов'язані із структурою, слід розглядати ще і як засіб розпізнавання сенсу (або засоби визначення семантики мови [4]). Значення і спосіб дії програми на якій-небудь мові уточнюються шляхом завдання семантики, тобто встановленням сенсу значень мовних елементів. Отже, синтаксис і семантика мови визначають його структуру.
Синтаксис мови визначається над деяким безліччю елементів, які називаються символами. Він задає коректну послідовність символів, яку можна використовувати в програмі. Існує форма запису для формального опису синтаксису мов програмування. Цю форму запису незалежно один від одного запропонували Джон Бекус і Ноам Хомськи. Формалізм, який використовується при визначенні мови, його синтаксису, називається бэкус-нуровой формою (БНФ). Форма БНФ є способом опису синтаксису. Існує ще одна форма опису синтаксису мови – синтаксична діаграма. Є правила побудови синтаксичної діаграми. Використовуючи ці правила, можна будувати синтаксичну діаграму будь-якої конструкції мови. Це, у свою чергу, полегшує проведення синтаксичного аналізу конструкцій. БНФ і синтаксичні діаграми призначені для побудови програм граматичного розбору синтаксичних структур МП. Для опису семантики вибирають математичну форму опису, тобто математичним об'єктам зіставляють конструкції мови.
Для того, щоб програму, написану на якій-небудь мові, комп'ютер виконав, необхідно перекладати її мовою відповідної машини. Процес перекладу програми на машинну мову називається компіляцією. Роль компіляторів виконують транслятори, які є спеціальними програмами, здатними аналізувати текст програм і генерувати машинний код. Комп'ютер виконує код програми на машинній мові і видає результат обробки інформації, згідно реалізованому алгоритму. Відмітимо, що компіляція не єдиний метод реалізації мови, але більшість комерційних реалізацій виконуються за допомогою компілятора.
2. Препроцесор і макрообробка
Препроцесор – інструмент мови C++, за допомогою якої відбувається обробка тексту програми перед компіляцією (трансляцією). Директиви (оператори) препроцесора починаються з символу #. При кожному запуску компілятора спочатку запускається препроцесор, який знаходить інструкції, що починаються символом #. Ці інструкції змінюють текст вихідної програми.
В результаті з'являється новий, тимчасовий файл, який користувачеві не видно. Сам компілятор аналізує не вихідний файл, а той, який був сформований в результаті макрообробки. Директиви препроцесора перераховані в довідковому матеріалі даного комплексу. З призначенням деяких з них познайомимося пізніше.
Найчастіше використовуються в програмах директиви препроцесора #include і #define. Директива #include дає вказівку компілятору приєднати до програми файл, ім'я якого слідує відразу за цією інструкцією. За допомогою директиви #define відбувається пошук і заміна одного набору символів на іншій. Цю ж директиву препроцесора можна використовувати для визначення макросів. Макрос є частиною програми, яка може виглядати і діяти як функція. Вміст макросу, який задається після #define, підставляється під час роботи препроцесора і створює так званий вбудовуваний код. Макрос – це символічне ім'я деяких операцій. У мові C деякі бібліотечні функції реалізовані як макроси.
Макроси мають велике значення в C, але в C++ вони використовуються значно рідше. Перше правило про макроси: не використовуйте їх, якщо немає необхідності це робити. Практично кожен макрос свідчить про недолік в мові або програмі. Оскільки макроси змінюють код програми до обробки його компілятором, то вони створюють проблеми для багатьох інструментів розробки інтегрованого середовища. Тому при використанні макросів можна чекати гіршої роботи відладчиків, генераторів списків і так далі За допомогою макросів можна створити свою власну мову. Але якщо спробує зробити що-небудь нетривіальне в цьому напрямі, то це або неможливо, або дуже трудомістко.
Більшість компіляторів містять ряд корисних вбудованих макрокоманд, наприклад __DATE__, __TIME__, __LINE__ (дата, час, рядок і т. д.). Кожна така команда оточена двома знакам підкреслення. Зустрівши один з цих макросів, препроцесор робить відповідну заміну. Замість __DATE__ встановлюється дата. Замість __TIME__ – поточний час. Директива __LINE__ замінюється номером рядка вихідного тексту.