Библиотеки программ и классов. Статические и динамические библиотеки. Критерии проектирования библиотек.
Библиотека (от англ. library) в программировании — сборник подпрограмм или объектов, используемых для разработки программного обеспечения (ПО).
В некоторых языках программирования[каких?] то же, что модуль, в некоторых — несколько модулей. С точки зрения операционной системы (ОС) и прикладного ПО библиотеки разделяются на динамические и статические.
Динамические библиотеки
Часть основной программы, которая загружается в ОС по запросу работающей программы в ходе её выполнения (Run-time), то есть динамически (Dynamic Link Library, DLL в Windows). Один и тот же набор функций (подпрограмм) может быть использован сразу в нескольких работающих программах, из-за чего они имеют ещё одно название — библиотеки общего пользования (Shared Library). Если динамическая библиотека загружена в адресное пространство самой ОС (System Library), то единственная копия может быть использована множеством работающих с нею программ, что положительно сказывается на степени использовании ресурса ОЗУ. Динамические библиотеки могут содержать в себе как критические для работы программы части, так и дополнительные функции. Дополнительным плюсом такого подхода является то, что динамическая библиотека может быть использована в качестве плагина (Plug-ins), расширяющего функциональность программы. Минусом является то, что в случае, если модуль, который содержит в себе критическую часть, отсутствует, программа не сможет продолжить работу.
Динамические библиотеки хранятся обычно в определенном месте и имеют стандартное расширение. Например, файлы .library в логическом томе Libs: в AmigaOS; в Microsoft Windows и OS/2 файлы библиотек общего пользования имеют расширение .dll; в UNIX‐подобных ОС — обычно .so; в Mac OS — .dylib.
При написании программы программисту достаточно указать транслятору (компилятору или интерпретатору) языка программирования, что следует подключить нужную библиотеку и использовать функцию из неё. Ни исходный текст, ни исполняемый код функции в состав программы на данном этапе не входит.
Статические библиотеки
Могут быть в виде исходного текста, подключаемого программистом к своей программе на этапе написания (например, для языка Fortran существует огромное количество библиотек для решения разных задач именно в исходных текстах), либо в виде объектных файлов, присоединяемых (линкуемых) к исполняемой программе на этапе компиляции (в Microsoft Windows такие файлы имеют расширение .lib, в UNIX‐подобных ОС — обычно .a). В результате программа включает в себя все необходимые функции, что делает её автономной, но увеличивает размер. Без статических библиотек объектных модулей (файлов) невозможно использование большинства современных компилирующих языков и систем программирования: Fortran, Pascal, C, C++ и других.
- Язык программирования. Общие принципы построения и использования языков программирования.
- Стандарты языков программирования.
- Лямбда-исчисление. Аппликация, абстракция, редукция, преобразование.
- Списки и функциональные выражения в функциональных языках программирования.
- Механизмы и средства взаимодействия программы с операционной системой.
- Функциональное программирование. Основные положения. Основные отличия от других типов языков программирования.
- Классификация языков программирования. Близость языков программирования к естественному языку.
- Унификация и хорновский клоз в логических языках программирования.
- Модель вычислений функциональных языков программирования.
- Языки программирования низкого уровня.
- Средства разработки графического интерфейса пользователя. Эргономические свойства человеко-машинного интерфейса.
- Процедурные языки программирования. Основные отличия от других типов языков.
- Обоснование выбора языка программирования.
- Перегрузка в языках программирования.
- Логические языки программирования. Основные положения и понятия. Основные отличия от других типов языков программирования.
- Объектно-ориентированные языки программирования (ооп). Основные отличия от других концепций языков программирования.
- Полиморфизм в ооп. Виртуальные функции. Таблицы виртуальных функций.
- Структура языка программирования. Синтаксис и семантика языка программирования. Расширенная форма Бэкуса-Наура.
- Наследование в ооп. Множественное наследование. Проблемы множественного наследования.
- Инкапсуляция в ооп. Контроль доступа.
- Понятие класса и объекта в ооп. Атрибуты, методы, конструктор и деструктор, статические члены класса.
- Диаграммы классов uml. Основные элементы и обозначения.
- Данные. Средства описания данных. Типизация языка.
- Преобразования типов. Контроль соответствия типов данных.
- Ооп. Основные концепции ооп.
- Современные интегрированные схемы разработки программ. Основные компоненты среды программирования.
- Декомпозиция программ.
- Трансляторы. Интерпретация и компиляция.
- Макропроцессоры и макрогенераторы.
- Потоки и процессы. Сходства и различия.
- Мониторы и защищаемые переменные в параллельном программировании.
- Семафоры в параллельном программировании. Типы семафоров.
- Отладчики. Генераторы кода и приложений.
- Параллельная обработка данных и параллелизм. Параллельное и распределенное программирование.
- Основные проблемы параллельного и распределенного программирования.
- Оценка максимально возможного параллелизма.
- Основные модели параллельного программирования.
- Оптимизатор. Основные функции оптимизатора.
- Обработка исключительных ситуаций. Иерархия и виды исключительных ситуаций.
- Операторы обработки исключительных ситуаций в различных языках программирования.
- Элементарные типы данных.
- Перегрузка данных, операторов, методов.
- Составные типы данных.
- Механизмы логического вывода. Прямая и обратная цепочки рассуждений.
- Пространство имен, область видимости, время жизни переменных.
- Ошибки при работе с вещественными числами. Смешанная арифметика.
- Операторы выбора и условные операторы.
- Вещественные числа. Способы представления. Операции над вещественными числами.
- Оператор присваивания. Операторы цикла.
- Распределение памяти при выполнении программы.
- Динамические структуры данных. Реализация динамических структур данных с помощью указателей.
- Библиотеки программ и классов. Статические и динамические библиотеки. Критерии проектирования библиотек.
- Подпрограммы. Формальные и фактические параметры подпрограмм.
- Передача параметров подпрограмме.
- Программный стек и его изменение.
- Рекурсивный и итерационный методы решения задач. Виды рекурсий.
- Общая характеристика языков ассемблера: назначение, принципы построения и использования; структура языка.
- Сериализация и десериализация. Методы сериализации объектов в базу данных.