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

  • 786 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
786
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
9
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Обработка ошибок. Исключительные ситуации
  • 2. Лабораторная работа 2
    • 30 марта
    • Основной функционал
    • Пользовательский интерфейс с заглушками
    • Отчетность: Схемы классов, реализация, шаблоны
  • 3. Варианты обработки ошибок
    • Код возврата
    • Глобальная переменная
    • Прекращение выполнения программы
    • Возвращение специального объекта-результата
    • Исключительные ситуации
  • 4. Объект-результат
    • 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;
    • }
  • 5. Шаблоны
    • 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();
    • }
  • 6. Протоколирование
    • public void RegisterEvent(object a_Sender, Exception a_Excepton, EventType a_EventType)
    • {
    • string message = &quot;&quot;;
    • Exception exception = a_Excepton;
    • while (exception != null)
    • {
    • message += exception.Message + &quot; (&quot; + exception.GetType().FullName + &quot;) &quot; +
    • exception.StackTrace + &quot; &quot;;
    • exception = exception.InnerException;
    • }
    • RegisterEvent(a_Sender, a_Excepton.Message + &quot; (&quot; + a_Excepton.GetType().FullName + &quot;)&quot; , message, a_EventType);
    • }
  • 7. Минусы исключительных ситуаций
    • Позволяют выявить только одну ошибку (выход из алгоритма после первой ошибки)
    • Проверка производится только во время выполнения алгоритма
    • Могут снижать производительность
  • 8.  
  • 9. 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, &quot;&quot;, 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);
    • }