Языки программирования — Взаимодействие между языками программирования

Содержание

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

Для погружения в программирование нужно всего 3 вещи:

  • Решить, с какого языка/технологии вы хотите начать.
  • Решить, на каком ресурсе вы хотите обучаться.
  • Выделить время на само программирование.

Звучит просто, однако у вас уйдёт много времени на исследования, чтобы решить, что вам подходит и на каком ресурсе обучаться.

Некоторые люди начинают с относительно низкоуровневого программирования на C и C++. Другие выбирают более традиционный путь, изучая Java или C#. Равно как есть и те, кто начинает с высокоуровневых или скриптовых языков наподобие Python, Ruby или JavaScript. У таких подходов есть много преимуществ, однако есть и другие пути, просто эти самые популярные.

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

Низкий уровень

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

«Росбанк», Москва, до 60 000 ₽ (до налогов)

Примеры: C, C++, Assembler.

+ Полный контроль практически надо всем; вы используете только то, что вам нужно.

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

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

– Управлять памятью может быстро стать очень сложным.

+ Позволит вам лучше понять, что происходит за кулисами в высокоуровневых языках и научит ценить абстракции.

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

+ Мотивирует думать об эффективности.

– Требуется предварительная оптимизация.

+ Мотивирует думать об архитектуре наперёд.

– Изменения в плохой архитектуре могут быть болезненными. А хорошую архитектуру тяжело придумать.

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

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

Средний уровень

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

+ Управлять памятью необязательно, но при желании вы можете это делать самостоятельно.

– До сих пор нужно понимать, как устроена память и как работает сборка мусора, но язык этому обучению не способствует.

+ Богатые стандартные библиотеки.

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

+ Компилируется в байт-код, упрощающий взаимодействие с другими языками.

– Байт-код требует установленной среды выполнения.

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

Высокий уровень

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

Примеры: Python, Ruby, JavaScript, Common Lisp.

+ Абстракции делают сложные задачи простыми.

– Надстройки для реализации абстракций снижают производительность.

+ В целом всё просто и интуитивно, даже при внесении изменений.

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

+ Сравнительно большие стандартные библиотеки означают, что то, что вы хотите сделать, скорее всего уже реализовано и доступно.

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

+ Меньше вставок стандартного кода (boilerplate) – синтаксис значительно проще.

– Динамическая типизация усложняет поиск ошибок без запуска кода.

Заключение

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

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

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

· алфавит допустимых символов и служебных (ключевых) слов;

· синтаксические правила построения из алфавита допустимых конструкций языка;

· семантику, объясняющую смысл и назначение конструкций языка.

Языки программирования служат для представления решения задач в такой форме, чтобы они могли быть выполнены на ЭВМ.

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

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

Транслятор — это программа, которая считывает текст программы, написанной на одном языке, и транслирует (переводит) его в эквивалентный текст на другом языке (обычно на машинном языке). Трансляторы бывают двух основных видов: компиляторы и интерпретаторы.

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

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

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

Некоторые языки, например Java и C#, находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной. Для выполнения байт-кода обычно используется интерпретация. Подобный подход в некотором смысле позволяет использовать плюсы как интерпретаторов, так и компиляторов.

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

Классификацию языков программирования можно вести по нескольким критериям: машинно-ориентированные (ассемблеры) и машинно-независимые, специализированные и универсальные.

К специализированным языкам можно отнести язык АРТ (Automatically Programmed Tools) — первый специализированный язык программирования для станков с числовым управлением. Язык был разработан группой американских специалистов в 1956–1959 гг. под руководством математика Дугласа Т. Росса. Язык СOBOL (Common Business–Oriented Language), созданный в США под руководством Грейс Мюррей Хоппер в 1959 г., ориентирован на обработку экономической информации. Математик Грейс Мюррей Хоппер возглавила проект по разработке СOBOL в чине капитана второго ранга, впоследствии она стана контр-адмиралом. Г.М. Хоппер называют “мамой и бабушкой” СOBOLа.

Грейс Мюррей Хоппер
(Grace Murray Hopper)

К специализированным языкам можно отнести и современные языки web-программирования Perl и PHP. Языки Рапира, Е-язык (Россия), SMR (Великобритания), LOGO (США) можно отнести к языкам, предназначенным для обучения программированию.

Самыми распространенными универсальными языками программирования сегодня являются C++, Delphi, Java, Pascal, Visual Basic, Python.

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

Классификация языков программирования

Языки программирования можно разделить на два класса: процедурные и непроцедурные. Процедурные (императивные) языки — это языки операторного типа. Описание алгоритма на этом языке имеет вид последовательности операторов. Характерным для процедурного языка является наличие оператора присваивания (Basic, Pascal, С). Программа, написанная на императивном языке, очень похожа на приказы, выражаемые повелительным наклонением в естественных языках, то есть это последовательность команд, которые должен выполнить компьютер. Программируя в императивном стиле, программист должен объяснить компьютеру, как нужно решать задачу.

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

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

Логические языки

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

Первым языком логического программирования был язык Planner, он был разработан Карлом Хьюитом в Лаборатории искусственного интеллекта Массачусетсского технологического института в 1969 г. В этом языке была заложена возможность автоматического вывода (получения) результата из данных и заданных правил путем перебора вариантов (совокупность которых называлась планом). Но самым известным языком логического программирования является ПРОЛОГ (Prolog), который был создан во Франции в Марсельском университете в 1971 г. Аленом Кольмеро (Colmerauer).

Ален Кольмеро
(Alain Colmerauer)

Программа на языке ПРОЛОГ содержит две составные части: факты и правила. Факты представляют собой данные, с которыми оперирует программа, а совокупность фактов составляет базу данных ПРОЛОГа, которая, по сути, является реляционной базой данных. Основная операция, выполняемая над данными, — это операция сопоставления, называемая также операцией унификации или согласования. Правила состоят из заголовка и подцелей. Выполнение программы, написанной на ПРОЛОГе, начинается с запроса и состоит в доказательстве истинности некоторого логического утверждения в рамках заданной совокупности фактов и правил. Алгоритм этого доказательства (алгоритм логического вывода) и определяет принципы исполнения программы, написанной на ПРОЛОГе.

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

Кроме этого, имеется правило, вводящее отношение бабушка:

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

Ответ на этот запрос система ПРОЛОГ выдаст так:

Возможности применения языка ПРОЛОГ весьма обширны. Среди наиболее известных — применение в символической математике, планировании, автоматизированном проектировании, построении компиляторов, базах данных, обработке текстов на естественных языках. Но, наверное, самое характерное применение ПРОЛОГа — это экспертные системы.

На сегодняшний день существует целый класс логических языков; так, от языка Planner также произошли логические языки программирования QA-4, Popler, Conniver и QLISP. Языки программирования Mercury, Visual Prolog, Oz и Fril произошли уже от языка Prolog.

Функциональные языки

Первым языком функционального типа является язык ЛИСП, созданный в Массачусетсском технологическом институте в 1956–1959 гг. Джоном Маккарти, который в 1956 г. на Дармутской конференции (США) впервые предложил термин “искусственный интеллект”.

Джон Маккарти (John McCarthy)

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

