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

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

Содержание:

Введение

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

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

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

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

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

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

На сегодняшний день в мире существуют сотни различных языков программирования, которые в общем можно разделить на языки программирования низкого (Asembler) и высокого уровня (Pascal, Basic, Delphi, C и т.д.).

Целью данной курсовой работы является исследование классификацию языков программирования высокого уровня.

Объект исследования – основы алгоритмизации и программирования.

Предмет исследования – языки программирования высокого уровня.

Основные задачи работы:

  • Определить этапы решения задач с помощью ЭВМ;
  • Исследовать развитие языков программирования;
  • Исследовать классификации языков программирования;
  • Определить классификацию языков программирования высокого уровня;
  • Сделать обзор некоторых языков программирования высокого уровня (Basic, Java).

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

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

Со времени создания первой вычислительной машины прошло более шести десятилетий. За это время несколько раз менялась элементная база ЭВМ, уменьшились размеры и потребляемые мощности, увеличилась скорость вычислений, стало гораздо удобнее с ними работать. Внедрение и широкое использование средств вычислительной техники является одним из главных факторов ускорения научно-технического прогресса в любой стране мира. Стремительно возрастает роль ЭВМ во всех областях человеческой деятельности. Без использования быстродействующих ЭВМ немыслимо решение задач интенсификации экономического развития ведущих отраслей народного хозяйства [1].

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

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

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

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

Математическая формулировка задачи завершается выбором метода ее решения.

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

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

Четвертый этап – программирование, то есть запись составленного алгоритма на языке программирования. [3]

Пятый этап – тестирование и отладка программы – это проверка правильности работы программы на компьютере и исправления найденных в ней ошибок.

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

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

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

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

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

Развитие языков программирования берет свое начало с XIX века. В то время английским ученым Чарльзом Бэббиджем была разработана механическая вычислительная машина, программу для которой разработала леди Ада Лавлейс, дочь лорда Байрона (в честь этой женщины назван язык программирования ADA). Однако языки программирования в современном понимании фактически начали развиваться с появлением электронной вычислительной машины [10].

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

Рис. 1. Фрагмент сети языков программирования

Язык программирования - это алгоритмический язык, предназначенная для записи алгоритма и данных для ЭВМ.

Независимо от того, на каком языке разработана программа, в компьютере выполняется только программа «машинной» языком, то есть подаваемой двоичными символами 0 и 1. Для первых ЭВМ сами программисты разрабатывали программы «машинными» языках. Но это была довольно сложная работа, которая требовала хорошего знания структуры и принципов взаимодействия устройств компьютера. Позже появились языки символьного кодирования, в которых команды подавались не двоичным кодом, а символами (например, ДОБАВИТЬ А В, по этой командой в число А добавлялось число В) [8].

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

Затем в языки символьного кодирования начали включаться макрокоманды, которые реализуются последовательностью из нескольких машинных команд. Использование макрокоманд в языках символьного кодирования еще больше облегчило разработку программ. Разновидности языков символьного кодирования называют Автокоды, а также на языке ассемблера [11].

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

Уже на первых этапах развития вычислительной техники начались разработки языков программирования, доступных для широкого круга пользователей и не связанных с конкретной вычислительной машиной. Такие языки назвали языки высокого уровня. Первым таким языком, который получил широкое признание среди программистов мира, стал Фортран, разработанный в 1954 году в США. Этот язык близок к обычному языку алгебры и ориентирован на решение вычислительных задач. В 1960 году группа ученых разных стран разработала язык программирования Алгол-60, который также ориентирован на решение вычислительных задач, но его конструкции были более наглядными [19].

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

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

Позже были разработаны десятки различных специализированных языков, например, Симула - язык моделирования, Лисп - язык для решения информационно-логических задач. Рапира - язык для решения учебных задач.

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

Языки программирования, которые в той или иной степени соответствуют всем указанным требованиям, относят к классу универсальных языков. Наиболее известными языками этого класса были язык ПЛ-1, разработанный в 1964 году, и язык Алгол-65. Впрочем, эти языки оказались достаточно сложными, кроме этого, язык ПЛ-1 не удовлетворяла требованию надежности написания программ. Затем получил распространение универсальный язык Pascal, разработанный специально для обучения программированию.

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

