小牛电子书 > 其他电子书 > VB2008从入门到精通(PDF格式英文版) >

第23章

VB2008从入门到精通(PDF格式英文版)-第23章

小说: VB2008从入门到精通(PDF格式英文版) 字数: 每页3500字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






     4。  Rename the file Translator。vb。 



     5。  Click Add to create the file and add it to your project。 



     Notice how quickly you managed to create a Visual Basic class using the IDE。 The speed of  

creating a class file lets you focus on adding source code to the file。 But do not be misled into  

believing that by creating a number of class files; your code will automatically work and be a  

masterpiece。 You still need to think about which files; projects; classes; and tests to create。 



Translating Hello 



The first feature we will implement is the translation of the text “hello。” Since “hello” is English;  

the first translation will be English to German。 The following is the code to implement this  

feature。 It is added to the Translator。vb file in the  LanguageTranslator project。 



Public Class Translator 

    Public Shared Function TranslateHello(ByVal input As String) As String 

        If (input。pareTo(〃hello〃) = 0) Then 

            Return 〃hallo〃 

        ElseIf (input。pareTo(〃allo〃) = 0) Then 

            Return 〃hallo〃 

        End If 

        Return 

    End Function 



End Class 



     Translator is the main class that is exposed to other ponents or pieces of source code。  

Think of it as the identifier of the black box。 The black box has a single method: TranslateHello()。  

TranslateHello() is used to convert the French “allo” and the English “hello” to the German  

“hallo。” The method’s input is a String type; which is a reference object type。  

     In the implementation of TranslateHello(); we pare the contents of the input buffer  

to the parameter  〃hello〃。 If the parison is equal; meaning that the strings are equal; 0 is  

returned。 As you’ll learn in the “Investigating the String Type” section; String is a class that can  

be used to create objects; and objects typically have methods。 One of the String type’s methods  

is pareTo()。 The caller of TranslateHello does not know how you managed to translate one  

word to another language。 The caller actually does not care; it cares only that the method behaves  

as expected。  

     The abstract intent of the TranslateHello() method is to accept some text and; if the text  

is matched; return a German “hallo。” 



Creating the Test Application 



Without questioning the abstract intent; the written code needs some testing。 The test code is  

added to the test application; which is the project TestLanguageTranslator。  

     The following code is added to the Module1。vb file。 Remember to import the  

LanguageTranslator namespace; otherwise; the test code will not pile。 


…………………………………………………………Page 76……………………………………………………………

54        CH AP T E R   3   ■    L E A R N IN G   AB OU T   ST R I N G   M A N I P U L AT IO N S   



          Imports LanguageTranslator 



          Module Module1 

              Private Sub TestTranslateHello() 

                  If (Translator。TranslateHello(〃hello〃)。pareTo(〃hallo〃)  0) Then 

                      Console。WriteLine(〃hello to hallo test failed〃) 

                  End If 

                  If (Translator。TranslateHello(〃allo〃)。pareTo(〃hallo〃)  0) Then 

                      Console。WriteLine(〃allo to hallo test failed〃) 

                  End If 

                  If (Translator。TranslateHello(〃allosss〃)。pareTo(〃〃)  0) Then 

                      Console。WriteLine(〃Verify nontranslated word test failed〃) 

                  End If 

                  If (Translator。TranslateHello(〃  allo〃)。pareTo(〃hallo〃)  0) Then 

                      Console。WriteLine(〃Extra whitespaces allo to hallo test failed〃) 

                  End If 

              End Sub 



              Sub Main() 

                  TestTranslateHello() 

                  Console。ReadKey() 

              End Sub 



          End Module 



               The source code contains four tests。 Each calls the method TranslateHello() with some  

          input and receives the output。 The test happens when the output is verified against an expected  

          result。 The verification tests use the pareTo() function to test for correct translation。  

               Notice the third test: 



                  If (Translator。TranslateHello(〃allosss〃)。pareTo(〃〃)  0) Then 

                      Console。WriteLine(〃Verify nontranslated word test failed〃) 

                  End If 



               This test expects an explicit failure。 You need to write tests that expect to fail。 Successful  

          tests that are meant to fail ensure that your code does not generate false positives。 A false positive  is  

          when your code is supposed to fail and it does not。 

               The tests are within a method that needs to be called from the Main() method; as in the  

          following example: 



              Sub Main() 

                  TestTranslateHello() 

                  Console。ReadKey() 

              End Sub 



               If you pile and run the tests; you will find that one of the tests fails。 The failing test is  

          the fourth one; which attempts to translate a word that has whitespace。 Whitespace is space  

          that we humans don’t notice; but is necessary to distinguish words; sentences; and so on。 Before  


…………………………………………………………Page 77……………………………………………………………

                                              CH AP T E R   3   ■    L E AR N IN G   AB O U T   ST R I N G   M A N I PU L A TI O N S  55 



we can solve the whitespace problem; we need to determine which part of the application is  

not working properly。  



Answering the Question of Responsibility 



The whitespace problem is an interesting one。 The caller explicitly put in the extra spaces; but  

is the whitespace a bug; or is it data that is passed in incorrectly? 

      The problem can be defined in the context of reasonable usage。 Imagine that you’ve just  

bought a car and you’re driving it on the highway。 If the car breaks down; the warranty will be  

in effect and cover the costs of the car repair。 Now imagine the situation where you think you  

are one of the Dukes from the Dukes of Hazzard。 And being a Duke; you drive your new car as  

fast as you can and then perform a flying jump。 The car will jump into air; which looks quite  

spectacular; but then the car lands。 After that; the shocks collapse; and the car cannot be driven  

any further。 Even though the car is brand new; the Duke did not use the car as envisioned by  

the car manufacturer; and thus invalidates the warranty。 

      Getting back to the translation ponent; it exposes the method TranslateHello() and  

has responsibilities。 And the caller of TranslateHello() has the responsibility of being reason

able about what can be expected to be translated。 So; is whitespace sent by the caller reasonable?  

      If the whitespace is a normal circumstance; then the failed test is a bug in the ponent。  

But if the whitespace is not a normal circumstance; the caller is wrong and must be fixed。 The  

answer is that the caller is being reasonable; and the ponent is not acting properly。 We  

have a bug in the ponent that needs to be fixed。 How do I know that the caller is not being  

reasonable? I made it up; because that is how I expected the contract to be implemented。 The  

key is in defining a good contract。 

      The bug in the ponent relates to the problem of how a word is being translated。 We  

used the pareTo() method; which means that each character is pared; position for  

position。 The test failed because the caller passed in a string with whitespace; and the ponent  

expected no whitespace。 This bug is not a surprise; because we humans ignore the whitespace; but  

puters cannot。  

      Before I explain how to fix the bug; I need to take a step back and talk about what a string  

is and how you can figure out what a string can do。  



Investigating the String Type 



String is a class ty

返回目录 上一页 下一页 回到顶部 2 2

你可能喜欢的