После своего появления ЛИСПу присваивали много эпитетов, отражающих его черты: язык функций, символьный язык, язык обработки списков, рекурсивный язык. С позиций сегодняшней классификации ЛИСП определяется как язык программирования функционального типа, в основу которого положен метод -исчисления (метод -исчисления разработан в 30-е годы прошлого столетия А.Черчем в качестве строгой математической модели для вычислимых функций, см. “Теория алгоритмов”).

Программа, написанная на функциональном языке, состоит из неупорядоченного набора уравнений, определяющих функции и значения, которые задаются как функции от других значений. Программы и данные ЛИСПа существуют в форме символьных выражений, которые хранятся в виде списковых структур. ЛИСП имеет дело с двумя видами объектов: атомами и списками. Атомы — это символы, используемые для идентификации объектов, которые могут быть числовыми и символьными (понятия, материалы, люди и т.д.). Список — это последовательность из нуля или более элементов, заключенных в круглые скобки, каждый из которых является либо атомом, либо списком. Над списками выполняются три примитивные операции: извлечение первого элемента списка; получение оставшейся части списка после удаления первого элемента; объединение первого элемента списка L и оставшейся части списка Q.

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

В качестве основных свойств функциональных языков программирования обычно рассматриваются следующие: краткость и простота; строгая типизация; модульность; функции — объекты вычисления; чистота (отсутствие побочных эффектов); отложенные (ленивые) вычисления.

Кроме ЛИСПа, к функциональным языкам относят РЕФАЛ (разработан в середине 60-х годов В.Ф. Турчиным в МГУ им. М.В. Ломоносова), Haskell, Clean, ML, OCaml, F#.

Приведем пример описания известного алгоритма быстрой сортировки списка на языке Haskell:

qsort (x:xs) = qsort elts_lt_x ++ [x]

++ qsort elts_greq_x where

elts_lt_x = [y | y = x]

Здесь записано, что пустой список уже отсортирован. А сортировка непустого списка состоит в том, чтобы разбить список на три: список элементов, меньших головы исходного списка, голова исходного списка ([x]) и список элементов хвоста исходного списка, больше или равных x.

Объектно-ориентированные языки

Объектно-ориентированные языки — это языки, в которых понятия процедуры и данных, используемых в обычных системах программирования, заменены понятием “объект” (см. статью “Объектно-ориентированное программирование”). Языком объектно-ориентированного программирования в чистом виде считается SmallTalk, возможности объектно-ориентированного программирования заложены также в Java, C++, Delphi.

Дальнейшее развитие современного программирования связано с так называемым “параллельным программированием”. Для реализации этой технологии разрабатываются специализированные объектно-ориентированные языки. К языкам такого типа относят, например, MC# (mcsharp) — высокоуровневый объектно-ориентированный язык программирования для платформы .NET, поддерживающий создание программ, работающих в распределенной среде с асинхронными вызовами.

Структура языка программирования

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

Любой язык программирования состоит из предложений (операторов). Предложения (как и слова) определены над неким алфавитом С. Синтаксис языка описывает множество предложений над алфавитом С, которые внешне представляют правильно сформированные программы.

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

Знание формального языка (алфавита + синтаксиса) хотя и достаточно для установления синтаксической корректности программы, однако недостаточно для понимания ее назначения и способа действий. Значение и способ действия программы на языке программирования уточняются путем задания семантики.

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

Для определения формальных языков, в том числе для языков программирования, используют БНФ (формы Бэкуса — Наура) и синтаксические диаграммы. Это два взаимозаменяемых способа описания.

При описании языка программирования через БНФ используются следующие обозначения:

1) — определяемое слово;

2) R — правило из синтаксиса для формирования слова;

Каждое R состоит из терминальных слов или лексем языка и, возможно, следующих символов:

· [..] — данный элемент присутствует в БНФ;

· <..>— данное вхождение может быть использовано в БНФ;

· <..>* — данное вхождение может быть использовано в БНФ конечное число раз.

Пример 1. Приведем пример БНФ-правила, определяющего целое число.

Читается это правило так: “Целое число — это символ 0 или последовательность символов, которая может начинаться символом “–”, а далее следует отличная от нуля цифра, вслед за которой может следовать любая конечная последовательность цифр”.

Специальную, схожую с БНФ, форму описания формальных языков представляют синтаксические диаграммы. В синтаксических диаграммах используются три типа элементов: овал/круг, прямоугольник, стрелки. В овалах помещаются терминальные слова или лексемы, в прямоугольниках — определяемые слова. Графическое представление языка через синтаксические диаграммы делает описание языка наглядным.

Пример 2. Описание целого числа с помощью синтаксической диаграммы.

Методические рекомендации

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

Следует рассказать, почему возникают новые языки и совершенствуются старые: в первую очередь это происходит при поиске средства для быстрого написания сложных программ, которые к тому же не содержали ошибок. Известен пример, когда создание языка АДА (назван так в честь первой женщины-программиста Ады Лавлейс, дочери Байрона) было инициировано в 1974 году в Министерстве обороны США. Американские военные осознали, что они теряют много времени, усилий и денег на разработку и сопровождение встроенных компьютерных систем (например, систем наведения ракет), а трудноуловимые ошибки языков программирования приводят к настоящим катастрофам.

Декларативные языки были очень популярны в конце 80-х — начале 90-х годов прошлого столетия, они были названы языками программирования искусственного интеллекта для компьютеров пятого поколения. Однако надежды на их широкое распространение пока не оправдались. Возможно, потому, что существующие системы функционального и логического программирования не позволяют создавать быстро работающие программы для содержательных задач. Не исключено, что их время просто еще не наступило.

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

В настоящее время существуют два наиболее распространенных подхода к преподаванию программирования:

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

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

Первый подход часто используется при преподавании основ программирования в младших классах средней школы с использованием специальных языков, например, Рапиры, Е-языка, LOGO. Эти языки учитывают возможности школьников младших классов. Такой подход хорош при углубленном изучении информатики в 5–6-х классах.

Относительно второго подхода можно сказать, что большинство современных реализаций стандартных языков загружено большим количеством технических деталей и сложны в изучении. Тем не менее наиболее приемлемым для общеобразовательной школы, где курс информатики преподается в 8–11-х классах, является обучение теоретическим основам программирования на базе стандартного языка. При этом не обязательно вдаваться в глубины языка. Учащиеся, которых он заинтересует, могут сделать это и сами. Наибольшее внимание следует уделить переходу от алгоритмических структур к их программной реализации на языке программирования.

Здесь стоит отметить, что Pascal первоначально создавался как учебный язык, но со временем получил широкое распространение в качестве стандартного языка и развитие в виде объектно-ориентированного языка с визуальной технологией программирования Delphi. За основу курса в 8–9-х классах можно взять Pascal или Basic, а в качестве расширенного (факультативного) курса в 10–11-х классах ознакомить учащихся с их объектно-ориентированными расширениями (Delphi и Visual Basic). У каждого языка есть свои сторонники и противники, и конечный выбор остается за учителем.

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

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

Языки программирования (стр. 1 из 2)

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

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

