Файл: Классификация языков программирования. Критерии выбора среды и языка разработки программ (Языки программирования).pdf
Добавлен: 31.03.2023
Просмотров: 105
Скачиваний: 1
Язык, который является средством для замены последовательности символов описывающих выполнение требуемых действий ЭВМ на более сжатую форму, называется Макрос. [13]
Обычно Макрос необходим для того, чтобы сократить запись исходной программы. Компонент программного обеспечения, благодаря которому происходит функционирование макросов, называется макропроцессором. На него поступает макроопределяющие и исходные тексты. Реакция макропроцессора на вызов – выдача выходного текста.
Макросы удобны тем, что имеют возможность одинаково работать и с программами, и с данными.
Машинно-независимые языки – это средство описания алгоритмов решения задач и информации, подлежащей обработке. Такие языки удобны в использовании для большого круга пользователей. Основным плюсом является то, что не требуется знания особенностей организации функционирования ЭВМ и ВС. [16]
Подобные языки получили название высокоуровневых языков программирования. Программы, написанные на машинно-независимых языках, представляют последовательности операторов, представляют собой последовательности операторов, которые логически составлены согласно правилам рассматривания языка-задач, блоков, сегментов и т.п. Операторы языка служат для описывания действий, которые выполняются системой после трансляции программы на машинном языке.
Следовательно, командные последовательности, процедуры и подпрограммы, которые часто используются в машинных программах, представляются в высокоуровневых языках отдельными операторами. Это позволило программистам не тратить время на детальное расписывание вычислительного процесса на уровне машинных команд, а сосредоточиться на основных особенностях алгоритма. [10, 17]
В ходе процесса расширения области применения вычислительной техники появилась необходимость формализовать представленные постановки и решение новых классов задач. Требовалось создание таких языков программирования, при использовании обозначений и терминологии которых, появлялась возможность описывать требуемые алгоритмы решений для поставленных задач. Такие языки получили название – проблемно-ориентированные. Проблемно-ориентированные языки направлены на решение определенных проблем, обеспечивают средствами, которые позволяют в краткой и четкой форме формулировать задачу и получать результаты.
Универсальные языки были разработаны для широкого круга задач: научных, коммерческих, моделирования и пр. Первый универсальный язык был разработан фирмой IBM, ставший в последовательности языков Пл/1. Второй по мощности универсальный язык называется Алгол-68. Он позволяет работать с символами, разрядами, числами с фиксированной и плавающей запятой. Пл/1 имеет развитую систему операторов для управления форматами, для работы с полями переменной длины, с данными организованными в сложные структуры, и для эффективного использования каналов связи. Язык учитывает включенные во многие машины возможности прерывания и имеет соответствующие операторы. Предусмотрена возможность параллельного выполнение участков программ. [21]
Программы в Пл/1 компилируются с помощью автоматических процедур. Язык использует многие свойства Фортрана, Алгола, Кобола. Однако он допускает не только динамическое, но и управляемое и статистическое распределения памяти.
При появлении новых технических возможностей возникла задача перед системными программистами – создать программные средства, обеспечивающие оперативное взаимодействие человека с ЭВМ. Такие языки получили название – диалоговые. [17]
Работы велись в двух направлениях. Создавались специальные управляющие языки для обеспечения оперативного воздействия на прохождение задач, которые составлялись на любых раннее неразработанных (не диалоговых) языках. Параллельно разрабатывались языки, которые помимо целей управления обеспечивали описание алгоритмов решения задач.
Потребность обеспечения оперативного взаимодействия с пользователем потребовала сохранения в памяти ЭВМ копии исходной программы даже в случае получения объектной программы в машинных кодах. При внесении изменений в программу с использованием диалогового языка система программирования при помощи специальных таблиц устанавливает взаимосвязь структур исходной и объектной программ. Такое взаимодействие позволило осуществить требуемые редакционные изменения в объектной программе. Примером диалогового языка является Бэйсик. [20]
Бэйсик использует обозначения подобные обычным математическим выражениям. Многие операторы являются упрощенными вариантами операторов языка Фортран. Поэтому этот язык позволяет решать достаточно широкий круг задач.
Непроцедурные языки составляют группу языков, описывающих организацию данных, обрабатываемых по фиксированным алгоритмам (табличные языки и генераторы отчетов), и языков связи с операционными системами.
Возможность четкого описания действий для решения задачи и самой задачи, предоставляют возможность наглядно определить, какую последовательность действий необходимо выполнить, прежде чем переходить к какому-либо действию. Одна таблица решений, описывающая некоторую ситуацию, включает в себя все возможные блок-схемы реализаций алгоритмов решения. [12]
Табличные методы легко осваиваются специалистами любых профессий.
Программы, составленные на табличном языке, удобно описывают сложные ситуации, возникающие при системном анализе.
1.3. Стили программирования
Работая над программой, программист, особенно начинающий, должен хорошо представлять, что программа, которую он разрабатывает, предназначена, с одной стороны, для пользователя, с другой – для самого программиста. Текст программы нужен прежде всего самому программисту, а также другим людям, с которыми он совместно работает над проектом. Поэтому для того, чтобы работа была эффективной, программа должна быть легко читаемой, ее структура должна соответствовать структуре и алгоритму решаемой задачи. Как этого добиться? Надо следовать правилам хорошего стиля программирования. Стиль программирования – это набор правил, которым следует программист в процессе своей работы. Очевидно, что хороший программист должен следовать правилам хорошего стиля. [14, 20]
Правила хорошего стиля – результат соглашения между программистами. Считается, что в соответствии с правилами хорошего стиля программный код должен поддерживать:
- очевидную логику;
- естественные выражения;
- осмысленные имена;
- аккуратное форматирование;
- развернутые комментарии;
- отсутствие хитрых трюков и необычных конструкций.
Следование правилам хорошего стиля программирования значительно уменьшает вероятность появления ошибок на этапе набора текста, делает программу легко читаемой, что, в свою очередь, облегчает процессы отладки и внесения изменений.
Четкого критерия оценки степени соответствия программы хорошему стилю программирования не существует. Вместе с тем достаточно одного взгляда, чтобы понять, соответствует программа хорошему стилю или нет.
Сводить понятие стиля программирования только к правилам записи текста программы было бы неверно. Стиль, которого придерживается программист, проявляется во время работы программы. Хорошая программа должна быть прежде всего надежной и дружественной по отношению к пользователю. [1, 9]
Надежность подразумевает, что программа, не полагаясь на "разумное" поведение пользователя, контролирует исходные данные, проверяет результат выполнения операций, которые по какой-либо причине могут быть не выполнены, например, операций с файлами.
Дружественность предполагает хорошо спроектированные диалоговые окна, наличие справочной системы, разумное и предсказуемое, с точки зрения пользователя, поведение программы.
Большая часть работы программиста связана с написанием исходного кода на одном из языков программирования. [19]
Различные языки программирования поддерживают различные стили программирования (т. н. парадигмы программирования). Отчасти искусство программирования состоит в том, чтобы выбрать один из языков, наиболее полно подходящий для решения имеющейся задачи. Разные языки требуют от программиста различного уровня внимания к деталям при реализации алгоритма, результатом чего часто бывает компромисс между простотой и производительностью (или между временем программиста и временем пользователя).
Одним из важнейших признаков классификации языков программирования является принадлежность их к одному из стилей, основными из которых являются следующие: процедурный, функциональный, логический и объектно-ориентированный. [17]
Процедурное (императивное) программирование является отражением архитектуры традиционных ЭВМ, которая была предложена фон Нейманом в 40-х годах. Теоретической моделью процедурного программирования служит алгоритмическая система под названием «машина Тьюринга».
Программа на процедурном языке программирования состоит из последовательности операторов (инструкций), задающих процедуру решения задачи. Основным является оператор присваивания, служащий для изменения содержимого областей памяти. Концепция памяти как хранилища значений, содержимое которого может обновляться операторами программы, является фундаментальной в императивном программировании. [10]
Выполнение программы сводится к последовательному выполнению операторов с целью преобразования исходного состояния памяти, то есть значений исходных данных, в заключительное, то есть в результаты. Таким образом, с точки зрения программиста имеются программа и память, причем первая последовательно обновляет содержимое последней. [19]
Процедурные языки характеризуются следующими особенностями:
- необходимостью явного управления памятью, в частности, описанием переменных;
- малой пригодностью для символьных вычислений;
- отсутствием строгой математической основы;
-высокой эффективностью реализации на традиционных ЭВМ.
Одним из важнейших классификационных признаков процедурного языка является его уровень. Уровень языка программирования определяется семантической (смысловой) емкостью его конструкций и степенью его ориентации на программиста. Язык программирования частично ликвидирует разрыв между методами решения различного рода задач человеком и вычислительной машиной. Чем более язык ориентирован на человека, тем выше его уровень. Дадим краткую характеристику реализованным на ПЭВМ языкам программирования в порядке возрастания их уровня. [8]
Двоичный язык является непосредственно машинным языком. В настоящее время такие языки программистами практически не применяются.
Язык Ассемблера — это язык, предназначенный для представления в удобочитаемой символической форме программ, записанных на машинном языке. Он позволяет программисту пользоваться мнемоническими кодами операций, присваивать удобные имена ячейкам и областям памяти, а также задавать наиболее удобные схемы адресации.
Язык Макроассемблера является расширением языка Ассемблера путем включения в него макросредств. С их помощью в программе можно описывать последовательности инструкций с параметрами – макроопределения. После этого программист может использовать снабженные аргументами макрокоманды, которые в процессе ассемблирования программы автоматически замещаются макрорасширениями. Макрорасширение представляет собой макроопределение с подставленными вместо параметров аргументами. [16]
Другими словами, язык Макроассемблера представляет средства определения и использования новых, более мощных команд как последовательности базовых инструкций, что несколько повышает его уровень.
Языки Ассемблера и Макроассемблера применяются системными программистами-профессионалами с целью использования всех возможностей оборудования ЭВМ и получения эффективной по времени выполнения и по требуемому объему памяти программы. На этих языках обычно разрабатываются относительно небольшие программы, входящие в состав системного программного обеспечения: драйверы, утилиты и другие. [11]
Сущность функционального (аппликативного) программирования определена, как способ составления программ, в которых единственным действием является вызов функции, единственным способом расчленения программы на части является введение имени для функции, а единственным правилом композиции – оператор суперпозиции функции. Никаких ячеек памяти, ни операторов присваивания, ни циклов, ни, тем более, блок-схем, ни передачи управления. [18]
Роль основной конструкции в функциональных языках играет выражение. К выражениям относятся скалярные константы, структурированные объекты, функции, тела функций и вызовы функций. Функция трактуется как однозначное отображение из X в X, где X — множество выражений. [13]
Аппликативный язык программирования включает следующие элементы:
-классы констант, которыми могут манипулировать функции;
- набор базовых функций, которые программист может использовать без предварительного объявления и описания;
- правила построения новых функций из базовых;
- правила формирования выражений на основе вызовов функций.
Программа представляет собой совокупность описаний функций и выражения, которые необходимо вычислить. Данное выражение вычисляется посредством редукции, то есть серии упрощений, до тех пор, пока это возможно по следующим правилам: вызовы базовых функций заменяются соответствующими значениями; вызовы не базовых функций заменяются их телами, в которых параметры замещены аргументами.