Языки объектно-ориентированного программирования (ООП) начали развиваться в конце XX века [1-5].

Сегодня они являются основными языками высокого уровня для профессионального программирования. Эти языки содержат конструкции, позволяющие описывать объекты и их классы, и которые имеют средства работы с абстрактными типами данных. К таким языкам относятся, в частности, C ++, Object Pascal, Java, C #.

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

Существуют сотни различных классификаций языков программирования. Однако к основным классификационных признаков следует отнести следующие: степень зависимости как от аппаратных средств, принципы программирования и ориентация на класс задач (рис. 2) [7].

Языки

программирования

машинно-ориентированные

(Ассемблер, внутренний язык ЭВМ)

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

проблемно-ориентированные,

предназначены для решения

определенного класса задач

(моделирования, экономические

и т.д.)

процедурно-ориентированные, универсальные, для научно-технических и др. задач

(С, Бейсик и Паскаль)

Языки

высокого уровня

Языки

низкого уровня

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

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

Универсальные языки предназначены для решения широкого класса задач. До этих языков относят Pascal, С, C ++ и другие. Особым классом универсальных языков являются языки, реализованные в визуальных средах программирования (Visual Basic, Delphi и другие) [14].

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

По принципам программирования различают процедурные, непроцедурные языки и языки объектно-ориептованого программирования.

Процедурные языки построены на описании последовательной смены состояния компьютера, то есть значения ячеек памяти, состояния процессора и других устройств. Они мапипулируют данным в пошаговом режиме, используя последовательное выполнение инструкций. В процедурных языках придерживаются четкой структуризации программ, поэтому их еще называют языки структурного программирования. Примерами таких языков является Алгол, Pascal, первые версии языка Basic [15].

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

Существует несколько парадигм (ключевых подходов), которые управляют конструированием программ. Первый подход считает программу моделью, ориентированной на процесс (process-oriented model). При этом программу определяют последовательности операторов ее кода.

Первые компиляторы (например, FORTRAN) поддерживали процедурную модель программирования, в основе которой лежит использование функций. Следующий этап развития связан с переходом к структурной модели программирования (к ней относятся компиляторы ALGOL, Pascal, C), в основе которого лежат следующие положения: программы представляются в виде совокупности взаимосвязанных процедур и данных, которыми эти процедуры (или блоки) оперируют. Здесь широко используются процедурные блоки и минимальное использование GOTO. Эти программы являются более простые. Такие языки программирования, как Pascal, C успешно используют эту модель. Но здесь часто возникают проблемы, когда растет размер и сложность программ. [2]

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

1. Можно повторно использовать код программы и таким образом экономить время на разработку;

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

3. Программы с использованием ООП легко тестировать и модифицировать. Можно разбить программу на компоненты и тестировать работу каждой из них. [1]

В современном программировании существует несколько подходов к программированию: структурное (детальное), модульное и объектно-ориентированное программирование.

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

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

Модульное программирование использует методологию, ориентированную на обработку. Его основные признаки:

- Каждый модуль реализует одну и только одну независимую функцию;

- Каждый модуль имеет единственную точку ввода-вывода;

- Размер модуля нужно минимизировать;

- Каждый модуль может быть записан на языке программирования разработчиком или программистом и может быть протестирован отдельно;

- Вся программа состоит из протестированных модулей и поэтому легко проверяется. [4]

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

Методологии разработки программ, ориентированные на данные, относят к объектно-ориентированному программированию (ООП) и проектированию концептуальных баз данных.

Существует класиффикация, по которой языки и системы программирования по типам их парадигмы распределяют [3] на четыре разновидности:

  • Директивные (directive), процедурные (procedural) или императивные (imperative);
  • Структурные;
  • Декларативные (declarative);
  • Объектно-ориентированные (object-oriented).

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

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

Примерно в 50-е годы XX века появились языки программирования так называемого «высокого уровня» (high-level programming language).

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

