Я проектирую свой собственный ОО-язык и радостно шел вперед, пока не наткнулся на исключения.Мне кажется, что исключения нарушают инкапсуляцию.
Например, если класс A имеет объект класса B, B имеет C, а C имеет X, что вызывает исключение для A, код в A не должентолько знать о X, но также B и C, чтобы справиться с этим правильно.Вы можете сказать это, потому что если вы замените C на D, обработчик исключения должен будет измениться, чтобы извлечь соответствующую информацию из стека вызовов.часть API класса, чтобы они передавали обратно в стек вызовов по одному вызывающему.И они должны повторно прервать исключение в своих собственных терминах.
Вот пример.Тренд - это класс для анализа статистических трендов, в котором есть метод наклона для расчета наклона линии из двух точек.
method slope
given
Point 1st
Point 2nd
returns
Number m
except
when infinite slope
m gets
( 2nd's y - 1st's y ) / ( 2nd's x - 1st's x )
except
when any divide by zero
declare infinite slope
when overflow of ( 2nd's y - 1st's y )
declare infinite slope
when overflow of ( 2nd's x - 1st's x )
instead do m gets 0
when overflow of ( 2nd's y - 1st's y ) / ( 2nd's x - 1st's x )
declare infinite slope
when any underflow
instead use 0
end of method slope
Есть ли лучший способ сделать это?