Файл: Классификация языков программирования. Критерии выбора среды и языка разработки программ.pdf
Добавлен: 28.03.2023
Просмотров: 145
Скачиваний: 4
Языки высокого уровня - были разработаны для того, чтобы освободить разработчика программы от учета технических особенностей конкретных вычислительных комплексов или платформ, их архитектуры. Языки программирования высокого уровня имитируют естественные языки, используя некоторые слова разговорного языка и общепринятые математические символы. Эти языки более удобны для понимания человеком. Уровень языка характеризуется степенью его близости к естественному, человеческому языку. Машинный язык не похож на человеческий, он крайне беден в своих изобразительных средствах. Средства записи программ на языках высокого уровня более выразительны и привычны для человека. Например, алгоритм вычисления по сложной формуле не разбивается на отдельные операции, а записывается компактно в виде одного выражения с использованием привычной математической символики. Составить свою или понять чужую программу на таком языке гораздо проще.
Важным преимуществом языков высокого уровня является их универсальность, независимость от аппаратной платформы. Программа, написанная на таком языке, может выполняться на разных машинах. Составителю программы не нужно знать систему команд вычислительной машины, на которой он предполагает проводить обработку данных. При переходе на другую вычислительную систему программа не требует переделки. Такие языки – не только средство общения человека с машиной, но и людей между собой. Программа, написанная на языке высокого уровня, легко может быть понята любым специалистом, который знает язык и характер реализованной задачи.
Таким образом, можно сформулировать основные преимущества языков высокого уровня перед машинными:
алфавит языка высокого уровня значительно шире алфавита машинного языка, что существенно повышает наглядность текста программы;
набор операций, допустимых для использования, не зависит от набора машинных операций, а выбирается из соображений удобства формулирования алгоритмов решения задач определенного класса;
формат предложений достаточно гибок и удобен для использования, что позволяет с помощью одного предложения задать достаточно содержательный этап обработки данных;
необходимые операции задаются с помощью общепринятых математических обозначений;
данным в языках высокого уровня присваиваются индивидуальные имена, выбираемые разработчиком программы;
в языке может быть предусмотрен значительно более широкий набор различных типов данных по сравнению с набором машинных типов данных.
Таким образом, языки высокого уровня в значительной мере являются машинно-независимыми. Они облегчают работу программиста и повышают надежность создаваемых программ.
Основные компоненты алгоритмического языка:
· алфавит,
· синтаксис,
· семантика.
Алфавит — это фиксированный для данного языка набор основных символов, т.е. "букв алфавита", из которых должен состоять любой текст на этом языке — никакие другие символы в тексте не допускаются.
Синтаксис — это правила построения фраз, позволяющие определить, правильно или неправильно написана та или иная фраза. Точнее говоря, синтаксис языка представляет собой набор правил, устанавливающих, какие комбинации символов являются осмысленными предложениями на этом языке.
Семантика определяет смысловое значение предложений языка. Являясь системой правил истолкования отдельных языковых конструкций (выражений), семантика устанавливает, какие последовательности действий описываются теми или иными фразами языка и, в конечном итоге, какой алгоритм определен данным текстом программы на алгоритмическом языке.
Языки высокого уровня делятся на:
· процедурные;
· логические;
· объектно-ориентированные.
Процедурные языки предназначены для однозначного описания алгоритмов. При решении задачи процедурные языки требуют в той или иной форме явно записать процедуру ее решения.
Первым шагом в развитии процедурных языков программирования было появление проблемно-ориентированных языков. В этом названии нашел отражение тот факт, что при их разработке идут не от «машины», а «от проблемы» (от задачи): в таком языке программирования стремятся максимально полно учесть специфику класса задач, для решения которых его предполагается использовать. Например, для многих научно-технических задач характерны большие расчеты с использованием сложных формул, поэтому в ориентированных на такие задачи языках вводят удобные средства их записи. Использование понятий, терминов, символов, привычных для специалистов соответствующей области знаний, облегчает им изучение языка, упрощает процесс создания и отладки программного продукта.
Разнообразие классов задач привело к тому, что на сегодняшний день разработано несколько сотен алгоритмических языков. Однако, широкое распространение и международное признание получили лишь полтора десятка языков. Среди них в первую очередь следует отметить: Fortran и Algol - языки, предназначенные для решения научно-технических задач, Cobol – для решения экономических задач, Basic – для решения небольших вычислительных задач в диалоговом режиме. В принципе каждый из этих языков можно использовать для решения задач не своего класса. Однако, как правило, применение оказывается не удобным.
В то же время в середине 60-х годов начали разрабатывать алгоритмические языки широкой ориентации – универсальные языки. Обычно они строились по принципу объединения возможностей узко-ориентированных языков. Среди них наиболее известны PL/1, Pascal, C, C++, Modula, Ada. Однако, как любое универсальное средство, такие широко-ориентированные языки во многих конкретных случаях оказываются менее эффективными [2].
Логические языки- (Prolog, Lisp, Mercury, KLO и др.) ориентированы не на запись алгоритма решения задачи, а на систематическое и формализованное описание задачи с тем, чтобы решение следовало из составленного описания. В этих языках указывается что дано и что требуется получить. При этом поиск решения задачи возлагается непосредственно на ЭВМ.[3]
Объектно-ориентированные языки (Object Pascal, C++, Java, Objective C и др.). Основная идея объектно-ориентированных языков заключается в стремлении связать данные с обрабатывающими эти данные процедурами в единое целое - объект.
Объектно-ориентированный подход использует следующие базовые понятия:
· объект;
· свойство объекта;
· метод обработки;
· событие;
· класс объектов.
Объект — совокупность свойств (параметров) определенных сущностей и методов их обработки (программных средств).
Свойство — это характеристика объекта и его параметров. Все объекты наделены определенными свойствами, совокупность которых выделяют (определяют) объект.
Метод — это набор действий над объектом или его свойствами.
Событие — это характеристика изменения состояния объекта.
Класс — это совокупность объектов, характеризующихся единообразием применяемых к ним методов обработки или свойств.
Существуют различные объектно-ориентированные технологии, которые обеспечивают выполнение важнейших принципов объектного подхода:
инкапсуляция;
наследование.
Под инкапсуляцией понимается скрытие полей объекта с целью обеспечения доступа к ним только посредством методов класса (т. е. скрытие деталей, несущественных для использования данного объекта). Инкапсуляция (объединение) означает сочетание данных и алгоритмов их обработки, в результате чего и данные, и процедуры во многом теряют самостоятельное значение.
Класс может иметь образованные от него подклассы. При построении подклассов осуществляется наследование данных и методов обработки объектов исходного класса. [2]
Фактически объектно-ориентированное программирование можно рассматривать как модульное программирование нового уровня, когда вместо во многом случайного, механического объединения процедур и данных акцент делается на их смысловую связь.
Программа на объектно-ориентированном языке, решая некоторую задачу, по сути, описывает часть мира, относящуюся к этой задаче. Описание действительности в форме системы взаимодействующих объектов естественнее, чем в форме взаимодействующих процедур. [2]
2. Обзор современных языков программирования
Алгоритмические языки программирования представляют собой один из способов записи алгоритма. Язык программирования является строго формализованным, то есть все команды записываются по определенным правилам и отступления от этих правил будут определятся как ошибка в коде. Например, в русском языке можно при разделении элементов перечисления поставить запятую (,) или точку с запятой (;). А в языке программирования при записи команд нельзя изменить ни одного знака - возникает ошибка.
Правила записи команд на конкретном языке называются синтаксисом языка. Синтаксис определяет, какая команда будет считаться правильной, а какая нет. Например, в языке Basic команды CLS и FORI=1 TO 10 считаются правильными, а команды CLERSCREEN и FORIFROM 1 TO 10 - неправильными.
Каждая команда, записанная на языке программирования, имеет определенное значение, то есть заставляет компьютер выполнять определенные действия с данными или аппаратными ресурсами. Правила, определяющие смысл команд, называются семантикой языка. Например, команда CLS вызывает очистку экрана.
Каждый язык имеет алфавит – набор символов, которые можно использовать при записи программ на этом языке. Разные версии одного и того же языка могут немного различаться алфавитом.
Программа, написанная на языке программирования, состоит из команд (операторов), задающих последовательность действий. Эти действия выполняются над некоторыми объектами. Объектами могут быть числа, текстовые строки, переменные и другие объекты. Языки отличаются друг от друга множеством допустимых объектов и набором операций, которые можно выполнять над этими объектами. [7]
Программа, написанная на языке программирования, представляет собой машинописный текст. Чтобы компьютер мог выполнять команды, содержащиеся в этой программе, надо перевести программу в набор понятных компьютеру инструкций, записанных в двоичной форме (машинный код). Такой перевод называется трансляцией.
По способу трансляции языки делятся на:
· компиляторы
· интерпретаторы
В компиляторах перевод всего текста программы в код осуществляется сразу, и создаются исполняемый файл, который затем можно неоднократно запускать.
В интерпретаторах при запуске программы каждая ее строчка последовательно переводится в код и выполняется; затем переводится в код и выполняется другая строчка, и так далее.
Каждый оператор языка представляет собой мнемоническое (условное) обозначение машинной команды или набора команд. Естественно, что каждый тип процессора имеет свой набор команд, а значит, свой ассемблер. Интерпретаторы и компиляторы решают эту проблему совместимости. Ассемблеры же в чистом виде используются сегодня для создания драйверов, программирования различных устройств, а также для написания фрагментов программ, где очень важно время выполнения, так как на ассемблере можно написать максимально эффективную программу [5].
Современные языки программирования делят на процедурно-ориентированные и объектно-ориентированные, но в настоящее время граница между этими видами стерлась. Эти языки используются чаще всего для решения самых разнообразных задач. И хотя каждый из языков имеет свои особенности, что делает его наиболее эффективными для решения определенного вида задач, но в принципе для решения любой задачи можно выбирать любой язык программирования. Например, язык Lisp используется для создания экспертных систем. Язык Java используется для разработки сетевых (Web)- приложений.
Процесс создания программы включает несколько этапов. Раньше для реализации каждого этапа использовались специальные средства. Например, текст программы сначала набирался в текстовом редакторе. Затем с помощью специальной команды запускался транслятор, чтоб перевести текст программы в машинный код. Затем другой командой запускался компоновщик, чтобы объединить вновь написанную программу с разработанными ранее фрагментами и создать исполняемый файл. Наконец, программа запускалась, и тут обнаруживалось, что результаты получаются совсем не такие, как надо. Для поиска ошибок использовался отладчик, который позволял, например, посмотреть промежуточные результаты каких-то вычислений. После того, как ошибки были найдены, приходилось исправлять их в текстовом редакторе и начинать весь процесс сначала. Таким образом, разработка и отладка программы была долгим и трудоемким делом.
В настоящее время существуют средства, позволяющие выполнять все действия в рамках единой среды. Поэтому сейчас чаще говорят не о языках программирования, а об интегрированных средствах разработки.