Правильно для маленькой программы и недопустимо для большой системы. • Аналогия: строительство будки для собаки и строительство небоскрёба
Вид материала | Программа |
Операционная система – набор программ, которые обеспечивают Сетевые ОС – обеспечивают поддержку работы пользователей в сети. • Распределённые |
- Учебно-методический комплекс по дисциплине «инженерная геодезия» для студентов 3 курса, 610.25kb.
- Пособие и методические указания к выполнению курсовой работы, 639.04kb.
- Конспект лекций по дисциплине «Теплоснабжение» для студентов 4 и 5 курсов всех форм, 22.36kb.
- План для самостоятельной работы по специальности спо 270802 «Строительство и эксплуатация, 104.67kb.
- Строительство комплекса зданий производственной базы и фондохранилища - завершение, 194.75kb.
- «Войсковая часть 7408 г. Нижний Новгород, строительство и реконструкция военного городка, 1125.35kb.
- Дисциплина учебного плана подготовки специалиста Специальность 271101. 65 «Строительство, 18.47kb.
- Рабочая программа дисциплины опд ф. 09 «Инженерная геология» для специальности 270102, 214.97kb.
- Анализ рынка рекламы г. Москвы Введение, 1831.97kb.
- Положение о республиканской научно-практической конференции для обучающихся «Строительство:, 61.05kb.
• Проверка успешности открытия файла: преобразование объекта-потока к
булевскому типу.
• Закрытие файла: метод close.
• Проверка достижения конца файла: метод eof.
• Пример программы копирования текстовых файлов.
4.Строковые потоки
• Всё что применимо к консольному вводу-выводу, справедливо и для
строкового. Это достигается наследованием.
• Классы: istringstream (поток для чтения из строки), ostringstream (поток
для записи в строку).
• Для их использования необходимо подключение
• Получение сформированной строки: метод str() класса ostringstream.
• Пример использования строкового потока вывода.
17) Порождаемые функции в обобщенном программировании.
• Порождаемая функция определяет реализацию алгоритма, независимого
от типов обрабатываемых данных.
• Порождаемая функция – это функция, которая может автоматически
перегружаться.
• Функция становится порождаемой при указании в начале её определения
(объявления): template <список параметров шаблона>
• Указанные в списке имена параметров можно использовать внутри
определения функции.
• Пример объявления, определения порождаемой функции и её
использования.
• В приведённом примере компилятор создаст две версии функции с
соответствующими типами данных.
//пример порождаемой функции swap
#include
//объявление порождаемой функции swap
template
//определение порождаемой функции swap
template
{
T temp = first;
first = second;
second = temp;
return;
}
//пример использования порождаемой функции swap
int main()
{
int value1;
int value2;
std::cin >> value1 >> value2;
swap(value1, value2);
std::cout << value1 << ' ' << value2 << std::endl;
double value3;
double value4;
std::cin >> value3 >> value4;
swap(value3, value4);
std::cout << value3 << ' ' << value4 << std::endl;
return 0;
}
18)Порождаемые классы в обобщенном программировании.
• В порождаемом классе все алгоритмы определены, а типы
обрабатываемых данных определяются позже, при создании объектов
класса.
• Класс становится порождаемым при указании в начале его определения
(объявления): template <список параметров шаблона>
• Указанные в списке имена параметров можно использовать внутри
определения класса.
• Инстанцирование шаблона выполняется при создании объектов
порождаемого класса.
• При инстанцировании шаблона автоматически создаётся новый класс.
• Реализация методов порождаемого класса может быть приведена извне
определения класса путём использования инструкции template.
• Реализация методов шаблонного класса приводится в заголовочном файле.
Это допустимо, поскольку такие реализации – правила генерации кода для
компилятора.
19)Использование основных контейнеров стандартной библиотеки.
Контейнеры. Вектор
• Контейнеры – это объекты, предназначенные для хранения совокупностей
других объектов.
• Виды контейнеров: вектор (vector), список (list), очередь (queue), стек
(stack), ассоциативный массив (map), множество (set).
• Для элементов контейнера должны быть определены конструктор по
умолчанию и операторы < и ==.
• Вектор является наиболее часто используемым контейнером.
Обеспечивает поддержку динамических массивов.
• Спецификация вектора:
template < class T, class Allocator = allocator
T – тип предназначенных для хранения в контейнере данных;
Allocator – задаёт распределитель памяти.
• Для большинства случаев распределитель памяти не указывается
(используется стандартный).
• Для vector определены операторы сравнения и оператор индексирования.
• Пример использования контейнера vector : задача заполнения вектора
считанными со стандартного устройства ввода целыми числами до ввода
заданного значения или до достижения конца файла.
Контейнеры. Список
• Список – последовательность элементов данных, оптимизированная для их
вставки и удаления. Обеспечивает представление двунаправленного
линейного списка.
• Спецификация списка:
template < class T, class Allocator = allocator
T – тип предназначенных для хранения в контейнере данных;
Allocator – задаёт распределитель памяти.
• Для большинства случаев распределитель памяти не указывается
(используется стандартный).
• Для list определены операторы сравнения и отсутствует оператор
индексирования. Обеспечивает доступ к обоим концам списка.
• Пример использования контейнера list: задача сортировки и слияния двух
списков фамилий сотрудников. Тестовая программа должна напечатать
фамилию сотрудника, оказавшегося в начале результирующего списка.
Контейнеры. Ассоциативный контейнер
• В ассоциативном контейнере каждому значению соответствует
уникальный ключ (не обязательно целочисленный).
• Спецификация ассоциативного контейнера:
template < class Key, class T, class Comp = less
allocator
Key – тип ключа;
T – тип предназначенных для хранения в контейнере данных;
Comp – функция для сравнения двух ключей;
Allocator – задаёт распределитель памяти.
• Для большинства случаев распределитель памяти и функция сравнения
ключей не указываются (используются стандартные).
• Для map определен оператор индексирования. В качестве индекса
указывается значение ключа.
• Пример использования контейнера map: в прайс-листе товаров
требуется найти цену товара с указанным именем.
• Проблема в программной реализации: не отслеживается отсутствие
запрошенного товара.
• Её решение: использование итераторов.
Итераторы
• Итератор – компонент для доступа к отдельным элементам контейнеров и
их перебора.
• Итератор является обобщением указателя.
• Итератор указывает на некоторый элемент контейнера или за последний
элемент контейнера.
• Доступ к значению элемента осуществляется операцией *, применённой к
итератору.
• Категории итераторов: ввода, вывода, последовательный,
двунаправленный, произвольного доступа.
• Перемещение итератора к следующему или предыдущему элементу
осуществляется операциями ++, -- (определены не для всех видов
итераторов).
• Каждый вид контейнера определяет свой набор видов итераторов.
• Пример: перебор элементов списка с использованием итератора.
• Пример: доработка задачи выдачи цены товара с учётом ситуации
отсутствия товара с указанным названием.
20)Использования алгоритмов стандартной библиотеки.
• Алгоритмы предназначены для выполнения операций над содержимым
контейнеров.
• Алгоритмы являются порождаемыми функциями.
• Группы алгоритмов:
– поэлементная обработка,
– заполнение и порождение,
– подсчёт,
– манипулирование последовательностями,
– поиск и замена,
– удаление,
– сортировка и обработка отсортированных последовательностей,
– численные алгоритмы.
• В качестве параметров алгоритмы, как правило, принимают итераторы и
функциональные объекты.
• Рассмотренную задачу в примере использования класса Thresholder
можно изящно решить с помощью алгоритма transform:
transform( data.begin(), data.end(), data.begin(), Thresholder(0) );
Примеры алгоритмов
• Алгоритмы поэлементной обработки применяют функциональный объект
к каждому элементу последовательности.
OutIter transform(InIter first, InIter last, OutIter result, UnFunction f);
UnFunction for_each(InIter first, InIter last, UnFunction f);
• Алгоритмы заполнения и порождения позволяют заполнить элементы
последовательности по определённому правилу.
void fill(ForIter first, ForIter last, const T& value);
void generate(ForIter first, ForIter last, Generator gen);
• Алгоритмы манипулирования перемещают элементы контейнеров. При
этом элементы не добавляются, а замещают уже имеющиеся.
• При необходимости добавления в качестве приёмника требуется указывать
итератор back_inserter(имяКонтейнера)
OutIter copy(InIter first, InIter last, OutIter dest);
OutIter reverse_copy(BiIter first, BiIter last, OutIter dest);
• Алгоритмы поиска используются для поиска элементов в
последовательности.
InIter find_if(InIter first, InIter last, Predicate pred);
ForIter min_element(ForIter first, ForIter last);
• Численные алгоритмы предназначены для решения вычислительных задач.
T accumulate(InIter first, InIter last, T init);
T inner_product(InIter first1, InIter last1, InIter first2, T init);
• Примеры использования алгоритмов.
vector
//...
fill(v.begin(),v.end(),1.0);
//...
list
reverse_copy(v.begin(), v.end(),back_inserter(l));
list
find_if(l.begin(),l.end(), bind2nd( greater
vector
//...
double product = inner_product( v.begin(), v.end(), v2.begin(), 0 );
4) Защитное программирование.
Семантические ошибки и утверждения
• Категории ошибок — синтаксические и семантические.
• Синтаксическая ошибка — неправильное использование конструкций
языка. Она выявляются компилятором.
• Семантическая ошибка – ошибка сделанная разработчиком при создании
программы. В корректной программной системе семантических ошибок
быть не должно!
• Поиск семантических ошибок осуществляется с помощью отладчиков и
проверки утверждений. Утверждение – высказывание, являющееся
истинным в течение всего времени выполнения всей программы или какой-
либо её части.
• С помощью утверждений нужно отслеживать наступление всех ситуаций,
которые «ну никак не могут произойти».
• Для проверки утверждений удобно использовать макрос assert(). Если
результат вычисления аргумента макроса false, то программа аварийно
завершается с выдачей диагностической информации.
• Пример утверждения – инвариант класса, свойство делающее состояние
объекта класса чётко определённым. Цель конструктора – привести объект в
такое состояние. Инвариант должен быть истинным вначале выполнения
каждой операции над объектом и по её завершении.
• Предусловия и постусловия функций и методов – виды утверждений.
Выражают предположения о правильном состоянии мира при входе в
функцию и при выходе из неё.
• Пример функции для вычисления скалярного произведения двух векторов:
в качестве предусловия выступает совпадение размерности векторов.
Исключения и их порождение
• В любой гипотетически безошибочной программе всё равно возможно
возникновение особых ситуаций: деление на 0, переполнение разрядной
сетки, отсутствие свободной памяти, чтение недопустимого значения
переменной из потока и т. д.
• Более общая ситуация – вследствие каких-либо причин некоторая часть
системы не смогла сделать то, что от неё требовалось.
• Отличие таких ситуаций от программных ошибок: мы знаем, что они
могут наступить в любом случае. Для работы с такими ситуациями
используются исключения.
• Исключение – средство C++ для отделения генерации информации о
возникновении ошибки от её обработки.
• Порождение исключения осуществляется компонентой программной
системы при обнаружении ошибки оператором throw исключение
• Исключение является объектом какого-либо класса. Тип объекта
определяет вид ошибки, а состояние объекта содержит уточняющую
информацию об этой ошибке.
• Пример: реализация функции toChar для надёжного преобразования
значения целого типа в значение типа char. При выходе исходного значения
за пределы возможных значений переменных типа char порождается
исключение ToCharError.
Перехват и обработка исключений
• Часть программной системы, знающая, что делать с ошибками, должна
иметь возможность зафиксировать факт порождения исключения.
• Для отслеживания порождения исключений в некотором фрагменте
программы он помещается в блок try { фрагмент программы }
• Обработка перехваченных исключений выполняется обработчиками
исключений, представляемыми оператором catch (параметр) {...} Параметр
определяет тип исключения, перехватываемого данным обработчиком.
• Для одного блока try может быть указано несколько обработчиков catch,
располагающихся друг за другом.
• После завершения обработки исключения выполнение программы
продолжается обычным образом, начиная с оператора, следующего за
списком обработчиков.
• Порождённое, но не обработанное исключение приводит к завершению
выполнения программы.
Стандартные исключения
• Стандартная библиотека включает определённый набор исключений. Все
они являются классами, производными от std::exception
• При невозможности динамического выделения памяти требуемого размера
генерируется исключение std::bad_alloc
• При возникновении ошибки преобразования типа оператором
dynamic_cast генерируется исключение std::bad_cast
• При доступе к несуществующему элементу контейнера std::vector через
метод at генерируется исключение std::out_of_range
• При указании недопустимых значений параметров функций генерируется
исключение std::invalid_argument
• При возникновении переполнения (полученный результат не помещается в
разрядную сетку) генерируется исключение std::overflow_error.
21)Понятие операционной системы,ее назначения и функции.
• Все пользователи используют операционные системы, но у многих
затруднения с чётким определением этого понятия.
• Понятие операционной системы (ОС) с нескольких точек зрения.
• ОС как виртуальная машина, с которой проще иметь дело, чем
непосредственно с оборудованием компьютера. Скрывает детали реализации
и внутренние требования и ограничения.
• ОС как менеджер ресурсов осуществляет упорядоченное и контролируемое
распределение процессоров, памяти и других ресурсов между программами.
• ОС как защитник пользователей и программ обеспечивает систему
безопасности, на которую возложены полицейские и контрразведывательные
функции – предупреждать (предвидеть) действия, контролировать и
наказывать.
• ОС как постоянно функционирующее ядро, постоянно работающее в
вычислительной системе и взаимодействующее со всеми прикладными
программами.
• Операционная система – набор программ, которые обеспечивают
возможность использования аппаратуры компьютера. При этом
аппаратура предоставляет «сырую» вычислительную мощность, а задача
ОС заключается в том, чтобы сделать аппаратуру доступной и удобной
для пользователей, а также обеспечить рациональное и координированное
управление ей для достижения высокой производительности.
Функции операционной системы
• Главное назначение операционной системы – управление ресурсами.
• Реализует множество функций, объединяемых в несколько групп
(подсистем). Приведены на рис 4.
• Определяет интерфейс пользователя для взаимодействия с системой и
прикладными программами.
• Обеспечивает планирование заданий и использования процессора для
эффективного использования ресурсов вычислительной системы.
• Предоставляет программам средства коммуникации и синхронизации для
совместного решения задач.
• Реализует управление памятью для удовлетворения запросов программ и
надёжности их выполнения.
• Обеспечивает управление файловой системой для долговременного
хранения пользовательских данных и доступа к общим программам и
данным.
• Реализует эффективное управление операций ввода-вывода.
• Обеспечивает безопасность и конфиденциальность работы пользователя в
вычислительной системе.
22)Этапы развития операционной системы.
Все операционные системы можно отнести к одной или нескольким
группам.
• Мультипрограммные ОС – позволяют одновременное выполнение
нескольких пользовательских программ.
• Мультипроцессорные ОС – обеспечивают поддержку вычислительных
систем с несколькими процессорами.
• ОС с разделением времени – обеспечивают возможность одновременной
работы с системой нескольких пользователей через терминалы (рис 5).
• ОС реального времени – обеспечивают предсказуемость времени реакции
системы на непредсказуемое появление внешних событий.
• Многорежимные ОС – реализуют несколько режимов работы системы (с
разделением времени, реальное время и т. д.).
• Сетевые ОС – обеспечивают поддержку работы пользователей в сети.
• Распределённые ОС – реализуют возможность выполнения распределённой
обработки информации.
Изучение операционных систем невозможно без работы с ними «в живую».
• Выбор «материала для изучения» – ОС GNU/Linux – современная,
интересная, полезная, доступная.
• GNU/Linux – операционная система GNU, основной компонентой которой
является ядро Linux.
• Характеристика GNU/Linux – 32-х разрядная, многозадачная,
многопользовательская, мощная поддержка сети, средства обеспечения
безопасности, многоплатформенная.
• Ядро Linux – феномен Интернета, обладающий надёжностью,
эффективностью, успехом.
• Первые версии Linux появились в 1991 г. Автор – студент университета
Хельсинки – Линус Торвальдс. В качестве основы взято ядро одного из
клонов ОС Unix – Minix.
• ОС GNU/Linux – яркий представитель семейства открытого ПО. Всем
желающим доступен исходный текст как самой ОС, так и многочисленного
программного обеспечения для неё.
• General Public License – право на свободное распространение,
использование и модификацию программного обеспечения.
• Интернет – локомотив развития GNU/Linux. Разработка проектов
осуществляется по инициативе пользователей GNU/Linux.
23)Основные