Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Классификация языков программирования высокого уровня ( Развитие языков программирования )

Содержание:

Введение

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

Язык программирования - это способ записи программ решения различных задач на ЭВМ в ясной для компьютера форме. Существенным событием в истории языков программирования стало создание в 1963 году языка Бэйсик преподавателями Дартмутского Колледжа Джоном Кемени и Томасом Куртцом и реализован командой студентов колледжа под их руководством. Со временем, когда стали появляться другие диалекты, этот «изначальный» диалект стали называть Dartmouth BASIC.

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

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

1.Основы программирования

1.1 Развитие языков программирования

Первые языки программирования возникли в 20-е, 30-е годы ХХ столетия и были довольно примитивны и ориентированы на численные расчеты (математические и физические) и прикладные задачи, в частности, в области военного дела.

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

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

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

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

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

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

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

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

Модульное программирование основано на понятии модуля. Принципы модульного программирования программных продуктов во многом сходны с принципами нисходящего проектирования.

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

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

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

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

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

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

1.2 Этапы решения задач с помощью ЭВМ

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

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

Второй этап - математическое или информационное моделирование. Цель этого этапа - создать такую математическую модель решаемой задачи, ко­торая может быть реализована в компьютере. Существует целый ряд задач, где математическая постановка сводится к простому перечислению формул и логи­ческих условий. Этот этап тесно сопряжен с первым этапом, и его можно в отдельности не рассматривать, однако допустимо, что для полученной модели известен ряд методов решения, и тогда предстоит выбрать наилучший. Третий этап - алгоритмизация задачи. На основе математического описания необходимо разработать алгоритм решения. Используются разнообразные способы записи алгоритмов. Широко известен словесный способ записи. Четко представляется алгоритм языком блок-схем.

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

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

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

Шестой этап - тестирование и отладка программы. На этом этапе проис­ходят исполнение алгоритма с помощью ЭВМ, поиск и исключение ошибок. При этом программисту приходится выполнять рутинную работу по проверке работы программы, поиску и исключению ошибок, и поэтому для сложных программ этот этап часто требует гораздо больше времени и сил, чем написание первоначального текста программы. Отладка программы - сложный и нестандартный процесс. Исходный план отладки заключается в том, чтобы тестировать программу на контрольных при­мерах. Контрольные примеры стремятся выбрать так, чтобы при работе с ними про­грамма прошла все основные пути блок-схемы алгоритма, поскольку на каждом из пyтей могут быть свои ошибки, а детализация плана зависит от того, как поведет себя программа на этих примерах: на одном она может зациклиться (т. е. бесконечн­о повторять одно и то же действие); на другом - дать явно неверный или бесс­мысленный результат и т. д. Сложные программы отлаживают отдельными фраг­ментами.

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

Седьмой этап - исполнение отлаженной программы и анализ результа­тов. На этом этапе программист запускает программу и задает исходные данные, требуемые по условию задачи.

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

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

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

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

В случае деления языков программирования на три уровня, низшим уровнем будет являться машинный код – набор команд, выполняемых конкретным процессором и разработанных специально для него. Обычно является последовательностью шестнадцатеричных символов. Вывод строки «Hello, World!» для процессора архитектуры x86 выглядит так: BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21. Средним уровнем будут являться машинно-ориентированные языки, то есть языки, призванные управлять непосредственно командами процессора, но более доступным для человеческого восприятия языком. Примером являются языки ассемблера. Язык ассемблера, по сути, представляет каждую команду машинного кода с помощью удобных для восприятия человеком символических команд – мнемокодов. Как правило, язык ассемблера использует особенности конкретного семейства процессоров. Высшим же уровнем будут считаться машинно-независимые языки. Они разработаны для удобства восприятия, быстроты понимания и работы с ними. Характерная черта этих языков программирования – абстракция, то есть введение смысловых конструкций, кратко описывающих данные и операции над ними, описания которых в машинно-ориентированных языках очень длинны и сложны для понимания. Также они были призваны обеспечить платформенную независимость сути алгоритмов. С их появлением зависимость от платформы перекладывается на трансляторы, «переводящие» текст, написанный на языке высокого уровня, в элементарные машинные команды. Примерами языков программирования высокого уровня являются C++, C#, PHP, Perl, Java и многие другие.

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

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

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

Языки пятого поколения, теоретически, должны ещё больше упростить и ускорить работу программистов: целью этих языков является переложить значительную часть работы с человека на компьютер. Чаще всего сюда относят языки экспертных систем, баз знаний. В настоящее время, действительно, нет решений, которые могут выдавать полноценный продукт, получая при этом лишь задачу. Некоторые авторы говорят о системе MathCAD, она действительна заметно облегчает работу пользователей, беря на себя огромную долю вычислительной работы. Но всё же, на данный момент нет чёткого определения, по каким критериям определить языки пятого поколения. Одно ясно: с их использованием компьютер должен будет решить поставленную задачу без необходимости пользователю вручную реализовывать алгоритм.

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

