Отладка объектно-ориентированных программ
Отладка объектно-ориентированных программ всегда начинается с анализа объектных переменных и проверки того, соответствует ли их состояние предполагаемому. Именно по этой причине в VS IDE предусмотрены средства для получения информации о закрытых полях ваших классов – окна просмотра (Watch) и локальных переменных (Locals). Применение этих средств отладки будет рассмотрено на простом примере.
Допустим, мы решили перейти от связанного списка к двусвязному. Проще говоря, в каждом элементе должна храниться не одна ссылка, а две – на следующий и на предыдущий элемент списка, чтобы перебор мог осуществляться не только в прямом, но и в обратном направлении. Ниже приведен первый вариант класса двусвязного списка, содержащий ошибку. На этом примере будут продемонстрированы основные приемы отладки объектно-ориентированных программ:
1 Option Strict On 2 Module Modulel 3 Sub Main() 4 Dim alinkList As New LinkedList("first link") 5 Dim aLink As LinkedList.Link 6 aLink = aLinklist.MakeLink(aLinkList.GetFirstLink, "second link") 7 aLink = aLinkList.MakeLinktaLink, "third link") 8 Console.WriteLine(aLinkList.GetFirstLink.MyData) 9 aLink = aLinkList.GetNextLink(aLinkList.GetFirstLink) 10 Console.Wri teLine(aLi nk.MyData) 11 Console.WriteLineCaLink.NextLink.MyData) 12 Console. ReadUne() 13 End Sub 14 Public Class LinkedList 15 Private m_CurrentLink As Link 16 Private nfFirstUnk As Link 17 Sub New(ByVal theData As String) 18 m_CurrentLink = New Link(theData) 19 m_FirstLink = m CurrentLink 20 End Sub 21 Public Function MakeLinktByVal currentLink As Link. ByVal _ 22 theData As String) As Link 23 m_CurrentLink = New LinkCcurrentLink.theData) 24 Return m_CurrentLink 25 End Function 26 Public Readonly Property GetNextLink(ByVal aLink As Link)_ 27 As Link 28 Get 29 Return aLink.NextLink() 30 End Get 31 End Property 32 Public Readonly Property GetCurrentLink() As Link 33 Get 34 Return m_CurrentLink 35 End Get 36 End Property 37 Public Readonly Property GetFirstLink() As Link 38 Get 39 Return m_FirstLink 40 End Get 41 End Property 42 43 ' Вложенный класс для ссылок 44 Friend Class Link 45 Private m_MyData As String 46 Private m_NextLink As Link 47' Private m_ParentLink As Link 48 Friend Sub New(ByVal myParent As Link. ByVal theData As String) 49 m_MyData = theData 50 m_Parentlink = Me 51 m_NextLink = myParent 52 End Sub 53 Friend Sub New(ByVal theData As String) 54 m_MyData = theData 55 End Sub 56 Friend Readonly Property MyData() As String 57 Get 58 Return m_MyData 59 End Get 60 End Property 61 Friend Readonly Property NextLink() As Link 62 Get 63 Return m_NextLink 64 End Get 65 End Property 66 End Class 67 End Class 68 End Module