Можно считать, что в этот период появились стиль, или парадигмы, программирования. Следующим шагом развития программ стало повышение их структурированности - структурный подход, при котором выделяли канонические структуры: линейные участки, циклы и ветвления [17].

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

Разработать программу - значит описать алгоритм на соответствующем языке программирования.

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

Язык программирования высокого уровня и система программирования играют роль посредника между человеком и компьютером [15].

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

- алфавит (аналогично алфавита обычной человеческой речи);

- символы арифметических и логических операций и некоторые специальные знаки;

- набор так называемых ключевых слов, которые нельзя изменять (например, begin, end, var, for)

- идентификаторы - комбинации символов для обозначения переменных, функций, файлов и других объектов (примеры: alfa, n32, sun_2, аи) [9].

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

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

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

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

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

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

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

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

- текстовый редактор для ввода и редактирования программ;

- редактор связей;

- транслятор (компилятор или интерпретатор).

Среды программирования содержат набор подпрограмм вычисления значений стандартных функций. Для объединения всех модулей программы в единый файл (такой файл называют файлом, выполняется) в средах программирования применяются редакторы связей, средства для отладки программ и другие составляющие [12].

Языки программирования высокого уровня делятся на определенные группы: процедурно-ориентированные языки, проблемно-ориентированные, объектно-ориентированные.

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

Процедурно-ориентированные языки программирования начали появляться в 50 годах ХХ ст. Первый язык высокого уровня Фортран (FORTRAN - FORmula TRANslator) был создан в 1954 году.

Размер программ постоянно увеличивался, поэтому программисты начали объединять отдельные их части в подпрограммы, которые группировали в библиотеки. Библиотеки подключались к основной рабочей программе, которая при необходимости вызывала нужную подпрограмму. Фактически такой подход увеличил структурность программ - большая программа стала совокупностью процедур-подпрограмм. Одна подпрограмма, главная, начинала работу всей программы. То есть произошел переход к следующему этапу развития технологий - процедурного программирования. Процедурно–ориентированные языки, предназначенные для записи процедур или алгоритмов обработки информации для каждого определенного круга задач [11].

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

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

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

Кроме того, появление языков высокого уровня значительно уменьшила зависимость реализации от аппаратного обеспечения. Чтобы это реализовать, были созданы специализированные программы - трансляторы, предназначенные для преобразования инструкции языка программирования в коды определенной машины. Использование трансляторов привело к некоторой потере скорости вычислений, но этот недостаток компенсировался значительным выигрышем в скорости разработки и модификации программ [17].

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

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

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

Практика программирования показала, что большая часть высокоуровневых языков, созданных в период процедурного подхода, очень удачно реализована, поэтому они или их вариации используются до сих пор. Например, до сих пор используется язык Fortran для реализации вычислительных алгоритмов, язык COBOL для описания бизнес-процессов или язык APL, поэтапно трансформировалась в язык С (CI) [1].

Потребность повышения уровня типизации языков программирования привела к появлению языка Pascal (Паскаль). Одновременно с Паскалем был разработан язык С, который в основном ориентирован на системное программирование и является слабо типизированным языком.

Основные преимущества процедурно-ориентированных языков программирования [11]:

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

Основные недостатки:

  • большие затраты на изучение языков;
  • меньше вычислительная эффективность.

Примеры процедурно-ориентированных языков программирования: Fortran, ALGOL, PL / 1, APL, BPL, COBOL, Pascal, C, Basic .

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

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

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

Этот подход легко формализуется математическими средствами. В результате программы легче проверять на ошибки и соответствие техническим требованиям (верифицировать) [12].

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

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

Например, язык SML была разработан как средство доказательства теорем. Диалекты языка LISP возникли благодаря тому, что этот язык является эффективной при обработке символьной информации [5].

Одним из путей развития декларативного стиля программирования стал функциональный подход, возникший с появлением и развитием языка LISP.

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

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

