Реферат: Правильно для маленькой программы и недопустимо для большой системы. • Аналогия: строительство будки для собаки и строительство небоскрёба
1)Понятия системного программного продукта(РИС)
• Современные задачи и их сложность. Один разработчик не в состоянии
охватить все аспекты такой программы.
• Простая программа и её назначение: пригодна для запуска автором и его
знакомыми на той же системе, где была разработана.
• Программа → программный продукт. Требования к программному
продукту (ПП): обобщённый стиль, надёжность, документация,
сопровождение.
• Программа → программный комплекс. Требования к программному
комплексу (ПК): набор взаимодействующих программ (компонент),
согласование по функциям и по форматам данных, системное тестирование.
• .Системный программный продукт – комплекс взаимодействующих
программ, надлежащим образом написанный, протестированный и
задокументированный с обеспечением сопровождения в процессе его
применения пользователями.
• Системное программирование – процесс разработки сложных
программных систем в целом или их отдельных компонент .РИС
2)Стадии разработки программного обеспечения(РИС)
• Типичная ошибка: после получения задания немедленное написание кода.
Правильно для маленькой программы и недопустимо для большой системы.
• Аналогия: строительство будки для собаки и строительство небоскрёба.
• Основные стадии разработки: постановка задачи, анализ требований и
исследование проблемы, проектирование, написание и тестирование
компонент, системное тестирование, документирование и сопровождение.
• Разработка ПО – итеративный процесс.
^ 3)Основные идеи инкрементального программирования(РИС)
1.Технологии программирования
• Знание большого числа языков или сред программирования ничуть не
помогает быстрее справиться с проблемой. Необходимо знание принципов
разработки.
• Результат программирования – продукт определённого качества.
• Технология программирования – наука о производстве программного
продукта.
• Виды технологий: процедурно-ориентированное, модульное, «сверху-
вниз», функциональное, логическое, инкрементальное, абстрактные типы
данных, объектно-ориентированное.
• Допустимо применение различных технологий в одном проекте для
различных подсистем.
2.Принципы инкрементального программирования
• Программа не пишется – она строится – ещё точнее наращивается путём
пошаговой разработки.
• Этап №1: заставить выполняться (пустая программа).
• Этап №2: создание каркаса системы, реализующего схему работы системы
на самом верхнем уровне. Используются функции-заглушки (фиктивные
подпрограммы) и определяются необходимые переменные.
• Этап №3,4,...: обрастание системы «мясом». Реализация заглушек,
возможно с использованием других заглушек и дополнительных временных
переменных. Последовательное добавление новой функциональности
(наращивание каркаса).
• Преимущества технологии: на каждом шаге имеем работающую систему,
быстрое макетирование системы, положительный психологический эффект.
• Отличие от технологии «сверху-вниз» – осуществляется «движение» не
только вниз но и вширь (добавление функциональности по горизонтали в
структуре модулей)
5)Понятия объекта:состояние,поведение,методы. Понятие класса и
идентичность объектов.(РИС)
1.Понятие объекта и класса
• Базовые единицы в ООП – объекты. Объекты это элементы проблемной
области и их представление в области реализации. ООП описывает проблему
в терминах самой проблемы, а не компьютера. Пример: продажа напитков
торговым автоматом.
• Всё является объектом. Пример: прием и анализ сигналов из окружающей
среды.
• Программа есть набор объектов, взаимодействующих путем посылки
сообщений.
• Объект – нечто, обладающее состоянием, поведением и
индивидуальностью.
• Индивидуальность – свойство, позволяющее объекты отличать друг от
друга. Объект может иметь имя.
• Состояние объекта характеризуется перечнем (обычно статическим) всех
свойств объекта и текущими (обычно динамическими) значениями каждого
из этих свойств. Значения – количественные характеристики и ссылки на
другие объекты. Любой объект занимает определенное пространство в
памяти компьютера.
• Поведение – это то, как объект действует и реагирует, поведение
выражается в терминах состояния объекта и передачи сообщений.
• Структура и поведение схожих объектов определяют общий для них класс.
Термины «экземпляр класса» и «объект» – синонимы.
^ 7)Проблема создания и уничтожение объектов.
1.Проблема инициализации
• Для всех объектов должна быть выполнена инициализация (задание их
начального состояния).
• Способ решения проблемы: определение обычного метода для
инициализации. Недостаток подхода: можно забыть его вызвать или вызвать
несколько раз.
• Решение в ООП: использование конструктора – специального метода,
вызываемого для объекта автоматически при его создании.
• Инструкция объявления переменной – инструкция действия.
• Конструкторы глобальных объектов выполняются до начала работы
функции main().
• Синтаксис конструктора: имяКласса(списокПараметров)
• Конструктор без параметров называется конструктором по умолчанию.
2.Проблема уничтожения
• Деструктор – специальный метод класса, который вызывается для объекта
автоматически при его уничтожении.
• Главная задача деструктора – освобождение ресурсов, которые находятся
во владении объектом.
• Синтаксис деструктора: ~имяКласса()
• Для автоматических объектов деструктор вызывается при выходе из их
области видимости, а для остальных объектов при завершении программы.
• Пример определения деструктора в классе SlotMachine.
9)Статические и постоянныечлены класса.Встраевыемые методы.
• Задача: учет количества торговых автоматов. Требуется в любой момент
времени иметь возможность узнать текущее количество существующих
объектов класса SlotMachine.
• Решение: поддержка счетчика объектов. При создании в конструкторе
увеличивать, а при уничтожении в деструкторе уменьшать его значение.
• Проблемы использования глобальной переменной для счетчика –
вероятность конфликта имен и отсутствие инкапсуляции.
• Решение первой проблемы – использование статической переменной
состояния. Она разделяется между экземплярами класса. Не является частью
объекта, но является частью класса.
• Объявление статической переменной состояния выполняется в
определении класса: static тип имяПеременной; Статическая переменная
состояния определяется в файле-реализации класса: тип
имяКласса::имяПеременной;
• Решение второй проблемы – использование статического метода для
выполнения требуемой операции. Объявление статического метода в
определении класса: static тип имяМетода(параметры);
2.Свойство постоянности
• Объекты и переменные, которые после инициализации не должны менять
своего состояния, необходимо объявлять константными: const тип
имяПеременной(параметры);
• Допустимые операции над постоянными объектами – те, которые не
меняют его состояния.
• Объявление метода не меняющим состояния объекта, для которого он
вызван, выполняется в определении класса: тип имяМетода(параметры)
const;. В определении метода также указывается ключевое слово const.
• Пример: объявление цены напитка в постоянной переменной состояния.
• Пример: метод canDrink не должен менять состояние объекта, для
которого вызывается. Поэтому объявляем его постоянным.
3.Встраивание функций и методов
• Проблема эффективности реализации «коротких» методов: canDrink,
getCount и деструктора.
• Решение проблемы без нарушения инкапсуляции – использование
встраиваемых методов.
• Отличие встраиваемых методов от обычных – подстановка тела метода в
точке его вызова.
• Варианты определения метода встраиваемым:
– включение реализации метода в определение класса;
– приведение реализации метода в файле, содержащем определение
класса, со спецификатором inline.
• Недостатки использования встраиваемых методов – объем исполняемой
программы и открытая реализация.
• Рекомендации по использованию: очень короткие и приводить реализацию
вне определения класса. В противном случае смешиваются акценты «что»
делает класс с «как» делает класс.
10)Дружественные функции
• Задача: изымание дохода из автомата.
• Данную операцию можно рассматривать не как запрос к автомату, а как
действие над ним. В этом случае правильный подход – реализация в виде
функции, а не метода класса SlotMachine.
• Проблема: инкапсуляция и необходимость доступа к закрытым членам.
Решение – определение дружественной функции.
• Объявление дружественной функции в определении класса: friend тип
имя(параметры);
• Определение дружественной функции размещается в любом удобном
модуле – обычно в файле-реализации соответствующего класса.
• Дружественная функция является частью интерфейса класса. Поэтому она
не нарушает инкапсуляции. Расширенные права ей делегирует класс, а не его
пользователи.
• Дружественными могут быть целые классы или отдельные методы
классов.
11) Понятие полиморфизма в программировании.Виды полиморфизма
В языке с++.
• Полиморфизм. Одно и тоже имя можно использовать для обозначения
нескольких действий, решающих:
– подобные, но не одинаковые задачи;
– одну задачу разными способами.
• Основной принцип: один интерфейс, множество методов. Выбор
конкретного действия выполняется автоматически одним из двух способов:
– на этапе компиляции (статический полиморфизм)
– на этапе выполнения программы (динамический полиморфизм).
• Проявления полиморфизма в C++: перегрузка функций и методов,
перегрузка операторов, виртуальные методы, шаблоны.
^ 12.13)Иерархические отношения между объектами:обьекты как переменные
состояния.
Иерархические отношения между классами:механизм наследования.
1.Категории иерархических отношений
• Для построения модели, адекватной реальному миру, требуется отражение
отношений, существующими между понятиями реального мира.
• Прагматические мотивы: повторное использование программного кода без
переработки уже существующего, высокоуровневое представление понятий.
• Основные категории иерархических отношений между объектами и
классами: композиция («часть-целое») и наследование свойств.
• Примеры иерархических отношений:
– материнская плата компьютера состоит из набора компонент:
процессор, гнёзда для модулей с оперативной памятью, разъёмы шины
PCI (композиция);
– «книга», «журнал», «газета» являются конкретными видами
абстрактного понятия «печатная продукция».
2.Композиция объектов
• Элементарные понятия – их состояние выражается в виде совокупности
элементарных величин (числа, символы, строки). Пример: «точка на
плоскости».
• Составные понятия – их состояние включает в себя другие объекты.
Пример: «отрезок» как совокупность двух точек.
• Идеи композиции:
– представление сложных понятий в виде совокупности более простых;
– объединение существующих понятий в новую конструкцию.
• В качестве переменной состояния может выступать объект некоторого
класса. Правила объявления и использования объектов-переменных ничем
не отличаются от правил для обычных переменных состояния.
• Синтаксис определения составного класса и определения конструкторов.
• При создании составного объекта сначала вызываются конструкторы
переменных-состояния, а затем конструктор самого составного объекта.
• При уничтожении сначала выполняется деструктор составного объекта, а
затем автоматически вызываются деструкторы его составных частей.
3.Наследование свойств
• Индикатор названия напитка является текстовым индикатором и
отображает текст. Индикаторы исправности и готовности выдачи –
бинарные индикаторы состояния вида «да/нет».
• Модели информационного индикатора и бинарного индикатора состояния
имеют много общего. Они оба являются представителями понятия
«индикатор» и обладают свойствами, присущими всем индикаторам.
• Многие понятия наследуют свойства других понятий. Примеры: медведь
есть млекопитающее, дом есть недвижимость. Пример общих свойств
недвижимости: местоположение, стоимость, владелец, план. Недвижимость
можно продать, сменить владельца, напечатать план.
• Понятие-потомок к свойствам понятия-родителя добавляет свои новые
свойства. Примеры новых свойств дома: жители дома, количество этажей,
количество комнат. В доме можно объединить или разделить комнаты,
выполнить прокладку коммуникаций.
• Каждый вид индикатора добавляет новые свойства – команды управления
и состояние:
– текстовый – задание текста и сам текст;
– бинарный – установка признака «да/нет» и значение признака.
14)Виртуальные методы и позднее связывание.
• Раннее связывание – определение адреса вызываемой функции во время
компиляции программы.
• Позднее связывание – определение адреса вызываемой функции во время
выполнения программы.
• При позднем связывании адрес функции определяется по типу объекта,
для которого осуществляется вызов через указатель.
• Позднее связывание применяется для виртуальных (полиморфных)
методов.
• Синтаксис объявления метода виртуальным: virtual объявлениеМетода;
• Вызов виртуального метода осуществляется несколько медленнее, чем
вызов простого метода.
• Метод должен быть объявлен виртуальным, только если производные
классы реализуют действие базового класса по своему.
• Позднее связывание позволяет корректно выполнять действия с
объектами, тип которых неизвестен на этапе компиляции программы.
• Для индикатора метод control требуется объявить виртуальным.
15)Понятие абстрактного класса.
• В реальном мире экземпляров типа «Индикатор» в чистом виде не
существует. Существуют текстовые индикаторы, световые и проч.
Аналогично с понятием «Печатная продукция» – реально существуют книги,
журналы, газеты и т. д.
• Понятия «Печатная продукция» и «Индикатор» – абстрактные понятия.
• Для выражения данного свойства в ООП используют абстрактные
классы.
• Нельзя создавать объекты абстрактного класса.
Пример абстрактного класса
• В реальном мире экземпляров типа «Индикатор» в чистом виде не
существует. «Индикатор» является абстрактным понятием.
• Абстрактная операция – отображение состояния.
• В базовом классе Viewer метод control – чисто виртуальный.
• Реализация метода Viewer::control не приводится.
class Viewer {
//...
private:
virtual void control(std::ostream& os) =0;
//...
};
16) Использование потокового ввода-вывода.
1.Введение в потоковый ввод-вывод
• Стандартная библиотека содержит удобные объектно-ориентированные
средства ввода-вывода.
• Ввод-вывод организован посредством потоков – логических устройств,
выдающих и принимающих пользовательскую информацию.
• В распоряжение предоставляется единый удобный интерфейс работы с
потоками. Это обеспечивается использованием наследования и
динамического полиморфизма.
• Предопределённые потоки: cin, cout, cerr, clog.
• Базовый класс: ios. Производные: iostream (поток для ввода и вывода),
istream (поток ввода), ostream (поток вывода).
• Операции ввода-вывода реализуются через перегруженные операторы >>
(ввод) и << (вывод).
• Чтение всей строки целиком из потока выполняется функцией getline.
• Пример построчного чтения.
//считывание всей строки
#include
int main()
{
std::string line;
std::getline(std::cin,line);
std::cout << line.length() << std::endl;
return 0;
}
2.Средства форматирования
• Потоки ввода-вывода позволяют форматировать данные и изменять
параметры ввода.
• Управление форматированием информации может осуществляться с
помощью флагов формата.
• Примеры флагов: left (right), dec (oct, hex), scientific (fixed), boolalpha.
Флаги определены внутри класса ios. Доступ к ним через оператор
расширения области видимости ::
• Управление установкой флагов выполняется через методы потоков: setf,
unsetf, flags.
unsigned value;
cin >> value;
cout.unsetf(ios::dec);
cout.setf(ios::hex);
cout << value << endl;
cout.setf(ios::boolalpha);
cout << true << ' ' << false << endl;
• Управление шириной поля (метод width), точностью для чисел с
плавающей точкой (метод precision) и символом-заполнителем (метод fill).
• Управление форматированием информации может осуществляться с
помощью манипуляторов. Манипулятор – специальная функция, которая
может располагаться внутри инструкций ввода/вывода.
• Некоторые манипуляторы могут иметь параметры. Для их использования
необходимо подключить .
• Примеры манипуляторов: left (right), dec (oct, hex), setw(int w), scientific
(fixed), boolalpha (noboolalpha).
#include
//...
unsigned value;
cin >> value;
cout.fill('0');
cout << setw(8) << hex << value << endl;
cout.precision(4);
cout << 123.45 << endl;
3.Файловый ввод-вывод
• Всё что применимо к консольному вводу-выводу, справедливо и для
файлового. Это достигается наследованием.
• Классы: fstream (поток для ввода и вывода), ifstream (поток ввода),
ofstream (поток вывода).
• Открытие файла: через конструктор или методом open.
• Проверка успешности открытия файла: преобразование объекта-потока к
булевскому типу.
• Закрытие файла: метод close.
• Проверка достижения конца файла: метод eof.
• Пример программы копирования текстовых файлов.
4.Строковые потоки
• Всё что применимо к консольному вводу-выводу, справедливо и для
строкового. Это достигается наследованием.
• Классы: istringstream (поток для чтения из строки), ostringstream (поток
для записи в строку).
• Для их использования необходимо подключение .
• Получение сформированной строки: метод str() класса ostringstream.
• Пример использования строкового потока вывода.
17) Порождаемые функции в обобщенном программировании.
• Порождаемая функция определяет реализацию алгоритма, независимого
от типов обрабатываемых данных.
• Порождаемая функция – это функция, которая может автоматически
перегружаться.
• Функция становится порождаемой при указании в начале её определения
(объявления): template <список параметров шаблона>
• Указанные в списке имена параметров можно использовать внутри
определения функции.
• Пример объявления, определения порождаемой функции и её
использования.
• В приведённом примере компилятор создаст две версии функции с
соответствующими типами данных.
//пример порождаемой функции swap
#include
//объявление порождаемой функции swap
template void swap(T& first, T& second);
//определение порождаемой функции swap
template void swap(T& first, T& second)
{
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 > class vector;
T – тип предназначенных для хранения в контейнере данных;
Allocator – задаёт распределитель памяти.
• Для большинства случаев распределитель памяти не указывается
(используется стандартный).
• Для vector определены операторы сравнения и оператор индексирования.
• Пример использования контейнера vector : задача заполнения вектора
считанными со стандартного устройства ввода целыми числами до ввода
заданного значения или до достижения конца файла.
Контейнеры. Список
• Список – последовательность элементов данных, оптимизированная для их
вставки и удаления. Обеспечивает представление двунаправленного
линейного списка.
• Спецификация списка:
template < class T, class Allocator = allocator > class list;
T – тип предназначенных для хранения в контейнере данных;
Allocator – задаёт распределитель памяти.
• Для большинства случаев распределитель памяти не указывается
(используется стандартный).
• Для list определены операторы сравнения и отсутствует оператор
индексирования. Обеспечивает доступ к обоим концам списка.
• Пример использования контейнера list: задача сортировки и слияния двух
списков фамилий сотрудников. Тестовая программа должна напечатать
фамилию сотрудника, оказавшегося в начале результирующего списка.
Контейнеры. Ассоциативный контейнер
• В ассоциативном контейнере каждому значению соответствует
уникальный ключ (не обязательно целочисленный).
• Спецификация ассоциативного контейнера:
template < class Key, class T, class Comp = less, class Allocator =
allocator > class map;
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 v(10);
//...
fill(v.begin(),v.end(),1.0);
//...
list l;
reverse_copy(v.begin(), v.end(),back_inserter(l));
list::iterator firstPositive =
find_if(l.begin(),l.end(), bind2nd( greater(), 0 ));
vector v2(10);
//...
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 г. Автор – студент университета
Хельсинки – Линус Торвальд
еще рефераты
Еще работы по разное
Реферат по разное
План курсов повышения квалификации преподавателей на 2010 год
17 Сентября 2013
Реферат по разное
Цена: 4 800 грн
17 Сентября 2013
Реферат по разное
Программа историко краеведческого кружка путешествие по реке времени
17 Сентября 2013
Реферат по разное
Областная целевая программа «Развитие системы обращения с отходами производства и потребления на территории Кировской области» на 2012-2017 годы
17 Сентября 2013