Эти языки создавались для различных целей, что обусловило ряд фундаментальных различий между ним. Системные разрабатывались для построения структур данных и алгоритмов “ с нуля”, начиная от таких примитивных элементов , как слово памяти компьютера . В отличие от этого , языки описания сценариев создавались для связывания готовых программ . Их применение подразумевает наличие достаточного ассортимента мощных компонентов , которые требуется только объединить друг с другом . Языки системного уровня используют строгий контроль типов, что помогает разработчикам приложении справляться со сложными задачами; языки же описания сценариев не используют понятие типа, что упрощает установление связей между компонентами и ускоряет разработку прикладных систем.

Цукерберг рекомендует:  Html css - какой движок выбрать

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

2. Языки программирования системного уровня.

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

К концу 50-х годов начали появляться языки программирования более высокого уровня, такие как Lisp, Fortran, ALGOL. В них уже не было точного соответствия между языковыми конструкциями и машинными командами. Преобразование строк исходного кода в последовательности двоичных команд осуществлялось компилятором. Со временем их число пополнилось языками PL /1, Pascal, C, C++, Java. Все они менее эффективно используют аппаратуру по сравнению с языками ассемблера, но позволяет быстрее создавать приложения. В результате им удалось практически полностью вытеснить языки ассемблера при создании крупных приложений.

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

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

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

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

Для описания структур управления программист может использовать также ключевые слова, как if, while; последовательности машинных команд, соответствующие этим описаниям компилятор генерирует динамически.

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

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

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

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

Языки описания сценариев создавались для связывания готовых программ. Их применение подразумевает наличие достаточного ассортимента мощных компонентов, которые требуется только объединить друг с другом.

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

На рисунке 1 представлено распределение ряда языков программирования по мощности и степени строгости типизации.

5. Языки описания сценариев.

Языки описания сценариев, такие как Perl, Python, Rexx, Tcl, VisualBasic и языки оболочек UNIX, предполагают стиль программирования, весьма отличный от характерного для языков системного уровня. Они предназначаются не для написания приложения с “нуля”, а для комбинирования компонентов, набор которых создается заранее при помощи других языков. Например, Tcl, VisualBasic могут использоваться для построения пользовательских интерфейсов из имеющихся элементов управления, а языки описания сценариев для оболочек UNIX применяются для формирования “конвейеров” обработки потоков данных из набора стандартных фильтров. Языки описания сценариев часто применяются и для дополнения готовых компонентов новыми возможностями; однако эта деятельность редко охватывает создание сложных алгоритмов или структур данных, которые уже обычно бывают уже заложены в компоненты. Иногда языки описания сценариев даже называют связующими или языками системной интеграции.

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

Параллельные языки программирования

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

1.Программирование на параллельном языке программирования. Причем такие языки могут быть:

· универсальными (например, Ada);

· для конкретных типов компьютеров, позволяющих эффективно транслировать программы на параллельном языке именно в эту архитектуру (например, язык Occam изначально разрабатывался для транспью­теров).

2.Программирование на широко распространенном языке программирова­ния (например, С, С++, Pascal), который расширен языковыми (на уров­не языка программирования) распараллеливающими конструкциями.

3.Программирование с использованием дополнительных указаний компи­лятору на уровне языка прагм (например, по стандарту ОреnМР).

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

5.Применение средств автоматического распараллеливания последователь­ных программ такими инструментами, как компиляторы. На рис. 2.6 приведены наиболее распространенные языки программирова­ния, содержащие явные конструкции параллельного исполнения.

Класс задач

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

2.2. Методология объектно-ориентированного программирования.

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

Происхождение

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

Методы

Методы представляют собой процедуры и функции, принадлежащие классу.

Метод объектно-ориентированной декомпозиции– заключается в выделении объектов и связей между ними. Метод поддерживается концепциями инкап­суляции, наследования и полиморфизма.

Метод абстрактных типов данных— метод, лежащий в основе инкапсуля­ции. Метод поддерживается концепцией абстрагирования.

Метод пересылки сообщений— заключается в описании поведения системы в терминах обмена сообщениями между объектами. Метод поддерживается концепцией сообщения.

Вычислительная модель

Вычислительная модель чистого объектно-ориентированного программиро­вания поддерживает явно только одну операцию, которой является посылка объекту сообщения. Сообщения могут иметь параметры, являющиеся объек­тами. Само сообщение также является объектом.

Объект имеет набор обработчиков сообщений (набор методов). У объекта есть поля — персональные переменные для данного объекта, значениями которых являются ссылки на другие объекты. В одном из полей объекта хранится ссылка на объект-предок, которому переадресуются все сообще­ния, не обрабатываемые данным объектом. Структуры, описывающие обра­ботку и переадресацию сообщений, обычно выделяют в отдельный объект, называемый классом данного объекта. Сам объект называют экземпляром указанного класса.

Синтаксис и семантика

В синтаксисе чистых объектно-ориентированных языков все может быть записано в форме посылки сообщений объектам. Класс в объектно-ориен­тированных языках описывает структуру и функционирование множества объектов с подобными характеристиками, атрибутами и поведением. Объект естественным образом принадлежит к некоторому классу и обладает своим собственным внутренним состоянием. Методы – это функциональные свойст­ва, которые можно активизировать.

В объектно-ориентированном программировании определяют три основных свойства:

· Инкапсуляция —это объединение данных с процедурами и функциями в единый блок программного кода.

· Наследование —это передача методов и свойств от предка к потомку, без необходимости написания дополнительного программного кода.

· Полиморфизм(полиморфизм включения) — это возможность изменения одинаковых по смыслу свойств и поведения объектов в зависимости от их типа.

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

Естественным средством структурирования в данной методологии являются классы. Классы определяют, какие поля и методы экземпляра доступны из­вне, как обрабатывать отдельные сообщения и т. п. В чистых объектно-ориентированных языках извне доступны только методы.

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

Объектно-ориентированная методология естественным образом близка к параллельной. Каждый отдельный объект становится процессом, находящимся в постоянном ожидании сигналов-сообщений. Кстати, одним из первых представлений об объектах является экторная модель параллель­ных вычислений Хьюитта. Под объектом в ней подразумевается активный процесс, получающий сообщения и изменяющий свое внутреннее состояние в зависимости от полученного сообщения. Для этой модели справедливы следующие свойства:

· объектом является процесс, который может иметь различные внутренние состояния. При получении сообщения объект становится активным;

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

· во время работы объект может обмениваться сообщениями с другими объектами.

Дата добавления: 2020-05-12 ; просмотров: 515 ; ЗАКАЗАТЬ РАБОТУ

Параллели между естественными языками и языками программирования

Рубрика: 5. Общее и прикладное языкознание

Дата публикации: 04.12.2020

Статья просмотрена: 360 раз

Библиографическое описание:

Овчарова М. В., Хаустова С. А. Параллели между естественными языками и языками программирования [Текст] // Филологические науки в России и за рубежом: материалы IV Междунар. науч. конф. (г. Санкт-Петербург, декабрь 2020 г.). — СПб.: Свое издательство, 2020. — С. 43-45. — URL https://moluch.ru/conf/phil/archive/233/11553/ (дата обращения: 15.11.2020).

В настоящее время крайне насущны вопросы обучения как естественным языкам, так и языкам программирования.

