- •Язык программирования. Общие принципы построения и использования языков программирования.
- •Стандарты языков программирования.
- •Лямбда-исчисление. Аппликация, абстракция, редукция, преобразование.
- •Списки и функциональные выражения в функциональных языках программирования.
- •Механизмы и средства взаимодействия программы с операционной системой.
- •Функциональное программирование. Основные положения. Основные отличия от других типов языков программирования.
- •Классификация языков программирования. Близость языков программирования к естественному языку.
- •Унификация и хорновский клоз в логических языках программирования.
- •Модель вычислений функциональных языков программирования.
- •Языки программирования низкого уровня.
- •Средства разработки графического интерфейса пользователя. Эргономические свойства человеко-машинного интерфейса.
- •Процедурные языки программирования. Основные отличия от других типов языков.
- •Обоснование выбора языка программирования.
- •Перегрузка в языках программирования.
- •Логические языки программирования. Основные положения и понятия. Основные отличия от других типов языков программирования.
- •Объектно-ориентированные языки программирования (ооп). Основные отличия от других концепций языков программирования.
- •Полиморфизм в ооп. Виртуальные функции. Таблицы виртуальных функций.
- •Структура языка программирования. Синтаксис и семантика языка программирования. Расширенная форма Бэкуса-Наура.
- •Наследование в ооп. Множественное наследование. Проблемы множественного наследования.
- •Инкапсуляция в ооп. Контроль доступа.
- •Понятие класса и объекта в ооп. Атрибуты, методы, конструктор и деструктор, статические члены класса.
- •Диаграммы классов uml. Основные элементы и обозначения.
- •Данные. Средства описания данных. Типизация языка.
- •Преобразования типов. Контроль соответствия типов данных.
- •Ооп. Основные концепции ооп.
- •Современные интегрированные схемы разработки программ. Основные компоненты среды программирования.
- •Декомпозиция программ.
- •Трансляторы. Интерпретация и компиляция.
- •Макропроцессоры и макрогенераторы.
- •Потоки и процессы. Сходства и различия.
- •Мониторы и защищаемые переменные в параллельном программировании.
- •Семафоры в параллельном программировании. Типы семафоров.
- •Отладчики. Генераторы кода и приложений.
- •Параллельная обработка данных и параллелизм. Параллельное и распределенное программирование.
- •Основные проблемы параллельного и распределенного программирования.
- •Оценка максимально возможного параллелизма.
- •Основные модели параллельного программирования.
- •Оптимизатор. Основные функции оптимизатора.
- •Обработка исключительных ситуаций. Иерархия и виды исключительных ситуаций.
- •Операторы обработки исключительных ситуаций в различных языках программирования.
- •Элементарные типы данных.
- •Перегрузка данных, операторов, методов.
- •Составные типы данных.
- •Механизмы логического вывода. Прямая и обратная цепочки рассуждений.
- •Пространство имен, область видимости, время жизни переменных.
- •Ошибки при работе с вещественными числами. Смешанная арифметика.
- •Операторы выбора и условные операторы.
- •Вещественные числа. Способы представления. Операции над вещественными числами.
- •Оператор присваивания. Операторы цикла.
- •Распределение памяти при выполнении программы.
- •Динамические структуры данных. Реализация динамических структур данных с помощью указателей.
- •Библиотеки программ и классов. Статические и динамические библиотеки. Критерии проектирования библиотек.
- •Подпрограммы. Формальные и фактические параметры подпрограмм.
- •Передача параметров подпрограмме.
- •Программный стек и его изменение.
- •Рекурсивный и итерационный методы решения задач. Виды рекурсий.
- •Общая характеристика языков ассемблера: назначение, принципы построения и использования; структура языка.
- •Сериализация и десериализация. Методы сериализации объектов в базу данных.
-
Списки и функциональные выражения в функциональных языках программирования.
-
Механизмы и средства взаимодействия программы с операционной системой.
Первый этап загрузки ОС. В системном блоке компьютера находится постоянное запоминающее устройство BIOS, в котором содержатся программы тестирования блоков компьютера и первого этапа загрузки ОС. Они начинают выполнятся с первым импульсом тока при включении компьютера. На этом этапе процессор обращаются к диску и проверяет наличие на определенном месте (в начале диска) очень небольшой программы - загрузчика. Если эта программа обнаружена, то она считывается в ОЗУ и ей передается управление.
Второй этап загрузки ОС. Программа - загрузчик, в свою очередь, ищет на диске базовый модуль ОС, переписывает его в память и передает ему управление.
Третий этап загрузки ОС. В состав базового модуля входит основной загрузчик, который ищет остальные модули ОС и считывает их в ОЗУ. После окончания загрузки ОС управление передается командному процессору и на экране появляется приглашение системы к вводу команды пользователя.
Заметим, что в оперативной памяти во время работы компьютера обязательно должны находится базовый модуль ОС и командный процессор. Следовательно, нет необходимости загружать в оперативную память все файлы ОС одновременно. Драйверы устройств и утилиты могут подгружаться в ОЗУ по мере необходимости, что позволяет уменьшать обязательный объем оперативной памяти, отводимый под системное программное обеспечение.
-
Функциональное программирование. Основные положения. Основные отличия от других типов языков программирования.
Функциональное программирование - представляет собой набор определенных функций. Функцию определяют через другую функцию. В функциональном программировании вся программа ФУНКЦИЯ.
Программа на таком языке представляет собой совокупность описаний функций и выражения, которые необходимо вычислить. Оно вычисляется посредством редукции (т. е. серии упрощений). Функциональное программирование не использует концепцию памяти как хранилища значений переменных. Операторы присваивания отсутствуют, вследствие чего переменные обозначают не области памяти, а объекта программы, что полностью соответствует понятию переменной в математике. Наличие стройной математической основы обеспечивает возможность использования алгебраических методов создания структуры, преобразования и исследования программ. Это в какой-то мере приближает их к описанию структуры мышления человека.
Примером функционального языка является язык LISP (List Processing-обработка списков) Разработан и реализован в Массачусетском технологическом институте в 1959 г. Рассматривается специалистами как основной язык программирования систем искусственного интеллекта.
Основные положения этого стиля восприняты многими языками программирования с общей логикой уточнения решаемых задач и обобщения решений на основе выбранных специально базовых конструкций:
-
Базовые конструкции определяются как строгие функции.
-
При необходимости выполняются преобразования программ, (компиляция, оптимизация, ре-факторинг и т.п.) для улучшения эксплуатационных характеристик, связанных с процессами исполнения программ.
-
Важный критерий качества программирования - полнота системы решений и универсальность реализованных определений для синтаксически управляемой обработки данных функциями высоких порядков (компилятор и т.п.), что существенно повышает надежность проектов для развивающихся постановок задач.
-
Разработка ИС предусматривает выполнение ряда шагов, начальные из которых выполняют роль упрощенных прототипов для реализации последующих, возможно другими, более эффективными, средствами.
функциональное программирование представляет собой набор определенных функций, которые определяются рекурсивно или через другие функции. В процессе выполнения программы, ф-ии получают параметры, вычисляют и возвращают результат, в случае необходимости вычисляя значения других функций.
Порядок вычисления в функц ЯП не описывается, описывается лишь желаемый результат в виде системы функций. Большинство функц ЯП реализуются как интерпретаторы (Lisp, Haskell, ML, Standart ML…)
Свойства функциональных ЯП:
-
краткость и простота – ФЯП выходят на более абстрактный уровень, чем традиц. ЯП
-
строгая типизация – большинство ошибок могут быть исправлены на стадии компиляции. Строгая типизация позволяет генерировать эффективный код и ускорить выполнение программ. Некоторые ФЯП поддерживают перегрузку операций.
-
Модульность – позволяет разделить программу на несколько сравнительно независимых частей с четко определенными связями между ними.
-
Отсутствие побочных эффектов – в чистом функ программировании оператор присваивания отсутствует. Объекты нельзя уничтожать\изменять, можно только создавать новые, путем декомпозиции или синтеза существующих. Таким образом, невозможно получить 2 разных значения при вызове 1 и той же функции с одним аргументом дважды, как бывает в императивных ЯП.
-
Отложенное вычисление – аргументы в функции вычисляется, только если они нужны для вычисления результата, тогда как в традиционных ЯП вызов функции приводит к вычислению всех аргументов. (если ФЯП не поддерживает отложенные вычисления, он называется строгим)