
- •1. Признаки сложных систем. Сложность, присущая программному обеспечению.
- •2. Компоненты объектно-ориентированного подхода.
- •3. Объекты и классы с точки зрения объектно-ориентированного проектирования.
- •4. Модели и диаграммы, используемые в объектно-ориентированном подходе.
- •5. Техника отладки.
- •6. Работа с многофайловыми проектами. Использование включаемых файлов.
- •9. Простое наследование. Контроль доступа к атрибутам класса.
- •10. Виртуальные функции (вф) и абстрактные классы.
- •11. Множественное и виртуальное наследование.Множественное наследование
- •12 Перегрузка операций
- •13. Шаблоны функций, макросы, inline-функции.
- •14. Шаблоны классов.
- •15. Обработка исключительных ситуаций, структурная обработка исключений.
- •16. Пространства имён. Кратко о механизме пространства имен
- •Зачем нужен механизм пространства имен?
- •Имитация средствами языка Си
- •Правило составления имени
- •Недостатки
- •17 Строки и потоки.
- •18.Стандартная библиотека: Контейнеры
- •19 Реализация устойчивости объектов средствами mfc.
- •20. Структура Windows-приложения WinApi
- •21. Структура Windows-приложения, использующего библиотеку mfc
- •Документы и их представление
- •22. Обработка сообщений
- •23. Контекст устройства
- •24.Объекты gdi
- •25.Использование контекста отображения в памяти.
- •26.Режимы отображения.
- •27.Работа с меню. Обработка сообщений.
- •28.Работа с диалогами. Обработка сообщений.
- •29. Работа с полями ввода и кнопками.
- •30. Работа со списками и выпадающими списками. Работа со списком
- •Работа с комбинированном списком
- •Инициализация
- •Операции со строками
- •31. Классы CimageList и CtreeCtrl. Класс cImageList
- •Изменение содержимого списка
- •32. Классы CimageList и ClistCtrl. Класс cImageList
- •Изменение содержимого списка
- •Создание просмотра списка
- •Работа со столбцами
- •Функции для работы со списком в целом
- •Рабочие области просмотра списка
- •Поиск и сортировка записей
- •33. Классы CprogressCtrl, cRichEdit Ctrl, CsliderCtrl, cSpinButton Ctrl.
- •34. Классы cPropertySheet и cPropertyPage.
- •35. Передача информации в диалог и обратно.
- •36. Работа со стандартными диалогами.
- •37.Обработка сообщений от клавиатуры и мыши(wm_char,wm_keYxxx,wm_xButtoNxxx,
- •38 Таймеры, использование времени простоя программы и локального цикла обработки сообщений.
- •39. Библиотеки динамической компоновки. Явная и неявная загрузка dll.
- •Согласование экспортируемых элементов с импортируемыми
14. Шаблоны классов.
Шаблон: явл. механизмом параметризации определения класса или ф-ии произвольным типом. Код, реализующий шаблон, идентичен для всех типов параметров. Абстрактн. класс определяет интерфейс. Большая часть кода различных реализаций абстрактного класса может совместно использ-ся в иерархии классов, и большинство фрагментов, использ-щих абстрактный класс, не зависит от его реализации. С т зрения проектирования оба подхода близки. Т. к. оба метода позволяют выразить алгоритм один раз и использовать его со множеством типов, их вместе называют полиморфными. Для того чтобы их различать: то, что обеспечивает ВФ наз. полиморфизмом времени выполнения, а то, что предоставляют шаблоны – полиморфизмом времени компиляции или параметр-им полиморфизмом. Какой метод выбрать? Если между объектами не требуется иерархическая зависимости, лучше использовать их в качестве аргументов шаблонов. Если фактические типы этих объектов не известны во время компиляции, их лучше представлением явл. классы, производные от общего абстрактного класса. Если целью явл. Эфф-ть на этапе выполнения, то есть большое значение имеет встраивание операций, следует использовать шаблоны. Класс или шаблон класса может иметь члены, кот. сами явл-ся шаблонами. Шаблон класса обычно воспринимается как спецификация того, как должны создаваться конкретные типы. Реализация шаблона явл-ся механизмом генерации необходимых типов на основе спецификации пользователя. Поэтому шаблон класса часто называют генератором типов
15. Обработка исключительных ситуаций, структурная обработка исключений.
Понятие исключения (exception) введено для генерации в системе сообщения об ошибке. Идея: ф-я, обнаружившая проблему, кот она не знает, как решать, генерирует (throw) исключение в надежде, что вызывающий модуль знает, что делать в этой ситуации. Ф-я, кот собирается обрабатывать ошибку, может объявить, что она будет перехватывать (catch) исключения данного типа. конструкция catch(/…./){//…..} наз-ся обработчиком исключений. Она может использ-ся только после блока, кот начин-ся со слова try, или сразу после другого обработчика. В скобках нах-ся объявление, кот использ-ся аналогично объявлению аргументов ф-ии. Т.е. оно указывает тип объектов, кот м. б. перехвачены этим обработчиком, и (необязательно) присваивает имена перехватываемым объектам.
Пример с классом vector из стандартной библиотеки, кот. по умолчанию не обеспечивает проверку диапазона:
Void f() { int i=phone_book[1001].number;
//1001-вне предела диапазона /…..}
Такое присваивание поместит в i к-н случайное значение, а не выдаст сообщение об ошибке.
Ф-я at – это операция индексирования вектора (доступ к элементу вектора по индексу), кот генерирует исключения типа out_of_range, если ее аргумент находится вне пределов диапазона вектора. Обращение вне границ диапазона сгенерирует исключение, кот пользователь сможет перехватить.
Одним из способов минимизации сюрпризов от исключений явл использование main() с блоком Try в качестве тела ф-ии:
Int main() try{//код проги}
catch(out_of_range){cerr<<”выход за пределы диапазона \n”; } Catch(…){cerr<<”сгенерировано неизвестное исключение \n;”} ‘это обеспечит обработчик исключений по умолчанию. Значит, если сообщение об исключении не перехвачено, то оно запишется в стандартный поток диагностики ошибок cerr. Если обработчика не нашлось, то возбужд-ся обработчик Enexpected.
Auto_ptr –шаблон <My class> р =new My class //(для динамических объектов):
Структурная обработка исключений: Исключение: Это событие, кот не ожидалось. Исключение, возбуждаемое процессором назыв-ся аппаратным, ОС или прикладной прогой – программное.
Синтаксис обработчика исключений таков:
__try{//защищенный блок}
__except(фильтр исключений) {//обработчик исключений}
Внутри блока try вып-ся какая-то операция, приводящая к исключению, процессор возбуждает исключение. Тогда ОС ищет начало блока except, и проверяет выражение указанное в качестве фильтра исключения. Если фильтр исключений определен как еxception_execute_handler, то с-ма знает как обработать это исключение: управление передается коду внутри блока except (коду обработчика исключений). После его выполнения с-ма считает исключение обработанным и разрешает проге продолжить работу. Этот механизм позволяет приложениям перехватывать ошибки, обрабатывать их и продолжать выполнение. Если как exeptiom_continue_search, то с-ма должна перейти к предыдущему блоку try, кот. соответ-ет блок except обработать его фильтр, т.е. с-ма должна искать дополнит фильтры исключений, продвигаясь вверх по дереву вызовов, если же все фильтры вернут этот идентификатор, то с-ма получит необработанное исключение; если exeption_continue_executiom: обнаружив такое значение выражения в фильтре, с-ма возвращается к инструкции, вызвавшей исключение и пытается выполнить ее снова.
Примеры предопределенных идентификаторов исключений: 1.исключения связанные с памятью. 2.исключения связанные с обработкой самих исключений (если фильтр исключений вернул непредусмотренное значение); 3. исключения связанные с отладкой; 4. исключения связанные с операциями над целыми числами; 5.исключения связанные с операциями над вещественными числами. Рассмотренные выше исключения относятся к аппаратным, когда поцессор перехватывает события и возбуждает исключения. Существует возможность самостоятельного генерирования исключений, например это делается с пом семейств Heap ф-ий. Они предлагают разработчику возможность выбора, обычно когда их вызовы закан-ся неудачно, они возвращают NULL, сообщая об ошибке. Но возможно передать флаг heap_generate_exceptions. И тогда, при неудачном вызове хип-ф-я не станет возварщать NULL, а вместо этого возбудит программное исключение STATUS_NO_MEMORY.