Издавна параллельно существуют такие дисциплины, как информатика и лингвистика. У каждой из них свое поле деятельности, своя история, свои достижения и насущные задачи. На первый взгляд, они весьма слабо связаны друг с другом. Действительно, лингвистика изучает человеческие языки — как существующие, так и вышедшие из употребления (или мертвые). Лингвистика в большей мере является гуманитарной наукой, чем точной. Информатика (или, как теперь принято говорить, computer science) — скорее область математики. Она изучает алгоритмы и вычисления, а также все, что связано с этими понятиями. Иногда даже ее называют вычислительная математика. Если лингвистика как наука существует с древних времен, то и информатика как академическая дисциплина появилась только в конце 50-х гг. XX века. Прикладное использование информатики при решении лингвистических задач достаточно широко распространено, особенно при обработке данных. Существует даже компьютерная лингвистика, которая своей целью ставит использование математических моделей при описании естественных языков. Но нет, к примеру, «лингвистической информатики». Однако в развитие информатики большой вклад внесли именно лингвисты. [1]

Информация становится понятной, если она выражена языком, на котором говорят те, кому предназначена информация.

В процессе развития человеческого общества люди выработали большое число языков.

Язык — это знаковая система, используемая для целей коммуникации и познания. Основой большинства языков является алфавит — набор символов, из которых можно составлять слова и фразы данного языка.

‒ ·набором используемых знаков;

‒ правилами образования из этих знаков таких языковых конструкций, как “слова”, “фразы” и “тексты” (в широком толковании этих понятий);

‒ набором синтаксических, семантических и прагматических правил использования этих языковых конструкций.

Все языки можно разделить на естественные и искусственные.

Естественными называются “обычные”, “разговорные” языки, которые складываются стихийно и в течение долгого времени. История каждого такого языка неотделима от истории народа, владеющего им. Естественный язык, предназначенный, прежде всего, для повседневного общения, имеет целый ряд своеобразных черт:

‒ почти все слова имеют не одно, а несколько значений;

‒ часто встречаются слова с неточным и неясным содержанием;

‒ значения отдельных слов и выражений зависят не только от них самих, но и от их окружения (контекста);

‒ распространены синонимы (разное звучание — одинаковый смысл) и омонимы (одинаковое звучание — разный смысл);

‒ ·одни и те же предметы могут иметь несколько названий;

‒ есть слова, не обозначающие никаких предметов;

‒ многие соглашения относительно употребления слов не формулируются явно, а только предполагаются и для каждого правила есть исключения и т. д.

Основными функциями естественного языка являются:

  • · коммуникативная (функция общения);
  • ·когнитивная (познавательная функция);
  • · эмоциональная (функция формирования личности);
  • ·директивная (функция воздействия).

Все языки можно разделить на естественные и искусственные.

Естественными называются “обычные”, “разговорные” языки, которые складываются стихийно и в течение долгого времени. История каждого такого языка неотделима от истории народа, владеющего им.

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

Любой язык, и естественный и искусственный, обладает набором определенных правил. Они могут быть явно и строго сформулированными (формализованными), а могут допускать различные варианты их использования. [2]

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

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

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

Формальные языки часто конструируются на базе языка математики. Веком бурного развития различных формальных языков можно считать XX век.

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

Языков программирования и их диалектов (разновидностей) насчитывается несколько тысяч.

По некоторым данным, в мире насчитывается около 7000 естественных живых языков и одновременно около 8500 языков программирования. Конечно, эти цифры достаточно приблизительны.Несмотря на большие различия, естественные языки имеютнекоторые общие черты. Они называются универсалиями. Различаютфонологические, грамматические и некоторые другие универсалии.

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

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

Исходный текст проходит ряд этапов обработки: первичный анализ (графематический анализ, морфологический анализ, фрагментация текста), затем лексический, синтаксический, семантический анализ (локальный и глобальный), после этого идет межъязыковый переход, и в обратном порядке этапы синтеза: семантический, синтаксический, лексический, морфологический.

При этом может происходить возврат на предыдущий этап, например, при обнаружении синтаксической неоднозначности, она может разрешиться на этапе семантического анализа. При всех усилиях, затрачиваемых на создание таких систем, их работа оставляет желать лучшего. Какую же параллель можно увидеть в информатике? Конечно же, машинный перевод с одного языка программирования на другой. [6]

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

И хотя в этом случае контекста всего два, но все равно автоматический перевод становится практически невозможным.

Еще сложнее картина возникает при попытке перевода на язык более высокого уровня. Задача становится настолько сложной, что такие переводчики даже не создаются — цель не оправдывает средств. [5]

Отсюда видно, насколько сложная задача стоит в случае перевода с одного естественного языка на другой.

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

  1. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно- ориентированного проектирования. Паттерны проектирования = DesignPatterns: ElementsofReusableObject-OrientedSoftware. — СПб.: Питер, 2007. — 366 с.
  2. Гивенталь И. А. Как удивиться и возмутиться по-английски. — М.: Флинта: Наука, 2008. — 247 с.
  3. Гринберг Дж. Некоторые грамматические универсалии, преимущественно касающиеся порядка значимых элементов // Новое в лингвистике. — Вып. V. — М., 1970. — С. 70–79.
  4. Леонтьева Н. Н. Автоматическое понимание текстов. Системы, модели, ресурсы. — М.: Академия, 2006. — 303 с.
  5. Степанов Ю. С. Константы: Словарь русской культуры. — М.: Языки русской культуры, 1997. — 824 с.
  6. Уолл Л., Кристиансен Т., Орвант Дж. Программирование на Perl. — М.: Символ-Плюс, 2006. — 1150 с.
  7. Chomsky N. A. Syntactic Structures. — The Hague–Paris: Mouton, 1957. –117с

Похожие статьи

Обзор систем машинного перевода | Статья в журнале.

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

Семантический анализ текстов. Основные положения

Семантический (смысловой) анализ текста – одна из ключевых проблем как теории создания систем искусственного интеллекта, относящаяся к обработке естественного языка (Natural Language Processing, NLP) , так и компьютерной лингвистики.

Семантика в задачах автоматической обработки данных

язык, язык программирования, естественный язык, долгое время, машинный перевод, семантический анализ, история народа, информатик, слово. Метапредметные связи на уроках информатики.

Методология реализации естественно-языкового.

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

Машинный перевод: история, классификация, методы

Ключевые слова: компьютерная лингвистика, машинный перевод, обработка естественного языка, автоматическое понимание текстов, статистический перевод, перевод «по правилам».

Основные современные языки программирования

Ключевые слова: язык, С++, программирование, Java, ЭВМ, Python, код, синтаксис.

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

То есть, фактически, код приложения не компилируется в машинный код, но.

Проблемы выбора языка программирования в школьном курсе.

Некоторые считают, что не так важно, какой язык программирования взять: на уроках информатики нужно учить не языку программирования, а

Но нет смысла обучать всему «от и до» на языке Pascal и его библиотеки. Лучше это время потратить на изучение языков и.

Трудности перевода реалий русского языка на персидский язык

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

Основные термины (генерируются автоматически): русский язык, реалия, словарь, слово, язык, персидский язык, перевод реалий, переводчик.

Проблемы и преимущества автоматизированного и машинного.

Машинный перевод: история, классификация, методы. Ключевые слова: компьютерная лингвистика, машинный перевод, обработка естественного языка, автоматическое понимание текстов, статистический перевод, перевод «по правилам».

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

