Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Языкпрограммирования — это система обозначений, служащая для точного описания программ или алгоритмов для ЭВМ. Они относятся к искусственным языкам, и отличаются от естественных ограниченным числом «слов», а также очень строгими правилами записи команд (операторов). В них не допускается свободное толкование слов и выражений, характерное для обычного языка.
Можно сформулировать ряд требований к языкам программирования и классифицировать их по основным свойствам.
Основные требования, предъявляемые к языкам программирования:
наглядность - использование в языке по возможности уже существующих символов, хорошо известных и понятных как программистам, так и пользователям ЭВМ;
единство - использование одних и тех же символов для обозначения одних и тех же или родственных понятий в разных частях алгоритма. Количество этих символов должно быть по возможности минимальным;
гибкость - возможность относительно удобного, несложного описания распространенных приемов математических вычислений с помощью имеющегося в языке ограниченного набора изобразительных средств;
модульность - возможность описания сложных алгоритмов в виде совокупности простых модулей, которые могут быть составлены отдельно и использованы в различных алгоритмах;
однозначность - недвусмысленность записи любого алгоритма (ее отсутствие может привести к неправильным ответам при решении задач).
В настоящее время известно несколько сотен реально используемых языков программирования. Для каждого есть своя область применения.
Любой алгоритм, как уже отмечалось, есть последовательность предписаний, выполнив которые, можно за конечное число шагов перейти от исходных данных к результату. В зависимости от детализации таких предписаний определяют уровень языка программирования (чем меньше детализация, тем выше уровень). По данному критерию различают следующие языки программирования:
машинные (самого низкого уровня);
машинно-ориентированные (ассемблеры);
машинно-независимые (высокого уровня).
Машинные и машинно-ориентированные языки требуют подробного описания самых мелких деталей процесса обработки данных. Напротив, языка высокого уровня используют некоторые термины обычного языка и общепринятые математические символы. В известной степени они имитируют естественные языки и потому более удобны при написании программ.
Разные типы процессоров имеют разные наборы команд. Если язык программирования ориентирован на конкретный тип процессора и учитывает его особенности, он неизбежно оказывается языком низкого уровня. В данном случае «низкий уровень» не означает «плохое качество»; это значит лишь, что операторы языка близки к машинному коду и ориентированы на конкретные команды процессора.
При программировании на машинном языке программист может держать под контролем каждую команду процессора и использование каждой ячейки памяти, и тем самым максимально использовать все возможности машины. Но процесс этот очень трудоемкий и утомительный, программы получаются громоздкими и труднообозримыми, их трудно отлаживать, корректировать и совершенствовать. Поэтому, если нужно разработать эффективную программу, в максимальной степени учитывающую специфику конкретного компьютера, вместо машинных языков используют близкие к ним машинно-ориентированные языки (ассемблеры).
Языкассемблера - это машинно-зависимый язык низкого уровня, в котором отдельным машинным командам соответствуют мнемонические (легко запоминаемые) имена, записываемые в текстовом виде. Это позволяет представить в удобочитаемой форме программы, записанные в машинных кодах. Программист также может по своему усмотрению присваивать символические имена регистрам компьютера и ячейкам памяти, а также задавать удобные для себя способы адресации. Кроме того, можно использовать различные системы счисления (например, десятичную или шестнадцатеричную) для представления числовых констант, включать в программу комментарии и др.
С помощью языков низкого уровня создаются очень эффективные и компактные программы, так как разработчик получает доступ ко всем возможностям процессора. С другой стороны, при этом требуется очень хорошо понимать устройство конкретного компьютера, затрудняется отладка больших приложений, а готовая программане может быть перенесена на компьютер с другим типом процессора. Подобные языки обычно применяют для написания небольших системных приложений, драйверов устройств, модулей стыковки с нестандартным оборудованием, когда важнейшими требованиями становятся компактность, быстродействие и возможность прямого доступа к аппаратным ресурсам. В некоторых
областях, например в машинной графике, на языке ассемблера пишут библиотеки, эффективно реализующие алгоритмы обработки изображений, требующие интенсивных вычислений.
Таким образом, программы, написанные на языке ассемблера, требуют значительно меньшего объема памяти и времени выполнения. Знание программистом языка ассемблера и машинного кода дает ему понимание архитектуры машины. Несмотря на то, что большинство специалистов в области программного обеспечения разрабатывают программы на языках высокого уровня, некоторые виды программ полностью или частично разрабатывают на ассемблере.
Языки высокого уровня были созданы для того, чтобы освободить программиста от учета технических особенностей конкретных компьютеров, их архитектуры. Уровень языка характеризуется степенью его близости к обычной человеческой речи. Машинный язык радикально от нее отличается, он крайне беден в своих изобразительных средствах. Средства записи программ на языках высокого уровня более разнообразны и интуитивно понятны для человека. Например, алгоритмвычисления по сложной формуле не разбивается на отдельные операции, а записывается компактно в виде одного выражения с использованием привычной математической символики. Составить свою или понять чужую программу на таком языке гораздо проще.
Важным преимуществом языков высокого уровня является их универсальность, независимость от аппаратуры. Программа, написанная на таком языке, может выполняться на разных машинах. В частности, составителю программы вообще не нужно знать систему команд ЭВМ, на которой предполагается производить вычисления. При переходе на другую ЭВМ программане потребует переделки. Такие языки - не только средство общения человека с машиной, но и людей между собой. Программа, написанная на языке высокого уровня, легко может быть понята любым специалистом, который знает сам язык и характер решаемой задачи.
Итак, языки высокого уровня имеют следующие основные преимущества перед машинными:
алфавит этих языков значительно шире, чем у машинного языка, что существенно повышает наглядность текста программы;
набор операций, допустимых для использования, не зависит от набора машинных команд; он определяется из соображений удобства записи алгоритмов, используемых при решения задач определенного класса;
формат предложений достаточно гибок и удобен, что позволяет с помощью одного предложения описать достаточно содержательный этап обработки данных;
требуемые операции задаются с помощью общепринятых математических обозначений;
данным в языках высокого уровня присваиваются индивидуальные имена, выбираемые программистом;
набор типов данных, как правило, значительно шире, чем допустимые типы данных конкретной машины.Языки высокого уровня в значительной мере являются машинно-независимыми, что облегчает работу программиста и повышает надежность создаваемых программных продуктов.
К основным компонентам алгоритмического языка относятся алфавит, синтаксис и семантика.
Алфавит — это фиксированный для данного языка набор основных символов («букв алфавита»), из которых должен состоять любой текст, написанный на нем (никакие другие символы в тексте не допускаются).
Синтаксис — это правила построения фраз, позволяющие определить, правильно или неправильно написано конкретное предложение. Точнее говоря, синтаксис языка представляет собой набор правил, устанавливающих, какие комбинации символов являются осмысленными предложениями.
Семантика определяет смысловое значение предложений языка. Являясь системой правил истолкования отдельных языковых конструкций, семантика устанавливает, какие последовательности действий описываются теми или иными фразами языка и, в конечном итоге, какой алгоритмопределен данным текстом на алгоритмическом языке.
Языки высокого уровня делятся на процедурные, логические и объектно-ориентированные.
Процедурные языки предназначены для однозначного описания алгоритмов. При решении задачи такие языки требуют в той или иной форме явно записать порядок (процедуру) этого решения.
Первым шагом в развитии процедурных языков программирования было появление проблемно-ориентированных языков. В этом названии нашел отражение тот факт, что при их разработке идут не «от машины», а «от задачи». При этом стремятся максимально полно учесть специфику класса задач, для решения которых данный язык предполагается использовать. Например, для многих научно-технических задач характерны объемные расчеты по сложным формулам; поэтому в ориентированных на такие задачи языках вводят удобные средства их записи. Использование понятий, терминов, символов, привычных для специалистов соответствующей области знаний, облегчает им изучение языка, упрощает процесс составления и отладки программы.
Разнообразие классов задач, решаемых на ЭВМ, привело к тому, что на сегодняшний день разработано уже несколько сотен алгоритмических языков. Правда, широкое распространение и международное признание получили лишь 10-15 из них. В первую очередь следует отметить Fortran и Algol - языки, предназначенные для решения научно-технических задач; Cobol - для решения экономических задач, Basic - для решения небольших вычислительных задач в диалоговом режиме. В принципе каждый из них можно использовать для решения задач не «своего» класса, но, как правило, это оказывается не слишком удобным.
С середины 60-х годов начали разрабатывать алгоритмические языки более широкой ориентации -так называемые универсальные языки. Обычно они строились по принципу объединения возможностей проблемно-ориентированных языков. Среди них наиболее известны PL/1, Pascal, С,
С+, Modula, Ada. Однако, как и любое универсальное средство, во многих конкретных случаях они оказываются менее эффективными.
Логические языки (Prolog, Lisp, Mercury, KLO и др.) ориентированы не на записьалгоритма решения задачи, а на систематическое и формализованное ее описание. Требуемое решение логически вытекает из составленного описания. В этих языках указывается, что дано и что требуется получить, а поиск решения возлагается непосредственно на ЭВМ.
Объектно-ориентированные языки (Object Pascal, C++, Java, Objective Caml и др.) базируются на одной общей идее; она состоит в стремлении связать данныеи процедуры их обработки в единое целое - объект. С этой целью вводятся следующие основные понятия: объект; свойства объекта; методы обработки; события; классы объектов.
Объект - это совокупность свойств (параметров) определенных сущностей и методов их обработки (программных средств).
Свойство характеризует объект и его параметры. Все объекты наделены определенными свойствами, которые в совокупности и выделяют (определяют) его.
Методом называют набор допустимых действий над объектом или его свойствами.
Событие - это характеристика изменений состояния объекта.
Классом называют совокупность объектов, характеризующихся общностью свойств и применяемых к ним методов обработки.
Существуют различные объектно-ориентированные технологии, которые обеспечивают выполнение важнейших принципов объектного подхода: инкапсуляция и наследование. Под инкапсуляцией понимают скрытие полей объекта с целью обеспечения доступа к ним только посредством методов класса (можно сказать— скрытие деталей, несущественных для использования объекта). Инкапсуляция (объединение) означает сочетание данных и алгоритмов их обработки, в результате чего как данные, так и процедуры во многом теряют самостоятельное значение.
Класс может порождать производные от него подклассы. При построении подклассов осуществляется наследование данных и методов обработки объектов исходного класса.
Фактически объектно-ориентированное программированиеможно рассматривать как модульное программирование нового уровня, когда вместо во многом случайного, механического объединения процедур и данных акцент делается на их смысловую связь. Программа на объектно-ориентированном языке, решая некоторую задачу, по сути описывает модель части мира, относящейся к этой задаче. Описание действительности в форме системы взаимодействующих объектов для человеческого разума гораздо естественнее, чем в форме взаимосвязанных процедур.
Дата публикования: 2014-11-18; Прочитано: 4433 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!