Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_oop.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
1.25 Mб
Скачать

Лабораторная работа 4-5 (4 часа) Статически и динамически подключаемые библиотеки.

Цель работы: отработка умений и навыков создания и правильного подключения статических и динамических библиотек при проектировании программ на С/С++:

  • создание модулей библиотек с использованием классов (2 часа);

  • статическое и динамическое подключение библиотек (2 часа).

Теория:

Множественные заголовочные файлы. Файлы как модули.

Стиль разбиения программы с одним заголовочным файлом наиболее пригоден в тех случаях, когда программа невелика и ее части не предполагается использовать отдельно. В случае объемной программы имеет смысл для каждой ее логической части создать свой заголовочный файл, в котором определяются предоставляемые этой частью средства. Тогда каждый логически законченный файл .cрр будет имеет соответствующий ему заголовочный файл .h.

Необходимое количество заголовочных файлов зависит от многих факторов: как много классов и функций используется в вашей программе, одновременное ли их использование предполагается, например библиотечные файлы. Во многом на этот вопрос оказывает влияние комфорт в процессе программирования. Например, если в вашем редакторе нет средств, позволяющих одновременно открывать несколько файлов, использование большого их числа становится менее привлекательным. Аналогично, если открывание и чтение 10 файлов по 50 строк в каждом требует заметно больше времени, чем чтение одного файла в 500 строк, вы можете дважды подумать, прежде чем использовать в небольшом проекте стиль множественных заголовочных файлов. Однако, набор из десяти заголовочных файлов плюс стандартные заголовочные файлы обычно легче поддаются управлению. С другой стороны, если вы разбили описания в большой программе на логически минимальные по размеру заголовочные файлы (помещая каждое описание структуры в свой отдельный файл и т.д.), у вас легко может получиться неразбериха из сотен файлов. Скорее всего, необходима систематизация используемых классов и функций по решению ими поставленных задач. Логически обособленную задачу и выделяют в отдельный заголовочный файл.

В рассматриваемых программах файл .h обычно служит интерфейсом для других ее частей, а файл .cрр – задает его реализацию. Такой объект часто называют модулем. Доступными делаются только те имена, которые необходимо знать пользователю, остальные скрыты. Это качество часто называют скрытием данных, хотя данные - лишь часть того, что может быть скрыто. Модули такого вида обеспечивают большую гибкость. Например, реализация может состоять из одного или более .c файлов, а в виде .h файлов может быть предоставлено несколько интерфейсов. Информация, которую пользователю знать не обязательно, искусно скрыта в *.c файлах.

Области действия данных

Заголовочные файлы позволяют программисту определить явный интерфейс для обеспечения согласованного использования типов данных в программе. В отсутствие заголовочного файла идентификация переменных и функций определяется с помощью четырех спецификаций класса памяти: auto, register, extern и static (см. лекцию).

Как создать библиотеку

В качестве примера рассмотрим случай, когда необходимо задать (обычным способом) набор математических функций для некоторого неопределенного множества пользователей. Заголовочный файл мог бы выглядеть примерно так:

extern double sqr(double); // подмножество

extern double sin(double);

extern double cos(double);

extern double exp(double);

extern double log(double);

а определения этих функций хранились бы соответственно в файлах sqrt.c, sin.c, cos.c, exp.c и log.c.

Можно создать библиотеку с именем mat.h (см. лекцию biblio.pdf):

Задание.

  1. В "Практическом руководстве по методам вычислений с приложением программ для ПК" Ракитин В.И., Первушин В.Е. –М.: Высш.шк., 1998. -383с.; даны примеры решений задач вычислительной математики численными методами. Приложение с программами на разных языках программирования находятся в папке с лабораторной работой (Rakitin_Pervushin.pdf);

  2. Необходимо переписать программы (2-3 шт. см. вариант) с применением объектно-ориентированного программирования, создав один или несколько классов, отделяя интерфейс от реализации (лаб.4);

  3. Объединить созданные программы в библиотеку (статическую и динамическую);

  4. Написать программу, реализующую использование одной программы из созданной библиотеки. Библиотеку подключить статически и динамически. Определить размер запускаемого файла.

Варианты заданий.

  1. Решение систем линейных алгебраических уравнений

  • методом Гаусса

  • методом итераций

  1. Решение уравнения f(x) = 0

  • методом половинного деления

  • методом итераций

  1. Вычисление производной

  • по ее определению

  • с одинаковым порядком аппроксимации по шагу h

  1. Решение задачи Коши для дифференциального уравнения

  • первого порядка методами Эйлера, Эйлера-Коши и Рунге-Кутта

  • системы дифференциальных уравнений методом Рунге-Кутта

  1. Вычисление определенного интеграла

  • по квадратурным формулам прямоугольников, трапеций и Симпсона

  • методом двойного пересчета по формуле Симпсона

  1. Поиск минимума функции одной переменной

  • методом половинного деления

  • методом золотого сечения

  • методом сканирования

  1. Поиск минимума функции двух переменных

  • методом покоординатного спуска

  • методом скорейшего спуска

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]