8 понятие о машинных языках автоматизация программирования

Машинные языки, языки ассемблера и языки высокого уровня

Лекция 1

ВВЕДЕНИЕ. ОСНОВЫ ПРОГРАММИРОВАНИЯ

Для работы с микроконтроллерами сегодня адаптировано множество традиционных языков программирования и их вариантов. Тем не менее основным языком для профессионального программирования микроконтроллеров является С или С++.

Основной задачей курса является изучение применяемого на сегодняшний день повсеместно объектно-ориентированного подхода при проектировании и разработке приложений с использованием языка С++, а также изучение методов программирования программ под ОС Microsoft Windows.

Инструментальное программное обеспечение

Инструментальное программное обеспечение обеспечивает создание новых программных продуктов для ПК. Инструментальное программное обеспечение представлено языками и системами программирования.

Язык программирования – формальная знаковая система, предназначенная для описания алгоритмов в форме, которая удобна для исполнителя (например, компьютера).

Составными частями языка программирования являются:

алфавит – конечный набор элементарных символов, разрешенных для использования;

синтаксис – набор правил образования языковых конструкций и символов алфавита;

семантика – набор правил однозначного толкования языковых конструкций.

Система программирования – это система разработки программного обеспечения на каком-либо языке программирования, включающая в себя следующие компоненты:

интегрированную среду программирования;

редактор текстов программ,

Интегрированная среда программирования (от англ. Integrated Development Environment, IDE) – это программа, имеющая встроенный редактор текстов, подсистему работы с файлами, транслятор, встроенный отладчик, справочную систему, некоторые библиотеки функций. Многие современные среды разработки также включают браузер классов, инспектор объектов и диаграмму иерархии классов — для использования при объектно-ориентированной разработке программного обеспечения.

Транслятор – программа, которая преобразует команды программ, написанных на языках высокого уровня, в команды, записанные в машинных кодах, использующих двоичный алфавит (в последовательность чисел понятную ПК). Трансляторы бывают двух видов: интерпретаторы и компиляторы. Оба вида трансляторов выполняют одну и туже операцию, но делают это по-разному.

Интерпретаторы, преобразуя команду на машинный язык, сразу же дают указания на ее выполнение, не записывая перевод. Так происходят с каждой командой программы. Программа будет выполнена машиной только при наличие интерпретатора, который от строки к строке переводит команды и сразу же их выполняет. При повторном выполнении программы снова выполняется перевод.

Компилятор же не выполняет команды, а просто переводит всю программу на машинный язык и записывает свой перевод в специальную, так называемую, исполнимую программу, программу, записанную в двоичном коде.

В простейшем случае интерпретатор читает исходный текст программы по одной строке за раз, выполняет эту строку и только после этого переходит к следующей. Компилятор читает сразу всю программу и конвертирует ее в объектный код (машинный двоичный код). Когда программа скомпилирована, в ее коде уже нет отдельных строк исходного кода.

Машинные языки, языки ассемблера и языки высокого уровня

На сегодня существуют сотни языков программирования. Их можно разделить на три основных типа:

– языки высокого уровня

Любой компьютер может непосредственно понимать лишь свой собственный машинный язык. Он определяется при проектировании аппаратных средств этого компьютера. Машинные языки в общем случае содержат строки чисел (в конечном счете сокращенные до единиц и нулей), которые являются командами компьютеру на выполнение большинства элементарных операций. Машинные языки машинно-зависимы, т.е. каждый машинный язык может быть использован только на компьютере определенного типа.

Ассемблер – средство, упрощающее написание программ путем написания машинных кодов в некоторых мнемонических обозначениях с последующим автоматическим переводом. Для преобразования программ на языке ассемблера в машинный язык были разработаны программы трансляции, называемые ассемблерами. Дальнейшее развитие привело к созданию первых языков программирования высокого уровня, в которых длинные и сложные последовательности машинных кодов были заменены одним обозначающих их словом – оператором.

Язык С является базисным для языка программирования С++. Поэтому кратко остановимся на предыстории этого языка.

Язык программирования С был разработан в лабораториях Bell Laboratories в США в период с 1969 по 1973 год Кеном Томпсоном и Деннисом Ритчи (практически в одно время с Паскалем) для организации операционной системы UNIX. Предшественниками языка С явились языки Algol 60, CPL, BCPL и B.

Для выполнения этой работы Ритчи нуждался в таком языке программирования, который был бы кратким, а так же мог бы обеспечивать эффективное управление аппаратными средствами и создание компактных, быстро работающих программ. Традиционно такие потребности программистов удовлетворял язык ассемблера, который тесно связан с внутренним машинным языком компьютера. Однако язык ассемблера – это язык низкого уровня, т.е. он привязан к определённому типу компьютера. Поэтому, если программу на языке ассемблера необходимо перенести на компьютер другого типа, то её приходится переписывать заново на другом языке ассемблера. Операционная система UNIX предназначалась для работы на разнообразных типах компьютеров (или платформах). А это предполагало использование языка высокого уровня, который ориентирован на решение задач, а не на конкретное программное обеспечение. Это обеспечивается использованием специальных программ (компиляторов), которые переводят программу с языка высокого уровня на машинный язык. Поэтому программу на языке высокого уровня можно использовать на разных платформах, применяя соответствующий компилятор.