Читайте также:

  1. I. ОБЩАЯ ХАРАКТЕРИСТИКА ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
  2. I. Общий обзор развития гносеологии в ее основных проблемах
  3. Алгоритмы на различных языках программирования. Заполнение массивов
  4. АНАЛИТИЧЕСКИЙ СПОСОБ РЕШЕНИЯ ЗАДАЧ ЛИНЕЙНОГО ПРОГРАММИРОВАНИЯ
  5. Базовые средства программирования
  6. Базовые структуры языков программирования
  7. Введение в основы программирования
  8. Внеположенность и межъязыковая омонимия
  9. Дар языков
  10. ДИСКУРС-АНАЛИЗ КАК ПАРАДИГМА В ИЗУЧЕНИИ ЯЗЫКОВОГО ОБЩЕНИЯ
  11. Единичность языковых явлений
  12. Заключительный обзор

Тема 6. Знакомство с языками программирования.

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

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

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

Цукерберг рекомендует:  CSS свойство float на примерах.

Сегодня практически все программы создаются с помощью язы­ков программирования. Теоретически программу можно написать и на естественном языке (говорят: программирование на метаязыке), но из-за неоднозначности естественного языка автоматически пере­вести такую программу в машинный код пока невозможно.

Языки программирования это формальные искусственные язы­ки. Как и естественные языки, они имеют алфавит, словарный запас, грамматику и синтаксис, а также семантику.

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

Словарный состав или лексика языка — это совокупность употребляемых в нем слов, т.е. правильных слов данного языка.

Грамматика — это конечная система правил, определяющих язык.

Грамматика определяет способы построения изменения и сочетания слов.

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

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

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

Языки программирования, ориентированные на команды процессора и учитывающие его особенности, называют языками низкого уровня. «Низкий уровень» не означает неразвитый, имеется в виду, что операторы этого языка близки к машинному коду и ориентиро­ваны на конкретные команды процессора.

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

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

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

Язык высокого уровня «непонятен» компьютеру, поэтому суще­ствуют специальные программы-трансляторы, переводящие опера­торы языка высокого уровня в машинные коды.

Существуют два типа программ-трансляторов: компилятор и ин­терпретатор.

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

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

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

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

Иерархическая модель строится по следующим правилам:

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

— для каждого модуля нижнего уровня имеется выход в модуль верхнего уровня;

— связи между модулями организуются сверху вниз;

— обращение к одному модулю возможно несколько раз, при этом он изображается один раз и оформляется как подпрограмма.

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

Модульное программирование позволяет существенно сокра­тить время, необходимое на отладку программ.

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

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

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

— запрещается использовать команду переходов «GOTO». Структурное программирование используется в основном для программирования отдельных модулей.

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

Свойства языков программирования:

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

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

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

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

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

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

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

• стоимость обучения языку;

• стоимость создания программы;

• стоимость трансляции программы;

• стоимость выполнения программы;

• стоимость сопровождения программы.

Языки программирования или алгоритмические языки классифицируются: по степени их зависимости от вычислительной машины; по ориентации на сферу применения; по специфике организационной структуры языковых конструкций и т.п. (рис. 6.1),

Рис. 6.1. Классификация языков программирования

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

Знание концептуальных основ языков программирования с точки зрения использования и реализации базовых языковых конструкций позволит:

— более обоснованно выбрать язык программирования для реализации конкретного проекта;

— разрабатывать более эффективные алгоритмы;

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

— ускорить изучение новых языков программирования;

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

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

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

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

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

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

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

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

Большинство производственных задач решают с помощью программ, написанных на процедурно — ориентированных языках. Средства этих языков позволяют наиболее просто описать часто встречающиеся фрагменты действий в соответствующих задачах. Процедурно-ориентированные языки предполагают знания пользователя в области математических (численных) методов и основ алгоритмизации (базовый язык для научно-технических расчетов ФОРТРАН, БЕЙСИК (персональные ЭВМ — основной), современный ПАСКАЛЬ).

В процессе развития созданы многоцелевые (универсальные) языки программирования, объединяющие основные средства и возможности многих процедурно — ориентированных языков, например: ПЛ/1 -используемый для решения задач обработки экономической и научно-технической информации, задач управления объектами и т.п.; язык АДА — многоцелевой стандартный язык, способный заменить множество других языков и на длительный период обеспечить разработку и совершенствования программ обеспечения; язык МОДУЛА — объединяет средства и особенности . машинно-ориентированных и процедурно — ориентированных языков; включает средства для написания подпрограмм управления устройствами, управления потоками сообщений, для чего традиционно использовались языки ассемблерного типа.

Для пользователей, не имеющих специальной подготовки, но нуждающихся в оперативном использовании ЭВМ для решения стереотипных задач, разрабатываются специальные проблемно — ориентированные языки(непроцедурные), которые не требуют подробной записи алгоритма решения задачи. На таком языке лишь формулируется задача и указывается последовательность подзадач из готового набора с указанием исходных данных и форм требуемых документов. Специальные средства программы-генераторы из готовых блоков автоматически формируют программу для решения поставленной задачи. Эти языки ещё более высокого уровня, т.е. удалены от машины более, чем процедурно-ориентируемые языки. К ним относятся языки для задания и обработки таблиц данных при решении экономических задач, а также языки моделирования сложных систем СИМУЛА, НЕДИС и другие (СИМСКРИПТ).

Граница между проблемно — и процедурно — ориентированными языками очерчена не очень четко (условно) — ЛИСП, ПРОЛОГ.

Дата добавления: 2014-11-20 ; Просмотров: 1341 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Современные языки программирования: краткий обзор

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

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

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

Зачем нужны языки программирования

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

  • Язык программирования выглядит совсем не так, как мы привыкли представлять себе язык — это набор различных символов, которые преобразуются в понятный компьютеру код.
  • Классификация языков программирования от низких до высоких уровней зависит от того, настолько близок язык к человеку. Чем меньше язык программирования понятен человеку, тем по уровню он ниже.
  • Большая часть языков преобразуется в понятный машине код с помощью программ-трансляторов. С их помощью прописываются лексические, семантические и синтаксические правила, которые определят, какие действия запросит пользователь и внешний вид программы.
  • Язык программирования — неотъемлемая часть работы любого компьютера. В современном мире с ними работают программисты, которые прописывают коды и создают программы с использованием сложных кодовых конструкций.

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

История языков программирования

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

Начало же современному программированию было дано в 1930-1940-е годы, когда были написаны лямбда-исчисление и машина Тьюринга. То время можно назвать началом истории разработки языков программирования, ведь компьютеры становились все популярнее. В 1940-е годы появились первые электрические компьютеры, и тогда же немецкий инженер Ц. Кузе разработал Планкалькюль, первый высокоуровневый язык.

В 1950-е годы были разработаны машинные коды, которые считаются языками программирования первого поколения. Но их приходилось переписывать для каждой ЭВМ отдельно, так что первым реально работающим языком программирования можно считать «Краткий код». Он первым стал представлять собой не набор математических кодов, а выражения, которые потом перерабатывались в код.

Затем появились языки второго поколения — они были проще для человека, но ограничивались использованием ассемблера. Так называли программу, которая переводила команду на машинный язык, своего рода переводчик.

А уже к середине 1950-х годов стали зарождаться языки третьего поколения. Их отличает то, что они подходят для любой программы, их не нужно переписывать под каждую заново. Они уже считают полноценными языками высокого уровня.

