Студопедия

КАТЕГОРИИ:

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

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




Вас может удивить, что в определении не упоминается слово «компьютер»! Программы и языки могут быть определены как сугубо формальные математические объекты.

Однако люди больше интересуются программами, чем другими математическими объектами типа групп, именно потому, что программу — последовательность символов — можно использовать для управления работой компьютера.

И мы с вами ограничимся, в основном, изучением того, как программы выполняются на компьютере.

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

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

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

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

Обычно в ЭВМ выполнение операции состоит в том, чтобы из определённых ячеек памяти взять хранящуюся там информацию, передать её в АУ для выполнения над ней нужного действия, результат которого отправить в указанную ячейку памяти, и сообщить УУ номер ячейки следующей команды.

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

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

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

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

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

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

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

 

Термин Англ. термин Разъяснение
программирование programming Раздел прикладной математики, изучающий и разрабатывающий методы и средства составления, проверки и улучшения программ на ЭВМ.
программирование programming Процесс подготовки задач для их решения на ЭВМ. Включает следующие этапы: 1) поиск алгоритмического решения, 2) составление программы на языке ЭВМ, 3) трансляцию с языка программирования на машинный язык.
язык (программирования) programming language Формальный язык, состоящий из переменных, операторов, операций и других синтаксических конструкций, применяемых для описания информации (данных) и алгоритма (программы) для их отображения на ЭВМ.

Развитие Программирования как науки началось с 1947 в работах американских математиков Дж. Неймана, А. Беркса и Г. Голдстайна, которые описали принципы ЭВМ, управляемой программой, хранящейся в памяти. Они же ввели в употребление блок-схемы программы.

Понятие подпрограммы и методики её использования было введено в 1951 английскими учёными М. Уилксом, Дж. Уилером и С. Гиллом.

Советский математик А. А. Ляпунов, первым в СССР прочитавший в МГУ в 1952 курс Программирования, определил Программирование как многоэтапный процесс и ввёл в Программирование аппарат символических обозначений, явившийся предвестником языков Программирование высокого уровня.

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

Все программы, по сути, обрабатывают данные. При этом понятие данных можно трактовать весьма широко. Однако все они для современных ЭВМ кодируются определенным набором нулей и единиц. Внутри машины программы работают именно с такими битовыми данными, но современный программист может не видеть такой «мелочности» и оперировать привычными для человека понятиями: числами, строками, объектами и т.п.

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

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

транслятор (языка программирования) translator (of the programming language) Программа, переводящий алгоритм, написанный на языке программирования высокого уровня, в объектный код или в псевдокод исполнителя. По этому принципу трансляторы делятся на компиляторы и интерпретаторы.
компилятор compiler Транслятор, преобразующий текст программы в объектный код.
интерпретатор interpreter Транслятор, преобразующий текст программы на языке высокого уровня в псевдокод, немедленно исполняющийся на компьютере. К "интерпретируемым" языкам относят языки: "Бейсик", "Perl", "Python", Java и т.д.
объектный код object code Код, генерируемый компилятором, который максимально приближен к машинным кодам ЭВМ. В готовую к исполнению на ЭВМ программу этот код преобразуется при помощи компоновщика.

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

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

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

2. Краткая история языков программирования

Машинные команды

В настоящее время программирование стало широко распространенным видом человеческой деятельности.

А началось настоящее программирование в современном понимании с момента создания первой электронной вычислительной машины.

Первые ЭВМ позволяли выполнять программы на машинном языке, который является единственным языком, понятным ЭВМ. Он реализуется аппаратно: каждую команду выполняет некоторое электронное устройство.

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

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

Мнемокоды

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

Переменная – в программировании это буквенное обозначение области памяти, в которой хранится некоторое значение.

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

Структурное программирование

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

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

Есть еще Неструктурное программирование, котороедопускает использование в явном виде команды безусловного перехода (в большинстве языков GOTO). Типичные представители неструктурных языков - ранние версии Бейсика и Фортрана.

Однако в языках высокого уровня наличие команды перехода влечет за собой массу серьезных недостатков: программа превращается в "спагетти" с бесконечными переходами вверх-вниз, ее очень трудно сопровождать и модифицировать. Фактически неструктурный стиль программирования не позволяет разрабатывать большие проекты. Ранее широко практиковавшееся первоначальное обучение программированию на базе неструктурного языка (обычно Бейсика) приводило к огромным трудностям при переходе на более современные стили. Как отмечал известный голландский ученый Э. Дейкстра, "программисты, изначально ориентированные на Бейсик, умственно оболванены без надежды на исцеление".

Современное программирование

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

Широкое распространение получили объектно-ориентированные языки программирования (ООП), на которых легче реализовать большие и сложные проекты. Их отличие от языков высокого уровня заключается в возможности отстранения от алгоритма выполнения программы. С помощью таких языков разработчик как бы оперирует виртуальными объектами.

Некоторые причины и тенденции развития языков программирования

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

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

3. Желание, чтобы программы работали на разных платформах, привело к развитию независимости от ЭВМ языков системного программирования. Языки системного программирования, на которых создаются операционные системы, трансляторы и другие системные программы, развиваются в направлении независимости от ЭВМ. Так, например, большая часть операционных систем написана на языке C, а не на ассемблере. Например, операционная система Unix практически полностью написана на C.

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

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

3. Парадигмы программирования

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

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

В настоящее время языки программирования в зависимости от применяемой вычислительной модели делятся на четыре основные группы:

  • Процедурные языки, которые представляют собой последовательность выполняемых операторов. Если рассматривать состояние ПК как состояние ячеек памяти, то процедурный язык – это последовательность операторов, изменяющих значение одной или нескольких ячеек. К процедурным языкам относятся FORTRAN, C, Ada, Pascal, Smalltalk и некоторые другие. Процедурные языки иногда также называются императивными языками. Код программы на процедурном языке может быть записан следующим образом:
оperator1; operator2; operator3;
  • Аппликативные языки, в основу которых положен функциональный подход. Язык рассматривается с точки зрения нахождения функции, необходимой для перевода памяти ПК из одного состояния в другое. Программа представляет собой набор функций, применяемых к начальным данным, позволяющий получить требуемый результат. К аппликативным языкам относится язык LISP. Код программы на аппликативном языке может быть записан следующим образом:
· function1(function2( function3(beginning_date)));
  • Языки системы правил, называемые также языками логического программирования, основываются на определении набора правил, при выполнении которых возможно выполнение определенных действий. Правила могут задаваться в виде утверждений и в виде таблиц решений. К языкам логического программирования относится язык Prolog.

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

if condition1 then operator1;  if condition2 then operator2;  if condition3 then operator3;
  • Объектно-ориентированные языки, основанные на построении объектов как набора данных и операций над ними. Объектно-ориентированные языки объединяют и расширяют возможности, присущие процедурным и аппликативным языкам. К объектно-ориентированным языкам относятся C++, Object Pascal, Java.

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

(Аппликативность означает, что программа есть выражение, составленное из применения функций к аргументам.)










Последнее изменение этой страницы: 2018-04-12; просмотров: 683.

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