嗔秤戻幣�哉膵�云利匈嬉蝕湊蛸賜�塋床四衲���萩晦編報炎嘔囚^泡仟 ̄云利匈�《超噌�殻窟�嵌虜隆輓麈觚翹瀘卉韮�仍仍�。� 烏御危列
浪慕利 卦指云慕朕村 厘議慕尺 厘議慕禰 TXT畠云和墮 序秘慕杏 紗秘慕禰

VB2008貫秘壇欺娼宥(PDF鯉塀哂猟井)-及76嫗

梓囚徒貧圭�鮗� ○ 賜 ★ 辛酔堀貧和鍬匈��梓囚徒貧議 Enter 囚辛指欺云慕朕村匈��梓囚徒貧圭�鮗� ● 辛指欺云匈競何��
!!!!隆堋響頼��紗秘慕禰厮宴和肝写偬堋響��



rs  

and private methods of other instances of that type。 


´´´´´´´´´´´´´´´´´´´´´´Page 230´´´´´´´´´´´´´´´´´´´´´´´

208       CH AP T E R   8   *    L E A R N IN G   AB OU T   CO M P O N E N TO R IE N T E D  AR C HI TE CT U R E 



                Once the data members of the item have been assigned�察�the item is integrated into the list�察 �

           by redirecting the _prev property of the next object ��if it is not Nothing���察�and then assigning the  

           local _next property to the object to be inserted。 

                The Remove�┌� method does the same as  Insert�┌��察�but in reverse。 The first step is to redirect  

           the _next and _prev properties of the previous and next objects�察�assuming that they are not  

           Nothing。 And then the object to be removed has its _next and _prev properties assigned to Nothing。 



           *Note  The declaration of PrevItem and NextItem is a mon architecture where data members can be  

           read�察�but to assign them�察�you need to use methods。 Using read´only properties is one way to make sure that  

           the internal state cannot be corrupted�察�if you must expose the internal state。 



           Testing the Linked List 



           BaseLinkedListItem is a core class and serves a utility purpose。 This makes the class eligible to  

           be declared in the kernel or a definitions assembly。 As the class is a core class�察�it means you  

           need a more exhaustive testing framework to ensure that there will be no problems。 In this  

           section�察�we will go through one test that demonstrates what you should be testing for and how  

           you should be testing a core class。 

                BaseLinkedListItem is declared as MustInherit and needs an implementation。 The purpose of  

           the implementation is to give us enough information on the state and context of the object。 In this  

           case�察�we want to define an object that tests every part of the class BaseLinkedListItem。 If you have  

           ever seen pictures of a test car tire hooked up to dozens of wires�察�then you will understand what the  

           test class needs to do。 Following is a sample implementation�察�placed in the TestLightingSystem  

           project。 Remember to include a reference to  LibLightingSystem ��right´click References in  

           TestLightingSystem and select Add Reference and then Projects  LibLightingSystem��。  



           。 。 。 

           Imports LibLightingSystem 



           Class LinkedItem  

               Inherits BaseLinkedListItem 



               Private _identifier As String 



               Public Sub New��ByVal identifier As String�� 

                   _identifier = identifier 

               End Sub 



               Public ReadOnly Property Identifier As String 

                   Get  

                       Return _identifier 

                   End Get 

               End Property 


´´´´´´´´´´´´´´´´´´´´´´Page 231´´´´´´´´´´´´´´´´´´´´´´´

                            C H AP TE R   8   *    L E AR N IN G   AB O U T   CO M P O N E N T O R IE N TE D   A R CH I TE C TU R E 209 



    Public Overrides Function ToString�┌� As String 

        Dim buffer As String 

        buffer = ;Me�──�& _identifier & ;��; 

        If NextItem IsNot Nothing Then 

            buffer = buffer & ; next�──�& _ 

                     DirectCast��MyBase。NextItem�察�LinkedItem��。Identifier & ;��; 

        Else  

            buffer = buffer & ; next��Nothing��; 

        End If 

        If PrevItem IsNot Nothing Then 

            buffer = buffer & ; prev�──�& _ 

                     DirectCast��MyBase。PrevItem�察�LinkedItem��。Identifier & ;��; 

        Else 

            buffer = buffer & ; prev��Nothing��; 

        End If 

        Return buffer 

    End Function 

End Class 



     The  LinkedItem class has a single data member declaration�察�_identifier�察�which is used  

to identify the instance。 The test code will call the Insert�┌� and Remove�┌� methods�察�and then  

generate a visual representation of the linked list。 The visual representation is used to under

stand what the problem might be if anything goes wrong。 You will not write tests against the  

visual representation because that would overplicate the testing。 

     To generate a visual representation of the object�察�the ToString�┌� method is overridden。 By  

default�察�all objects have a ToString�┌� implementation�察�which does absolutely nothing other  

than spit out the identifier of the object reference。 To make ToString�┌� do something useful�察 �

you need to override it。 In the example�察�ToString�┌� will generate a buffer that contains the  

LinkedItem identifier and the next and previous object identifiers。 These three pieces of infor

mation tell you the structure of the linked list。 

     The next step is to write a test in TestLightingSystem¨s Module1。vb that verifies that the  

Insert�┌� method works properly�察�and it is implemented as follows�此�



    Module Module1 

        Sub Main�┌� 

            TestInsert�┌� 

        End Sub 



        Public Sub TestInsert�┌�  

            Console。WriteLine�─�**************;�� 

            Console。WriteLine�─�TestInsert�此�Start;�� 

            Dim item1 As LinkedItem = New LinkedItem�─�item1;�� 

            Dim item2 As LinkedItem = New LinkedItem�─�item2;�� 

            Dim item3 As LinkedItem = New LinkedItem�─�item3;�� 



            Dim toString As String = item1。ToString�┌� 

            Console。WriteLine��toString�� 

            If ��item1。NextItem IsNot Nothing�� OrElse _ 


´´´´´´´´´´´´´´´´´´´´´´Page 232´´´´´´´´´´´´´´´´´´´´´´´

210      CH AP T E R   8   *    L E A R N IN G   AB OU T   CO M P O N E N TO R IE N T E D  AR C HI TE CT U R E 



                         ��item1。PrevItem IsNot Nothing�� Then  

                          Throw New Exception�─�_ 

                              ;TestInsert�此�Empty structure is incorrect;�� 

                      End If 



                      item1。Insert��item2�� 

                      toString = item1。ToString�┌� 

                      Console。WriteLine��toString�� 

                      If ��item1。NextItem IsNot item2�� OrElse _ 

                         ��item1。PrevItem IsNot Nothing�� Then 

                          Throw New Exception�─�_ 

                              ;TestInsert�此�Item 1´〃Item2 structure is incorrect;�� 

                      End If 

                      toString = item2。ToString�┌� 

                      Console。WriteLine��toString�� 

                      If ��item2。NextItem IsNot Nothing�� OrElse _ 

                         ��item2。PrevItem IsNot item1�� Then  

                          Throw New Exception�─�_ 

                              ;TestInsert�此�Item 2´〃Item1 structure is incorrect;�� 

                      End If 

                      item2。Insert��item3�� 

                      toString = item2。ToString�┌� 

                      Console。WriteLine��toString�� 

                      If ��item2。PrevItem IsNot item1�� OrElse _ 

                         ��item2。NextItem IsNot item3�� Then  

                          Throw New Exception�─�_ 

                              ;TestInsert�此�Item2´〃Item1�察�Item3 structure is incorrect;�� 

                      End If 

                      toString = item3。ToString�┌� 

                      Console。WriteLine��toString�� 

                       If ��item3。PrevItem IsNot item2�� OrElse _ 

                          ��item3。NextItem IsNot Nothing�� Then  

                          Throw New Exception�─�_ 

                              ;TestInsert�此�Item3´〃Item2�察�structure is incorrect;�� 

                      End If 



                      toString = item1。ToString�┌� 

                      Console。WriteLine��toString�� 

                      toString = item2。ToString�┌� 

                      Console。WriteLine��toString�� 

                      toString = item3。ToString�┌� 

                      Console。WriteLine��toString�� 

       
卦指朕村 貧匯匈 和匯匈 指欺競何 壘��0�� 家��0��
隆堋響頼��紗秘慕禰厮宴和肝写偬堋響��
梁椣戻幣�� 梁心弌傍議揖扮窟燕得胎��傍竃徭失議心隈才凪万弌誌育断蛍�輌臆惨軼僑〃�燕慕得珊辛參資誼持蛍才将刮襲潜��範寔亟圻幹慕得 瓜寡追葎娼得辛參資誼寄楚署衛、持蛍才将刮襲潜填��