В 1960-годы языки программирования начали стандартизировать и улучшать. Хоть затем и появились языки четвертого и пятого поколения, они являются более усовершенствованными версиями языков третьего поколения.

После того, как стал развиваться интернет в 1990-е годы, появились еще языки для написания веб-страниц. Сейчас развитие языков программирования идет по большей части в сторону безопасности пользователя.

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

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

Basic

Basic или Бейсик называют группу языков программирования высокого уровня. Его создали профессора колледжа Дартмут в 1964 году с целью помощи студентам в создании собственных компьютерных программ. Сейчас детище Томаса Курца и Джона Кемени стало основным языком, на котором пишутся программы для ОС Windows.

В далеком 1972 году Дэннис Ритчи придумал язык, который остается популярен и сейчас. Программисты любят его за успешное сочетание в нем элементов как высокого, так и низкого уровней программирования. Кстати, для тех языков программирования, которые используются для написания сайтов, основой является как раз язык Си.

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

Python

Разработка этого языка началась в 1980-х годах голландцем Гвидо ван Россумом, но его первая версия была выпущена только в 2008 году. Он отличается постоянным усовершенствованием и активным сообществом пользователей. Python является высокоуровневым языком с большим объемом различных функций. Особенно хорошо он справляется с веб-разработкой, анализом данных и автоматизацией процессов.

Этот язык лидирует среди тех, что применяются в разработке веб-сайтов и поддерживается практически всеми хостинг-провайдерами. Он применяется, в основном, для разработки веб-сайтов и веб-приложений. Впервые PHP был представлен публике в 1995 году датским программистом Расмусом Лердорфом.

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

JavaScript

Хотя JavaScript похож на Java, но все же является отдельным языком. Чаще всего используется в качестве встраиваемого языка: приложения получают доступ к веб-страницам с его помощью. Он более легок в применении и дается даже тем, кто мало знаком с программированием. Доля его использования ежегодно растет.

Go (Golang)

В 2007 году компания Google занялась разработкой собственного языка программирования, с помощью которого бы можно было решать реальные проблемы. Созданием языка занимались Роб Пайк и Кен Томпсон, которые уже в 2009 году представили Go. Для компании Google он является заменой популярных языков Си и Си ++. Он не стал прорывом, но зато используется для создания серьезных проектов.

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

Swift

Компания Apple тоже придумала собственный язык программирования, чтобы создавать на нем приложения для всех родственных гаджетов. Apple представила свой язык в 2014 году как удобный, надежный, свободный и доступный любому программисту. Он был создан персонально для продуктов Apple.

Pascal

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

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

Нравится статья? Поддержи наш проект и поделись с друзьями!

Основы программирования и основные языки программирования

Программирование для начинающих

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

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

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

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

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

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

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

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

Любознательность. Здоровая доза любознательности может подогревать ваше стремление к экспериментированию и дальнейшему совершенст­вованию навыков программирования даже после прочтения настоящей книги. Благодаря любопытству изучение программирования окажется для вас менее скучным и более интересным. А если вам интересно, вы обязательно изучите и запомните больше сведений, чем любой абсо­лютно незаинтересованный в этом человек (например, ваш начальник).
Воображение. Создание компьютерных программ — это навык, но во­ображение поможет сделать этот навык более совершенным и направ­ленным. Обладающий изрядной долей воображения начинающий про­граммист всегда будет создавать намного более интересные и полезные программы, чем замечательный программист без воображения. Если вы не знаете, что же делать со своими навыками программирования, ваш талант просто погибнет без воображения.

Стремление, любознательность и воображение — вот три самых важных качества, которыми должен обладать каждый программист. Если вы обладаете ими, вам стоит беспокоиться только о мелочах: какой язык программирования изучать (например, C++), что там с математикой и т.д.

Среди многих языков программирования вы всегда сможете найти именно тот язык, который подходит для решения данной задачи. При появлении нового типа проблем люди создают новые языки.

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

0010 1010 0001 1101

ООН 1100 1010 1111

0101 ОНО 1101 0101

1101 1111 0010 1001

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

Теперь мне бы хотелось разъяснить вам, что следует отличать язык программирования (Basic, Pascal) от его реализации, которая обычно представлена в составе среды программирования (Quick Basic, Virtual Pascal) — набора средств для редактирования исходных текстов, генерации исполняемого кода, отладки, управления проектами и т.д. Синтаксис и семантика языка программирования фиксируется в стандарте языка. Каждая среда программирования предоставляет свой интерпретатор или компилятор с этого языка, который зачастую допускает использование конструкций, не фиксированных в стандарте.

Рассмотрим основные и популярные языки программирования

Assembler Это ярчайший представитель языков низкого уровня, набор понятий которого основан на аппаратной реализации. Это средство автоматизации для программирования непосредственно в кодах процессора. Машинные команды описываются в виде мнемонических операций, что позволяет добиться достаточно высокой модифицируемости кода. Поскольку набор команд на разных процессорах различен, то и о совместимости говорить не приходится. Использование ассемблера целесообразно в случаях, когда необходимо напрямую взаимодействовать с оборудованием, либо получить большую эффективность для некоторой части программы за счет более высокого контроля над генерацией кода.

Кобол — Язык программирования высокого уровня, разработанный в конце 1950-х гг. ассоциацией КАДАСИЛ для решения коммерческих и экономических задач. Отличается развитыми средствами работы с файлами. Поскольку команды программ, написанных на этом языке, активно используют обычную английскую лексику и синтаксис, Кобол рассматривается как один из самых простых языков программирования. В настоящее время используется для решения экономических, информационных и других задач.

Фортран — Язык программирования высокого уровня, разработанный фирмой IBM в 1956 г. для описания алгоритмов решения вычислительных задач. Относится к категории процедурно-ориентированных языков. Наиболее распространенными версиями этого языка являются Фортран IV, Фортран 77 и Фортран 90. Используется на всех классах ЭВМ. Последняя его версия также применяется на ЭВМ с параллельной архитектурой.

Цукерберг рекомендует:  Вакансии Evercode Lab

Ада — Язык программирования высокого уровня, ориентированный на применение в системах реального времени и предназначенный для автоматизации задач управления процессами и/или устройствами, например, в бортовых (корабельных, авиационных и др.) ЭВМ. Разработан по инициативе министерства обороны США в 1980-х гг. Назван в честь английского математика Ады Августы Байрон (Лавлейс), жившей в 1815-1851 гг.

BASIC (Beginner’s All-purpose Symbolic Instruction Code) Рожденный в 60-е годы в Америке. Бейсик был задуман как простой язык для быстрого освоения. Бейсик стал фактическим стандартом для МикроЭВМ именно благодаря своей простоте как в освоении так и в реализации. Однако для достижения этого качества был принят ряд решений (отсутствие типизации, нумерация строк и неструктурное GOTO, и др.), негативно сказывающихся на стиле изучающих программирование. Кроме того, недостаток выразительных средств привел к появлению огромного количества диалектов языка, не совместимых между собой. Современные, специализированные версии Бейсика (такие как Visual Basic) несмотря на приобретенную «структурность» обладают все теми же недостатками, прежде всего — небрежностью по отношению к типам и описаниям. Пригоден для использования на начальном этапе обучения, как средство автоматизации (в случаях когда он встроен в соответствующие системы) либо как средство для быстрого создания приложений.

