0
Обработка ошибок. Исключительные ситуации
Лабораторная работа 2 <ul><li>30 марта </li></ul><ul><li>Основной функционал </li></ul><ul><li>Пользовательский интерфейс ...
Варианты обработки ошибок <ul><li>Код возврата </li></ul><ul><li>Глобальная переменная </li></ul><ul><li>Прекращение выпол...
Объект-результат <ul><li>public XCalculatedCall CalculateAndProcess(XCallInformation a_Call) </li></ul><ul><li>{ </li></ul...
Шаблоны <ul><li>public int[] Find(string a_Needle) </li></ul><ul><li>{ </li></ul><ul><li>if (string.IsNullOrEmpty(a_Needle...
Протоколирование <ul><li>public void RegisterEvent(object a_Sender, Exception a_Excepton, EventType a_EventType) </li></ul...
Минусы исключительных ситуаций <ul><li>Позволяют выявить только одну ошибку (выход из алгоритма после первой ошибки) </li>...
 
CheckResult  <ul><li>public static bool Test(XCheckResult a_Result) </li></ul><ul><li>{ </li></ul><ul><li>return a_Result....
Upcoming SlideShare
Loading in...5
×

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

840

Published on

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
840
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Обработка ошибок"

  1. 1. Обработка ошибок. Исключительные ситуации
  2. 2. Лабораторная работа 2 <ul><li>30 марта </li></ul><ul><li>Основной функционал </li></ul><ul><li>Пользовательский интерфейс с заглушками </li></ul><ul><li>Отчетность: Схемы классов, реализация, шаблоны </li></ul>
  3. 3. Варианты обработки ошибок <ul><li>Код возврата </li></ul><ul><li>Глобальная переменная </li></ul><ul><li>Прекращение выполнения программы </li></ul><ul><li>Возвращение специального объекта-результата </li></ul><ul><li>Исключительные ситуации </li></ul>
  4. 4. Объект-результат <ul><li>public XCalculatedCall CalculateAndProcess(XCallInformation a_Call) </li></ul><ul><li>{ </li></ul><ul><li>XCalculationResult result = Calculate(a_Call); </li></ul><ul><li>if (!result.Success) </li></ul><ul><li>{ </li></ul><ul><li>XBillingErrors.Instance.Register(a_Call, result.Error); </li></ul><ul><li>return null; </li></ul><ul><li>} </li></ul><ul><li>return result.CalculatedCall; </li></ul><ul><li>} </li></ul>
  5. 5. Шаблоны <ul><li>public int[] Find(string a_Needle) </li></ul><ul><li>{ </li></ul><ul><li>if (string.IsNullOrEmpty(a_Needle)) </li></ul><ul><li>{ </li></ul><ul><li>throw new ArgumentNullException(&quot;Строка поиска не может быть пустой.&quot;); </li></ul><ul><li>} </li></ul><ul><li>List<int> result = new List<int>(); </li></ul><ul><li>int startPosition = 0; </li></ul><ul><li>while(true) </li></ul><ul><li>{ </li></ul><ul><li>int index = m_Haystack.IndexOf(a_Needle, startPosition); </li></ul><ul><li>if (index == -1) </li></ul><ul><li>{ </li></ul><ul><li>break; </li></ul><ul><li>} </li></ul><ul><li>result.Add(index); </li></ul><ul><li>startPosition = index + 1; </li></ul><ul><li>} </li></ul><ul><li>return result.ToArray(); </li></ul><ul><li>} </li></ul>
  6. 6. Протоколирование <ul><li>public void RegisterEvent(object a_Sender, Exception a_Excepton, EventType a_EventType) </li></ul><ul><li>{ </li></ul><ul><li>string message = &quot;&quot;; </li></ul><ul><li>Exception exception = a_Excepton; </li></ul><ul><li>while (exception != null) </li></ul><ul><li>{ </li></ul><ul><li>message += exception.Message + &quot; (&quot; + exception.GetType().FullName + &quot;) &quot; + </li></ul><ul><li>exception.StackTrace + &quot; &quot;; </li></ul><ul><li>exception = exception.InnerException; </li></ul><ul><li>} </li></ul><ul><li>RegisterEvent(a_Sender, a_Excepton.Message + &quot; (&quot; + a_Excepton.GetType().FullName + &quot;)&quot; , message, a_EventType); </li></ul><ul><li>} </li></ul>
  7. 7. Минусы исключительных ситуаций <ul><li>Позволяют выявить только одну ошибку (выход из алгоритма после первой ошибки) </li></ul><ul><li>Проверка производится только во время выполнения алгоритма </li></ul><ul><li>Могут снижать производительность </li></ul>
  8. 9. CheckResult <ul><li>public static bool Test(XCheckResult a_Result) </li></ul><ul><li>{ </li></ul><ul><li>return a_Result.IsSucceeded; </li></ul><ul><li>} </li></ul><ul><li>public static void Assert(XCheckResult a_Result) </li></ul><ul><li>{ </li></ul><ul><li>if (a_Result.IsSucceeded) </li></ul><ul><li>{ </li></ul><ul><li>return; </li></ul><ul><li>} </li></ul><ul><li>if (a_Result.Exception != null) </li></ul><ul><li>{ </li></ul><ul><li>throw a_Result.Exception; </li></ul><ul><li>} </li></ul><ul><li>throw new ApplicationException(a_Result.Message); </li></ul><ul><li>} </li></ul><ul><li>public static XCheckResult Success() </li></ul><ul><li>{ </li></ul><ul><li>return new XCheckResult(true, &quot;&quot;, null); </li></ul><ul><li>} </li></ul><ul><li>public static XCheckResult Fail(string a_Message) </li></ul><ul><li>{ </li></ul><ul><li>return new XCheckResult(false, a_Message, null); </li></ul><ul><li>} </li></ul><ul><li>public static XCheckResult Fail(Exception a_Exception) </li></ul><ul><li>{ </li></ul><ul><li>return new XCheckResult(false, a_Exception.Message, a_Exception); </li></ul><ul><li>} </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×