Рисунок 1 – Схема развития языка программирования С++

Денис Ритчи создал независимость языка от конкретного оборудования и сохранил возможность прямого доступа к оборудованию. Денис Ритчи был признанным специалистом в области системного программирования, а именно языков программирования, операционных систем, и генераторов программ. Язык С представляет собой язык программирования относительно низкого уровня, что позволяло контролировать каждую мелочь в работе алгоритма и достигать максимальной эффективности. В то же время в С заложены принципы языка высокого уровня, что позволяет избежать зависимости программ от особенностей архитектуры конкретного компьютера. Это повышало эффективность процесса программирования.

Язык программирования С – стандартизованный процедурный язык программирования, обеспечивающий структурный стиль программирования.

Особенность языка С заключается в том, что будучи языком высокого уровня, он сохранил многие черты языка низкого уровня. Язык С расположен где-то между языками очень высокого уровня и языками низкого уровня, и в этом его сильные и одновременно слабые стороны. Как и язык ассемблера (язык низкого уровня), язык программирования С может непосредственно управлять памятью компьютера. С другой стороны, С обладает чертами языков высокого уровня, поэтому программы на языке С читать и создавать легче, чем программы на языке ассемблера. Язык С является очень удобным для написания системных программ, но в программах на языке С для иных целей зачастую трудней разобраться, нежели в программах, написанных на других языках.

Чтобы преодолеть эти и другие недостатки языка С был разработан на его основе язык программирования С++ сотрудником научно-исследовательского центра AT&T Bell Laboratories (Нью-Джерси, США) Бьярном Страуструпом в 1979 году. Первоначальное название «С++ с классами» было изменено на С++ в 1983 году. С++ обеспечивает возможность ООП

Существует множество различных реализаций для С++. Каждая из них имеет свои достоинства и недостатки. Наибольшей популярностью пользуются реализации этого языка фирм Borland – Turbo C++, C++ Builder и Microsoft – Visual C++, а также Symantec – Symantec C++.

С++ обеспечивает концептуальный фундамент, на который опираются другие языки программирования и многие современные средства обработки данных. Потомками С++ стали такие почитаемые языки, как С# (С Sharp от Microsoft) и Java (от Sun Microsystems), используемые для написания web-приложений. C-подобный синтаксис имеют также языки PHP, Java Script, Nemerle, D.

Источник

Понятие о машинном языке. Команда для эвм и ее структура.система команд.

МАШИННЫЙ ЯЗЫК, язык программирования для представления программ в форме, допускающей их непосредственную реализацию аппаратными средствами конкретной ЭВМ. Программа на машинном языке представляет собой последовательность машинных команд, поэтому иногда машинным языком называют систему команд ЭВМ. Перевод исходной программы, подлежащей выполнению на ЭВМ, осуществляется автоматически самой ЭВМ с помощью ассемблера. Команда (инструкция) – элемент программы, приводящий к выполнению определенных действий.Команда представляет собой код, содержащий информацию, необходимую для управления машинной операцией. Под операцией понимают преобразование информации, выполняемое машиной под воздействием одной команды. Содержанием машинной операции может быть запоминание, передача, арифметическое и логическое преобразование некоторых машинных слов (операндов). Систе́ма кома́нд (также набо́р команд) — соглашение о предоставляемых архитектурой средствах программирования, а именно: определённых типах данных, инструкций, системы регистров, методов адресации, моделей памяти, способов обработки прерываний и исключений, методов ввода и вывода.

74, автоматизация прграммирования.стандартные программы и алгоритми ческие языки.

Автоматиза́ция проце́сса программи́рования — отстранение человека от процесса написания программного кода, как полностью, так и частично. Достигается путём:–разработки инструментария для формулировки и постановки задачи от человека машине (человеко-машинный язык),–представлением средств данного инструмента в терминах области специализации человека-оператора,—разработки анализатора входных данных (полученных средствами инструментария описанного выше) и генерации конечного кода на языке машинного уровня,—интеграции систем учёта и коррекции допущенных ошибок (системы ИИ).