Pascal Разработанный известным теоретиком Н.Виртом на основе идей Алгола-68, Паскаль предназначался прежде всего для обучения программированию. Построенный по принципу «необходимо и достаточно», он располагает строгим контролем типов, конструкциями для описания произвольных структур данных, небольшим, но достаточным набором операторов структурного программирования. К сожалению, обратной стороной простоты и строгости является громоздкость описаний конструкций языка. Наиболее известная реализация — Turbo/Borland Pascal — несмотря на отличия от стандарта Паскаля, представляет из себя среду и набор библиотек, сделавшие из учебного языка промышленную систему для разработки программ в среде MS-DOS.

C и C++ В основе языка C — требования системного программиста: полный и эффективный доступ ко всем ресурсам компьютера, средства программирования высокого уровня, переносимость программ между различными платформами и операционными системами. С++, сохраняя совместимость с C, вносит возможности объектно-ориентированного программирования, выражая идею класса (объекта) как определяемого пользователем типа. Благодаря перечисленным качествам, C/C++ занял позицию универсального языка для любых задач. Но его применение может стать неэффективным там, где требуется получить готовый к употреблению результат в кратчайшие сроки, либо там, где невыгодным становится сам процедурный подход.

Delphi — это не продолжатель дела Borland Pascal / Borland C, его ниша — т.е. быстрое создание приложений (Rapid Application Developing, RAD). Подобные средства позволяют в кратчайшие сроки создать рабочую программу из готовых компонентов, не растрачивая массу усилий на мелочи. Особое место в таких системах занимают возможности работы с базами данных.

Лисп — Алгоритмический язык, разработанный в 1960 г. Дж. Маккарти и предназначенный для манипулирования перечнями элементов данных. Используется преимущественно в университетских лабораториях США для решения задач, связанных с искусственным интеллектом. В Европе для работ по искусственному интеллекту предпочитают использовать Пролог.

Пролог — Язык программирования высокого уровня декларативного, предназначенный для разработки систем и программ искусственного интеллекта. Относится к категории языков пятого поколения. Был разработан в 1971 г. в университете г. Марсель (Франция), относится к числу широко используемых и постоянно развиваемых языков. Последняя его версия Prolog 6.0

ЛОГО — Язык программирования высокого уровня, разработан в Массачусетском технологическом институте в ориентировочно 1970 г. для целей обучения математическим понятиям. Используется также в школах и пользователями ПЭВМ при написании программ для создания чертежей на экране монитора и управления перьевым графопостроителем.

Java Как яркий пример специализации, язык Java появился в ответ на потребность в идеально переносимом языке, программы на котором эффективно исполняются на стороне клиента WWW. В ввиду специфики окружения, Java может быть хорошим выбором для системы, построенной на Internet/Intranet технологии.

Алгол — Язык программирования высокого уровня, ориентированный на описание алгоритмов решения вычислительных задач. Был создан в 1958 г. специалистами западно-европейских стран для научных исследований. Версия этого языка Алгол-60 была принята Международной конференцией в Париже (1960 г.) и широко использовалась на ЭВМ 2-го поколения. Версия Алгол-68, разработанная группой специалистов Международной федерации по обработке информации (ИФИП) в 1968 г., получила статус международного универсального языка программирования, ориентированного на решение не только вычислительных, но и информационных задач. Хотя в настоящее время Алгол практически не используется, он послужил основой или оказал существенное влияние на разработку более современных языков, например, Ада, Паскаль и др.

Самого лучшего языка не существует. Если вы собираетесь стать профессионалом в написании программ, вам необходимо изучить один из языков программирования высокого уровня (наиболее популярен язык программирования C++), а также один из языков программирования баз данных (например, SQL). Изучив язык программиро­вания C++, вы не ошибетесь. Зная этот язык, вы всегда сможете найти работу в любой компании, занимающей­ся программированием.
Несмотря на большую популярность языка программирования C++, часто исполь­зуются и другие языки. На многих устаревших компьютерах до сих пор работают программы, написанные на языке программирования COBOL. Поэтому нужны про­граммисты, которые умеют усовершенствовать данные программы, а также писать но­вые. Очень часто крупные компании выплачивают таким программистам высокую за­работную плату.
Если вы собираетесь работать самостоятельно, предпочтительнее всего научиться создавать собственные программы для баз данных. Для этого вам понадобится изучить такие языки программирования, как SQL или VBA, которые используются в програм­ме Microsoft Access. Для того чтобы создавать Web-страницы, необходимо знать HTML, а также немного знать Java, JavaScript, VBScript и другие языки программиро­вания для Internet. Самым нужным будет тот язык программирования, который по­зволит решить поставленные перед вами задачи легко и быстро. Это может быть язык программирования C++, BASIC, Java, SQL или язык ассемблера.

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

Список языков программирования. Языки программирования низкого и высокого уровня

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

Общие сведения

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

  • машинные (языки программирования низкого уровня);
  • машинно-ориентированные (ассемблеры);
  • машинно-независимые (высокого уровня);

Среди разработчиков современного программного обеспечения наиболее популярны следующие основные языки программирования. Список приведён в порядке убывания популярности:

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

Основы программирования

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

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

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

Разработка приложений

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

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

Рассмотрим подробнее языки программирования высокого уровня. Список составлять не будем, просто распишем несколько подробнее о каждом из наиболее популярных.

Специализированный язык программирования предназначен в первую очередь для работы с системами управления базами данных и их программирования. SQL переводится как «специализированный язык запросов». Поскольку в последние десятилетия рынок СУБД вырос многократно, популярность этого языка не становится сюрпризом.

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

Javascript

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

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

Потомок HTML, эта технология являет собой расширяемый язык разметки. Она приспособлена для интерпретирования документов. На нем проводятся сложнейшие преобразования и изменения документов. Язык XML используется для передачи и временного хранения данных при работе с различными реляционными базами через интернет.

XML уже достиг того уровня, когда может претендовать на роль основополагающей технологии для построения корпоративных сетей.

Программируем по-русски

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

  • 1С:Предприятие. Целая система, предназначенная для управления организацией во всех сферах деятельности. Нередко в объявлениях по поиску сотрудников можно встретить «Программист 1С».
  • Глагол. Аналог англоязычного Pascal.
  • Робик. Специализированный язык программирования, предназначенный для обучения детей основам программирования.
  • Рапира. Язык с динамической типизацией, основанный на процедурах.

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

Лекции по теории языков программирования

Лекции по теории языков программирования

Общие понятия теории языков программирования

Существует несколько определений понятия «язык программирования».

Исходное определение: язык программирования — это знаковая система для планирования поведения компьютера.

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

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

Программы должны быть:

· надежными (содержать мало ошибок);

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

· заботливыми (должны уметь объяснять свои действия и ошибки пользователя).

Области применения языков программирования

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

Хотя аппаратура современных компьютерных систем очень сложна, сложность программного обеспечения превосходит аппаратную сложность более чем на порядок.

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

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

