Курс лекций Лекция языки программирования содержание определение понятий 2



Pdf просмотр
страница1/3
Дата14.02.2017
Размер0.97 Mb.
Просмотров991
Скачиваний0
ТипКурс лекций
  1   2   3

Профессор
Игорь Н. Бекман
КОМПЬЮТЕРНЫЕ НАУКИ
Курс лекций
Лекция 8.
ЯЗЫКИ ПРОГРАММИРОВАНИЯ
Содержание
1. ОПРЕДЕЛЕНИЕ ПОНЯТИЙ
2
2. ИСТОРИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
5
3. ВИДЫ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
6
4. КОНКРЕТНЫЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ
9
5. ТРАНСЛЯТОРЫ 20
5.1 Интерпретаторы
21
5.2. Компиляторы
21
6. МАШИННО-ОРИЕНТИРОВАННЫЕ ЯЗЫКИ 21
6.1 Машинный язык
22
6.2. Машинно – независимые языки
22
Согласно определению Б.Л Ворфа: «Язык формирует наш способ мышления и определяет то, о чём мы можем мыслить». Для компьютера важнее не просто язык, а язык программирования, под которым понимают формальную знаковую систему, предназначенную для записи программ, задающих алгоритм в форме, понятной для исполнителя (например, компьютера). Язык программирования определяет набор лексических, синтаксических и семантических правил, используемых при составлении компьютерной программы. Он позволяет программисту точно определить то, на какие события будет реагировать компьютер, как будут храниться и передаваться данные, а также какие именно действия следует выполнять над этими данными при различных обстоятельствах.
Со времени создания первых программируемых машин человечество придумало уже более восьми с половиной тысяч языков программирования. Каждый год их число пополняется новыми. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты иногда применяют в своей работе более десятка разнообразных языков программирования.
В данной лекции рассматривается понятие языка программирования, приводятся примеры различных языков программирования и трансляторов. Основное внимание уделено машинно- ориентированным языкам.
Прогресс компьютерных технологий определил процесс появления новых разнообразных знаковых систем для записи алгоритмов – языков программирования. Оснащенный набор вычислительных формул дополнительной информации, превращает данный набор в алгоритм. Язык программирования служит двум связанным между собой целям: он даёт программисту аппарат для задания действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист, размышляя о том, что делать.
Первой цели идеально отвечает язык, который настолько «близок к машине» что всеми основными машинными аспектами можно легко и просто оперировать достаточно очевидным для программиста образом. Второй цели идеально отвечает язык, который настолько «близок к решаемой задаче», чтобы концепции ее решения можно было выражать прямо и коротко.
Связь между языком, на котором мы думаем/программируем, и задачами и решениями, которые мы можем представлять в своем воображении, очень близка. По этой причине ограничивать свойства языка только целями исключения ошибок программиста в лучшем случае опасно. Как и в случае с естественными языками, есть огромная польза быть, по крайней мере, двуязычным. Язык предоставляет программисту набор концептуальных инструментов, если они не отвечают задаче, то их просто игнорируют.
Конкретный компьютер способен работать с программами, написанными на его родном машинном языке. Существует почти столько же разных машинных языков, сколько и компьютеров, но все они суть разновидности одной идей простые операции производятся со скоростью молнии на двоичных числах. http://profbeckman.narod.ru/

