Язык программирования C++




Примеры обработки исключительных ситуаций - часть 2


Другим методом разделения различных исключительных ситуаций является создание иерархии классов – по классу на каждый тип исключительной ситуации.

Пример иерархии классов для представления исключительных ситуаций.

Рис. 16.1.  Пример иерархии классов для представления исключительных ситуаций.

В приведенной на рисунке 16.1 структуре классов все исключительные ситуации делятся на ситуации, связанные с работой базы данных (класс DatabaseException ), и внутренние ошибки программы (класс InternalException ). В свою очередь, ошибки базы данных бывают двух типов: ошибки соединения (представленные классом ConnectDbException ) и ошибки чтения (ReadDbException ). Внутренние исключительные ситуации и разделены на нехватку памяти (NoMemoryException )и недопустимые значения (IllegalValException ).

Теперь блок catch может быть записан в следующем виде:

try { }catch (ConnectDbException&e ){ //обработка ошибки соединения с базой данных }catch (ReadDbException&e){ //обработка ошибок чтения из базы данных }catch (DatabaseException&e){ //обработка других ошибок базы данных }catch (NoMemoryException&e){ //обработка нехватки памяти }catch (…){ //обработка всех остальных исключительных //ситуаций }

Напомним, что когда при проверке исключительной ситуации на соответствие аргументу оператора catch проверка идет последовательно до тех пор, пока не найдется подходящий тип. Поэтому, например, нельзя ставить catch для класса DatabaseException впереди catch для класса ConnectDbException – исключительная ситуация типа ConnectDbException совместима с классом DatabaseException (это ее базовый класс), и она будет обработана в catch для DatabaseException и не дойдет до блока с ConnectDbException .

Построение системы классов для разных исключительных ситуаций на стадии описания ошибок – процесс более трудоемкий, приходится создавать новый класс для каждого типа исключительной ситуации. Однако с точки зрения обработки он более гибкий и позволяет писать более простые программы.

Чтобы облегчить обработку ошибок и сделать запись о них более наглядной, описания методов и функций можно дополнить информацией, какого типа исключительные ситуации они могут создавать:




Содержание  Назад  Вперед