Обработка ошибок

Post on 20-Jun-2015

834 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Лекция Михаила Гуренкова по обработке ошибок в рамках курса по ООП. Каф. Вычислительная математика и программирование, МАИ.

TRANSCRIPT

Обработка ошибок.Исключительные ситуации

Лабораторная работа 2

30 марта

1. Основной функционал

2. Пользовательский интерфейс с заглушками

3. Отчетность: Схемы классов, реализация, шаблоны

Варианты обработки ошибок

• Код возврата

• Глобальная переменная

• Прекращение выполнения программы

• Возвращение специального объекта-результата

• Исключительные ситуации

Объект-результатpublic XCalculatedCall CalculateAndProcess(XCallInformation a_Call){ XCalculationResult result = Calculate(a_Call);

if (!result.Success) { XBillingErrors.Instance.Register(a_Call, result.Error); return null; }

return result.CalculatedCall;}

Шаблоныpublic int[] Find(string a_Needle){ if (string.IsNullOrEmpty(a_Needle)) { throw new ArgumentNullException("Строка поиска не может быть пустой."); } List<int> result = new List<int>(); int startPosition = 0; while(true) { int index = m_Haystack.IndexOf(a_Needle, startPosition); if (index == -1) { break; } result.Add(index); startPosition = index + 1; } return result.ToArray();}

Протоколированиеpublic void RegisterEvent(object a_Sender, Exception a_Excepton,

EventType a_EventType){

string message = "";Exception exception = a_Excepton;while (exception != null){

message += exception.Message + " (" + exception.GetType().FullName + ")\r\n" +

exception.StackTrace + "\r\n";exception = exception.InnerException;

}RegisterEvent(a_Sender, a_Excepton.Message + " (" + a_Excepton.GetType().FullName + ")" , message, a_EventType);

}

Минусы исключительных ситуаций• Позволяют выявить только одну ошибку

(выход из алгоритма после первой ошибки)

• Проверка производится только во время выполнения алгоритма

• Могут снижать производительность

CheckResult public static bool Test(XCheckResult

a_Result){ return a_Result.IsSucceeded;}

public static void Assert(XCheckResult a_Result)

{ if (a_Result.IsSucceeded) { return; }

if (a_Result.Exception != null) { throw a_Result.Exception; }

throw new ApplicationException(a_Result.Message);

}

public static XCheckResult Success(){ return new XCheckResult(true, "", null);}

public static XCheckResult Fail(string a_Message)

{ return new XCheckResult(false,

a_Message, null);}

public static XCheckResult Fail(Exception a_Exception)

{ return new XCheckResult(false,

a_Exception.Message, a_Exception);}

top related