Лекция №10. Языки программирования
- Определение ЯП.
Язык программирования (ЯП)– формальная знаковая система, предназначенная для описания алгоритмов в форме, которая удобна для исполнителя (например, компьютера).
Язык программирования определяет набор лексических, синтаксических и семантических правил, используемых при составлении компьютерной программы.
- Состав спецификации ЯП.
Каждый язык программирования может быть представлен в виде набора формальных спецификаций, определяющих его синтаксис и семантику. Эти спецификации обычно включают в себя описание:
• Типов и структур данных
• Операционную семантику (алгоритм вычисления конструкций языка)
• Семантические конструкции языка
• Библиотеки примитивов (например, инструкции ввода-вывода)
• Философии, назначения и возможностей языка
- Определение компилятора.
Компилятор (compiler)— транслятор, который осуществляет перевод всей исходной программы в эквивалентную ей результирующую программу на языке машинных команд. (К. полностью (не построчно, как интерпретатор) преобразует исходный код программы в бинарный, который ОС может выполнять самостоятельно. Т. е. для запуска программы нет необходимости иметь К.. Схема работы К.: исх код прогр->К.->объектный код->ОС->результат)
- Перечислить этапы компиляции программы.
Процесс компиляции состоит из следующих этапов:
1. Лексический анализ
2. Синтаксический (грамматический) анализ
3. Семантический анализ
4. Оптимизация
5. Генерация кода
- Цели лексического анализа программы.
Лексема- последовательность допустимых символов языка программирования, имеющая смысл для транслятора. Транслятор рассматривает программу как последовательность лексем.
Лексический анализ— процесс аналитического разбора входной последовательности символов (например, такой как исходный код на одном из языков программирования) с целью получения на выходе последовательности символов, называемых лексемами.
- Цели грамматического анализа программы.
Грамматический анализ (грамматический разбор) — это процесс сопоставления линейной последовательности лексем (слов, токенов) языка с его формальной грамматикой. Результатом обычно является дерево разбора
- Цели семантического анализа программы.
Семантический анализ. Дерево разбора обрабатывается с целью установления его семантики (смысла) — напр. привязка идентификаторов к их декларациям, типам, проверка совместимости, определение типов выражений и т. д.
- Определение интерпретатора.
Интерпретатор — программа для интерпретации, т.е. непосредственного исполнения программ (производства вычислений, предписываемых этими программами) из исходного кода на определённом языке. (не генерируют машинного кода, а просто интерпретируют исходный код) (Если программа работает достаточно долго, то через некоторое время после запуска интерпретатор генерирует машинный код и передает управление ему) (читают исходный код программы и выполняет его . Преобразование в бинарный и выполнение происходит построчно. Схема работы интерпретаторов: исх код прогр->интерпретатор->ОС->результат)
- Достоинства и недостатки интерпретируемых ЯП.
Достоинства
• Бо́льшая независимость от платформы исполнения по сравнению с компилируемыми средами, так как интерпретатор не создает машинного кода;
• Упрощается построчная отладка программы;
• Более совершенные и наглядные средства диагностики ошибок в программе.
Недостатки
• Программы выполняются более медленно: декодирование элементов программы занимает больше времени, чем выполнение машинного кода;
• Программа занимает больше места в памяти: кроме самой программы и ее данных память также отводится под частично декодированную форму, таблицу символов и сам интерпретатор;
• Программа не может выполняться отдельно без интерпретатора;
• Практически отсутствует оптимизация кода, что приводит к дополнительному удлинению времени работы программы.
Компилируемые: ассемблер, С++, Паскаль; интерпретируемые: РНР, ДжаваСкрипт, Питон. С# и Джава – что-то среднее
- Определение и назначение псевдокода.
Байт-код или байтко́д (псевдоко́д) — машинно-независимый код низкого уровня, генерируемый транслятором и исполняемый интерпретатором. Большинство инструкций байт-кода эквивалентны одной или нескольким командам ассемблера. Трансляция в байт-код занимает промежуточное положение между компиляцией в машинный код и интерпретацией
- Определение и классы императивных ЯП.
Императивное программирование – технология программирования, характеризующаяся принципом последовательного изменения состояния вычислителя пошаговым образом. При этом управление изменениями полностью определено и полностью контролируемо.
Императивные
• Неструктурированные
• Процедурные
• Объектно-ориентированные
• Скриптовые
(Описывает, КАК решить задачу и представить результат.
От машины к человеку
Джава, Питон, Си)
- Определение и классы декларативных ЯП.
Декларативное программирование – технология программирования, построенная:
• на описании данных;
• на описании искомого результата.
Декларативные
• Функциональные
• Логические
• Языки разметки
(парадигма программирования, в которой задаётся спецификация решения задачи, т. е. описывается ЧТО представляет собой проблема и ожидаемый результат.
От человека к машине.
Не используют понятия состояния, т. е. не содержат переменных и операторов присваивания.
SQL, HTML)
- Определение и назначение ЯП низкого уровня.
Низкоуровневый язык программирования (язык программирования низкого уровня) — язык программирования, близкий к программированию непосредственно в машинных кодах используемого реального или виртуального (например, Java, Microsoft .NET, ассемблер) процессора.
- Определение и назначение ЯП высокого уровня.
Высокоуровневый язык программирования — язык программирования, разработанный для быстроты и удобства использования программистом. Основная черта высокоуровневых языков — это абстракция, то есть введение смысловых конструкций, кратко описывающих такие структуры данных и операции над ними, описания которых на машинном коде (или другом низкоуровневом языке программирования) очень длинны и сложны для понимания. (Си, Питон, Лисп, Фортран, Делфи)
- Понятия классов и объектов парадигмы ООП.
Объе́ктно-ориенти́рованное программи́рование (ООП)— парадигма программирования, в которой основными концепциями являются понятия объектов и классов.
Класс (class) – множество объектов, связанных общностью структуры и поведения; абстрактное описание данных и поведения (методов) для совокупности похожих объектов, представители которой называются экземплярами класса.
Объект (object) – конкретная реализация класса, обладающая характеристиками состояния, поведения и индивидуальности, синоним экземпляра.
- Перечислить и охарактеризовать основные понятия ООП: инкапсуляция, наследование, полиморфизм.
Инкапсуляция (encapsulation)– техника, при которой несущественная с точки зрения интерфейса объекта информация прячется внутри него (упаковка данных и функций в единый компонент)
Наследование (inheritance)– свойство объектов, посредством которого экземпляры класса получают доступ к данным и методам классов-предков без их повторного определения.(реализация одного класса в терминах другого)
Полиморфизм (polymorphism)– свойство, позволяющее использовать один и тот же интерфейс для различных действий; полиморфной переменной, например, может соответствовать несколько различных методов. (взаимозаменяемость одного объекта другим со схожим интерфейсом) (способность функции обрабатывать данные разных типов)
- Понятие шаблона проектирования.