- •Перечень контрольных вопросов по дисциплине «Системное программирование»
- •Понятие системного программного продукта.
- •Стадии разработки программного обеспечения.
- •Технология инкрементального программирования.
- •Понятие объекта: состояние, поведение, методы. Понятие класса и идентичность объектов.
- •Принципы объектной модели
- •Проблема создания и уничтожения объектов
- •Понятие ссылки. Операции над ссылками и способы применения ссылок.
- •Статические и постоянные члены класса. Встраиваемые методы.
- •Дружественные функции.
- •Иерархические отношения между классами: композиция.
- •Иерархические отношения между классами: наследование.
- •Виртуальные методы и позднее связывание.
- •Понятие абстрактного класса.
- •Использование потокового ввода-вывода.
- •Порождаемые функции в обобщённом программировании.
- •Порождаемые классы в обобщённом программировании.
- •Использование основных контейнеров стандартной библиотеки.
- •Классы функциональных объектов: создание и применение.
- •Использование алгоритмов стандартной библиотеки операционной системы, ее назначение и функции.
- •Операционная система, ее назначение и функции
- •Утилиты операционной системы gnu/Linux
- •Понятие файла. Виртуальная файловая система gnu/Linux
- •Разграничение доступа к файлам. Доступ к устройствам
- •Организация взаимодействия пользователя с системой
- •Организация ввода-вывода системного уровня
- •Концепция процесса. Состояние процесса и диаграмма смены состояний процесса
- •Операции над процессами. Разграничение доступа процессов к ресурсам системы.
- •Планирование процессов. Политики планирования
- •Сигналы и их использование для управления процессами
- •Понятие потока выполнения. Сравнительный анализ потоков и процессов.
- •Асинхронные параллельные потоки. Проблематика разработки многопоточных приложений.
- •Задача «разделение доступа к ресурсу». Способы ее решения.
- •Задача «синхронизация по готовности данных». Способы ее решения.
- •Системные средства синхронизации потоков.
- •1.Решение задачи «разделение доступа к ресурсу».
- •2.Способы обеспечения атомарности операций
- •3.Обеспечение взаимоисключения потоков через мьютексы.
- •4.Решение задачи «синхронизация по готовности данных»
- •Мониторы Хоара. Пример проектирования монитора «склад» для задачи «производитель-потребитель».
- •Проектирование и модели многопоточных приложений.
- •Иерархия памяти. Виртуальная память: концепция и инструменты.
- •Взаимодействие процессов: проблематика и средства.
- •Модули ядра Linux.
Понятие абстрактного класса.
Абстрактный класс— базовый класс, который не предполагает создания экземпляров. Абстрактный класс может содержать (и не содержать) абстрактные методы и свойства. Абстрактный метод не реализуется для класса, в котором описан, однако должен быть реализован для его неабстрактных потомков. Абстрактные классы представляют собой наиболее общие абстракции, то есть имеющие наибольший объем и наименьшее содержание.
class CA { // Абстрактный класс
public:
CA ( void ) { std::cout << "This object of the class "; }
virtual void Abstr ( void ) = 0; // Чистая (пустая) виртуальная функция.
void fun ( void ) { std::cout << "Реализация не будет наследоваться!"; }
~CA () { std::cout << "." << std::endl; } //Вызывается в обр. порядке конструкторов
};
Использование потокового ввода-вывода.
Стандартная библиотека содержит удобные объектно-ориентированные
средства ввода-вывода. Ввод-вывод организован посредством потоков – логических устройств, выдающих и принимающих пользовательскую информацию.
Предопределённые потоки: cin, cout, cerr, clog. Базовый класс: ios. Производные: iostream (поток для ввода и вывода), istream (поток ввода), ostream (поток вывода).
Операции ввода-вывода реализуются через перегруженные операторы >> (ввод) и << (вывод).
std::ostream& operator << (std:: ostream &os, const generator &basicnoisegen)
{
os <<basicnoisegen.ymedium<<" "<<basicnoisegen.amplitude<<" "<<endl;
return os;
}
std::istream& operator >> (std:: istream &is, generator& basicnoisegen)
{
is >> basicnoisegen.ymedium;
return is;
}
Примеры флагов: left (right), dec (oct, hex), scientific (fixed), boolalpha. Флаги определены внутри класса ios. Доступ к ним через оператор расширения области видимости ::
Чтение всей строки целиком из потока выполняется функцией getline.
Потоковый ввод-вывод
Классы: fstream (поток для ввода и вывода), ifstream (поток ввода), ofstream (поток вывода).
Открытие файла: через конструктор или методом open, Закрытие файла: метод close, Проверка достижения конца файла: метод eof.
Порождаемые функции в обобщённом программировании.
Порождаемая функция – это функция, которая может автоматически перегружаться.
Функция становится порождаемой при указании в начале её определения (объявления): template <список параметров шаблона>. Указанные в списке имена параметров можно использовать внутри определения функции.
template <class T> void swap(T& first, T& second)
{
T temp = first;
first = second;
second = temp;
return;
}
Порождаемые классы в обобщённом программировании.
В порождаемом классе все алгоритмы определены, а типы
обрабатываемых данных определяются позже, при создании объектов
класса.
Класс становится порождаемым при указании в начале его определения (объявления): template <список параметров шаблона>
Указанные в списке имена параметров можно использовать внутри определения класса.
Инстанцирование шаблона выполняется при создании объектов порождаемого класса.
При инстанцировании шаблона автоматически создаётся новый класс. Реализация методов порождаемого класса может быть приведена извне определения класса путём использования инструкции template.
Реализация методов шаблонного класса приводится в заголовочном файле.
Это допустимо, поскольку такие реализации – правила генерации кода для компилятора.
template <class T, int size>
class SimpleVector {
public:
SimpleVector() {}
~SimpleVector() {}
T& operator[] (int index) { return data[index]; }
bool get(int index, T& value) const;
bool set(int index, const T& value);
private:
T data[size];
};
