
- •Язык программирования. Общие принципы построения и использования языков программирования.
- •Стандарты языков программирования.
- •Лямбда-исчисление. Аппликация, абстракция, редукция, преобразование.
- •Списки и функциональные выражения в функциональных языках программирования.
- •Механизмы и средства взаимодействия программы с операционной системой.
- •Функциональное программирование. Основные положения. Основные отличия от других типов языков программирования.
- •Классификация языков программирования. Близость языков программирования к естественному языку.
- •Унификация и хорновский клоз в логических языках программирования.
- •Модель вычислений функциональных языков программирования.
- •Языки программирования низкого уровня.
- •Средства разработки графического интерфейса пользователя. Эргономические свойства человеко-машинного интерфейса.
- •Процедурные языки программирования. Основные отличия от других типов языков.
- •Обоснование выбора языка программирования.
- •Перегрузка в языках программирования.
- •Логические языки программирования. Основные положения и понятия. Основные отличия от других типов языков программирования.
- •Объектно-ориентированные языки программирования (ооп). Основные отличия от других концепций языков программирования.
- •Полиморфизм в ооп. Виртуальные функции. Таблицы виртуальных функций.
- •Структура языка программирования. Синтаксис и семантика языка программирования. Расширенная форма Бэкуса-Наура.
- •Наследование в ооп. Множественное наследование. Проблемы множественного наследования.
- •Инкапсуляция в ооп. Контроль доступа.
- •Понятие класса и объекта в ооп. Атрибуты, методы, конструктор и деструктор, статические члены класса.
- •Диаграммы классов uml. Основные элементы и обозначения.
- •Данные. Средства описания данных. Типизация языка.
- •Преобразования типов. Контроль соответствия типов данных.
- •Ооп. Основные концепции ооп.
- •Современные интегрированные схемы разработки программ. Основные компоненты среды программирования.
- •Декомпозиция программ.
- •Трансляторы. Интерпретация и компиляция.
- •Макропроцессоры и макрогенераторы.
- •Потоки и процессы. Сходства и различия.
- •Мониторы и защищаемые переменные в параллельном программировании.
- •Семафоры в параллельном программировании. Типы семафоров.
- •Отладчики. Генераторы кода и приложений.
- •Параллельная обработка данных и параллелизм. Параллельное и распределенное программирование.
- •Основные проблемы параллельного и распределенного программирования.
- •Оценка максимально возможного параллелизма.
- •Основные модели параллельного программирования.
- •Оптимизатор. Основные функции оптимизатора.
- •Обработка исключительных ситуаций. Иерархия и виды исключительных ситуаций.
- •Операторы обработки исключительных ситуаций в различных языках программирования.
- •Элементарные типы данных.
- •Перегрузка данных, операторов, методов.
- •Составные типы данных.
- •Механизмы логического вывода. Прямая и обратная цепочки рассуждений.
- •Пространство имен, область видимости, время жизни переменных.
- •Ошибки при работе с вещественными числами. Смешанная арифметика.
- •Операторы выбора и условные операторы.
- •Вещественные числа. Способы представления. Операции над вещественными числами.
- •Оператор присваивания. Операторы цикла.
- •Распределение памяти при выполнении программы.
- •Динамические структуры данных. Реализация динамических структур данных с помощью указателей.
- •Библиотеки программ и классов. Статические и динамические библиотеки. Критерии проектирования библиотек.
- •Подпрограммы. Формальные и фактические параметры подпрограмм.
- •Передача параметров подпрограмме.
- •Программный стек и его изменение.
- •Рекурсивный и итерационный методы решения задач. Виды рекурсий.
- •Общая характеристика языков ассемблера: назначение, принципы построения и использования; структура языка.
- •Сериализация и десериализация. Методы сериализации объектов в базу данных.
-
Классификация языков программирования. Близость языков программирования к естественному языку.
Низкий уровень / Высокий уровень
Языки низкого уровня представляют собой линейные последовательности элементарных операций с регистрами, в которых хранятся данные. Языки низкого уровня ориентированные для (аппаратную структуру) конкретного вычислительное устройство.
Низкоуровневое – программирование, основанное на прямом использовании возможностей и особенностей конкретной вычислительной системы. Для разработки программ нужно знать
-
Структуру функционирование системы в целом.
-
Организацию оперативной памяти
-
Состав внешних устройств (их адреса и форматы регистров)
-
Организацию и функционирование процессора
-
Состав его форматов. Состав форматов его регистров.
-
Способы адресации. Системы команд.
-
Система прерываний и т.д.
Намечают три вида низкоуровневых языков
-
Машинный код
-
Мнемо код
-
Ассемблер , макроассемблер
Языки высокого уровня. Отличия их от низкоуровневых.
Повышение эффективности труда разработчиков. За счет абстрагирования от конкретных деталей аппаратного обеспечения.
Операторы и ключевые слова высокого уровня более осмысленны так же ведет к повышению производительности. Возможность повторного использования ранее написанных программных блоков. За счет оформления их в виде процедур и функций. Высокая переносимость программ. Недостаток – появление транслятора.
-
Унификация и хорновский клоз в логических языках программирования.
Одним из наиболее важных аспектов программирования на Прологе является использование унификации (отождествления) и конкретизации переменных. Пролог пытается отождествить термы при доказательстве, или согласовании, целевого утверждения. Например, в программе для согласования запроса ?- человек(Х) целевое утверждение человек(X) может быть отождествлено с фактом служащий(Иван), в результате чего переменная Х станет конкретизированной: Х= Иван. Хорновский клоз (Ноrn clause) — это формула, в которой с помощью конъюнкции («и») элементарных формул выводится одиночная элементарная формула:
(s=>t)<=(t = tl||t2)^(s=>tl)
Логическое программирование основано на том наблюдении, что, ограничивая формулы хорновскими клозами, мы получаем правильное соотношение между выразительностью и эффективностью вывода. Такие факты, как t => t, являются выводами, которые ниоткуда не следуют, т. е. они всегда истинны. Вывод также называется головой формулы, потому при записи в инверсной форме оно появляется в формуле первым.
Чтобы инициализировать вычисление логической программы, задается цель:
“wor” => "Hello world"?
Машина вывода пытается сопоставить цель и вывод формулы. В данном случае соответствие устанавливается сразу же: "wor" соответствует переменной s, a "Hello world" — переменной t. Это определяет подстановку выражений (в данном случае констант) для переменных; подстановка применяется ко всем переменным в формуле:
"wor" => "Hello world" <= ("Hello world" = tl || t2) ^ ("wor" => tl)
Теперь мы должны показать, что:
("Hello world" = t1|| t2) ^ ("wor" => tl)
является истинным, и это ведет к новому соответствию образцов, а именно попытке установить соответствие "Hello world" с tl || t2. Здесь, конечно, может быть много соответствий, что приведет к поиску. Например, машина вывода может допускать, чтобы tl указывало на "Не", a t2 указывало на "llо world"; эти подстановки затем проводятся во всем вычислении.