В процедурных языках программа явно описывает необходимые к выполнению действия, то есть она является чёткой последовательностью команд, которые необходимо выполнить компьютеру. Можно сказать, что, программируя на этих языках, программист говорит компьютеру, не что делать, а как. К этому классу можно отнести большинство языков программирования: Pascal, Basic, C и другие.

Непроцедурные языки можно запросто назвать противоположностью языкам процедурным. Декларативное программирование – парадигма программирования, в которой описывается, что необходимо сделать компьютеру. Хорошим примером служит язык разметки HTML, возьмём тег <img>: необходимо просто заключить в него ссылку на изображение, а каким образом оно отобразится на странице – это задача компьютера.

В функциональном программировании процесс вычисления можно описать как вычисление значений функций в математическом понимании. На практике, отличие математической функции от понятия «функция» в императивном программировании заключается в том, что императивные функции могут опираться не только на аргументы, но и на состояние внешних по отношению к функции переменных, таким образом, получая в разных местах программы разные выходные данные. А в функциональном языке при вызове функции с одними и теми же аргументами мы всегда получим один и тот же результат – выходные данные зависят только от входных. Это позволяет средам функционального программирования кэшировать результаты выполнения функций и вызывать их в нужный момент. Примерами можно привести LISP – первый функциональный язык, Haskell и другие.

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

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

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

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

2.1 Особенности языков программирования высокого уровня

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

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

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

Отличия языков программирования высокого уровня

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

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

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

В языках программирования высокого уровня нет точного соответствия между языковыми конструкциями и машинными командами. Преобразование строк исходного кода в последовательности двоичных команд осуществляется транслятором. К таким языкам относятся PL /1, Pascal, C, C++, Java. Все они менее эффективно используют аппаратуру по сравнению с языками Ассемблера, но позволяют быстрее создавать приложения. В результате им удалось практически полностью вытеснить языки Ассемблера при создании крупных приложений.

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

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

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

• для описания структур управления программист может использовать также такие ключевые слова, как if, while; последовательности машинных команд, соответствующие этим описаниям, транслятор генерирует динамически.

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

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

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

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

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

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

2.1 Процедурно-ориентированные языки программирования

Процедурно-ориентированные языки программирования относятся к машинно-независимым. Они являются основными языками описания алгоритмов и имеются в математическом обеспечении по существу всех современных вычислительных машин. Операционная система ЕС ЭВМ позволяет использовать при программировании такие языки, как Алгол, Фортран, Кобол и ПЛ/1, относящиеся к этой группе. Будучи почти независимыми от конкретной вычислительной машины, они приближаются по синтаксису к естественным языкам.

Прежде всего в настоящее время известны такие специализированные языки, ориентированные на организацию диалогового взаимодействия, как АПЛ и БЕЙСИК. В состав этих языков введены операторы, предусматривающие различные формы выдачи информации как о решаемой задаче, так и о ходе работы ЭВМ в целом, операторы для ввода информации с терминалов и пр. Однако написание всего прикладного ПО САПР на диалоговом языке программирования может привести к снижению эффективности программ по занимаемой памяти и быстродействию. Поэтому для разработки программных модулей, реализующих функции диалога, часто применяются процедурно-ориентированные языки программирования, с помощью которых записываются и другие части прикладного ПО.

Для решения большинства научно-технических и инженерных задач широко используются алгоритмические языки Фортран-IV, Алгол-60, Бейсик и др. Алгоритмический язык Кобол ориентирован на решение экономических задач. Разработан целый ряд специализированных языков. Так, например, языки Симула, GPSS, SOL и др. предназначены специально для решения задач моделирования. В настоящее время широкое распространение получил язык ПЛ-1, сочетающий в себе достоинства таких языков, как Фортран, Алгол и Кобол. В последнее время разработаны и находят применение новые алгоритмические языки высокого уровня, предоставляющие пользователю целый ряд дополнительных возможностей. Среди них следует отметить языки Паскаль и Ада. Применение процедурно-ориентированных языков программирования позволяет значительно облегчить процесс программирования и прохождения задач на ЭВМ.

