startup project。 Figure 3…1。 Structure of projects for the translation application in Visual Basic Express Solution Explorer Building the Translator Application The translation application; like the calculator application example in the previous chapter; is built in pieces: the class library that performs translations based on data delivered by the user interface; the tests; and the user interface。 The individual pieces are ponents that can be fit together like a jigsaw puzzle to create an application。 ■Note ponents are a core part of your development toolbox。 As you will see throughout the book; ponents allow you to reuse and modularize functionality。 ponents result in applications that are main tainable and extendable。 Of course; there are limits; and the advantages are not automatic。 You will need to properly design your application to benefit from using ponents。 Creating the Translator Class When working with Visual Basic Express; or one of the other Visual Studio products; using the default templates for creating a class library results in the creation of a file named Class1。vb。 It is good that a default file is created for a class library; but the identifier Class1。vb does not imply much。 Therefore; you should go ahead and delete that file from the project (simply renaming the file does not rename the class within it)。 In its place; create the Translator class; as follows: 1。 Right…click the LanguageTranslator project。 2。 Click Add New Item。 3。 Select Class。 …………………………………………………………Page 75…………………………………………………………… 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 53 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 outpu