Алгоритми́ческий язык — формальный язык, используемый для записи, реализации или изучения алгоритмов. Всякий язык программирования является алгоритмическим языком, но не всякий алгоритмический язык пригоден для использования в качестве языка программирования [ процедурные (алгоритмические) (Basic, Pascal, C и др.), которые предназначены для однозначного описания алгоритмов; для решения задачи процедурные языки требуют в той или иной форме явно записать процедуру ее решения;

76, эволюция и классификация языков программирования. Классификация ЯП

1. По степени ориентации на специфические возможности ЭВМ ЯП делятся на:

77. основне понятия языка программирования.типы данных. Алфавит — это фиксированный для данного языка набор основных символов, т.е. “букв алфавита”, из которых должен состоять любой текст на этом языке — никакие другие символы в тексте не допускаются. Синтаксис — это правила построения фраз, позволяющие определить, правильно или неправильно написана та или иная фраза. Точнее говоря, синтаксис языка представляет собой набор правил, устанавливающих, какие комбинации символов являются осмысленными предложениями на этом языке. определяет смысловое значение предложений языка. Являясь системой правил истолкования отдельных языковых конструкций, семантика устанавливает, какие последовательности действий описываются теми или иными фразами языка и, в конечном итоге, какой алгоритм определен данным текстом на алгоритмическом языке.Операторы (команды). Оператор — это наиболее крупное и содержательное понятие языка: каждый оператор представляет собой законченную фразу языка и определяет некоторый вполне законченный этап обработки данных. В состав опеpатоpов входят: ключевые слова;данные;выpажения и т.д.Данные — величины, обpабатываемые пpогpаммой. Имеется тpи основных вида данных: константы, пеpеменные и массивы. Константы — это данные, которые зафиксированы в тексте программы и не изменяются в процессе ее выполнения.Пеpеменные обозначаются именами и могут изменять свои значения в ходе выполнения пpогpаммы. Пеpеменные бывают целые, вещественные, логические, символьные и литерные.Массивы — последовательности однотипных элементов, число которых фиксировано и которым присвоено одно имя. Положение элемента в массиве однозначно определяется его индексами (одним, в случае одномерного массива, или несколькими, если массив многомерный). Иногда массивы называют таблицами.

Читайте также:  5 пословиц на татарском языке про родной язык

79.объектно-ориентированное прог-е и его основные понятия. Объе́ктно-ориенти́рованное, или объектное, программи́рование (в дальнейшем ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов. В случае языков с прототипированием вместо классов используются объекты-прототипы. Основные понятия.Абстрагирование — это способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Соответственно, абстракция — это набор всех таких характеристик. Инкапсуляция — это свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе и скрыть детали реализации от пользователя. Наследование — это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником или производным классом.

– поддержку технологии связи и компоновки объектов. Microsoft Visual Basic — средство разработки программного обеспечения, разрабатываемое корпорацией Microsoft и включающее язык программирования и среду разработки. Структура является обобщением определяемых пользователем типов (UDT), поддерживаемых предыдущими версиями Visual Basic. В дополнение к полям, структуры могут предоставлять свойства, методы и события. Структура может реализовать один или несколько интерфейсов, можно объявлять индивидуальные уровни доступа к каждому полю. Чтобы создать структуру, можно комбинировать элементы данных различных типов. Структуры связывают один или несколько элементов друг с другом и с самой структурой. Объявленная структура получает составной тип данных и можно объявлять переменные этого типа. Структуры используются для хранения в одной переменной нескольких связанных частей данных. Например, может потребоваться сохранить вместе имя, телефон и сведения о зарплате сотрудника. Для этих данных можно использовать несколько переменных, а можно определить структуру и использовать ее для одной переменной сотрудника. Преимущества структуры становятся яснее при большом количестве сотрудников и, следовательно, большом количестве экземпляров переменной. После того, как с помощью форм и элементов управления создан интерфейс приложения, необходимо написать код, определяющий его поведение. Как и любой другой современный язык программирования, Visual Basic поддерживает ряд общих конструкций программирования и языковых элементов.

81. в.б.интерфейс пакета. Пакеты Power Pack — это бесплатные надстройки, элементы управления, компоненты и инструменты для Visual Basic, с которыми разработка высококачественных приложений становится еще проще и удобнее. Пакет Power Pack 3.0 для Visual Basic включает в себя элемент управления DataRepeater, элементы управления Line and Shape, компонент PrintForm и библиотеку Printer Compatibility Library и позволяет загрузить все эти компоненты единовременно.

В роли основных объектов при визуальном программировании выступают формы (Forms). Форма представляет собой окно, на котором размещаются управляющие элементы. Управляющие элементы — это командные кнопки (CommandButton), переключатели, или «флажки» (Checkbox), поля выбора, или «радиокнопки» (OptionsButton), списки (ListBox), текстовые поля (TextBox) и др Событийная процедура. Важное место в технологии визуального объектно-ориентированного программирования занимают события. В качестве события могут выступать щелчок кнопкой мыши на объекте, нажатие определенной клавиши, открытие документа и т. д. В качестве реакции на события запускается определенная процедура, которая способна изменять свойства объекта, вызывать его методы и т. д.

Вычислительные системы

однопрограммные и многопрограммные (в зависимости от количества программ, одновременно находящихся в оперативной памяти);

индивидуального и коллективного пользования (в зависимости от числа пользователей, которые одновременно могут использовать ресурсы ВС);

с пакетной обработкой и разделением времени (в зависимости от организации и обработки заданий);

однопроцессорные, многопроцессорные и многомашинные (в зависимости от числа процессоров);

сосредоточенные, распределенные (вычислительные сети) и ВС с теледоступом (в зависимости от территориального расположения и взаимодействия технических средств);

работающие или не работающие в режиме реального времени (в зависимости от соотношения скоростей поступления задач в ВС и их решения);

универсальные, специализированные и проблемно-ориентированные (в зависимости от назначения).

Источник

2.1 Машинные языки

Машинный язык– это совокупность машинных команд, которая отличается количеством адресов в команде, назначением информации, задаваемой в адресах, набором операций, которые может выполнять машина и др. Каждый компьютер имеет свой машинный язык.

При программировании на машинном языке программист может держать под своим контролем каждую команду и каждую ячейку памяти, использовать все возможности имеющихся машинных операций.

Но процесс написания программы на машинном языке очень трудоемкий и утомительный. Программа получается громоздкой, труднообозримой, ее трудно отлаживать, изменять и развивать. Применение машинных языков требует знания специфики представления и преобразования информации в ЭВМ.

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

2.2 Машинно-ориентированные языки

Машинно-ориентированные языки(язык Ассемблер, автокоды, языки символического кодирования и др.), это система обозначений, используемая для представления в удобочитаемой форме программ, записанных в машинном коде.

Несмотря на высокую трудоемкость, ими часто пользуются профессиональные системные программисты, например при разработке программ общего или специального ПО, особенно в тех случаях, когда эти программы должны быть максимально компактными и быстродействующими. Пользователям с недостаточной программистской подготовкой эти языки практически недоступны.

Язык ассемблерапозволяет программисту пользоваться текстовымимнемоническими (т.е. легко запоминаемыми человеком) кодами, по своему усмотрению присваивать символические имена регистрам компьютера и памяти, а также задавать удобные для себя способы адресации. Он позволяет использоватьразличные системы счисления(например, десятичную или шестнадцатеричную) для представления числовых констант, использовать в программе комментарии и др.

Перевод программы с языка ассемблера на машинный язык осуществляется специальной программой, которая называется ассемблером и является, по сути, простейшим транслятором.

Машинные и машинно-ориентированные языки – этоязыки низкогоуровня, требующие указания мелких деталей процесса обработки данных.

Во-первых, машинная программа в конечном счете записывается с помощью лишь двух символов 0 и 1.

Во-вторых, каждая ЭВМ имеет ограниченный набор машинных операций, ориентированных на структуру процессора, типа: переслать число в ячейку; считать число из ячейки; увеличить содержимое ячейки на +1 и т.п. Команда на машинном языке содержит очень ограниченный объем информации, поэтому она обычно определяет простейший обмен содержимого ячеек памяти, элементарные арифметические и логические операции.

2.3 Языки высокого уровня

Языки высокого уровняимитируют естественные языки, обладают укрупненными командами и ориентированы на решение прикладных содержательных задач. Они используют некоторые слова разговорного языка и общепринятые математические символы и более удобны для человека.

Языки программирования высокого уровня имеют следующие достоинства:

алфавит языка значительно шире машинного, что делает его гораздо более выразительным и существенно повышает наглядность и понятность текста;

набор операций, допустимых для использования, не зависит от набора машинных операций, а выбирается из соображений удобства формулирования алгоритмов решения задач определенного класса;

конструкции команд (операторов) отражают содержательные виды обработки данных и задаются в удобном для человека виде;

используется аппарат переменных и действия с ними;

поддерживается широкий набор типов данных.

Языки программирования высокого уровня являются машинно-независимымии требуют использования соответствующих программ-переводчиков для представления программы на языке машины, на которой она будет исполняться. Интерпретация конструкций языка программирования должна бытьабсолютно однозначной,ибо фраза на языке программирования превращается в машинный код автоматически, с помощью программы-транслятора, и любой намек на неоднозначность либо делает эту фразу непереводимой, либо приводит к ошибке.

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Источник

Информационные технологии копия 2

Языки программирования

Как мы уже знаем, компьютерная программа представляет собой логически упорядоченную последовательность команд, предназначенных для управления компьютером. Процессор компьютера – это большая интегральная схема. Все данные и команды он получает в виде электрических сигналов. В двоичном коде наличие сигнала описывается понятием «1», а его отсутствие – понятием «0». Команды, обрабатываемые процессором, можно интерпретировать как ряд чередующихся определенным образом единиц и нулей. То есть любая команда преобразуется в двоичное число. Таким образом, процессор исполняет программы, представляющие собой последовательность чисел и называемые машинным кодом.

Писать программы в машинных кодах очень сложно, причем с ростом размера программы эта задача усложняется. В компьютерах первого поколения использовались программы, написанные в машинных кодах, причем для каждого компьютера существовал свой собственный машинный код. Числовая кодировка команд, адресов ячеек и обрабатываемых данных, зависимость вида про граммы от ее места в памяти не давали возможность следить за смыслом программы. Это во многом ограничивало область применения компьютеров первого поколения. В тот период (начало 50-х гг.) средства программирования и программное обеспечение только зарождались и были еще не развиты. Для того чтобы сделать программу читабельной и иметь возможность следить за ее смысловой структурой, придумали символический язык ассемблер, близкий к машинному (конец 50-х – начало 60-х гг.), в котором появилось понятие переменной. Ассемблер стал первым полноценным языком программирования. Благодаря этому заметно уменьшилось время разработки и возросла надежность программ. Для записи кодов операций и обрабатываемой информации в ассемблере используются стандартные обозначения, позволяющие записывать числа и текст в общепринятом Виде, для кодов команд приняты мнемонические обозначения для обозначения величин, размещаемых в памяти, можно применять имена. После ввода программы ассемблер сам заменяет символические имена на адреса памяти, а символические коды команд на числовые. Использование ассемблера сделало процесс программирование более наглядным. Дальнейшее развитие этой идеи привело к созданию языков программирования высокого уровня, в которых длинные и сложные последовательности машинных кодов были заменены одним единственным обозначающим их словом – операторы.

Читайте также:  Зачем нам нужен русский язык сообщение

Понятие «язык программирования»

Сегодня практически все программы создаются с помощью языков программирования. Теоретически программу можно написать и на естественном языке (говорят: программирование на метаязыке), но из-за неоднозначности естественного языка автоматически перевести такую программу в машинный код пока невозможно.

Языки программирования – это формальные искусственные языки. Как и естественные языки, они имеют алфавит, словарный запас, грамматику и синтаксис, а также семантику.

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

Синтаксис – система правил, определяющих допустимые конструкции языка программирования из букв алфавита.

Семантика – система правил однозначного толкования каждой языковой конструкции, позволяющих производить процесс обработки данных.

Взаимодействие синтаксических и семантических правил определяет основные понятия языка, такие как операторы, идентификаторы, константы, переменные, функции, процедуры и т.д. В отличие от естественных, язык программирования имеет ограниченный запас слов (операторов) и строгие правила их написания, а правила грамматики и семантики, как и для любого формального языка, явно однозначно и четко сформулированы.

Языки программирования, ориентированные на команды процессора и учитывающие его особенности, называют языками низкого уровня. «Низкий уровень» не означает неразвитый, имеется в виду, что операторы этого языка близки к машинному коду и ориентированы на конкретные команды процессора.

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

Языки программирования, имитирующие естественные, обладающие укрупненными командами, ориентированные «на человека», называют языками высокого уровня. Чем выше уровень языка, тем ближе структуры данных и конструкции, использующиеся в программе, к понятиям исходной задачи. Особенности конкретных компьютерных архитектур в них не учитываются, поэтому исходные тексты программ легко переносимы на другие платформы, имеющие трансляторы этого языка. Разрабатывать программы на языках высокого уровня с помощью понятных и мощных команд значительно проще, число ошибок, допускаемых в процессе программирования, намного меньше. В настоящее время насчитывается несколько сотен таких языков (без учета их диалектов).

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

Компиляторы и интерпретаторы

С помощью языка программирования создается текст программы, описывающий разработанный алгоритм. Чтобы программа была выполнена, надо либо весь ее текст перевести в машинный код (это действие и выполняет программа – компилятор) и затем передать на исполнение процессору, либо сразу выполнять команды языка, переводя на машинный язык и исполняя каждую команду поочередно (этим занимаются программы – интерпретаторы).

Интерпретатор функционирует следующим образом: берет очередной оператор языка из текста программы, анализирует его структуру и затем сразу исполняет. После успешного выполнения текущей команды интерпретатор переходит к анализу и исполнению следующей. Если один и тот же оператор в программе выполняется несколько раз, интерпретатор всякий раз воспринимает его так, будто встретил впервые. Поэтому программы, в которых требуется произвести большой объем повторяющихся вычислений, будут работать медленно. Для выполнения программы на другом компьютере также необходимо установить интерпретатор, так как без него программа представляет собой набор слов и работать не может.

Компиляторы полностью обрабатывают весь текст программы (его называют исходным кодом или source code). Они осуществляют поиск синтаксических ошибок, выполняют семантический анализ и только затем, если текст программы в точности соответствует правилам языка, его автоматически переводят (транслируют) на машинный язык (говорят: генерируют объектный код или object code). Нередко при этом выполняется оптимизация с помощью набора методов, позволяющих повысить быстродействие программы. Сгенерированный объектный код обрабатывается специальной программой сборщиком или редактором связей, который производит связывание объектного и машинного кодов. Текст программы преобразуется в готовый к исполнению ЕХЕ-файл (исполнимый код), его можно сохранить в памяти компьютера или на диске. Этот файл имеет самостоятельное значение, и может работать под управлением операционной системы. Его можно перенести на другие компьютеры с процессором, поддерживающим соответствующий машинный код.

Основной недостаток компиляторов – трудоемкость трансляции языков программирования, ориентированных на обработку данных сложной структуры, заранее неизвестной или динамически меняющейся во время работы программы. Для таких программ в машинный код вводятся дополнительные проверки и анализ наличия ресурсов операционной системы, средства динамического захвата и освобождения памяти компьютера, что на уровне статически заданных машинных инструкций осуществить достаточно сложно, а для которых задач практически невозможно.

С помощью интерпретатора, наоборот, для исследования содержимого памяти допустимо в любой момент прервать работу программы, организовать диалог с пользователем, выполнить любые сложные преобразования данных и при этом постоянно контролировать программно-аппаратную среду, что и обеспечивает высокую надежность работы программы. Интерпретатор при выполнении каждой команды подвергает проверке и анализу необходимые ресурсы операционной системы, при возникающих проблемах выдает сообщения об ошибках. В реальных системах программирования смешаны технологии компиляции и интерпретации. В процессе отладки программу можно выполнять по шагам (трассировать), а результирующий код не обязательно будет машинным, он может быть, например, аппаратно-независимым промежуточным кодом абстрактного процессора, который в дальнейшем будет транслироваться в различных компьютерных архитектурах с помощью интерпретатора или компилятора в соответствующий машинный код.

Процесс создания программы включает:

Все перечисленные выше действия требуют наличия специальных программных средств.

Совокупность этих программных средств входит в состав системы программирования:

Классификация и обзор языков программирования

Современное состояние языков программирования можно представить в виде следующей классификации (рис. 2).

Процедурное программирование

Процедурное или императивное (от лат. Imperativus – повелительный) программирование есть отражение фон Неймановской архитектуры компьютера. Программа на процедурном языке состоит из последовательности команд, определяющих процедуру решения задачи. Основным является оператор присваивания, предназначенный для определения и изменения содержимого памяти компьютера. Концепция памяти как места хранения данных, значения которых можно изменять операторами программы, является фундаментальным в императивном программировании.

Выполнение программы сводится к последовательному выполнению операторов с целью преобразования исходного состояния памяти, т.е. программа последовательно обновляет содержимое памяти, изменяя его от исходного состояния до результирующего.

Кобол ( СОmmon Вusiness Oriented Language – общепринятый деловой язык) – язык программирования, ориентированный на решение задач обработки данных. Широко используется для решения учетно-экономических и управленческих задач. Разработан в США в 1958-1960 гг. Программа на Коболе имеет вид ряда предложений на английском языке и напоминает обычный текст. Группы последовательно записанных операторов объединяются в предложения, предложения – в параграфы, параграфы – в· секции. Программист присваивает параграфам и секциям имена (метки), что облегчает непосредственное обращение к нужному участку программы. В СССР был принят русский вариант языка. В Коболе были реализованы мощные средства работы с большими объемами данных, хранящимися на различных внешних носителях. На этом языке создано много приложений; некоторые из них активно эксплуатируются и сейчас. Достаточно сказать, что одной из высокооплачиваемых категорией граждан в США являются программисты на Коболе.

Алгол (ALGOrithmic Language) разработан группой зарубежных специалистов в 1960 г., явился результатом международного сотрудничества конца 50-х гг. (Алгол-60). Алгол предназначался для записи алгоритмов, построенных в виде последовательности процедур, применяемых при решении поставленных задач. Специалисты-практики воспринимали этот язык неоднозначно, но тем не менее, он как признанный международный язык сыграл большую роль в становлении основных понятий программирования и для обучения программистов. В нем впервые введены понятия «блочная структура программы», «динамическое распределение памяти». Внутри блока в Алголе можно вводить локальные обозначения, которые не зависят от остальной части программы. Несмотря на свое интернациональноe происхождение, Алгол-60 получил меньшее распространение, чем Фортран. Например, не на всех зарубежных ЭВМ имелись трансляторы с Алгола-60. В 1968 г. в результате дальнейшего развития и усовершенствования Алгола-60 была создана версия Алroл-68. Это многоцелевой универсальный расширенный язык программирования. Последнее свойство позволяло с помощью одной и той же программы транслятора осуществлять трансляцию с различных расширенных версий языка без дополнительных затрат на приспособление этого языка к различным категориям пользователей, на получение проблемно-ориентированных диалектов языка. По своим возможностям Алгол-68 и сегодня опережает многие языки программирования, однако из-за отсутствия эффективных компьютеров для него не удалось своевременно создать хорошие компиляторы. В нашей стране в те годы под руководством академика Андрея Петровича Ершова был создан транслятор Альфа, который представлял достаточно удачную русифицированную версию Алгола.

В середине 60-х гг. сотрудники математического факультета Дартмутского колледжа Томас Курц и Джон Кемени создали специализированный язык программирования, который состоял из простых английских слов. Новый язык назвали универсальным символическим кодом для начинающих ( Beginners All-purpose Symbolic Instruction Code) или сокращенно BASIC (Бейсик). 1964 г. считают годом рождения этого языка. Он получил самое широкое распространение при работе на персональных компьютерах в режиме интерактивного диалога.

Популярность Бейсика объясняется как простотой его освоения, так и наличием достаточно мощных универсальных средств, пригодных для решения научных, технических и экономических задач, а также задач бытового характера, игровых и т.д. Согласно концепциям, заложенным в Бейсике, в нем широко распространены различные правила умолчания, что считается плохим тоном в большинстве языков программирования подобного типа. Возникло множество версий языка, зачастую мало совместимых друг с другом. Однако, зная одну из версий, можно без особого труда освоить любую другую. Бейсик активно поглощает многие концепции и новинки из других языков. Первоначально интерактивный режим осуществлялся с использованием интерпретатора, в настоящее время для этого языка имеются также и компиляторы.

Читайте также:  Всемирный день родного языка 21 февраля

В начале 60-х гг. каждый из существующих языков программирования был ориентирован на разные классы задач, но в той или иной мере привязан к конкретной архитектуре ЭВМ. Были предприняты попытки преодолеть этот недостаток путем создания универсального языка программирования. ПЛ/1 (PL/1- Programming Language Оnе) – первый многоцелевой универсальный язык, разработан в США фирмой IВM в 1963-1966 гг. Это один из наиболее распространенных универсальных языков, он хорошо приспособлен для решения задач в области вычислительной техники: исследования и планирования вычислительных процессов, моделирования, решения логических задач и исследования логических схем, разработки систем математического обеспечения. При разработке PL/1 были широко использованы основные понятия и средства языков Фортран, Алгол-60, Кобол. PL/1 – богатый и гибкий язык, дает возможность производить вставки, исправлять текст программы в процессе ее отладки. Язык получил широкое распространение, трансляторы с него имеются для многих типов компьютеров. Компания IBM и сегодня продолжает поддерживать этот язык.

Паскаль (Pascal) является одним из наиболее популярных процедурных языков программирования, особенно для персональных компьютеров. Созданный как учебный язык программирования в 1968-1971 гг. Никлаусом Виртом в Высшей технической школе (ЕТН) в Цюрихе (Швейцария), он был назван в честь французского математика и философа Блеза Паскаля (1623-1662). Целью работы Н. Вирта было создание языка, который строился бы на небольшом количестве базовых понятий; имел простой синтаксис; допускал перевод программ в машинный код простым компилятором.

Лингвистическая концепция Паскаля пропагандирует системный подход, выражающийся, в частности, в расчленении крупных задач на меньшие по сложности и размеру, легко поддающиеся решению. К основным принципам Паскаля следует отнести:

В основу разработки языка Паскаль был положен Алгол-60; но в нем ужесточен ряд требований к структуре программы и имеются возможности, позволяющие успешно применять его для создания крупных проектов, например, программ-трансляторов. Паскаль реализован для всех типов компьютеров, в настоящее время используется во многих учебных заведениях для обучения программированию, а также для создания больших реальных проектов.

Период с конца 60-х до начала 80-х гг. характеризуется бурным ростом числа различных языков программирования, сопровождавшим, как это ни парадоксально, кризис программного обеспечения. Этот кризис особенно остро переживало военное ведомство США. B январе 1975 г. Пентагон решил навести порядок среди бесчисленного множества трансляторов и создал комитет для разработки одного универсального языка. На конкурсной основе комитет рассмотрел сотни проектов и выяснил, что ни один из существующих языков не может удовлетворить их требованиям, для окончательного рассмотрения было оставлено два проекта. В мае 1979 г. был объявлен победитель – группа ученых во главе с Жаном Ихбиа. Победивший язык назвали АДА, в честь Ады Лавлейс, дочери великого поэта Байрона. Она в юности была увлечена идеями Чарльза Бэббиджа и помогала ему составлять описание машины, а в начале 40-х гг. XIX в. разработала первую в мире программу для вычислительной машины. Язык АДА – прямой наследник Паскаля. Он предназначен для создания и длительного сопровождения больших программных систем, управления процессами в реальном масштабе времени. В языке четко выражена модульность его конструкций, причем обеспечивается удобство организации разнообразных связей между модулями. Важным его достоинством является возможность параллельного программирования ветвей программы, которые затем могут реализоваться на многопроцессорных компьютерах. Язык АДА сложен для изучения.

Язык программирования С (Си) был разработан в лаборатории Bell для реализации операционной системы UNIX в начале 70-х гг. и не рассматривался как массовый. Он планировался для замены Ассемблера, чтобы иметь возможность создавать столь же эффективные и компактные программы, и в то же время не зависеть от конкретного типа процессора. В·С сочетаются достоинства современных высокоуровневых языков в части управляющих конструкций и структур данных с возможностями прямого доступа к аппаратным средствам компьютера. Синтаксис языка С обеспечивает краткость программы, его компиляторы генерируют эффективный объектный код. Одна из наиболее существенных особенностей С состоит в том, что различия между выражениями и операторами нивелируются, это приближает его к функциональным языкам. Например, выражение может обладать побочным эффектом присваивания, а также может использоваться в качестве оператора. Нет четкого различия между процедурами и функциями, более того, понятие процедуры вообще не вводится. Синтаксис языка затрудняет программирование и восприятие составленных программ. Отсутствует строгая типизация данных, что предоставляет дополнительные возможности программисту, но не способствует созданию надежных программ. Язык С приобрел большую популярность среди системных и прикладных программистов. В настоящее время этот язык реализован для большинства компьютерных платформ.

Функциональное программирование

Суть Функционального (аппликативного) программирования определена А. П. Ершовым как «способ составления программ, в которых единственным действием является вызов функции, единственным способом расчленения программы на части является введение имени функции, а единственным правилом композиции – оператор суперпозиции функций. Никаких ячеек памяти, ни операторов присваивания, ни циклов, ни, тем более, блок-схем, ни передачи управления».

Основной конструкцией в функциональных языках является выражение. К выражениям относятся константы, структурированные объекты, функции, их тела и вызовы функций. Аппликативный язык программирования включает следующие элементы:

Программа представляет собой последовательность описаний функций и выражения, которые необходимо вычислить. Выражение вычисляется методом редукции, т.е. проводится серия упрощений, до тех пор, пока это возможно по следующим правилам: вызовы базовых функций заменяются соответствующими значениями; вызовы не базовых функций заменяются их телами, в которых параметры заменены аргументами.

Функциональное программирование не рассматривает память как хранилище значений. Понятие оператора присваивания отсутствует, поэтому переменные обозначают объекты программы, что полностью соответствует понятию переменной в математике. Можно составлять программы и без переменных. Нет существенных различий между константами и функциями, т.е. между программами и данными. В результате этого функция может быть значением вызова другой функции и может быть элементом структурированного объекта. Число аргументов при вызове функции не обязательно должно совпадать с числом параметров, указанных при ее описании.

Первым таким языком стал Лисп (LISP, LISt Processing – обработка списков), созданный в 1959 г. Джоном Маккарти. Этот язык ориентирован на структуру данных в форме списка и позволяет организовать эффективную обработку больших объемов текстовой информации. Существенная черта языка – унификация программных структур и структур данных: все выражения записываются в виде списков.

Логическое программирование

Создание языка искусственного интеллекта Пролог (PROLOG, PROgramming in LOGic – программирование в терминах· логики) в 1973 г. французским ученым Аланом Кольмероэ открыло новую область – логическое или реляционное программирование.

Центральным понятием в логическом программировании является отношение. Программа представляет собой совокупность определений отношений между объектами и цели. Процесс выполнения программы трактуется как процесс общезначимости логической формулы, построенной из программы по правилам, установленным семантикой используемого языка. Результат вычисления является побочным продуктом этого процесса. В логическом программировании нужно только специфицировать факты, на которых основывается алгоритм, а не определять последовательность шагов, которые требуется выполнить. Это свидетельствует о декларативности языка логического программирования. Логические программы имеют небольшое быстродействие, так как вычисления. осуществляются методом проб и ошибок, поиском с возвратами к предыдущим шагам.

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

Объектно-ориентированное программирование ( ООП)

Пионером данного направления явился язык Смолток (Smalltalk), первоначально предназначенный для реализаций функций машинной графики. Работа над языком началась в 1970 г. в исследовательской лаборатории XEROX (США), а закончилась в 1980 г. окончательным вариантом интерпретатора Smalltalk-80. Данный язык оригинален тем, что его синтаксис очень компактен и базируется исключительно на понятии объекта. В нем отсутствуют операторы или данные, все, что входит в Смолток, является объектами, а объекты общаются друг с другом исключительно с помощью сообщений. В настоящее время версия Vis u a l Age for Smalltalk активно развивается компанией IBM.

Основой объектно-ориентированного программирования (ООП) является понятие объект. Его сущность выражается формулой «объект = данные + процедуры». Каждый объект содержит некоторую структуру данных и доступные только ему процедуры (методы) обработки этих данных. Используя эту методологию, можно создать свой собственный абстрактный тип и отобразить проблемную область в эту созданную абстракцию вместо традиционного ее отображения в предопределенные управляющие структуры и структуры данных языка программирования. Объединение данных и свойственных им процедур обработки в одном объекте называется инкапсуляцией и присуще ООП.

Другим фундаментальным понятием ООП является класс. Класс – это шаблон, на основе которого может быть создан конкретный программный объект, он определяет свойства и методы объекта, принадлежащего этому классу. Соответственно, любой созданный объект становится экземпляром класса. Класс обеспечивает скрытие данных, их гарантированную инициализацию, неявное преобразование типов для типов, определенных пользователем, динамическое задание типа, контролируемое пользователем управление памятью и механизмы перегрузки операций.

ООП является более естественным, так как предоставляет возможность выбрать имеющиеся или создать новые объекты и организовать взаимодействия между ними. Следовательно, объектно-ориентированные языки по сравнению с процедурными являются языками более высокого уровня.

К наиболее современным объектно-ориентированным языкам программирования относятся С++ и Java.

По определению автора, Java является простым объектно-ориентированным и архитектурно-нейтральным языком интерпретирующего типа, обеспечивающим надежность, безопасность и переносимость, обладает высокой производительностью, многопоточностью и динамичностью.

Идеи ООП проникли во многие процедурные языки. Например, в состав интегрированной системы программирования Паскаль (корпорации Borland International), начиная с версии 5.5, входит специальная библиотека ООП Turbo Vision.

С середины 90-х гг. многие объектно-ориентированные языки реализуются как система визуального программирования. Такие системы имеют интерфейс, позволяющий при составлении текста программы видеть те графические объекты, для которых она пишется. Отличительной особенностью этих систем является наличие в них среды разработки программ из готовых «строительных блоков» позволяющих создавать интерфейсную часть программного продукта в диалог

Источник

Интересные факты из жизни