2.2 Проблемно–ориентированные языки программирования

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

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

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

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

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

    Базовый проблемно-ориентированный язык для описания графической информации ОГРА-1 предназначен для описания графических конструкторских документов и операций их формирования в САПР.

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

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

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

    Одним из важнейших положений, определяющих качество функционирования иерархической системы управления, является математическое и программное обеспечение. Немаловажным фактором становится и выбор языка программирования. В целом можно указать следующее. Необходимо иметь многопрограммную, приоритетно-обоснованную в реальном времени операционную систему. Наиболее широко применяемыми языками программирования являются ФОРТРАН и БЭЙСИК, но их использование не исключает и разработки специальных проблемно-ориентированных языков.

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

Свойства объектно-ориентированных языков программирования

Основой объектно-ориентированных языков являются такие принципы, как: инкапсуляция; наследование; полиморфизм. -

3. Абстракция и инкапсуляция

Любая книга из рода “Объектно-ориентированное программирование для чайников” выделяет один из главных принципов - абстракцию. Идея состоит в разделении деталей или характеристик реализации программы на важные и неважные. Необходима для крупных проектов, позволяет работать на разных уровнях представления системы, не уточняя детали. Абстрактный тип данных представляется как интерфейс или структура. Позволяет не задумываться над уровнем детализации реализации. АТД не зависит от других участков кода. Известный афоризм Дэвида Уилера гласит: Все проблемы в информатике можно решить на другом уровне абстракции.

Инкапсуляция ограничивает доступ компонентов к другим, связывает данные с методами для обработки. Для инкапсуляции используется спецификатор доступа private.

Обычно понятия инкапсуляция и сокрытие отождествляются, но некоторые языки различают эти понятия. Другими словами, критичные для работы свойства защищаются, а их изменение становится невозможным. class Animal { private $name; function __construct($name) { $this->name = $name; } function getName() { return $this->name; } } Name принимается в качестве аргументов

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

Наследование

Объектно-ориентированные языки являются наследуемыми - это один из важнейших принципов. Наследование классов Означает, что функциональность некоторого типа может быть повторно использована. Класс, который наследует свойства другого, называется производным, потомком или подклассом. Тот, от которого происходит наследование, называется предком, базовым или суперклассом. Связь потомок-наследник порождает особую иерархию. Существует несколько типов наследования: простое; множественное. При множественном наследовании может быть несколько детей от одного предка, когда при простом - только один. Это является основным различием между типами. Наследование выглядит так: class Animal { function draw() { return "just animal"; } function eat() { return "the animal is eating"; } } class Cow extends Animal { function draw() { Return "something that looks like a cow"; } } Видим, что class Cow унаследовал все методы от class Animal. Теперь, если выполнить Cow.eat(), получаем "the animal is eating", соответственно, метод draw() изменен. Cow.draw() вернет “something that looks like a cow”, а Animal.draw() вернет “just animal”.

Полиморфизм

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

Рисунок 1 Пример полиморфизм

В примере выше находится таблица. Мы видим class CardDesk и class GraphicalObject. У обоих есть функция под названием draw(). Она выполняет разные действия, хотя имеет одно имя. Ad hoc полиморфизм или специальный полиморфизм использует: перегрузку функций, методов; приведение типов. Перегрузка подразумевает использование нескольких функций с одним именем, когда выбор подходящих происходит на этапе компиляции. Приведение типов означает преобразование значения одного типа в значение другого типа. Существует явное преобразование - применяется функция, которая принимает один тип, а возвращает другой, неявное - выполняется компилятором или интерпретатором.

Обзор некоторых языков программирования высокого уровня

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

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

Название языка программирования BASIC было придумано в классических традициях информатики, что привело к хорошему сокращению наименования, Beginner's All-purpose Symbolic Instruction Code (Многоцелевой код символьных инструкций для начинающих). Название связано с названием неопубликованной работы изобретателя языка Томаса Курца . Некоторые критики шутливо называют его Попытка языка Билла захватить контроль над промышленностью в ответ на политику Microsoft в отношении интерпретатора Бейсика, который включенали во все поставки с ранними ПК совместимых с IBM. Программирование для чайников.

История

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

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

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

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

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

Простота и мощь

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

Безопасность

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

Объектная ориентированность

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

Надежность

Java ограничивает программиста в нескольких ключевых областях и таким образом способствует обнаружению ошибок на ранних стадиях разработки программы. В то же время в ней отсутствуют многие источники ошибок, свойственных другим языкам программирования (строгая типизация, например). Большинство используемых сегодня программ “отказывают” в одной из двух ситуаций: при выделении памяти, либо при возникновении исключительных ситуаций. В традиционных средах программирования распределение памяти является довольно нудным занятием — программисту приходится самому следить за всей используемой в программе памятью, не забывая освобождать ее по мере того, как потребность в ней отпадает. Зачастую программисты забывают освобождать захваченную ими память или, что еще хуже, освобождают ту память, которая все еще используется какой-либо частью программы. Исключительные ситуации в традиционных средах программирования часто возникают в таких, например, случаях, как деление на нуль или попытка открыть несуществующий файл, и их приходится обрабатывать с помощью неуклюжих и нечитабельных конструкций (кроме Delphi). Java фактически снимает обе эти проблемы, используя сборщик мусора для освобождения незанятой памяти и встроенные объектно-ориентированные средства для обработки исключительных ситуаций.