Процесс работы компьютера заключается в выполнении программы, то есть набора вполне определённых команд во вполне определённом порядке. Машинный вид команды, состоящий из нулей и единиц, указывает, какое именно действие должен выполнить центральный процессор. Значит, чтобы задать компьютеру последовательность действий, которые он должен выполнить, нужно задать последовательность двоичных кодов соответствующих команд. Программы в машинных кодах состоят из тысячи команд. Писать такие программы – занятие сложное и утомительное. Программист должен помнить комбинацию нулей и единиц двоичного кода каждой программы, а также двоичные коды адресов данных, используемых при её выполнении. Гораздо проще написать программу на каком-нибудь языке, более близком к естественному человеческому языку, а работу по переводу этой программы в машинные коды поручить компьютеру. Так возникли языки, предназначенные специально для написания программ, - языки программирования.
Всё множество языков программирования можно разделить на две группы: языки низкого уровня и языки высокого уровня.
Большинство программистов пользуются для составления программ языками высокого уровня. Как и обычный человеческий язык, такой язык имеет свой алфавит – множество символов, используемых в языке.
Из этих символов составляются так называемые ключевые слова языка. Каждое из ключевых слов выполняет свою функцию, так же как в привычном нам языке нам языке слова, составленные из букв алфавита данного языка, могут выполнять функции разных частей речи. Ключевые слова связываются друг с другом в предложения по определённым синтаксическим правилам языка. Каждое предложение определяет некоторую последовательность действий, которые должен выполнить компьютер. Язык высокого уровня выполняет роль посредника между человеком и компьютером, позволяя человеку общаться с компьютером более привычным для человека способом. Часто такой язык помогает выбрать правильный метод решения задачи. Перед тем как писать программу на языке высокого уровня, программист должен составить алгоритм решения задачи, то есть пошаговый план действий, который нужно выполнить для решения этой задачи. Поэтому языки, требующие предварительного составления алгоритма, часто называют алгоритмическими языками.
1. ОПРЕДЕЛЕНИЕ ПОНЯТИЙ
Прежде всего дадим определения некоторых важных понятий, о которых пойдёт речь в этой лекции.
Алгоритм - точное предписание исполнителю совеpшить определенную последовательность действий для достижения поставленной цели за конечное число шагов.
Язык программирования (Алгоритмический язык) - искусственный (формальный) язык, предназначенный для записи алгоритмов. Язык программирования задается своим описанием и реализуется в виде специальной программы: компилятора или интерпретатора.
Программа - последовательность машинных команд, предназначенная для достижения конкретного результата.
Программа - согласно ГОСТ 19781-90 - данные, предназначенные для управления конкретными компонентами системы обработки информации в целях реализации определенного алгоритма.
Декларативный язык программирования - язык программирования высокого уровня, построенный: на описании данных; и на описании искомого результата. Декларативные языки подразделяются на функциональные и логические языки.
Исходный код - текст программы на алгоритмическом языке. В компьютере исходный текст либо непосредственно выполняется интерпретатором, либо предварительно переводится компилятором в стандартный загрузочный код, способный многократно исполняться в определенной вычислительной среде.
Макроязык - программное средство, позволяющее пользователю задавать в тексте условные эквиваленты определенных его фрагментов. Макроязык состоит из: макроопределений, создаваемых пользователем; и из программ-препроцессоров, переводящих макроопределения в результирующие тексты.
Машинный язык - язык программирования, элементами которого являются команды компьютера, характеризующиеся: количеством операндов в команде; назначением информации, задаваемой в операндах; набором операций, которые может выполнить компьютер и др.
Проблемно-ориентированный язык программирования - язык программирования, управляющие структуры и/или структуры данных которого отражают особенности класса решаемых задач.
Конструкции машинного языка интерпретируются непосредственно аппаратурой.
Процедурно-ориентированный язык программирования - язык программирования высокого уровня, в основу которого положен принцип описания (последовательности) действий, позволяющей решить поставленную задачу.
Обычно процедурно-ориентированные языки задают программы как совокупности процедур или подпрограмм.
Рекурсивное построение - в языках программирования - поименованная конструкция, использующая в своей структуре обращение к самой себе. http://profbeckman.narod.ru/