При функциональном программировании повторное использование кода сводится к вызову ранее описанной функции, структура которой, в отличие от процедуры императивного языка, прозрачная математически. Более того, типы отдельных функций, используемых в функциональных языках, могут быть переменными. То есть обеспечивается возможность обработки разнородных данных (например, упорядочение элементов списка по возрастанию для целых чисел, отдельных символов и строк), или полиморфизм. Благодаря реализации механизма сопоставления с образцом, такие языки, как ML и Haskell, очень хорошо применимы для символьной обработки [11].

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

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

Функциональное программирование предполагает достаточным вычисления функций от исходных данных и результатов других функций, и не предполагает явного хранения состояния программы. Самые известные языки: LISP, F #, Haskell, Erlang, APL, ML, Scala, Miranda, Nemerle, XQuery, Python.

Концепция функционального программирования [10-14]:

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

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

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

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

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

6. Функциональное программирование достаточно привлекательное. Однако, для успешного овладения этим стилем программирования необходимо достаточно глубокое понимание многих разделов математики.

На функциональных языках хорошо решаются задачи:

  • обработки данных:
  • синтаксический разбор;
  • компиляторы, преобразования программ;
  • Data Mining;
  • биоинформатика;
  • вычислительные задачи;
  • параллельные задачи.

В 70-х гг. ХХ века возникла еще одна ветвь языков программирования, связанная с проектами в области искусственного интеллекта - языка логического программирования [11].

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

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

Одним из недостатков логического подхода в концептуальном плане специфичность класса решаемых задач.

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

В качестве примеров языков логического программирования можно привести Prolog (название произошло от слов PROgramming in LOGic) и Mercury.

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

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

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

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

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

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

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

Прологу присущ ряд механизмов, отсутствующих в традиционных языках программирования: сопоставление с образцом, вывод с поиском и возвратом. Еще одно существенное отличие заключается в том, что для хранения данных в Пролога используются списки, а не массивы. В языке отсутствуют операторы присваивания и безусловного перехода, указатели [7].

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

Пролог требует отказа от стереотипов, стиля мышления императивного программирования. Основные области применения Пролога:

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

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

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

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

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

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

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

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

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

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

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

В окружающем мире мы видим объекты, связанные между собой иерархически, например, животные, млекопитающие, собаки. Если мы хотим описать животных абстрактным образом, нам необходимо определить некоторые их атрибуты, например, размер, вес, пол, возраст и т. Животным также присуща определенная поведение – они едят, дышат, спят. Такое описание атрибутов и поведения и определяет класс животных.

Если мы захотим описать более специфический класс животных, такой как млекопитающие, они должны были бы иметь более специфические атрибуты, такие как тип зубов и молочные железы. Такой класс известен как подкласс животных, тогда как класс животных называют суперклассом (родительским классом, классом-предком). [5]

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

Наследование плотно связано с инкапсуляцией. Если данный класс инкапсулирует некоторые атрибуты, то любой подкласс будет иметь те же атрибуты плюс атрибуты, которые он добавляет как часть своей специализации. Это ключевая концепция, которая позволяет объектно-ориентированным программам, расти по сложности в арифметической, а не геометрической прогрессии. Новый подкласс наследует все атрибуты всех своих родителей. Он не имеет непредвиденных связей с остальной частью кода в программе. [3]

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

2.4.3. Полиморфизм

Полиморфизм (греч "polymorphos" – множественность форм) – свойство, которое позволяет использовать один интерфейс для общего класса действий. Специфическое действие точно определяется в зависимости от конкретной ситуации. Например, рассмотрим стек (список типа LIFO – Last-In, First-Out; последним вошел, первым вышел). Программа может потребовать три типа стеков. Один стек используется для целых чисел, второй – для чисел с плавающей точкой, третий – для символов. Алгоритм, реализующий каждый стек, один и тот же, хотя данные, хранящиеся разные. НЕ объектно-ориентированный язык требовала бы создание трех различных стековых подпрограмм, каждая из которых имела бы свое собственное имя. Благодаря полиморфизма можно определить общий для всех типов данных набор стековых подпрограмм, использующих одно и то же имя.

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

