Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Покоління мов програмування

Читайте также:
  1. Quot;Програмування. Частина III.
  2. Вступ в Об'єктно-орієнтоване програмування
  3. Етапи соціологічного дослідження та його програмування.
  4. Завдання з програмування
  5. Загальна задача лінійного програмування (ЗЛП).
  6. Закон одноманітності гібридів першого покоління: при схрещуванні двох гомозиготних особин усі нащадки у першому поколінні будуть одноманітні за генотипом і фенотипом.
  7. Знайомство з середовищем програмування Delphi.
  8. Лiнiйне програмування.
  9. Лабораторна робота № З Програмування умовних конструкцій
  10. Лінійне програмування

За своїми можливостями і часом створення мови програмування умовно поділяються на покоління.

Перше покоління мов програмування (1GL – First Generation Languages) було створене в 40-50-х роках. Перші мови програмування були дуже примітивними і це були машинні коди – машинні мови, що дозволяли задавати назви команд у символічному вигляді і вказувати числа в двійковому, шістнадцятковому й десятковому форматах.

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

Друге покоління мов програмування (2GL) припадає на кінець 50х – початок 60-х років. Удосконалювалися різного виду асемблерні мови. Тепер вони застосовуються для створення драйверів устаткування комп’ютерів.

Першим кроком на шляху до полегшення завдань програмування була відома від використання цифр для запису команд і операндів безпосередньо в тій формі, у якій вони використовуються в машині. З цією метою при розробці програм стали широко застосовувати мнемонічний запис різних команд замість їхнього шістнадцяткового представлення. Наприклад, замість цифрового коду команди завантаження регістра програміст міг тепер написати LD, а замість коду команди копіювання вмісту регістра в пам’ять міг використовувати мнемонічне позначення ST. Для запису операндів було розроблено правила, відповідно до яких програміст міг надавати деяким областям пам’яті описові імена (їх часто називають ідентифікаторами) і використовувати їх при записі команд програми замість адрес відповідних чарунок пам’яті. Одним із специфічних варіантів є надання мнемонічних імен регістрам центрального процесорів, наприклад R0, R1, R2.

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

Спочатку програмісти використовували такі позначення при розробці програм на папері, а потім переводили їх на машинну мову. Однак незабаром стало зрозуміло, - таке переведення може виконати і сама машина. Як наслідок було розроблено програми, названі асемблерами і призначені для переведення записаних у мнемонічних позначень і ідентифікаторів. Мнемонічні системи запису програм стали, у свою чергу, розглядатися як особливі мови програмування, іменовані мовами асемблеру.

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

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

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

Крім того, хоча програміст і не зобов’язаний більше кодувати програму за допомогою нулів і одиниць, він усе ще змушений мислити в термінах покрокового виконання команд машинної мови. Це аналогічно проектуванню будинку з дощок, цвяхів, цеглин і інших матеріалів. Звичайно, реальна конструкція будинок складається саме з цих елементарних речей, але проектувати його все-таки легше, маючи справу з кімнатами, вікнами, дверима і іншими подібними поняттями.

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

З’явилася необхідність у мовах програмування високого рівня і були сформульовані вимоги до таких мов:

1. Мова має бути близькою до тих фрагментів природних мов, які забезпечують конкретну предметну галузь діяльності людини; (мова, орієнтована на ділові сфери застосування, має містити поняття, використовуванні в цьому виді діяльності: документ, база даних тощо).

2. Усі засоби мови мають бути формалізовані настільки, щоб їх можна було реалізувати як машинні програми.

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

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

Виходячи з такого підходу, у 60-х роках з’явилися мови програмування третього покоління (3GL), що відрізнялися від попередніх поколінь тим, що їхні мовні конструкції мали вищий рівень і були машинно-незалежними. Це універсальні мови високого рівня. Найбільш відомими прикладами ранніх мов третього покоління є FORTRAN (FORmula TRANslator - перекладач формул), розроблений під керівництвом Дж. Бекуса 1960 р., яка була призначена для наукових і інженерних розрахунків, і COBOL (Common Business-Oriented Language - мова загального призначення ділової орієнтації), розроблена у 1960 р. фахівцями військово-морського флоту США для розв’язання економічних задач, ALGOL (ALGOL-58 і ALGOL-60), розроблений міжнародною робочою групою.

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

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

Проблема переносу програм з однієї машини на іншу полягає у відсутності спільної точки зору на те, що саме вважати стандартом цієї мови програмування. У зв’язку з цим Американський національний інститут стандартів (ANSI) і Міжнародна організація з стандартизації (ISO) прийняли стандарти для багатьох популярних мов програмування. В інших випадках застосовуються неформальні стандарти, що є наслідком популярності того чи іншого діалекту мови, а також бажання багатьох розробників компіляторів створювати продукти, сумісні з іншими, подібними до них.

Той факт, що мови третього покоління не досягли істинної машинної незалежності, насправді не має великого значення з двох причин. По-перше, вони все ж є достатньо машинно-незалежними для того, щоб можна було відносно легко переносити програмне забезпечення з однієї машини на іншу. По-друге, машинна незалежність – це лише проміжний щабель на шляху до досягнення більш важливих цілей. Згодом машинна незалежність стала цілком досяжною, однак менш важливою порівняно з іншими веліннями часу. Справді, розуміння того, що машина могла б виконувати оператори високого рівня, породило серед вчених в галузі комп’ютерних наук мрію про створення середовища програмування, яке дозволило б людям спілкуватися з машиною в термінах абстрактних понять, а не змушувало їх переводити ці поняття в машинно-сумісну форму. Більше того, ученим знадобилися машини, здатні самостійно вибирати алгоритми, а не просто виконувати дії, описані за допомогою набору інструкцій. У результаті спектр мов програмування помітно розширився.

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

У середині 90-х років з’являється п’яте покоління мов програмування (5GL) – систем програмування, призначення яких полягає у перетворенні інструкцій на тексти програм універсальною мовою програмування. Програмісту надано засобів розробки, які використовують найбільш природні для людини поняття. Для створення складних додатків планується використання експертних систем і баз знань з вбудованими мовами логічного програмування.

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

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

Декларативна концепція як чільне порушує питання «Що являє собою задача?», а не «Як алгоритм потрібний для розв’язання задачі?». Основна проблема тут полягає в тому, щоб створити і реалізувати загальний алгоритм розв’язання задач. Після цього задачі можна формулювати у вигляді, сумісному з цим алгоритмом, а потім застосувати його. У цьому випадку роль програміста полягає в точному формулюванні задачі, а не в пошуках і реалізації алгоритму її розвязання.

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

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




Дата добавления: 2014-12-19; просмотров: 49 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав