Лекция №1. Введение в программирование.
Классификация языков программирования
Языки программирования - это формальные языки, применяемые для описания информации и алгоритма ее обработки на ЭВМ.
Существует множество классификаций языков программирования по различным критериям. Самое простое деление - на языки высокого и низкого уровня.
Язык низкого уровня – это язык программирования, предназначенный для определенного типа компьютера и отражающий его внутренний машинный код. Языки низкого уровня часто называют машинно-ориентированными языками. Язык низкого уровня представляет собой систему двоичных или шестнадцатеричных команд, написанных в машинных кодах. Программист общается с машиной на "ее языке". Он понимается ею без преобразований. Эти языки используется, в основном, программистами профессионалами и обладают существенным недостатком - машинная зависимость, т.е. невозможность переноса программы на другой тип машин. Примером языка низкого уровня является АССЕМБЛЕР.
|
|
Язык высокого уровня не зависит от внутренних машинных кодов компьютера любого типа. Каждая команда языка высокого уровня эквивалентна нескольким командам в машинных кодах, поэтому программы, написанные на языках высокого уровня, более компактны, чем аналогичные программы в машинных кодах.
Еще одна распространенная классификация языков программирования основана на принципе их организации. По этой классификации языки делят на процедурные (структурные), объектно-ориентированные, функциональные и логические.
В процедурных языках программа явно описывает действия, которые необходимо выполнить, а результат задается только способом получения его при помощи некоторой процедуры, которая представляет собой определенную последовательность действий. В эту группу входят такие языки как ПАСКАЛЬ, С, АДА, ФОРТРАН, БЕЙСИК.
В объектно-ориентированных языках не описывают подробной последовательности действий для решения задачи, хотя они содержат элементы процедурного программирования. Программа пишется в терминах объектов, которые обладают свойствами и поведением.
В функциональных языках программа описывает вычисление некоторой функции. Основная идея, лежащая в основе функционального программирования – это представление программы в виде математических функций (т.е. функций, значение которых определяется лишь их аргументами, а не контекстом выполнения). Обычно функция задается как композиция других, более простых, те в свою очередь разлагаются на еще более простые и т.д. Один из основных элементов в функциональных языках – рекурсия, т.е. вычисление значения функции через значение этой функции от других элементов. Представителями этой группы являются ЛИСП, ML и Haskell.
|
|
В логических языках программа вообще не описывает действий. Она задает данные и соотношения между ними. После этого системе можно задавать вопросы. Машина перебирает известные и заданные в программе данные и находит ответ на вопрос. Порядок перебора не описывается в программе, а неявно задается самим языком. Классическим языком логического программирования является ПРОЛОГ.
Функциональные и логические языки называют декларативными, или непроцедурными, поскольку программа представляет собой не набор команд, а описание действий, которые необходимо осуществить.
Нисходящее и восходящее проектирование.
Одна из основных идей, положенных в большинство известных технологий программирования, - нисходящее проектирование (Top-Down Programming – программирование «сверху вниз»). Существуют также другие названия: «метод пошаговой детализации», «систематическое программирование», «иерархическое программирование». Его принцип состоит в том, что сначала определяются основные функции, которые должны быть обеспечены разрабатываемой программой, а затем они конкретизируются с помощью набора дополнительных функций.
В методе нисходящего проектирования сначала пишется основная программа, используя средства вызова подпрограмм. Затем, будучи уверенным в правильности логического построения основной программы пишется каждая подпрограмма, вызывая по мере необходимости подпрограммы более низкого уровня. Этот последовательный процесс продолжается пока программа не будет завершена и проверена.
При другом методе – восходящем проектировании (программировании «снизу вверх»), сначала пишутся программы нижнего уровня, тщательно тестируются и отлаживаются. Далее добавляются подпрограммы более высокого уровня, которые вызывают подпрограммы нижнего уровня, и так до тех пор, пока не будет достигнута программа самого верхнего уровня. Метод проектирования «снизу вверх» пригоден при наличии больших библиотек стандартных программ.
Иногда лучшим является гибрид двух методов. Однако в обоих случаях каждая подпрограмма должна быть небольшой, так чтобы легко было понять ее логику.
Операторы.
Программа на языке высокого уровня состоит из исполняемых операторов и операторов описания.
Исполняемый оператор задает законченное действие, выполняемое над данными. Примеры операторов: вывод на экран, занесение числа в память, выход из программы.
Оператор описания описывает данные, над которыми в программе выполняются действия. Примером описания на естественном языке может служить предложение: «В памяти следует отвести место для хранения целого числа, и это место мы будем обозначать А».
Описания должны предшествовать операторам, в которых используются соответствующие данные.
Трансляция.
Для того, чтобы выполнить программу, написанную на языке программирования высокого уровня требуется перевести ее на язык понятный процессору – в машинные коды. Этим занимаются специальные программы, которые называются языковыми процессорами, или трансляторами.
Трансляция – преобразование программы, представленной на одном языке программирования, в программу на другом языке программирования, в определенном смысле равносильную первой.
Трансляция - процесс перевода программы с языка программирования высокого уровня на машинный язык.
Различают два вида трансляторов: интерпретаторы и компиляторы.
Интерпретатор – это программа, которая получает исходную программу на языке высокого уровня и по мере распознавания его операторов выполняет описываемые ими действия.
|
|
Интерпретатор в течение всего времени работы программы находится в оперативной памяти компьютера наряду с исходным текстом программы. Интерпретатор считывает ее первый оператор, переводит его в машинные команды и тут же организует выполнение этих команд. Затем переходит к переводу и выполнению следующего оператора и так до конца программы. При этом результаты предыдущих переводов в памяти не сохраняются.
Компилятор работает следующим образом. Получив на вход исходный текст программы, машина считывает очередной оператор, написанный на языке. Переводит оператор в свои, ей понятные команды. При попадании на ошибку процесс перевода прерывается, и машина указывает на это. Продолжает данный процесс, пока не иссякнут все строки программы, т.е. пока не дойдет до указателя конца программы. Выполняет переведенную программу целиком.
Среда разработки.
В настоящее время практически любая реализация языка представлена как среда разработки, которая включает в себя:
1. транслятор (компилятор или интерпретатор);
2. отладчик – специальную программу, которая облегчает процесс поиска ошибок; пользуясь ею, разработчик может выполнять программу «по шагам», отслеживать изменения значений переменных в процессе выполнения;
3. встроенный текстовый редактор;
4. специальные средства для просмотра структуры программы;
5. библиотеку готовых модулей, классов, например для создания пользовательского интерфейса.
Визуальное программирование.
В 1980-е гг. активно прорабатывалась идея визуального программирования, основной смысл которой состоит в том, чтобы процесс «сборки» программы осуществлялся на экране дисплея из программных конструкций-картинок. В результате появились среды разработки, в которых разрабатываемый программный продукт строился из готовых крупных блоков при помощи мыши. Примерами таких сред являются Delphi, Visual Basic и др.