- •Перечень контрольных вопросов по дисциплине «Системное программирование»
- •Понятие системного программного продукта.
- •Стадии разработки программного обеспечения.
- •Технология инкрементального программирования.
- •Понятие объекта: состояние, поведение, методы. Понятие класса и идентичность объектов.
- •Принципы объектной модели
- •Проблема создания и уничтожения объектов
- •Понятие ссылки. Операции над ссылками и способы применения ссылок.
- •Статические и постоянные члены класса. Встраиваемые методы.
- •Дружественные функции.
- •Иерархические отношения между классами: композиция.
- •Иерархические отношения между классами: наследование.
- •Виртуальные методы и позднее связывание.
- •Понятие абстрактного класса.
- •Использование потокового ввода-вывода.
- •Порождаемые функции в обобщённом программировании.
- •Порождаемые классы в обобщённом программировании.
- •Использование основных контейнеров стандартной библиотеки.
- •Классы функциональных объектов: создание и применение.
- •Использование алгоритмов стандартной библиотеки операционной системы, ее назначение и функции.
- •Операционная система, ее назначение и функции
- •Утилиты операционной системы gnu/Linux
- •Понятие файла. Виртуальная файловая система gnu/Linux
- •Разграничение доступа к файлам. Доступ к устройствам
- •Организация взаимодействия пользователя с системой
- •Организация ввода-вывода системного уровня
- •Концепция процесса. Состояние процесса и диаграмма смены состояний процесса
- •Операции над процессами. Разграничение доступа процессов к ресурсам системы.
- •Планирование процессов. Политики планирования
- •Сигналы и их использование для управления процессами
- •Понятие потока выполнения. Сравнительный анализ потоков и процессов.
- •Асинхронные параллельные потоки. Проблематика разработки многопоточных приложений.
- •Задача «разделение доступа к ресурсу». Способы ее решения.
- •Задача «синхронизация по готовности данных». Способы ее решения.
- •Системные средства синхронизации потоков.
- •1.Решение задачи «разделение доступа к ресурсу».
- •2.Способы обеспечения атомарности операций
- •3.Обеспечение взаимоисключения потоков через мьютексы.
- •4.Решение задачи «синхронизация по готовности данных»
- •Мониторы Хоара. Пример проектирования монитора «склад» для задачи «производитель-потребитель».
- •Проектирование и модели многопоточных приложений.
- •Иерархия памяти. Виртуальная память: концепция и инструменты.
- •Взаимодействие процессов: проблематика и средства.
- •Модули ядра Linux.
Проблема создания и уничтожения объектов
Для всех объектов должна быть выполнена инициализация (задание их
начального состояния). Способ решения проблемы: определение обычного метода для
инициализации. Недостаток подхода: можно забыть его вызвать или вызвать
несколько раз. Решение в ООП: использование конструктора – специального метода, вызываемого для объекта автоматически при его создании. Конструкторы глобальных объектов выполняются до начала работы функции main().
Синтаксис конструктора: имяКласса(списокПараметров)
generator::generator(float a, float b, float c, int d)
:ymedium(a),amplitude(b),discrete(c),generatorwork(d) {}
Деструктор – специальный метод класса, который вызывается для объекта
автоматически при его уничтожении. Главная задача деструктора – освобождение ресурсов.
Синтаксис деструктора: ~имяКласса(). Для автоматических объектов деструктор вызывается при выходе из их области видимости, а для остальных объектов при завершении программы.
generator::~generator() {}
new и delete
int main()
{
SlotMachine* orange = createOrangeMachine();
//...
delete orange;
return 0;
}
SlotMachine* createOrangeMachine()
{
return new SlotMachine(5);
}
Понятие ссылки. Операции над ссылками и способы применения ссылок.
Синтаксис доступа по имени: имяОбъекта.имяЧлена
Объявление указателя на объект: имяКласса* имяУказателя;
Синтаксис доступа по указателю: имяУказателя->имяЧлена
При вызове в метод передаётся скрытый параметр – указатель на объект, для которого был вызван метод. Специальный указатель this хранит адрес этого объекта.
Ссылка – альтернативное имя объекта. Объявление ссылки на объект:
имяКласса& имяСсылки = имяОбъекта;
Способы использования ссылки – создание независимой ссылки, для
передачи параметров в методы, для возврата в качестве результата работы
функции.
Статические и постоянные члены класса. Встраиваемые методы.
Cчетчика объектов: При создании в конструкторе увеличивать, а при уничтожении в деструкторе уменьшать его значение. Глобальную переменную использовать нельзя – есть вероятность конфликта и отсутствие инкапсуляции. Решение – использование статической переменной состояния. Она разделяется между экземплярами класса. Не является частью объекта, но является частью класса. Объявление статической переменной состояния выполняется в определении класса: static тип имяПеременной; Статическая переменная состояния определяется в файле-реализации класса: тип имяКласса::имяПеременной;
Решение второй проблемы – использование статического метода для выполнения требуемой операции. Объявление статического метода в определении класса: static тип имяМетода(параметры);
Объекты и переменные, которые после инициализации не должны менять своего состояния, необходимо объявлять константными: const тип имяПеременной(параметры);
Допустимые операции над постоянными объектами – те, которые не меняют его состояния.
Объявление метода не меняющим состояния объекта, для которого он вызван, выполняется в определении класса: тип имяМетода(параметры) const;. В определении метода также указывается ключевое слово const.
Встраивание функций и методов
Проблема эффективности реализации «коротких» методов: canDrink, getCount и деструктора.
Решение проблемы без нарушения инкапсуляции – использование встраиваемых методов.
Отличие встраиваемых методов от обычных – подстановка тела метода в точке его вызова.
Варианты определения метода встраиваемым:
– включение реализации метода в определение класса;
– приведение реализации метода в файле, содержащем определение класса, со спецификатором inline.
inline bool SlotMachine::canDrink() const
{
return drinkMoney >= drinkPrice;
}
Недостатки использования встраиваемых методов – объем исполняемой программы и открытая реализация.
Рекомендации по использованию: очень короткие и приводить реализацию вне определения класса. В противном случае смешиваются акценты «что» делает класс с «как» делает класс.
