Програмування

Мови Програмування

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

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

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

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

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

ОпераціяОперанди
MOV AX, WORDBЗаписати значення, що міститься за адресою WORDB, до регістра AX
MOV BX, WORDCЗаписати значення, що міститься за адресою WORDС, до регістра ВX
ADD AX, BXДодати значення регістру BX до значення регістру AX, суму записати в регістр AX
MULL WORDDПомножити значення регістру AX на значення, що міститься за адресою WORDD (результат — у регістрі AX)
MOV WORDА, AXЗаписати значення регістру AX за адресою WORDА
Ідентифікатор змінноїАдреса комірки ОП
WORDA100
WORDB101
WORDC102
WORDD103

Рис. 2. Фрагмент машинної програми на асемблері для обчислення виразу а = (b + c) d

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

Асемблери застосовуються системними програмістами-професіоналами з метою використан-ня всіх можливостей устаткування ЕОМ і отримання ефективної за часом виконання і по необхідному обсягу пам’яті програми. На цих мовах зазвичай розробляються відносно невеликі програми, що входять до складу системного програмного забезпечення: драйвери, утиліти тощо.

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

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

Наприклад, фрагмент програми на С/C++ для обчислення виразу а = (b+c) d:

а = (b + с)*d;

Основні відмінності мови програмування високого рівня від машинно-орієнтованої :

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

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

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

Fortran (Фортран). Створена у IBM під керівництвом Дж. Бекуса (1954-57 р.р.). По суті це перша широко застосовувана мова високого рівня, орієнтована на науково-інженерні і чисельні задачі. Для цієї мови було створено величезну кількість бібліотек, починаючи від статистичних комплексів і закінчуючи пакетами управління супутниками, тому до цих пір Фортран продовжує активно використовуватися в деяких організаціях.

Ваsic (Бейсик). Багатоцільова мова символічних інструкцій, розроблена у 1965 р.. Створена як учбова мова для початківців. Згідно концепціям, закладеним у Basic, ця мова в сенсі строгості і стрункості є антиподом мови Pascal. Зокрема, в ній широко поширені різні правила умовчання, що вважається поганим тоном в більшості мов програмування подібного типу. Існує багато діалектів цієї мови, мало сумісних між собою.

Раsсаl (Паскаль). Створена Н. Віртом у 1970 р. спеціально для вивчен­ня програмування. Пред’являє жорсткі вимоги до структури програми, підтримує велику кількість призначених для користувача типів даних. Крім того, в мові реалізована концепція визначення нових типів даних на основі вже наявних.

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

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

С++.Об’єктно-орієнтоване розширення мовиС, створене Б. Страуструпом в 1980 р.Поєднує властивості як високорівневих, так і низькорівневих мов. Заснованана використанні класів і об’єктів.

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

Javа. Створена компанією SunMicrosystemsна початку 90-хроків на основі С++. Покликана спростити розробку застосувань на С++ шляхом виключення із нього низькорівневихможливостей. Головна особливість мови – те, що вона транслюєпрограмуне в машинний код, а вплатформно незалежний байт-код (кожна команда займає один байт).Цей байт-код може виконуватися за допомогою інтерпретатора- віртуальноїJavа–машиниJVM(Javа Virtual Масhine), версії якої створені для будь-яких апаратних платформ. Завдяки цьому програми наJavаможна переносити не лише на рівні вихідних текстів, але і на рівні двійковихбайт-кодів. Це дозволяє створювати незалежні програмні модулі, здатні працювати на серверах в глобальних і локальних мережах з різнимиОС.

C#.Відноситься до сім’ї мов ізC-подібним синтаксисом, з них її синтаксис найбільш близький доC++іJava.

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

Python.Мова програмування загального призначення з акцентом на продуктивність розробника і читаність коду. Синтаксис ядраPythonмінімалістичний. У той же час стандартна бібліотека включає великий обсяг корисних функцій.

Ruby.Інтерпретована високорівнева мова програмування для швидкого і зручного об’єктно-орієнтованого програмування. Мова має незалежну від операційної системи реалізацію багатопоточності і багатоіншихможливостей.Rubyблизька за особливостями синтаксису до мовиPerl, за об’єктно-орієнтованим підходом — доSmalltalk. Також деякі риси мови взяті зPython,Lispта інших.

Мови програмування також можна поділити на універсальні і спеціалізовані: універсальні мови використовуються для вирішення різних завдань; спеціалізовані — призначені для вирішення завдань одного або декількох видів. Наприклад, роботаз базами даних,web-програмування,написання скриптів для адміністрування операційних систем. Прикладами таких мов програмування є:

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

ActionScriptОб’єктно-орієнтована мова програмування, яка додає інтерактивність, обробку даних і багато чого іншого до вмісту Flash-додатків. ActionScriptвиконується віртуальною машиною (ActionScript Virtual Machine), яка є складовою частиноюFlash Player.ActionScriptкомпілюється в байт-код, який включаєтьсядоswf-файлу.

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

  1. Асемблери, створені за принципом «одна інструкція — один рядок».
  2. Символічний асемблер, у якому з’явилося поняття змінної. Він став першою повноцінною мовою програмування. Завдяки його виникненню помітно зросли швидкість розробки і надійність програм.
  3. Універсальні мови високого рівня, за допомогою яких можна вирішувати будь-які прикладні задачі. Характеризуються відносною простотою, незалежністю від конкретного ПК, можливістю використання потужних синтаксичних конструкцій (Fortran, Cobol, А1gо1, PL/1, Basic, Pascal, C/C++, Javа, … ).
  4. Проблемно-орієнтовані мови, призначені для реалізації великих проектів, підвищення їхньої надійності і швидкості створення. Як правило, мають вбудовані потужні оператори, що дозволяють одним рядком описати функціональність, для реалізації якої на мовах молодших поколінь потрібні були б тисячі рядків коду. Орієнтовані на спеціалізовані області застосування, де гарних результатів можна домогтися, використовуючи мови, які оперують конкретними поняттями вузької предметної області (PROLOG – мова для логічного програмування, SQL — мова програмування баз даних, НТМL — мова розмітки для Internet, UML — мова графічного моделювання).
  5. Системи автоматизованого створення прикладних програм, у тому числі і за допомогою візуальних засобів розробки (RAD-середовищ). Характеризуються можливістю автоматичного формування результуючого тексту на універсальних мовах програмування (Delphі, Borland C, MS Visual Studio, тощо).

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

Початковий код

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

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

Види спеціалізованих мов.

1.Мови для роботи з базами даних.

а)Мови, що входять до складу промислових клієнт-серверних систем управління базами даних.(СУБД) (PL-SQL в СУБД Oracle, Transact-SQL, Microsoft SQL Server)

б)Мови є частиною інших видів СУБД Visual FoxPro, Microsoft Access, Paradox тощо)

2. Мови призначені для web-програмування.

а) Мови, виконуються на сервері, що підтримує Web-сайт.(РНР, Perl, VBScript)

б) Мови, виконуються на браузері (програмі перегляду) клієнта JavaScript, JScript, VBScript

3.Мови для математичних розрахунків

4.Мови для автоматизації роботи певних програмних продуктів. (VBA в Microsoft Office)

6.Спеціалізовані мови інших видів.

До універсальних мов можна віднести мови Visual C++, Visual C++.Net Visual C#.Net Visual J#.Net, Java, Delphi, Borland C#, Borland C++ Builder.

Хоча найчастіше спеціалізовані мови походять від універсальних мов наприклад PHP, Perl і JаvаScript відбулися від мови С++, VBScript і VBA відбулися від мови Visual Bаsic’а, відмінності між спеціалізованими і універсальними мовами дуже значні.

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

Мови програмування та їх класифікація

Існує безліч класифікацій мов програмування за різними критеріями. Найпростіший розподіл — на мови високого і низького рівня.

Мова низького рівня — це мова програмування, призначений для певного типу комп’ютера і відображає його внутрішній машинний код; мови низького рівня часто називають машинно-орієнтованими мовами. Їх складно конвертувати для використання на комп’ютерах з різними центральними процесорами, а також досить складно вивчати, оскільки для цього потрібно добре знати внутрішні принципи роботи комп’ютера.

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

Інша класифікація ділить мови на обчислювальні і мови символьного обробки. До першого типу відносять ФОРТРАН, ПАСКАЛЬ, АЛГОЛ, БЕЙСІК, С, до другого — ЛИСП, ПРОЛОГ, Снобол і ін.

Класифікація мов програмування по типам завдань наведена в табл. 22.2.

Таблиця 22.2. Класифікація мов програмування за типами задач

Тип завданняМови програмування
Завдання штучного інтелектуЛИСП, ПРОЛОГ, Common Lisp, РЕФАЛ, Planner, QLisp
паралельні обчисленняFun, Apl, ML, SML, Occam, Actus, паралельний КОБОЛ, ОВС-АЛГОЛ, ОВС-ФОРТРАН
Завдання обчислювальної математики і фізикиOccam, Actus, паралельний КОБОЛ, ОВС-АЛГОЛ, ОВС-ФОРТРАН
Розробка інтерфейсу, програм-оболонок, системForth, С, C ++, Асемблер, макроассемблера, СИМУЛА-67,0 А К, Smalltalk, Java, РПГ
Завдання обчислювального характеруАЛГОЛ, ФОРТРАН, КОБОЛ, Ada, PL / 1, БЕЙСІК, ПАСКАЛЬ
Оформлення документів, обробка великих текстових файлів, організація віртуальних тривимірних інтерфейсів в Інтернеті, розробка БДHTML, Perl, SQL, Informix 4GL, Natural, DDL, DSDL, SEQUEL

Ще одна поширена класифікація мов програмування заснована на принципі їх організації, іліпарадігме [1] . Згідно з цією класифікацією мови ділять на процедурні (вживаються також терміни імперативні і структурні , хоча це не зовсім одне й те саме), об’єктно-орієнтовані, функціональні і логічні.

У процедурних мовах програма явно описує дії, які необхідно виконати, а результат задається тільки способом отримання його за допомогою деякої процедури, яка представляє собою певну послідовність дій. В цю велику групу входять, наприклад, ПАСКАЛЬ, С, АДА, ПЛ / 1, ФОРТРАН і БЕЙСІК.

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

У функціональних мовах програма описує обчислення деякої функції. Зазвичай ця функція задається як композиція інших, більш простих, ті в свою чергу розкладаються на ще більш прості і т.д. Один з основних елементів в функціональних мовах — рекурсія, тобто обчислення значення функції через значення цієї ж функції від інших елементів. Присвоювання і циклів в класичних функціональних мовах немає. Представниками цієї групи є ЛИСП, ML і Haskell.

У логічних мовах програма взагалі не описує дій. Вона задає дані і співвідношення між ними. Після цього системі можна задавати питання. Машина перебирає відомі і задані в програмі дані і знаходить відповідь на питання. Порядок перебору не описується в програмі, а неявно задається самим мовою. Класичним мовою логічного програмування вважається ПРОЛОГ. Побудова логічної програми взагалі не вимагає алгоритмічного мислення, програма описує статичні відносини об’єктів, а динаміка знаходиться в механізмі перебору і прихована від програміста.

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

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

Програми для дітей

Топ 20-сайтів для вивчення програмування

Добірка безкоштовних online-ресурсів для вивчення програмування з нуля

Види і типи сучасних мов програмування