Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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



Языкпрограммирования — это система обозначений, служащая для точного описания программ или алгоритмов для ЭВМ. Они относятся к искусственным языкам, и отличаются от естественных ограниченным числом «слов», а также очень строгими правилами записи команд (опе­раторов). В них не допускается свободное толкование слов и выражений, характерное для обычного языка.

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

Основные требования, предъявляемые к языкам программирова­ния:

наглядность - использование в языке по возможности уже существу­ющих символов, хорошо известных и понятных как программистам, так и пользователям ЭВМ;

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

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

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

однозначность - недвусмысленность записи любого алгоритма (ее от­сутствие может привести к неправильным ответам при решении задач).

В настоящее время известно несколько сотен реально используемых языков программирования. Для каждого есть своя область применения.

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

машинные (самого низкого уровня);

машинно-ориентированные (ассемблеры);

машинно-независимые (высокого уровня).

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

Разные типы процессоров имеют разные наборы команд. Если язык программирования ориентирован на конкретный тип процессора и учиты­вает его особенности, он неизбежно оказывается языком низкого уровня. В данном случае «низкий уровень» не означает «плохое качество»; это значит лишь, что операторы языка близки к машинному коду и ориенти­рованы на конкретные команды процессора.

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

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

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

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

Таким образом, программы, написанные на языке ассемблера, требуют значительно меньшего объема памяти и времени выполнения. Знание программистом языка ассемблера и машинного кода дает ему понимание архитектуры машины. Несмотря на то, что большинство специалистов в области программного обеспечения разрабатывают программы на язы­ках высокого уровня, некоторые виды программ полностью или частично разрабатывают на ассемблере.

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

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

Итак, языки высокого уровня имеют следующие основные преиму­щества перед машинными:

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

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

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

требуемые операции задаются с помощью общепринятых математи­ческих обозначений;

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

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

К основным компонентам алгоритмического языка относятся алфавит, синтаксис и семантика.

Алфавит — это фиксированный для данного языка набор основных символов («букв алфавита»), из которых должен состоять любой текст, на­писанный на нем (никакие другие символы в тексте не допускаются).

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

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

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

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

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

Разнообразие классов задач, решаемых на ЭВМ, привело к тому, что на сегодняшний день разработано уже несколько сотен алгоритмических языков. Правда, широкое распространение и международное признание получили лишь 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...