Итак, полиморфизм – это свойство кода вести по-разному в зависимости от ситуации, возникающей в момент исполнения. [7]

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

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

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

Язык Бейсик (Basic) разработали сотрудники Дартмутского колледжа (США) Томасом Курцем и Джоном Кемени в 1964 году с целью обучения студентов. Широкое признание он получил в конце 60-х в начале 70-х годов благодаря применению в малых компьютерах фирм General Electric, Hewlett-Packard, Digital Equipment Corporation и др. [2]

Название языка образовано из первых букв английских слов Beginner's All-purpose Sumbolic Instruction Code. В переводе это означает: «язык программирования для начинающих". Английское слово Basic переводится как элементарный, базовый (например, набор знаний). Первая версия языка насчитывала 14 служебных слов. [2]

Известны десятки версий языка: Дартмутская, Бейсик-Плюс, Бейсик-Агат, Бейсик-Корвет, GW-Бейсик, Турбо Бейсик (Turbo Basic), Быстрый Бейсик (Quick Basic), Power Basic и другие. Все версии имеют много общих элементов, ознакомившись с которыми, можно работать практически с любой версией, например, с GW-Бейсиком или Quick Бейсиком.

Возможности новейших версий (компиляторов, позволяющих создавать exe-файлы) Quick Бейсика и Турбо Бейсика настолько велики, что во многих случаях они успешно конкурируют с языком Паскаль. [7]

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

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

Проект Java созрел в недрах лабораторий Sun Microsystems в 1990-х годах. Его рождение связано с проблемой несовместимости программного обеспечения для разных платформ (DOS, Windows, Unix, Macintosh), а также с появлением и стремительным распространением World Wide Web. В 1991 г. несколько работников Sun (Patrick Naughton, James Gosling, Mike Sheridan) образовали ядро группы, которой поручили создание программной технологии, которая бы была уникальной и имела неоспоримые перспективы. Первоначальное название проекта – Oak. Через несколько лет, после проведения маркетинговых исследований, проект был переименован в Java. С тех пор символом этого языка программирования и платформы в целом является логотип с чашкой горячего кофе (рис. 1). [3]

Рис.1. Символ языка программирования Java.

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

Первым примером Java-приложений стали апплеты, которые запускались в окне специально созданного браузера WebRunner, позже переименованного в HotJava.

23 мая 1995 г. Java и HotJava был официально представлен Sun. Была предложена концепция платформы, документацию и инструментальный пакет для разработчиков JDK – Java Development Kit. [4]

В декабре 1995 г.. Компании Sun и Netscape (разработчик популярного в то время браузера Netscape Navigator) презентует язык Java Script – язык сценариев, который расширяет HTML и является частью кода веб-страницы. Ее назначение – расширение функциональности и интерактивности работы в браузере. Заметим, что Java и JavaScript – разные языки, с разным позиционированием и возможностями.

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

В 2009 году Sun Microsystems была поглощена софтверным гигантом Oracle, под эгидой которого осуществляется дальнейшее развитие Java-платформы. [5]

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

Для отладки программ на языке Java подойдет любой из пакетов: Microsoft Visual J ++, Symantec Cafe, Java Add-On из состава Borland C ++ или Sun Java WorkShop. Если есть желание пользоваться командными файлами, то можно загрузить с Web-сервера "родной" вариант компилятора Java – Java Development Kit (JDK). [9]

В терминах языка Java маленькое приложение, встраиваемое в страницу Web, называется апплетом. Собственно говоря, создание апплетов – основное применение для Java. Апплеты снискали себе звание подлинных украшений для Web. Апплет может быть и окном анимации, и электронной таблицей, и всем, что только можно себе представить. Но это не значит, что на Java нельзя писать нормальные приложения с окнами. Этот язык программирования изначально была создан для обычных приложений, выполняющихся в Internet и в интрасети, и уже потом стал использоваться для изготовления апплетов.