Интерактивность

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

Независимость от архитектуры ЭВМ

Вопрос о долговечности и переносимости кода важнее религиозных войн между ПК и Макинтошами. Создатели Java наложили на язык и на среду времени выполнения несколько жестких требований, которые на деле, а не на словах позволяют, однажды написав, всегда запускать программу в любом месте и в любое время (где существует виртуальная Java-машина – браузеры на всех платформах, OS/2, Netware).

Интерпретация плюс высокая производительность

Необычайная способность Java исполнять свой код на любой из поддерживаемых платформ достигается тем, что ее программы транслируются в некое промежуточное представление, называемое байт-кодом (bytecode). Байт-код, в свою очередь, может интерпретироваться в любой системе, в которой есть среда времени выполнения Java. Большинство ранних систем, в которых пытались обеспечить независимость от платформы, обладало огромным недостатком — потерей производительности (Basic, Perl). Несмотря на то, что в Java используется интерпретатор, байт-код легко переводится непосредственно в “родные” машинные коды (Just In Time compilers) “на лету”. При этом достигается очень высокая производительность (Symantec JIT встроен в Netscape Navigator).

Простота изучения

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

Богатая объектная среда

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

Заключение

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

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

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

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

Список источников

1. Алгоритмизация и программирование: Учебное пособие / . - М.: ИД ФОРУМ: НИЦ ИНФРА-М, 2014. - 352 с.

2. Бабушкина, по объектно-ориентированному программированию / , . - 3-е изд. (эл.). - М. : БИНОМ. Лаборатория знаний, 2012. - 366 с.

3. Базовые средства программирования/ . - М.: Форум: НИЦ ИНФРА-М, 2015. - 304 с.

4. Введение в специальность программиста: Учебник / . - 2-e изд., испр. и доп. - М.: ИД ФОРУМ: НИЦ Инфра-М, 2013. - 208 с.

5. Голицына программирования: Учебное пособие / , , . - 3-e изд., перераб. и доп. - М.: Форум: ИНФРА-М, 2015. - 400 с

6. Ездаков, и логическое программирование: учебное пособие / . - 2-е изд. - М. : БИНОМ. Лаборатория знаний, 2011. - 119 с.

7. Информатика, автоматизированные информационные технологии и системы: Учебник / . - М.: ИД ФОРУМ: НИЦ ИНФРА-М, 2015. - 544 с.

8. Каймин : Учебник/ , 6-е изд. - М.: НИЦ ИНФРА-М, 2015. - 285 с

9. Культин программирования в Delphi XE. — СПб.: БХВ-Петербург, 2011. — 405 с.

10. Культин, программирования в Delphi 7 / . — 2-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2011. — 640 с.

11. Масленникова, искусственного интеллекта: учеб. пособие / , . - 2-е изд., стер. - М.: ФЛИНТА, 2013. - 282 c.

12. Машнин Java-технологии на практике. — СПб.: БХВ-Петербург, 2010. — 560 с.

13. Монахов программирования Java и среда NetBeans. — 3-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2011. — 703 с.

14. Окулов, программирования / . - 5-е изд., испр. - М.: БИНОМ. Лаборатория знаний, 2011. - 440 с.

15. Осипов данных и Delphi. Теория и практика. — СПб.: БХВ-Петербург, 2011. — 746 с.

16. Основы алгоритмизации и программирования: Учебное пособие / ; Под ред. . - М.: ИД ФОРУМ: ИНФРА-М, 2015. - 416 с.

17. Программирование на языке Object Pascal: Учеб. пос. / и др; Под ред. . - М.: ИД ФОРУМ: НИЦ ИНФРА-М, 2013. - 496 с.

18. Программирование на языке высокого уровня. Учебное пособие / ; Под ред. . - М.: ФОРУМ: ИНФРА-М, 2015. - 496 с.

19. Программирование на языке Си/, - М.: Форум, НИЦ ИНФРА-М, 2015. - 144 с.

20. Технология разработки программного обеспечения: Учеб. пос. / , , ; Под ред. проф. - М.: ИД ФОРУМ: НИЦ Инфра-М, 2013. - 400 с.

21. Языки программирования: Учебное пособие / , , . - 3-e изд., перераб. и доп. - М.: Форум: ИНФРА-М, 2015. - 400 с.