· Научные вычисления. Задачи из этой области сводятся к решению различных математических уравнений. К ним относятся задачи численного анализа, решения дифференциальных и интегральных уравнений и задачи статистики. Обычно научные программы обрабатывают простые структуры данных и производят большое количество арифметических вычислений, выполняемых над числами с плавающей точкой. Наиболее часто употребляются такие структуры, как массивы и матрицы; из управляющих структур чаще других используются циклы со счетчиком и условные операторы. Самым используемым языком здесь является Fortran.

· Обработка деловой информации. Задачи этой области, называемые бизнес-задачами, ориентированы на учет поступлений заказов, управление ресурсами и персоналом, деловое планирование, анализ риска и оценку возможных вариантов, а также начисление зарплаты. Бизнес-программы должны обеспечивать считывание больших объемов данных, собранных за длительный период времени, и сохранение их на внешних носителях, а также формирование новых данные, обновляемые в результате небольших преобразований. Языки бизнес-программирования нацелены на генерацию отчетов со сложной структурой, точные способы описания и хранения десятичных чисел и символьных данных, а также на арифметические действия с десятичными числами. Для этих задач был разработан язык Cobol, который используется и в настоящее время. Однако эта область применения языков программирования в последнее время сокращается, поскольку создается все большее число специализированных пакетов программ, таких, как электронные таблицы и др.

· Искусственный интеллект — это предметная область, главная цель которой состоит в моделировании мыслительной деятельности человека. Отличительной особенностью таких задач являются символьные, а не числовые вычисления. Основным инструментом производимых вычислений здесь считается функция, а используемые языки программирования называются функциональными языками. Родоначальником языков функционального программирования стал язык LISP. Последователями языка LISP являются языки Scheme, Haskell. В 70-х годах для решения задач искусственного интеллекта начали применять язык логического программирования Prolog.

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

· Веб-обработка. Для получения информации пользователи сети интернет подключаются к различным серверам по всему миру, а для ее обработки используют локальные клиентские машины. Чтобы пользователь мог загрузить программу, а поставщик программного обеспечения имел возможность получить плату за ее использование, стал необходим язык программирования, позволяющий вести диалог между клиентским компьютером и сервером. Развитие электронной коммерции находится в полной зависимости от языков с такими возможностями. для развития электронной коммерции информация должна передаваться в обоих направлениях между клиентской машиной и сервером, поэтому веб-страницы должны были стать активными, динамическими. Подобные возможности обеспечиваются такими языками программирования, как Perl, РНР и Java, а также Visual C# и Visual Basic.

Критерии эффективности языков программирования

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

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

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

В качестве основных критериев эффективности обычно выступают:

· читабельность (легкость чтения и понимания программ);

· легкость создания программ (удобство языка для создания программ в выбранной области);

· надежность (обеспечение минимума ошибок при работе программ);

· стоимость (суммарная стоимость всего жизненного цикла языка);

· переносимость программ (легкость переноса программ из одной операционной среды в другую);

· универсальность (применимость к широкому кругу задач);

· четкость (полнота и точность официального описания языка).

В свою очередь, каждый из критериев эффективности зависит от множества разнообразных характеристик. Рассмотрим важнейшие из этих критериев.

Модульное программирование

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

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

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

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

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

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

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

Структурное кодирование

Третьим составным элементом структурного программирования является структурное кодирование, которое представляет собой метод написания хорошо структурированных программных модулей, удобных для тестирования, модификации и использования. Метод предусматривает написание программных модулей произвольного размера и сложности на основе ограниченного множества базисных логических структур. Метод аналогичен принципу, положенному в основу проектирования схем, где любая логическая структура может быть создана из элементарных структур И, ИЛИ и НЕ. Структурное кодирование базируется на строго доказанной теореме о структурировании, которая утверждает, что любую правильную программу (с одним входом и одним выходом, без зацикливаний и недостижимых команд) можно написать с использованием следующих логических структур: последовательности двух или более операторов; выбора одного из двух операторов (IF THEN, ELSE); повторения (или управления
циклом) оператора, пока выполняется некоторое условие (DO WHILE).

Линейные операторы

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

Примеры операторов присваивания:

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

Обычно синтаксис таких операторов выглядит как: read(file, data). В языке С вызов оператора scanf приводит к присваиванию переменной некоторого значения из стандартного файла ввода.

Операторы перехода

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

Передача управления чаще всего указывается с помощью goto — оператора перехода на оператор с заданной меткой.

В языках программирования возможны два вида оператора goto:

Безусловный goto. Если в последовательности операторов встречается оператор безусловного перехода goto, например:

то управление передается оператору, помеченному меткой NEXT_OP, а оператор, непосредственно следующий за оператором goto, не выполняется.

Условный goto. Если в последовательности операторов встречается оператор условного перехода goto, например:

if X > Y then goto NEXT_OP

то управление передается оператору, помеченному меткой NEXT_OP, только в случае выполнения заданного условия X > Y.

Внешний вид разрешаемых меток меняется от языка к языку.

В языке С в качестве формы более безопасного управления переходами предусмотрен оператор break. Этот оператор может размещаться внутри операторов управления while, for, switch. Оператор break передает управление оператору, непосредственно следующему за структурой управления, в которой он сам содержится. Считается, что использование оператора break не ухудшает читабельность программы.

Составные операторы

Составной оператор представляет собой последовательность операторов, которую при создании более сложных операторов можно рассматривать как единый оператор. Обычно составные операторы записывают в виде:

— последовательность из нескольких операторов

Здесь несколько операторов помещаются между открывающей begin и закрывающей end скобками. Пример составного оператора:

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

Условные операторы

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

Существуют условные операторы с одной, двумя и несколькими ветвями. Оператор с одной ветвью записывается в виде:

Условный оператор с двумя ветвями

Здесь при истинности условия выполняются команды1, при ложности— команды2. При необходимости проверить последовательно несколько условий возможно каскадирование условных операторов:

else if условие3

else if условиеN-1>

В этом случае условия будут проверяться последовательно, и как только встретится истинное, будет выполнен соответствующий набор команд и исполнение перейдёт к команде, следующей за условным оператором. Если ни одно из условий не окажется истинным, выполняются командыN из ветви else.

Операторы выбора

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

case выражение_константа_1: оператор_1; break;

case выражение_константа п: оператор_n; break;

Здесь переключающее выражение и выражения-константы должны иметь целые или символьные значения.

Операторы вариантов могут быть последовательностями операторов, составными операторами или блоками, но чаще всего должны заканчиваться оператором break. Оператор break, играет роль ограниченного goto. Его выполнение приводит к выходу из оператора выбора. Если же программист по ошибке пропустит в switch-операторе оператор break, то управление передается на операторы следующего варианта.

Если переключающее выражение принимает значение, отличное от предусмотренных констант, то выполняется оператор n+1 default-варианта. Вариант default в операторе switch может отсутствовать. Если ни одна константа не совпала со значением выражения и вариант default отсутствует, то не выполняются никакие действия.

Оператор switch языка C# отличается от оператора выбора для языка С по двум пунктам. Во-первых, в языке C# запрещается неявное выполнение более одного варианта ветвления. Каждый вариант должен заканчиваться явным оператором безусловного перехода: либо оператором break, либо оператором goto, который может передать управление одному из имеющихся вариантов (или куда-нибудь еще). Во-вторых, переключающее выражение и константы могут быть строками языка С#.

Рассмотрим пример, где число классифицируется по знаку и значению:

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих