Автор: Пользователь скрыл имя, 22 Октября 2011 в 20:55, доклад
Мнения о том, какой язык лучше преподавать, разнятся: от того, что программирование изучать не нужно, а следует просто поднимать компьютерную грамотность и осваивать офисные программы (как на Западе), до того, что нужно изучать операционные системы и несколько языков программирования различных уровней абстракции и с различными парадигмами. Это крайние случаи, но золотую середину найти непросто. В первую очередь, нам нужно определить цель. Научить логически и алгоритмически мыслить? Познакомить с компьютерами на бытовом уровне, чтобы Вы умели пользоваться интернетом, электронной почтой и текстовыми редакторами? Заложить базовые знания, необходимые для будущих инженеров, математиков, физиков и специалистов по информационным технологиям?
МИНИСТЕРСТВО
ОБРАЗОВАНИЯ И НАУКИ РФ
Федеративное государственное бюджетное
образовательное
учреждение
«Московский государственный университет Пищевых
Производств»
Доклад на тему:
«Языки
программирования»
Сдала студентка группы 11-ТПМ-14
Тумова Фатимат
Принял______________
г. Москва
2011
Введение
Мнения
о том, какой язык лучше преподавать, разнятся:
от того, что программирование изучать
не нужно, а следует просто поднимать компьютерную
грамотность и осваивать офисные программы
(как на Западе), до того, что нужно изучать
операционные системы и несколько языков
программирования различных уровней абстракции
и с различными парадигмами. Это крайние
случаи, но золотую середину найти непросто.
В первую очередь, нам нужно определить
цель. Научить логически и алгоритмически
мыслить? Познакомить с компьютерами на
бытовом уровне, чтобы Вы умели пользоваться
интернетом, электронной
почтой и текстовыми редакторами? Заложить
базовые знания, необходимые для будущих
инженеров, математиков, физиков и специалистов
по информационным технологиям? А может,
нам нужно каждого познакомить с программированием
как явлением, чтобы он представлял потенциал
компьютерных систем? Много ли из нас станет
программистами? Немного. Но синусами и уравнениями
Кирхгофа в жизни тоже пользуется не каждый.
Безусловно, в науке о программировании
есть фундаментальная составляющая, но
определить её не просто. Некоторые считают,
что не так важно, какой язык программирования
взять: на уроках информатики нужно учить
не языку программирования, а методам
программирования и системному подходу
решения задач. Нужно развивать алгоритмическое
мышление и на примерах знакомиться с
принципами построения современных компьютерных
систем. Неужели действительно не так
важно, какая среда, и какой конкретный
язык программирования будет использован
для практических занятий?
Оказывается, что у каждого преподавателя
есть свой список требований к учебному
языку программирования. Например: простой,
интуитивный синтаксис, наличие высокоуровневых
инструментов для обнаружения и недопущения
ошибок и для отладки программ, наличие
качественной документации с примерами,
наличие дружелюбной среды разработки,
межплатформенность (наличие версий под
различные платформы). У некоторых преподавателей
этот список очень короткий, например:
«Только Паскаль» или «Любой, кроме Бейсика!»
Стандартизация языков программирования
Язык программирования может быть представлен в виде набора спецификаций, определяющих его синтаксис и семантику.
Для многих
широко распространённых языков программирования
созданы международные стандарты. Специальные
организации проводят регулярное обновление
и публикацию спецификаций и формальных
определений соответствующего языка.
В рамках таких комитетов продолжается
разработка и модернизация языков программирования,
и решаются вопросы о расширении или поддержке
уже существующих и новых языковых конструкций.
Типы данных
Современные цифровые компьютеры обычно являются двоичными, и данные хранят в двоичном (бинарном) коде (хотя возможны реализации и в других системах счисления). Эти данные, как правило, отражают информацию из реального мира (имена, банковские счета, измерения и др.), представляющую высокоуровневые концепции.
Особая система, по которой данные организуются в программе, — это система типов языка программирования; разработка и изучение систем типов известна под названием теория типов. Языки могут быть классифицированы как системы со статической типизацией и языки с динамической типизацией.
Статически-типизированные
языки могут быть в дальнейшем подразделены
на языки с обязательной декларацией,
где каждая переменная и объявление функции
имеет обязательное объявление типа, и
языки с выводимыми типами. Иногда динамически-типизированные
языки называются латентно-
Структуры данных
Системы типов в языках высокого уровня позволяют определять сложные, составные типы, так называемые структуры данных. Как правило, структурные типы данных образуются как декартово произведение базовых (атомарных) типов и ранее определённых составных типов.
Основные
структуры данных (списки, очереди, хеш-таблицы,
двоичные деревья и пары) часто представлены
особыми синтаксическими конструкциями
в языках высокого уровня. Такие данные
структурируются автоматически.
Семантика языков программирования
Существует несколько подходов к определению семантики языков программирования.
Наиболее широко распространены разновидности следующих трёх: операционного, детонационного (математического) и деривационного (аксиоматического).
При описании семантики в рамках операционного подхода обычно исполнение конструкций языка программирования интерпретируется с помощью некоторой воображаемой (абстрактной) ЭВМ.
Деривационная семантика описывает последствия выполнения конструкций языка с помощью языка логики и задания пред- и постусловий. Денотационная семантика оперирует понятиями, типичными для математики — множества, соответствия, а также суждения, утверждения и др.
Язык программирования строится в соответствии с той или иной базовой моделью вычислений и парадигмой программирования.
Несмотря на то, что большинство языков ориентировано на императивную модель вычислений, задаваемую фоннеймановской архитектурой ЭВМ, существуют и другие подходы. Можно упомянуть языки со стековой вычислительной моделью (Forth, Factor, Postscript и др.), а также функциональное (Лисп, Haskell, ML и др.) и логическое программирование (Пролог) и язык Рефал, основанный на модели вычислений, введённой советским математиком А.А. Марковым-младшим.
В настоящее
время также активно развиваются проблемно-ориентированные,
декларативные и визуальные языки программирования.
Компилируемые и интерпретируемые языки
Языки программирования могут быть разделены на компилируемые и интерпретируемые.
Программа на компилируемом языке при помощи специальной программы компилятора преобразуется (компилируется) в набор инструкций для данного типа процессора (машинный код) и далее записывается в исполнимый модуль, который может быть запущен на выполнение как отдельная программа. Другими словами, компилятор переводит исходный текст программы с языка программирования высокого уровня в двоичные коды инструкций процессора.
Если программа написана на интерпретируемом языке, то интерпретатор непосредственно выполняет (интерпретирует) исходный текст без предварительного перевода. При этом программа остаётся на исходном языке и не может быть запущена без интерпретатора. Можно сказать, что процессор компьютера — это интерпретатор машинного кода.
Кратко говоря, компилятор переводит исходный текст программы на машинный язык сразу и целиком, создавая при этом отдельную исполняемую программу, а интерпретатор выполняет исходный текст прямо во время исполнения программы.
Разделение на компилируемые и интерпретируемые языки является несколько условным. Так, для любого традиционно компилируемого языка, как, например, Паскаль, можно написать интерпретатор. Кроме того, большинство современных «чистых» интерпретаторов не исполняют конструкции языка непосредственно, а компилируют их в некоторое высокоуровневое промежуточное представление (например, с разыменованием переменных и раскрытием макросов).
Для любого интерпретируемого языка можно создать компилятор — например, язык Лисп, изначально интерпретируемый, может компилироваться без каких бы то ни было ограничений. Создаваемый во время исполнения программы код может так же динамически компилироваться во время исполнения.
Как правило, скомпилированные программы выполняются быстрее и не требуют для выполнения дополнительных программ, так как уже переведены на машинный язык. Вместе с тем, при каждом изменении текста программы требуется её перекомпиляция, что создаёт трудности при разработке. Кроме того, скомпилированная программа может выполняться только на том же типе компьютеров и, как правило, под той же операционной системой, на которую был рассчитан компилятор. Чтобы создать исполняемый файл для машины другого типа, требуется новая компиляция.
Интерпретируемые языки обладают некоторыми специфическими дополнительными возможностями, кроме того, программы на них можно запускать сразу же после изменения, что облегчает разработку. Программа на интерпретируемом языке может быть зачастую запущена на разных типах машин и операционных систем без дополнительных усилий.
Однако интерпретируемые программы выполняются заметно медленнее, чем компилируемые, кроме того, они не могут выполняться без дополнительной программы-интерпретатора.
Некоторые языки, например, Java и C#, находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной. Для выполнения байт-кода обычно используется интерпретация, хотя отдельные его части для ускорения работы программы могут быть транслированы в машинный код непосредственно во время выполнения программы по технологии компиляции «на лету» (Just-in-time compilation, JIT). Для Java байт-код исполняется виртуальной машиной Java (Java Virtual Machine, JVM), для C# — Common Language Runtime.
Подобный подход в некотором смысле позволяет использовать плюсы, как интерпретаторов, так и компиляторов. Следует упомянуть также оригинальный язык Форт(Forth) имеющий и интерпретатор и компилятор.
Современные языки программирования рассчитаны на использование ASCII, то есть доступность всех графических символов ASCII является необходимым и достаточным условием для записи любых конструкций языка. Управляющие символы ASCII используются ограниченно: допускаются только возврат каретки CR, перевод строки LF и горизонтальная табуляция HT (иногда также вертикальная табуляция VT и переход к следующей странице FF).
Ранние языки, возникшие в эпоху 6-битных символов, использовали более ограниченный набор. Например, алфавит Фортрана включает 49 символов (включая пробел): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . , $ ' :
Заметным исключением является язык APL, в котором используется много специальных символов.
Использование символов за пределами ASCII (например, символов KOI8-R или символов Юникода) зависит от реализации: иногда они разрешаются только в комментариях и символьных/строковых константах, а иногда и в идентификаторах. В СССР существовали языки, где все ключевые слова писались русскими буквами, но большую популярность подобные языки не завоевали (исключение составляет встроенный язык программирования 1С: Предприятие).
Расширение
набора используемых символов сдерживается
тем, что многие проекты по разработке
программного обеспечения являются международными.
Очень сложно было бы работать с кодом,
где имена одних переменных записаны русскими
буквами, других — арабскими, а третьих
— китайскими иероглифами. Вместе с тем,
для работы с текстовыми данными языки
программирования нового поколения (Delphi
2006, C#, Java) поддерживают Unicode.
Процедурные языки программирования
Процедурное (императивное) программирование является отражением архитектуры традиционных ЭВМ, которая была предложена фон Нейманом в 1940-х годах. Теоретической моделью процедурного программирования служит алгоритмическая система под названием Машина Тьюринга.
Программа на процедурном языке программирования состоит из последовательности операторов (инструкций), задающих процедуру решения задачи. Основным является оператор присваивания, служащий для изменения содержимого областей памяти. Концепция памяти как хранилища значений, содержимое которого может обновляться операторами программы, является фундаментальной в императивном программировании.
Выполнение программы сводится к последовательному выполнению операторов с целью преобразования исходного состояния памяти, то есть значений исходных данных, в заключительное, то есть в результаты. Таким образом, с точки зрения программиста имеются программа и память, причем первая последовательно обновляет содержимое последней.
Процедурный
язык программирования предоставляет
возможность программисту определять
каждый шаг в процессе решения задачи.
Особенность таких языков программирования
состоит в том, что задачи разбиваются
на шаги и решаются шаг за шагом. Используя
процедурный язык, программист определяет
языковые конструкции для выполнения
последовательности алгоритмических
шагов.