Семантика - в программировании - система правил истолкования отдельных языковых конструкций. Семантика определяет смысловое значение предложений алгоритмического языка.
Синтаксис - набор правил построения фраз алгоритмического языка, позволяющий определить, осмысленные предложения в этом языке.
Система программирования - программная система, предназначенная для разработки программ на конкретном языке программирования. Система программирования предоставляет пользователю специальные средства разработки программ: транслятор, (специальный) редактор текстов программ, библиотеки стандартных подпрограмм, программную документацию, отладчик и др.
Тип данных - характеристика набора данных, которая определяет: диапазон возможных значений данных из набора; допустимые операции, которые можно выполнять над этими значениями; способ хранения этих значений в памяти.
Различают: простые типы данных: целые, действительные числа и др.; - составные типы данных: массивы, файлы и др.
Язык ассемблера - согласно ГОСТ 19781-90 - язык программирования; символьная форма машинного языка с рядом возможностей, характерных для языка высокого уровня. Обычно язык ассемблера включает макросредства.
Язык высокого уровня - согласно ГОСТ 19781-90 - язык программирования, понятия и структура которого удобны для восприятия человеком.
Языки высокого уровня отражают потребности программиста, но не возможности системы обработки данных.
Язык описания технических средств - язык моделирования, разработки и тестирования устройств, предназначенных для обработки дискретных сигналов.
Итак, язык программирования - формализованный язык, предназначенный для описания программ и алгоритмов решения задач на ЭВМ. Языки программирования являются искусственными. В них синтаксис и семантика строго определены. Поэтому они не допускают свободного толкования выражения, что характерно для естественного языка.
Языки программирования разделяются на две основные категории языки высокого уровня и языки низкого уровня :
Язык высокого уровня - язык программирования, средства которого обеспечивают описание задачи в наглядном, легко воспринимаемом виде, удобном для программиста. Он не зависит от внутренних машинных кодов
ЭВМ любого типа, поэтому программы, написанные на языках высокого уровня, требуют перевода в машинные коды программами транслятора либо интерпретатора. К языкам высокого уровня относят Фортран, ПЛ/1 , Бейсик, Паскаль,
Си, Ада и др.
Язык низкого уровня, - язык программирования, предназначенный для определенного типа ЭВМ и отражающий его внутренний машинный код.
Различают также следующие виды языков программирования:
Алгоритмический язык - совокупность символов, соглашений и правил, используемых для однозначного описания алгоритмов и обычно являющаяся часть языка программирования;
Неалгоритмический язык - язык программирования, тексты которого не содержат указаний на порядок выполнения операций и служат лишь исходным материалом для синтеза алгоритма решения задачи;
Формальный язык - язык программирования, построенный по правилам некоторого логического исчисления или формальной грамматики, представляющей собой систему правил построения в заданном алфавите конечных знаковых последовательностей, множество которых образует формальный язык;
Исходный язык - язык программирования, на котором написана программа, в отличие от машинного языка, на котором программы выполняются компьютером. Исходные языки классифицируются на языки высокого уровня и языки низкого уровня .
Машинный (абсолютный) язык, язык ЭВМ - язык программирования, предназначенный для представления программ в форме, обеспечивающей возможность их выполнения техническими средствами;
Машинозависимый (машинно-ориентированный) язык, машинозависимый язык программирования - язык программирования, учитывающий структуру и характеристики ЭВМ определенного типа или конкретной ЭВМ;
Машиннонезависимый язык - язык программирования, структура и средства которого не связаны ни с какой конкретной ЭВМ и позволяют выполнять составленные на нем программы на любой ЭВМ, снабженной трансляторами с этого языка;
Символический язык, язык символического кодирования - язык программирования, ориентированный на конкретные ЭВМ и основанный на кодировании машинных операций при помощи определенного набора символов;
Гибридный (комбинированный) язык - язык программирования, использующий также средства другого языка;
Графический язык - язык, предназначенный для написания программ машинной графики и пользования ими.
Базовый язык – машинный язык , общий для семейства ЭВМ;
Язык программирования в системе управления базами данных (СУБД) с автономным языком.
Общий язык - Машинный язык, общий для группы ЭВМ и используемых ими внешних устройств;
Эталонный язык - язык, являющийся основой для всех его конкретных версий, являющихся вариантами адаптации эталонного языка к определенным условиям применения и назначения; http://profbeckman.narod.ru/

