Cамоучитель по VB.NET

         

Отладка объектно-ориентированных программ



Отладка объектно-ориентированных программ всегда начинается с анализа объектных переменных и проверки того, соответствует ли их состояние предполагаемому. Именно по этой причине в 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

Результат работы программы показан на Рисунок 4.11. Конечно, это совсем не то, что мы ожидали получить.



Содержание раздела