Язык программирования — формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под её управлением.
Создатели языков по-разному толкуют понятие язык программирования.
1. Теоретическая часть.
Языки программирования, трансляторы,
основные этапы разработки и отладки программ
Язык программирования — формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под её управлением.
Создатели языков по-разному толкуют понятие язык программирования. К наиболее распространённым утверждениям, признаваемым большинством разработчиков, относятся следующие:
Функция: язык программирования предназначен для написания компьютерных программ, которые применяются для передачи компьютеру инструкций по выполнению того или иного вычислительного процесса и организации управления отдельными устройствами.
Разработка игр | Языки программирования и Программы
Задача: язык программирования отличается от естественных языков тем, что предназначен для передачи команд и данных от человека к компьютеру, в то время как естественные языки используются для общения людей между собой. Можно обобщить определение «языков программирования» — это способ передачи команд, приказов, чёткого руководства к действию; тогда как человеческие языки служат также для обмена информацией.
Исполнение: язык программирования может использовать специальные конструкции для определения и манипулирования структурами данных и управления процессом вычислений.
Язык программирования может быть представлен в виде набора спецификаций, определяющих его синтаксис и семантику.
Языки программирования могут быть разделены на компилируемые и интерпретируемые.
Программа на компилируемом языке при помощи специальной программы компилятора преобразуется (компилируется) в набор инструкций для данного типа процессора (машинный код) и далее записывается в исполнимый модуль, который может быть запущен на выполнение как отдельная программа. Другими словами, компилятор переводит исходный текст программы с языка программирования высокого уровня в двоичные коды инструкций процессора.
Если программа написана на интерпретируемом языке, то интерпретатор непосредственно выполняет (интерпретирует) исходный текст без предварительного перевода. При этом программа остаётся на исходном языке и не может быть запущена без интерпретатора. Можно сказать, что процессор компьютера — это интерпретатор машинного кода.
Кратко говоря, компилятор переводит исходный текст программы на машинный язык сразу и целиком, создавая при этом отдельную исполняемую программу, а интерпретатор выполняет исходный текст прямо во время исполнения программы.
Как устроен процесс разработки? ДЛЯ НОВИЧКОВ / Про IT / Geekbrains
Разделение на компилируемые и интерпретируемые языки является несколько условным. Так, для любого традиционно компилируемого языка, как, например, Паскаль, можно написать интерпретатор. Кроме того, большинство современных «чистых» интерпретаторов не исполняют конструкции языка непосредственно, а компилируют их в некоторое высокоуровневое промежуточное представление (например, с разыменованием переменных и раскрытием макросов).
Как правило, скомпилированные программы выполняются быстрее и не требуют для выполнения дополнительных программ, так как уже переведены на машинный язык. Вместе с тем, при каждом изменении текста программы требуется её перекомпиляция, что создаёт трудности при разработке. Кроме того, скомпилированная программа может выполняться только на том же типе компьютеров и, как правило, под той же операционной системой, на которую был рассчитан компилятор. Чтобы создать исполняемый файл для машины другого типа, требуется новая компиляция.
Интерпретируемые языки обладают некоторыми специфическими дополнительными возможностями, кроме того, программы на них можно запускать сразу же после изменения, что облегчает разработку. Программа на интерпретируемом языке может быть зачастую запущена на разных типах машин и операционных систем без дополнительных усилий.
Однако интерпретируемые программы выполняются заметно медленнее, чем компилируемые, кроме того, они не могут выполняться без дополнительной программы-интерпретатора.
Транслятор — программа или техническое средство, выполняющее трансляцию программы.
Трансляция программы — преобразование программы, представленной на одном из языков программирования, в программу на другом языке и, в определённом смысле, равносильную первой.
Транслятор обычно выполняет также диагностику ошибок, формирует словари идентификаторов, выдаёт для печати тексты программы и т. д.
Язык, на котором представлена входная программа, называется исходным языком, а сама программа — исходным кодом. Выходной язык называется целевым языком или объектным кодом.
Цель трансляции — преобразовать текст с одного языка на другой, который понятен адресату текста. В случае программ-трансляторов, адресатом является техническое устройство (процессор) или программа-интерпретатор.
Программирование (programming) — теоретическая и практическая деятельность, связанная с созданием программ. Решение задач на компьютере включает в себя следующие основные этапы, часть из которых осуществляется без участия компьютера.
1. Постановка задачи:
• сбор информации о задаче;
• формулировка условия задачи;
• определение конечных целей решения задачи;
• определение формы выдачи результатов;
• описание данных (их типов, диапазонов величин, структуры и т. п.).
2. Анализ и исследование задачи, модели:
• анализ существующих аналогов;
• анализ технических и программных средств;
• разработка математической модели;
• разработка структур данных.
3. Разработка алгоритма:
• выбор метода проектирования алгоритма;
• выбор формы записи алгоритма (блок-схемы, псевдокод и др.);
• выбор тестов и метода тестирования;
• выбор языка программирования;
• уточнение способов организации данных;
• запись алгоритма на выбранном языке
5. Тестирование и отладка:
• отладка семантики и логической структуры;
• тестовые расчеты и анализ результатов тестирования;
6. Анализ результатов решения задачи и уточнение в случае необходимости математической модели с повторным выполнением этапов 2-5.
7. Сопровождение программы:
• доработка программы для решения конкретных задач;
• составление документации к решенной задаче, к математической модели, к алгоритму, к программе, к набору тестов, к использованию.
2. Практическая часть
Создайте в редакторе Word файл по теме «Внедрение и связывание объектов» в соответствии с технологией OLE. Выполните вставку рисунка в созданный текст.
Аббревиатура OLE означает Object Linking and Embedding, что означает связывание и внедрение объекта. Технология OLE обеспечивает пользователю возможность редактировать вставленный в составной документ объект средствами, которые предоставляет приложение-источник. OLE-объект всегда сохраняет связь с приложением-источником.
Технология OLE предусматривает два варианта обмена данными:
1) Внедрение объекта, при котором в документ-приемник вставляется сам объект. Для отображения на экране или распечатки документа OLE-объект сохраняет связь с приложением-источником, которая позволяет обеспечить редактирование OLE-объекта внутри составного документа;
Если один и тот же объект внедряется в несколько документов, то в каждом документе будет храниться своя копия объекта. В этом случае хранение объекта и всех копий требует дополнительного расхода внешней памяти. Кроме того не сохраняется никакой связи между копиями объекта, изменение одной из копий никак не влияет на остальные копии объекта.
2) Связывание объекта, при котором в документ-приемник помещается не сам объект, а лишь ссылка не документ- источник. В этом случае OLE-объект будет связан не с приложением-источником, а с документом-источником в котором находится этот объект. Эта связь позволяет изменить представление объекта в документе-приемнике, как только этот объект будет изменен в документе-источнике.
Технология связывания объекта целесообразно пользоваться в следующих случаях:
— объект вставляется в несколько разных документов, и необходимо, чтобы любимые изменения этого объекта отражались в этих документах;
— объект занимает слишком много места и затрудняет работу с составным документом;
— при недостатке внешней памяти;
Вставим, например, диаграмму Excel
Источник: www.myunivercity.ru
9. ЯЗЫКИ ПРОГРАММИРОВАНИЯ СОВРЕМЕННЫХ ЭВМ. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММ
Общение людей друг с другом не отличается большой конкретностью, так, если кто-нибудь на улице спросит вас, где находится «Булочная», вы можете ответить: «Пройдите вон до того дома, и поверните налево». Или, показав рукой направление, сказать: «Вон за тем домом» и спрашивающему, в большинстве случаев, будет достаточно этого , чтобы найти нужный объект.
Если бы мы обладали компьютерным мышлением, то нам нужно было бы объяснять дорогу более подробно, учитывая последовательность выполнения этой задачи. Например: «Вам необходимо сделать такое-то количество шагов, чтобы дойти до конца пятого дома, считая от того места, где мы находимся, затем совершить поворот на 90 о влево и пройти еще 10 метров, затем, прочтя вывески на здании, которое окажется у вас по правую руку, идентифицировать (т.е. определить) «Булочную». и т.д.
С компьютером общение происходит примерно также, т.е. для того чтобы он выполнял необходимые операции, для него необходимо составлять программы. По определению, которое дано в «Математической энциклопедии», понятие программы определяется так: « Программа — план действий, подлежащих выполнению некоторым устройством, чаще всего ЭВМ. Предписание, алгоритм программы представляется в виде конечной совокупности команд (инструкций), каждая из которых побуждает выполнить некоторую элементарную операцию над данными, хранящимися в памяти исполнителя и имена которых являются параметрами команды». Пока не созданы компьютеры пятого поколения, программы компьютеру нужно переводить на понятный ему язык. Мы уже знаем, что информация в компьютере содержится в виде 0 и 1, значит и человеку необходимо было научиться передавать данные и команды компьютеру на этом, понятном ему машинном языке.
9.2. Машинный язык и языки программирования высокого уровня
Машинный язык – это язык команд, которые может выполнять данная машина. Машинный язык определяется устройством и схемой компьютера. Каждый новый компьютер порождает новый машинный язык. Если нам надо сложить два числа, хранящиеся в ячейках А и В, команду на машинном языке мы должны записать в виде трех элементов КАВ, где К — код (номер) операции «сложить», А и В (номера) ячеек памяти (ОЗУ), где хранятся слагаемые (операнды). Но одних команд для работы ЭВМ мало, так как ЭВМ сама «не знает» никаких чисел, то все требуемые программой числа (константы), должны быть введены в память вместе с программой (это называется описанием констант). Например, при необходимости умножить что-либо на 5, в программе должен
49 быть указан адрес ячейки памяти, где хранится число 5, числа которое нужно умножить на 5 и адрес ячейки, в которую следует занести результат. При обращении к этой ячейке, константа становится операндом, т.е. числом, с которым работает оператор.
Программа для ЭВМ, написанная на машинном языке, представляет собой длинную колонку команд, каждая из которых состоит из трех элементов-чисел: номера кода, оператора и адресов первого и второго операндов, над которыми производится операция. Результат отправляется либо по первому адресу (А) или в специальный регистр – хранилище промежуточных результатов.
Чтобы программировать на машинном языке, следует знать не только всю систему команд той ЭВМ, для которой пишется программа, но и ее устройство. Это нужно, прежде всего, для того, чтобы представлять, как будет она реагировать на ту или иную команду.
Следует также следить, чтобы не «затереть» нужную информацию в памяти при отсылке результата в ОЗУ, ведь при этом уничтожается прежнее содержимое ячейки, куда записывается новое значение. Поэтому так трудно программировать на машинном языке, такая программа точно описывает весь вычислительный процесс переработки информации данной ЭВМ при решении поставленной задачи.
Однако, располагая машинной программой, всегда можно узнать состояние всех блоков ЭВМ, а также составить оптимальные программы, которые отличаются тем, что занимают минимальный объем памяти или позволяют получить результат за кратчайшее для данной ЭВМ время. Написание программ в машинных кодах требует высокой квалификации от программиста.
Для обеспечения его работы, в начале 50-х годов были разработаны системы, позволяющие писать программы не на машинном языке, а с использованием мнемонических обозначений машинных команд, имен точек программы и т.д. Такой язык для написания программы называется Автокодом или языком Ассемблера, т.е Ассемблер – это символическое представление машинного языка.
Программы на Ассемблере очень легко переводятся на машинный язык специальной программой, называемой тоже Ассемблером. Ассемблер и сейчас широко используется, если необходимо написание быстродействующих программ.
Однако, написание программы на языке Ассемблера тоже очень трудоемкое занятие, поэтому, для работы программиста были созданы более удобные языки общения человека с компьютером, так называемые языки программирования высокого уровня (ЯВУ). Мы уже знаем, что ЭВМ, какие бы различные задачи они не решали, служат для единой цели – для переработки информации, которая в них поступает. Переработку же информации машина может произвести только тогда, когда четко изложена постановка задачи – что машина должна делать и точно дан метод ее решения – как машина должна поступать. Словесное описание тут не подходит т.к. это очень громоздко, неточно и нестрого. Машина требует однозначности, конкретности, точности , поэтому задачи переводят на специальный машинный язык, удобный для общения
50 между человеком и машиной и между машинами, но хотя перед программистами и стала задача выработать единый машинный язык для всех классов машин и для всех задач, но создать такой язык не удалось и на сегодняшний день. Например, к 1970 году существовало уже 4700 искусственных языков.
Языки общения с компьютером делятся на языки низкого и высокого уровня . Языки низкого уровня это машинный и символический язык, им пользуются системные программисты — опытные пользователи, разработчики операционных систем. Языки высокого уровня приближены к естественным языкам человека и не требуют знаний об устройстве и функционировании компьютера.
В связи с тем, что языки высокого уровня и первые программы появились в англоязычных странах, то они используют английский алфавит и английские слова. Рис.9.1 Все языки общения с компьютером подразделяются на два больших класса языков программирования и моделирования. В первом случае используется в основном вычислительная функция компьютера.
Но компьютерная функция используется не только для вычислительных задач. В настоящее время невычислительных функций, выполняемых компьютером значительно больше. И одной из важнейших невычислительных функций компьютера является моделирование. Процесс компьютерного моделирования
51 связан с воспроизведением (воссозданием, имитацией) поведения интересующего нас объекта, процесса, явления, системы. Программа такого моделирования может быть составлена на любом языке программирования, но лучше использовать для этого специальные языки — языки моделирования . Эти языки отличаются от языков программирования своей узкой специализацией.
Вновь создаваемые языки являются развитием других языков. Приведем краткие характеристики наиболее известных языков высокого уровня. ФОРТРАН. Этот язык первый из самых распространенных и на сей день языков программирования.
Создание этого языка было обусловлено необходимостью привлечения пользователей к составлению программ Название этого языка составлено из сокращения двух слов ФОРмульный ТРАНслятор, т.е. формульный переводчик. Он был создан в 1956 году..
За более, чем сорокалетнюю историю ФОРТРАНА на нем было написано огромное количество прикладных программ, поэтому отказываться от этого языка нецелесообразно. Существует даже такой лозунг: «Настоящие программисты пишут только на ФОРТРАНЕ». В ФОРТРАН-программе операторы не нумеруются и выполняются в порядке следования в программе.
При необходимости изменения этого порядка, используются метки, поставленные перед соответствующими операторами. Язык ФОРТРАН очень хорош для опытных программистов, хорошо владеющих математическим аппаратом, поэтому для тех, кто только осваивает азы программирования на основе языка ФОРТРАН был разработан язык Бэйсик (BASIC). БЭЙСИК.
Многоцелевой язык символических инструкций для начинающих. Научиться работе на языке Бэйсик можно за час. Но, несмотря на свою простоту, он позволяет решать сложные программы. Проблемы с применением этого языка могут возникнуть из-за большого количества его диалектов. Поэтому, переходя от одной машины к другой всегда нужно интересоваться особенностями Бэйсика для этой машины.
Все операторы Бэйсика нумеруются, и выполнение их происходит в порядке нумерации. В настоящее время существуют расширенные Бэйсики для решения очень сложных задач, имеющие, например, матричные операции, которые позволяют с помощью одного оператора преобразовывать большие таблицы (матрицы).
Есть версии Бэйсика, работающие в режиме компиляции, что значительно ускоряет выполнение программ, на этом языке. АЛГОЛ. Этот язык был создан в 1960 году, поэтому его иногда называют Алгол-60, оказал большое влияние на развитие языков программирования. Этот язык применяют в научно-технических расчетах и научно-исследовательских работах.
Существует более поздняя разработка Алгола — Алгол-68. К алголоподобным языкам относятся языки Паскаль и Ада. ПАСКАЛЬ. Этот язык — прямое развитие направлений Алгола, создан в 1969 г. Очень популярен в настоящее время. В связи с его простотой, его часто
52 используют для обучения приемам программирования. Транслятор с Паскаля также прост и занимает мало места в памяти, что особенно важно для мини- и микроЭВМ, имеющих оперативную память малой емкости. Кроме того, в Паскале есть достаточно сильные средства для написания так называемых системных программ, для чего обычно используют язык ассемблера.
Такая универсальность и компактность Паскаля сделала его наряду с Бэйсиком очень популярным, особенно для персональных компьютеров. АДА. Это язык создан в 1979 году, является следующим продолжением направления Алгола программировании. Его основное назначение программирование работы самых разнообразных систем управления на ЭВМ и вообще сложных программных систем.
Создание больших программных систем затрудняется тем, что они ненадежны ввиду неизбежных ошибок, допускаемых при программировании. В Аде большое внимание уделяется обеспечению надежности программ даже в ущерб легкости их написания. Поэтому основным элементом программы на язык Ада являются подпрограммы.
В отличие от других языков, где подпрограммы играют вспомогательную, в Аде они играют главную роль. К более поздним разработкам алголоподобных языков относятся С и С++. КОБОЛ. COBOL – означает – Common Business-Oriented Language. . Создан в 1960 году. COBOL — язык, ориентированный на экономическое применение, для обработки больших массивов данных.
Кобол-программа выглядит как ряд предложений из английских слов, что значительно облегчает его применение пользователям-экономистам, администраторам и др., поэтому он пригоден для обработки деловой информации и используется в правительственных учреждениях, страховых компаниях, банках. PL/1. Родился в результате попытки создания единого универсального языка программирования.
Разработчики этого языка стремились совместить в нем все лучшее, что есть в АЛГОЛЕ и КОБОЛЕ. Главная цель его создания — иметь в языке средства, необходимые всем категориям программистов. Это очень мощный, но очень громоздкий язык. Этот язык может обслуживать программирование как экономических, так и научно-технических задач. GPSS.
GPSS означает «общецелевая система моделирования». Это язык высокого уровня, позволяет моделировать поведение вероятностных систем, например, систем массового обслуживания, вычислительных. Моделирование производится путем изменения состояния моделируемого объекта и сводится к генерации этих изменений, обычно, случайных.
Например, моделируя процесс обслуживания в магазине, достаточно генерировать случайные времена появления покупателей и окончание их обслуживания. Язык программирования состоит из двух составляющих синтаксиса и семантики. Переход от языковых конструкций к машинным командам осуществляет транслятор. Языки высокого уровня можно также разделить на декларативные (Пролог, ЛИСП) и процедурно-ориентированные (СИ, Бэйсик, Паскаль, Ада). Процедурно-ориентированные языки развиваются в объектно-ориентированные .
Источник: studfile.net
Этапы разработки программного обеспечения и языки программирования. (Глава 3)
1. Глава 3. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И ЯЗЫКИ ПРОГРАММИРОВАНИЯ
Программное обеспечение
Этапы разработки программного обеспечения
Метод пошаговой детализации
Языки программирования низкого уровня и высокого уровня
Императивные, объектно-ориентированные,
функциональные, логические языки программирования
Поколения языков программирования
Принципы трансляции (компилятор и интерпретатор)
Схема компилятора
Динамическая кодогенерация.
2.
Гл. 3. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И ЯЗЫКИ ПРОГРАММИРОВАНИЯ
ЭТАПЫ
РАЗРАБОТКИ
ПО
Программное обеспечение (пакет
программ) –
группа взаимосвязанных и
взаимодействующих программ,
предназначенных для решения любой
задачи из конкретной области
(например, для моделирования
технологических процессов, для
выполнения графических работ).
Программы какого-либо пакета
рассчитаны на совместное
использование в различных
комбинациях друг с другом.
Анализ требований к системе
и определение спецификаций (6 %)
Проектирование (5 %)
Кодирование (7 %)
Тестирование
Автономное (8 %)
Комплексное (7 %)
Эксплуатация и
сопровождение (67 %)
2
3.
Гл. 3. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И ЯЗЫКИ ПРОГРАММИРОВАНИЯ
На первом этапе первичным документом является постановка задачи,
объединяющая:
• общую характеристику задачи (назначение, экономическая эффективность,
структура объектов);
• описание входных данных (структура и способ поступления);
• описание выходных данных;
• существующие к данному моменту алгоритмы получения выходных данных на
основе входных;
• источники разработки (откуда появилась вся информация).
Результатом первого этапа является техническое задание, в котором, как правило,
содержатся
название системы, цели создания, характеристика области применения, требования к
системе в целом (интерфейс, особые требования к отдельным модулям,
безопасность, и т.д.), информационная база (структура базы данных, с которой будет
взаимодействовать программная система), программное обеспечение (обоснование
выбора языка программирования), техническое обеспечение, описание данных для
тестирования.
На основании технического задания формируются спецификации – описание
количества и режимов работы модулей, их взаимодействия.
3
4.
Гл. 3. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И ЯЗЫКИ ПРОГРАММИРОВАНИЯ
На этапе проектирования разрабатываются алгоритмы, задаваемые
спецификациями, и формируется общая структура будущей программы путем
детальной проработки последовательности ее действий.
Для разработки алгоритмов сложных программ используется метод пошаговой
детализации, при котором процесс преобразования исходных данных в результат
вначале представляется в виде последовательности небольшого числа простых
этапов (задач). На следующем шаге задачи разбиваются на последовательность
подзадач следующего уровня и т.д. Детализация заканчивается, когда каждый
отдельный этап может быть относительно простым способом записан на выбранном
языке программирования, или представляет собой известную задачу, для которой
уже имеется готовая программа.
Формальное описание алгоритмов осуществляется, например, с использованием
языка схем или псевдокода.
Кодирование представляет собой реализацию разработанных алгоритмов,
составление по ним текстов программы с использованием конкретного языка
программирования. Включает процесс трансляции – перевода программы в
последовательность машинных команд (машинный код).
4
5.
Гл. 3. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И ЯЗЫКИ ПРОГРАММИРОВАНИЯ
При автономном тестировании каждый модуль проверяется отдельно. При этом
программная среда модуля имитируется с помощью программы управления
тестированием, содержащей фиктивные программы вместо реальных подпрограмм, к
которым имеется обращение из данного модуля.
При комплексном тестировании производится совместная проверка групп
программных компонентов.
В процессе тестирования происходит оптимизация системы (разгрузка участков
повторяемости – циклов, замена сложных операций на более простые, экономия
памяти и т.д.).
Большая часть расходов, затрачиваемых в течение жизненного цикла системы,
приходится на эксплуатацию и сопровождение.
Причины выпуска новых версий (модификаций) ПО:
• необходимость исправления ошибок, выявленных в процессе эксплуатации;
• необходимость совершенствования, например, улучшения интерфейса или
расширения состава, выполняемых функций;
• изменение среды (появление новых технических средств и/или программных
продуктов).
5
6.
Гл. 3. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И ЯЗЫКИ ПРОГРАММИРОВАНИЯ
Языки программирования — это тщательно составленные последовательности
слов, букв, чисел и мнемонических сокращений, используемые для общения с
компьютером.
Машинная команда состоит из кода операции и
КОД АДРЕСНАЯ ЧАСТЬ
адресной части. Код операции указывает вид
выполняемого действия (сложить, вычесть и т.д.).
Адресная часть содержит адреса (номера) ячеек памяти, в которых расположены
операнды, и адрес ячейки, куда следует поместить результат
Языки ассемблера отличаются от машинного кода тем, что коды операций
заменены буквенными обозначениями (например, ADD – сложить, MOV – переслать
данные) и вместо номеров ячеек используются символические адреса.
Ассемблер – программа, преобразующая мнемонику языка ассемблера
непосредственно в двоичные представления машинных команд.
Языки ассемблера – машинно-зависимые языки, языки низкого уровня, в которых
одна команда соответствует одной машинной команде.
6
7.
Гл. 3. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И ЯЗЫКИ ПРОГРАММИРОВАНИЯ
Языки программирования, имитирующие естественные языки и способные на
основании одного предложения строить несколько команд компьютера, принято
считать языками высокого уровня.
Варианты языков – подмножества, расширения, диалекты.
Подмножество – это версия языка, включающая только часть возможностей
полного языка. Расширение – это расширенная версия, дополненная новыми
свойствами, делающими язык более разносторонним. Диалекты содержат незначительные изменения, которые способствуют либо настройке языка на специальное применение, либо выявлению сильных сторон конкретного компьютера.
Диалекты несовместимы и с исходным языком, и с другими диалектами.
Критерии оценки (выбора) языка программирования:
• легкость чтения программ (особенно важна с точки зрения эксплуатации и
сопровождения программ);
• легкость создания программ в выбранной области;
• надежность (т.е. насколько программа соответствует своему предназначению в
любых условиях).
Основные характеристики языка: простота; структурированность; доступные типы
и структуры данных; синтаксис языка; поддержка абстракции; выразительность;
проверка совместимости типов; обработка исключительных ситуаций.
7
8.
Гл. 3. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И ЯЗЫКИ ПРОГРАММИРОВАНИЯ
Главными элементами императивных языков программирования являются
переменные, которые моделируют ячейки памяти; операторы присваивания,
основанные на операции пересылки данных; а также итеративная форма повторений
(циклы). В основе использования этих языков лежит технология структурного
программирования, базирующаяся на процедурной декомпозиции.
FORTRAN (FORmula TRANslator). Считается первым компилируемым языком высокого
уровня. В основном используется для программ, выполняющих естественно-научные
и математические расчеты. Одной из особенностей этого языка (вплоть до диалекта
FORTRAN 90) было то, что типы и ячейки памяти для всех переменных
фиксировались до выполнения программы. В процессе выполнения программы новые
переменные не вводились и распределение памяти не производилось. Отсюда
невозможность создания рекурсивных подпрограмм, трудность реализации
динамических структур данных.
COBOL (COmmon Business Oriented Language, 1960 г.). Структура и словарь близки к
обычному английскому языку. Является основным языком в США для обработки
данных в таких учреждениях как банки и страховые компании. Раздел данных –
сильная сторона языка COBOL, тогда как раздел процедур – относительно слабая (в
частности, отсутствует достаточное число функций).
8
9.
Гл. 3. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И ЯЗЫКИ ПРОГРАММИРОВАНИЯ
BASIC (Beginner’s All-purpose Symbolic Instruction Code). Исходный BASIC имел только
14 операторов и один тип данных – числа с плавающей точкой. Был очень
популярным языком для микрокомпьютеров в конце 70-х и начале 80-х годов, т.к.
был легок для изучения начинающими и не требователен к ресурсам компьютера.
Важнейшим аспектом была его ориентация на использование удаленного доступа к
компьютеру посредством терминала. Ранние версии не были средством написания
серьезных программ значительного размера. Возрождение языка BASIC произошло в
начале 90-х годов с выходом языка Visual BASIC (Microsoft, 1991).
ALGOL (ALGOrithmic Language). Язык ALGOL – результат попытки создания
универсального языка. В этом языке была формализована концепция типов данных,
реализована идея составных операторов. В диалекте ALGOL 60 была введена
концепция блочной структуры, что позволяло программистам локализовать части
программы, вводя разные области видимости. Имелась возможность передавать
параметры подпрограммам по значению и по имени, а также создания рекурсивных
процедур. Были доступны динамические массивы (ALGOL 68), т.е. массивы, диапазон
индексов которых задавался переменной, которая могла менять свое значение во
время работы программы. Свыше 20 лет ALGOL оставался единственным
официальным средством представления алгоритмов в научной литературе.
Недостатки: некоторые его свойства были слишком гибкими, в основной версии
отсутствовали операторы ввода-вывода.
9
10.
Гл. 3. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И ЯЗЫКИ ПРОГРАММИРОВАНИЯ
Императивные языки, являющиеся потомками языка ALGOL.
Pascal. Обеспечивает возможность создания больших программ, поддерживая их
строгую логическую структуру. Для коротких программ может оказаться слишком
громоздким. Считается важнейшим инструментом для обучения методам
структурного программирования.
C. Отличная замена ассемблеру для низкоуровневого программирования, с одной
стороны, и применения принципов структурного программирования – с другой. Стал
очень популярен благодаря многим решениям, сделавшим запись программы на С
весьма компактной. В целом С – очень мощный и в то же время изящный язык. Одной
из особенностей является отсутствие полной проверки типов, что порождает
гибкость языка в сочетании с ненадежностью.
Ada (1980 г.). Происходит от Pascal, но заметно сложнее его. Содержит средства
выделения в отдельные модули объектов данных, обеспечивает поддержку
использования абстракции данных в структуре программы. Содержит обширные
средства обработки исключительных ситуаций. Программные блоки в языке Ada
могут быть настраиваемыми. Язык также обеспечивает параллельное выполнение
особых программных блоков, которые называются заданиями.
Modula-2 (1981 г.). В сравнении с Pascal добавлена поддержка модулей. Имеются
абстрактные типы данных, возможность использования процедур как типов,
низкоуровневые средства системного программирования и сопрограммы.
10
11.
Гл. 3. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И ЯЗЫКИ ПРОГРАММИРОВАНИЯ
Объектно-ориентированные языки программирования в наибольшей степени
способны реализовать технологию объектно-ориентированного программирования,
которая основана на объектной декомпозиции.
Smalltalk (1980 г.). Основные идеи происходят от первого ООЯ SIMULA 67.
Программными модулями языка Smalltalk являются объекты – структуры, объединяющие локальные данные и набор операций (методы), которые доступны другим
объектам. Метод определяет реакцию объекта на определенное сообщение,
соответствующее данному методу. Абстракциями объектов являются классы.
Экземпляры классов – объекты программы. Имеется иерархия классов. Подклассы
наследуют функциональные возможности и переменные родительского класса, имея
возможность добавлять новые функциональные возможности, а также изменять или
скрывать унаследованные.
С++. Представляет собой надстройку над языком С, поддерживающую большинство
возможностей, открытых языком Smalltalk (т.е. С++ — это объединение
императивного и объектно-ориентированного языков). Поддерживается
наследование и множественное наследование, когда класс имеет несколько
родительских классов. Операторы в языке С++ могут перегружаться, а
подпрограммы — настраиваться. Динамическое связывание обеспечивается
функциями виртуального класса. Язык С++ практически полностью совместим с
языком С. Недостатки: объемность и сложность.
11
12.
Гл. 3. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И ЯЗЫКИ ПРОГРАММИРОВАНИЯ
Смешанные языки, созданные путем введения в соответствующий императивный
язык объектно-ориентированный поддержки: Oberon (1987 г.) Delphi (1995 г.), Ada
95 (1995).
Java. Является непосредственным наследником С++. Отличается от него
отсутствием некоторых потенциально ненадежных механизмов, а также тем, что
устранены любые, не относящиеся к объектно-ориентированному
программированию, средства. Нет возможности написания на языке Java
независимых подпрограмм, т.е. все подпрограммы являются методами и
определяются в классах. Отсутствует множественное наследование, присущее, в
частности, языку С++, – причина нередких ошибок. В языке Java можно создавать
параллельные процессы, которые называются потоками. Все объекты в этом языке –
динамические. Существует механизм неявного удаления объектов из динамической
памяти. Повышение надежности, в частности, связано с отказом от части приведений
типов, проверки диапазонов изменения индексов. Особенность языка Java состоит
также в использовании особого вида трансляции – динамической кодогенерации.
12
13.
Гл. 3. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И ЯЗЫКИ ПРОГРАММИРОВАНИЯ
LISP (LISt Processing). Разрабатывался в связи с работами в области искусственного
интеллекта. В чистом языке LISP (1958 г.) существовало только два типа структур
данных: атомы и списки. Списки представляли собой совокупность узлов, каждый из
которых представляет собой два указателя. Первый указывает на представление
атома, т.е. на его символьное или числовое значение, а второй – на следующий
элемент списка.
Все вычисления в этом языке, который разрабатывался как язык функционального
программирования, производятся путем применения функций к аргументам.
Итеративные процессы определяются с помощью рекурсивных функций.
Prolog (PROgramming LOGig, 1972 г.) – язык логического программирования,
основная идея которого состоит в использовании формальной логической записи для
сообщения компьютеру вычислительных процессов. Программирование в нем
является непроцедурным. Программы не устанавливают точно, как должен
вычисляться результат, а только описывают его форму. Транслирующая система сама
должна выбрать нужный порядок выполнения команд, который приведет к
желаемому результату. Логическое программирование было использовано, главным
образом, в системах управления реляционными базами данных, экспертных системах
и обработке текстов на естественных языках.
13
14.
Гл. 3. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И ЯЗЫКИ ПРОГРАММИРОВАНИЯ
Поколения языков программирования (Generation Language, GL)
• 1 GL (время появления – 40-50 гг.). Языки машинных команд. Первый ассемблер,
который позволял задавать названия команд в символическом виде и указывать
числа не только в двоичном, но и в десятичном или шестнадцатеричном формате.
• 2GL (конец 50-х – начало 60-х гг.). Символический ассемблер, включающий
понятие переменной.
• 3GL (60-е годы). Универсальные языки высокого уровня (FORTRAN, COBOL, ALGOL,
Pascal, C и др.) Современные среды программирования (например, Delphi, Visual
BASIC, Java Development Kit) включают поддержку объектно-ориентированной
технологии, набор визуальных инструментов для скоростной разработки
приложений (RAD), библиотеку визуальных компонент (VCL) и другие
инструменты.
• 4 GL (начало 70-х г.). Непроцедурные языки, ориентированные на конкретную
область применения (в отличие от универсальных языков 3GL), в частности, на
работу с базами данных. Команды языков 4GL ближе к обычному языку, нежели у
3GL:
FIND ALL RECORDS WHERE NAME IS «SMITH»
Типичный пример языка 4GL – SQL (Structured Query Language).
• 5 GL (наст. время). В том числе, системы создания программ, ориентированные на
непрограммиста.
14
15.
Гл. 3. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И ЯЗЫКИ ПРОГРАММИРОВАНИЯ
Трансляция — перевод программы, написанной на языке программирования, в
последовательность машинных команд.
ТРАНСЛЯТОРЫ
Компиляторы
Переводят программу целиком с созданием исполняемого файла.
Интерпретаторы
Транслируют и выполняют
последовательно операторы
один за другим.
Смешанные системы реализации
Транслируют программу с языка высокого уровня
на промежуточный язык, после чего
осуществляется интерпретация промежуточных
команд в машинные коды
(динамическая кодогенерация, байтовый код, Java,
апплет, Java Virtual Machine).
15
16.
Гл. 3. ЭТАПЫ РАЗРАБОТКИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ И ЯЗЫКИ ПРОГРАММИРОВАНИЯ
Схема работы компилятора
Генератор
кода
Лексический
анализ
Линковщик
Синтаксический
контроль
Программа на
исходном
языке
Контроль типов
Исполняемая
программа в
машинных
кодах
Сообщения об ошибках
16
Источник: ppt-online.org