Язык ассемблера, ассемблер - универсальный язык программирования , относящийся к категории языков низкого уровня, структура которого определяется форматами команд, данными машинного языка и архитектурой ЭВМ.
Используется программистами в тех случаях, когда невозможно применение языка высокого уровня или требуются эффективные программы в машинных кодах.
Декларативный (непроцедурный язык - язык программирования, который позволяет задавать связи и отношения между объектами и величинами, но не определяет последовательность выполнения действий (например, языки
Пролог, QBE);
Императивный (процедурный) язык - язык программирования, который позволяет в явной форме (при помощи задания выполняемых операторов) определять действия и порядок (последовательность) их выполнения;
Язык функционального программирования, функциональный язык - декларативный язык программирования, основанный на понятии функций, которые задают зависимость, но не определяют порядок вычислений.
Специализированный язык - язык программирования, ориентированный на решение определенного круга задач;
Язык описания страниц [PDL - Page Description Language] - специализированный язык, предназначенный для печатающих устройств. Предусматривает возможность использования изображений в формате, независимом от параметров устройства отображения. Наиболее известным языком такого типа является PostScript.
Автономный язык - специализированный язык высокого уровня, в замкнутых СУБД (СУБД с автономным языком);
Язык конструирования интерактивных технологий - с СУБД - язык, предназначенный для описания технологических процессов обработки данных с учетом разделения характера операций по их типам, а также обеспечения диалога с администратором системы;
Язык манипулирования данными, ЯМД [DML - Data Manipulation Language] - в СУБД - язык, предназначенный для обращения к базе данных и выполнения поиска, чтения и модификации ее записей;
Язык обработки списков - специализированный язык, предназначенный для описания процессов обработки данных, представленных в виде списков объектов;
Язык описания данных [DDL - Data Description Language] - язык, предназначенный для описания концептуальной схемы базы данных;
Язык описания хранения данных [DSDL - Data Storage Description Language] - язык, предназначенный для описания физической структуры ( схемы ) базы данных;
Язык описания страниц - система для кодировки документов, которая позволяет точно описать ее внешний вид после подготовки к выводу на печать или на дисплей. Примером использования такого языка служит PDF (Portable
Document Format), разработанный Adobe для хранения и представления изображений страниц.
Язык представления знаний [KRL - Knowledge Representation Language] - декларативный или декларативно- процедурный язык, предназначенный для представления знаний в памяти ЭВМ (например, языки Лисп и Пролог );
Язык публикаций - язык, используемый для публикации алгоритмов и программ;
Язык спецификаций - декларативный язык для задания спецификаций программ ;
Проблемно-ориентированный язык - язык программирования, предназначенный для решения определенного класса задач (проблем);
Процедурный (процедурно-ориентированный) язык - проблемно-ориентированный язык, который облегчает выражение процедуры, как точного алгоритма;
Язык реального времени - язык, используемый для программирования задач, в которых критическим является время реакции ЭВМ на сигналы, требующие от неё немедленных действий (например, язык Ада);
Язык управления пакетом - набор команд, директив, квалификаторов и правил их использования для управления пакетной обработкой данных;
Язык управления заданиями - язык, на котором записывается последовательность команд, управляющих выполнением задания. В отличие от обычных языков программирования, в которых объектами описания являются элементы, связанные с решением отдельной задачи, в языках управления заданиями преобразуемыми объектами являются целые программы и выходные потоки данных, обработанных этими программами.
Общесетевой командный язык [CNCL - Common Network - Command language] - стандартный в рамках вычислительной сети язык диалогового (интерактивного) поиска данных, предназначенный для унификации работы пользователей с неоднородными базами данных, управляемых различными СУБД ;
Системный язык - язык общения оператора ЭВМ с вычислительной системой, представляющий собой совокупность команд оператора и сообщений системы;
Язык общего назначения, универсальный язык - язык программирования, ориентированный на решение задач практически из любой области и объединяющий на единой методической основе наиболее существенные свойства и средства современных машино- и проблемноориентированных языков программирования (например, язык ассемблера , ПЛ/1 и др.);
Язык ориентированный на пользователя - слабоформализованный язык программирования, близкий к естественному языку ;
Язык меню - язык диалога пользователя с системой, основанный на использовании меню http://profbeckman.narod.ru/

2. ИСТОРИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
По мере развития вычислительной техники возникали разные методики программирования. На каждом этапе создавался новый подход, который помогал программистам с растущим усложнением программ.
На первых компьютерах программирование велось непосредственно в машинных кодах, а основным носителем информации были перфокарты и перфоленты. Программисты обязаны были знать архитектуру машины досконально. Программы были достаточно простыми, что обуславливалось, во-первых, весьма ограниченными возможностями этих машин, и, во-вторых, большой сложностью разработки и, главное, отладки программ непосредственно на машинном языке. Вместе с тем такой способ разработки давал программисту просто невероятную власть над системой. Становилось возможным использование таких хитроумных алгоритмов и способов организации программ, какие и не снились современным разработчикам. Например, применялся самомодифицирующийся код. Знание двоичного представления команд позволяло не хранить некоторые данные отдельно, а встраивать их в код как команды.
Первые программы заключались в установке ключевых переключателей на передней панели вычислительного устройства. Очевидно, таким способом можно было составить только небольшие программы. С развитием компьютерной техники появился машинный язык, с помощью которого программист мог задавать команды, оперируя с ячейками памяти, полностью используя возможности машины. Однако использование большинства компьютеров на уровне машинного языка затруднительно, особенно это касается ввода-вывода. Поэтому от его использования пришлось отказаться. Например, для организации чтения блока данных с гибкого диска программист может использовать 16 различных команд, каждая из которых требует 13 параметров, таких как номер блока на диске, номер сектора на дорожке и т. п.
Когда выполнение операции с диском завершается, контроллер возвращает 23 значения, отражающие наличие и типы ошибок, которые надо анализировать. «Слова» на машинном языке называются инструкции, каждая из которых представляет собой одно элементарное действие для центрального процессора, такое, например, как считывание информации из ячейки памяти.
Рис. 1. К истории языков программирования.
Каждая модель процессора имеет свой собственный набор машинных команд, хотя большинство из них совпадает. Если Процессор А полностью понимает язык Процессора Б, то процессор А совместим с
Процессором Б. Процессор Б будет назваться не совместимым с Процессором А если А имеет команды, не распознаваемые Процессором Б. В случае, когда нужно иметь эффективную программу, вместо машинных языков используются близкие к ним машинно-ориентированные языки - ассемблеры. Люди используют мнемонические команды взамен машинных команд. Но даже работа с ассемблером достаточно сложна и требует специальной подготовки. Например, для процессора Zilog Z80 машинная команда 00000101 http://profbeckman.narod.ru/
предписывает процессору уменьшить на единицу свой регистр B. На языке ассемблера это же будет записано как DEC B.
Следующий шаг был сделан в 1954, когда был создан первый язык высокого уровня -Фортран
(FORTRAN - FORmula TRANslator). Языки высокого уровня имитируют естественные языки, используя некоторые слова разговорного языка и общепринятые математические символы. Эти языки более удобны для человека, с помощью них, можно писать программы до нескольких тысяч строк длиной. Однако легко понимаемый в коротких программах, этот язык становился нечитаемым и трудно управляемым, когда дело касалось больших программ. Решение этой проблемы пришло после изобретения языков структурного программирования (structured programming language), таких как Алгол (1958), Паскаль (1970), Си (1972).
Структурное программирование предполагает точно обозначенные управляющие структуры, программные блоки, отсутствие инструкций безусловного перехода (GOTO), автономные подпрограммы, поддержка рекурсии и локальных переменных. Суть такого подхода заключается в возможности разбиения программы на составляющие элементы.
Также создавались функциональные (аппликативные) языки (Пример: Lisp - LISt Processing, 1958) и логические языки (пример: Prolog - PROgramming in LOGic, 1972). Хотя структурное программирование, при его использовании, дало выдающиеся результаты, даже оно оказывалось несостоятельным тогда, когда программа достигала определенной длины. Для того чтобы написать более сложную (и длинную) программу, нужен был новый подход к программированию. В итоге в конце 1970-х и начале 1980-х были разработаны принципы объекто-ориентированного программирования. ООП сочетает лучшие принципы структурного программирования с новыми мощными концепциями, базовые из которых называются инкапсуляцией, полиморфизмом и наследованием. Примером объектно-ориентированных языков являются:
Object Pascal, C++, Java и др. ООП позволяет оптимально организовывать программы, разбивая проблему на составные части, и работая с каждой по отдельности. Программа на объектно-ориентированном языке, решая некоторую задачу, по сути, описывает часть мира, относящуюся к этой задаче.



Поделитесь с Вашими друзьями:
  1   2   3


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал