Презентація на тему «Опрацювання помилок»

content: 1Опрацювання помилок

content: 2Типи помилокПомилки, що виникають у комп'ютерній програмі, можуть бути поділені на три основних типа: Design-time (під час проектування), Runtime (під час виконання) і Logic (логічні).Design-time помилки найлегше виявити і виправити. Такого роду помилки виникають при написанні фрагментів коду, який не задовольняє правилам тієї мови, на якій вони пишуться. Їх легко знайти, тому що Visual Studio .NET не тільки вказує на область їх виникнення, але і на конкретний вираз.

content: 3Типи помилокRuntime помилки знайти складніше, тому що VS не дає ніякої допомоги у їх виявленні до безпосереднього виникнення їх у програмі. Вони виникають при спробі виконати недопустиму дію, наприклад, отримати доступ до даних, яких не існує, або до ресурсів, до яких додаток не має прав доступу. При виникненні такого роду помилок, якщо вони не будуть опрацьовані належним чином, додаток може завершитися крахом, або зависнути.Третій тип помилки, логічні, є найбільш небезпечними і складними у виявленні, тому що вони не дають ніякого впливу на працездатність додатку. Наявність у програмі логічних помилок означає тільки те, що ви будете отримувати неправильні результати від роботи програми. Це можуть бути найпростіші помилки при невірній калькуляції, або пункт меню, який ви забули встановити у положення disabled і т.д.

content: 4ВиключенняRuntime помилки в Visual Basic .NET викликають виключення. Виключення – це реакція на помилку, згенеровану додатком. При виникненні виключення з'являється діалог, який сповіщає про помилку з додатковою інформацією. Цей діалог дає можливість користувачу продовжити виконання програми. В рідких випадках це може бути корисним, але частіше за все це не бажано. Продовження виконання програми може посприяти невиправним помилкам, наприклад записати у базу даних невірних (помилкових) даних.

content: 5Приклад помилкиPrivate Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.ClickDim s As Strings = "студент"Button2.Text = s.Substring(10, 1)End SubЦей код намагається відобразити одинадцятий символ рядка s (у рядку тільки 7 символів).

content: 6Характеристика помилкиБуде виведене таке повідомлення:An unhandled exception of type System.ArgumentOutOfRangeException' occurred inmscorlib.dll Additional information: Index and length must refer to a location within the string.Перше, що допомагає нам впевнитися у тому, що це runtime помилка – це слово unhandled. Це означає, що помилка була у рядку, що не входить у блок оброблювача виключень.Ще один цікавий момент, це тип виключення System.ArgumentOutOfRangeException. Важливо знати те, що різні типи помилок поділяються на групи. Це важливо, коли ви реалізуєте механізм опрацювання помилок.Блок “Additional information” («додаткова інформація»), дає нам деяку специфічну інформацію про природу виникнення помилки.

content: 7Опрацювання виключеньОпрацювання помилки з попереднього прикладу:Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.ClickDim s As Strings = "студент"TryButton2.Text = s.Substring(10, 1)CatchButton2.Text = "error"End TryEnd Sub

content: 8Пояснення до опрацювання виключеньЦе той самий код, але вираз, який приводить до помилки розміщено у блоці опрацювання виключень Try…Catch…End Try.Цей блок є прикладом найпростішого оброблювача виключень. Якщо у блоці Try генерується виключення, то програма автоматично переходить у блок Catch.Якщо ніяких виключень не генерується, то програма пропускає блок Catch. При виконанні цього коду, виникає виключення System.ArgumentOutOfRangeException, але програма продовжує виконуватись і не показує ніяких повідомлень. Після виконання властивість Text кнопки Button2 буде мати значення "error".

content: 9Використання об'єкта ехPrivate Sub Button2_Click(ByVal sender As System.Object, _ByVal e As System.EventArgs) Handles Button2.ClickDim s As Strings = "студент"TryButton2.Text = s.Substring(10, 1)Catch ex As ExceptionMsgBox(ex.Message)End TryEnd SubТут виключення генерує об'єкт ех класу Exception. Він дозволяє отримати повну інформацію про виключення. Замість MsgBox у реальній програмі можна вести журнал помилок (LogFile).

content: 10Опрацювання помилки визначеного типуУ прикладі виконується спроба вибрати елемент із ListBox'у lbStates. Якщо у lbStates не вибрано жодного елемента, то генерується виключення System.NullReferenceException.Private Sub Button3_Click(ByVal sender As System.Object, _ByVal e As System.EventArgs) Handles Button3.ClickTryButton3.Text = lbStates.SelectedItem.ToString tttCatch ex As System.NullReferenceExceptionMsgBox("Будь ласка оберіть тему доповіді")Catch ex As ExceptionMsgBox("Some other error: " & ex.Message)End TryEnd Sub

content: 11Пояснення до прикладуЦе виключення опрацьовується спеціальним обробником, який викликає MsgBox із відповідним повідомленням ("Будь ласка оберіть тему доповіді").Якщо відбудеться виключення якогось іншого типу, то воно буде опрацьовано іншим оброблювачем.Зазначте, що в попередньому коді оброблювач специфічного типу виключень розташований перед оброблювачем загального типу. Це визначає послідовність обробки виключень.Також зазначте, що об'єкт ex присутній в кожному оброблювачі. Це є можливим, тому що, ця об'ява є локальною, і область видимості цього об'єкту обмежена відповідним блоком Catch.

content: 12Блок FinallyУ процесі використання структури обробки виключень Try…Catch…End Try виключення обробляється першим релевантним обробником. Після цього програма залишає рамки цієї структури.Іноді потрібно виконати який-небудь код , перед виходом із структури Try…Catch…End Try Наприклад, в наступній програмі зчитується файл і рядок за рядком завантажується до ListBox. Якщо виникає виключення у циклі, то неможливо закрити Streamreader (викликати s.Close()), що може привести до непотрібної втрати ресурсів. Для цього існує спеціальний блок, код якого буде виконаний в будь-якому випадку. Цей блок називається Finally.

content: 13Приклад використання FinallyProtected Sub ReadFromATextFile(ByVal cFilename As String) Dim s As StreamReaderDim cLine As StringDim bDone As Boolean = Falselbresults.Items.Clear()s= New Streamreader(cFilename)TryWhile Not bDonecLine = s.ReadLine()If cLine Is Nothing ThenbDone = TrueElselbresults.Items.Add(cLine)End IfEnd Whiles.Close()Catch ex As ExceptionMsgBox("some error occurred")Finallys.Close()End TryEnd SubТепер в будь-якому випадку Streamreader закриється і ресурси вивільняться.

content: 14Виклик виключеньУ процесі створення власних класів виникає необхідність виклику виключень. Для цього використовується ключове слово Throw. Розробник, що використовує ваш клас, зможе обробляти це виключення. Приклад виклику (спрацьовування виключень)

content: 15Виклик виключеньPrivate FValue As Integer = 0Property Value() As IntegerGetReturn FValueEnd GetSet(ByVal iValue As Integer)If iValue <= FMax ThenFValue = iValueElseFValue = FMaxThrow New OverflowException(“Не можна встановити значення tttProgressBar більше максимально можливого.”)End IfInvalidate()End SetТут викликається виключення  OverflowException з вашими коментарями.