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

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 14.03.2024

Просмотров: 34

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

  • Целостность. Отсутствие целостности в синтаксисе некоторого языка программирования делает его более трудным для изучения и повышаетвероятность появления ошибок в программах, написанных на этом языке.
  • Избыточность конструкций. Язык программирования, в котором имеется избыточность конструкций или частично перекрывающие друг друга(функционально) конструкции, позволяет выполнять одни и те же действия различными способами. При правильном проектировании новогоязыка программирования число концепций в нем могло бы быть меньшим.
  • Выразительность. Хорошо написанная программа отражает структуру лежащего в ее основе алгоритма. Чем выразительнее язык программирования, тем легче программисту решать стоящую перед ним задачу. 
  • Многословие и безопасность. Существует неформальное правило (или рекомендация): все программы должны умещаться на одной странице. Длинные программы менее "удобочитаемы", чем короткие программы. Многословный язык программирования может привести к тому, что записанный на нем короткий алгоритм превращается в длинную программу. С другой стороны, необходимо отметить, что использование похожего на шифрограмму синтаксиса (т.е. слишком краткого) также нежелательно. Корректность синтаксиса легко проверяется трансляторами с различных языков программирования. Диагностируемые трансляторами с различных языков программирования синтаксические ошибки представляют собой первый барьер на пути ошибок, делаемых программистом при написании и вводе программ [8, c.53].

Философия типов и типы данных

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


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

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

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

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

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

Операции

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


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

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

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

Управление последовательностью действий

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

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

Существуют различные типы операторов цикла. Основными моментами, характеризующими операторы циклов, являются следующие. Легко ли с помощью соответствующего оператора цикла записать выполнение определенных действий n раз? А n*1/2 раз [106]? Каково значение управляющей переменной после выхода из оператора цикла (нормального и/или преждевременного)? Какие существуют ограничения на конструирование выражений, обеспечивающих управление действиями – завершением или продолжением выполнения операторов циклов? 

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

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


Подпрограммы и области действия

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

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

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

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

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


Средства организации параллельной обработки

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

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

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

2. При использовании многопроцессорных ЭВМ (например, двухпроцессорных или однопроцессорных комплексов, в которых используются интеллектуальные контроллеры внешних устройств) параллельные программы, выполняются более эффективно, чем последовательные [13, c.83]. 

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

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