Создание различных программ осуществляется с помощью различных сред программирования. На сегодняшний день язык Java наиболее широко используется современными разработчиками, поскольку Java имеет ряд преимуществ, выделяющих ее среди других языков: независимость от платформы, на которой выполняются программы; один и тот же код можно запускать под управлением различных операционных систем, например, Windows, Linux, FreeBSD, Solaris, Apple Mac и др.

Заключение

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

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

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

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

Сегодня насчитывают несколько тысяч различных языков программирования и их модификаций, однако лишь некоторые из них получили широкое признание. На разных этапах развития ЭВМ популярными были такие языки программирования: Фортран, Кобол, Алгол-60, ПЛ-1, Алгол-68, АДА, С, Бейсик, Pascal, Prolog, Delphi и другие. Наиболее популярные сейчас языки программирования: C ++, C # и Java, Python.

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

Языки программирования высокого уровня делятся на определенные группы: процедурно-ориентированные языки, проблемно-ориентированные, объектно-ориентированные.

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

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

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

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

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

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

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

  1. Альфред В. Ахо, Джон Э. Хопкрофт, Джеффри Д. Ульман Структуры данных и алгоритмы: — Санкт-Петербург, Вильямс, 2012 г.- 400с.
  2. Ахметов И.Г. Программирование для студентов и школьников на примере Small Basic. СПб.: БХВ-Петербург, 2012. — 160 с.
  3. Бахирев А. Сюрреализм на JavaScript СПб.: СИНЭЛ, 2014. — 228 с.
  4. Блох Дж. Java. Эффективное программирование. Лори, 2014. 2-е издание – 460 с.
  5. Бойченко Л.П. Практикум по программированию в среде Visual Basic (примеры решения задач). Учебное пособие. — Ухта: УГТУ, 2010. — 162 с.
  6. Головин И.Г., Баева Н.В. Языки управления приложениями. Учебно-методическое пособие. – М.: Издательский отдел факультета ВМиК МГУ имени М.В. Ломоносова; МАКС Пресс, 2015. – 96 с.
  7. Грошев А.С. Информатика. Лабораторный практикум. Арханг. гос. техн. ун-т, 2012. - 148 с.
  8. Зикратов И.А., Косовцев В.В., Петров В.Ю. Разработка и стандартизация программных средств и информационных технологий. Учебное пособие. — СПб.: СПбГУ ИТМО, 2010. — 91 с.
  9. Караванова Т.П, Основы алгоритмизации и программирования: Пособие. - К.: Форум, 2011. – с.289
  10. Медведев В.И. Особенности объектно-ориентированного программирования на C++/CLI, C# и Java 2-е изд., испр. и доп. – Казань: РИЦ «Школа», 2010.-444 c.
  11. Нимейер П., Леук Д. Программирование на Java. М.: Эксмо, 2014. — 1216 с.
  12. Робертсон Л. А. Программирование - это просто. Пошаговый подход:— Москва, Бином. Лаборатория знаний, 2010 г.- 384 с.
  13. Сальников Ю. Н. Программирование. Базовый курс: — Москва, 2010 г.- 336 с.
  14. Свердлов С.З. Языки программирования и методы трансляции: учеб. пособие/ С.З. Свердлов. – СПб.: Питер, 2007. – 638 с.
  15. Семенов М.В. Информатика. - Ростов н/Д: Феникс, 2011. – 288с.
  16. Шилдт Г. Java 8. Полное руководство 9-е полное издание. — М.: Вильямс, 2015. — 1377 с.
  17. Классификация языков программирования [Электронный ресурс] / URL: Программирование на высоком уровне, http://www.excode.ru/art6213p1.html
  18. Классификация языков программирования [Электронный ресурс]. URL: http://bourabai.ru/alg/classification.htm
  19. Эволюция языков программирования [Электронный ресурс]. URL: http://www.urtt.ru/bib/dataindex/oaip/lection/_html/lect_05.htm
  20. Язык программирования. Эволюция языков программирования [Электронный ресурс]. URL: http://wiki.mvtom.ru/index.php/Язык_программирования
  21. Языки программирования и их классификация [Электронный ресурс]. URL: http://www.maksakov-sa.ru/ProgrProd/YazProgr/index.html