Языки программирования. Практический сравнительный анализ


Языки программирования. Практический сравнительный анализ - стр. 267


В этом режиме и действуют упоминавшиеся "априорные правила поведения исполнителя". Рассмотрим их.

 

4.21.2.2. Обработка исключений

В режиме обработки исключения существенно используется динамическая структура программы. Другими словами, конкретные действия исполнителя зависят от динамической цепочки вызовов, ведущей к программному конструкту, в котором возникло исключение. Дело в том, что с каждым исключением может быть связана серия так называемых реакций на исключение, расположенных в различных программных конструктах. В современных ЯП принят принцип динамического выбора реакции - всегда выбирается реакция на возникшее исключение, динамически ближайшая к месту "происшествия".

Например, рассмотрим программу вида

procedure P is

       ошибка : exception ;

       procedure R ; - - предварительное определение процедуры R

       procedure Q is

       begin

         R ; - - вызов процедуры R ;

         . . .

         . . . - - (1)

       exception

         . . .

         when ошибка => PUT("ОШИБКА в Q") ; - - реакция на

                                            - - исключение "ошибка"

         . . .  

       end Q ;

       procedure R is

       begin

         . . . - - (2)

       end R ;

     begin

         . . . - - (3)

         Q ;   - - вызов процедуры Q

         . . .

     exception

         . . .

       when ошибка => PUT("ОШИБКА в P") ; - - еще одна реакция

                                          - - на то же исключение

     end P ;

Если исключение "ошибка" возникает на месте (3), то сработает реакция на это исключение в теле Р и будет напечатано "ошибка в Р". Если это же исключение возникнет при вызове процедуры Q, то будет напечатано "ошибка в Q".

Пока подбор реакции как по динамической цепочке вызовов, так и по статической вложенности конструктов дал одинаковые результаты.

А вот  когда исключение "ошибка" возникает на месте 2 (при вызове процедуры R в теле процедуры Q), отличие принципа динамического выбора от статического проявляется наглядно.


- Начало -  - Назад -  - Вперед -