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

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

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






                This pletes our test code。 Now we will implement the active trader and hotel trader  

           ponents of the currency exchange application。 



           Writing the Active Trader and Hotel Trader  

           Currency Converters 



           With the TestCurrencyTrader test solution pleted�察�it¨s time to turn our attention to the  

           CurrencyTrader solution。 As mentioned earlier�察�this consists of the active trader and hotel  

           trader currency converter ponents。 Here�察�you¨ll see more clearly what it means to use  

           inheritance。 



           Implementing ActiveCurrencyTrader 



           The ActiveCurrencyTrader class implements the logic of the active currency trader。 To begin�察 �

           we¨ll add its constructor。  



           Adding a Constructor to ActiveCurrencyTrader  



           To give ActiveCurrencyTrader some default state�察�we use a constructor。 However�察�the constructor  

           will serve another purpose�察�in that any class that instantiates ActiveCurrencyTrader will consider  

           the instance as immutable。 Immutable means that once data has been assigned to the instance�察�it  

           cannot be altered。 In other words�察�it is unchangeable。 



           *Note  The String type is immutable because once a string variable has been assigned�察�it cannot be  

           changed。 Take a look at the methods associated with String�察�and you will see nothing that allows you to  

           modify the contents。 An immutable type is good because it allows you to implement a set´it´and´forget´it  

           object�察�and it prevents other classes from accidentally changing the contents。 Overall�察�an immutable type is  

           robust and predictable ��though they are the exception�察�not the rule�察�most types allow you to modify state��。  



                The following shows the constructor code added to ActiveCurrencyTrader。 


´´´´´´´´´´´´´´´´´´´´´´Page 175´´´´´´´´´´´´´´´´´´´´´´´

                       CH A PT E R   6   *    L E A R N I N G   T HE   B AS IC S  O F   O B J E CT OR I E N TE D   P R O G R AM M IN G 153 



Public Class ActiveCurrencyTrader 

    Inherits CurrencyTrader 

    Private _fromCurrency As String 

    Private _toCurrency As String 



    Public Sub New��ByVal currExchange As Double�察�ByVal fromCurrency As String�察�

       ByVal toCurrency As String�� 

        ExchangeRate = currExchange 

        _fromCurrency = fromCurrency 

        _toCurrency = toCurrency 

    End Sub 

End Class 



     The constructor has three parameters�此�currExchange represents the current exchange rate�察 �

fromCurrency indicates the source currency ��for example�察�USD���察�and toCurrency indicates the  

destination currency ��for example�察�EUR��。 These three parameters are assigned to data members�察 �

whereby only the current exchange rate is assigned to the base class  

CurrencyTrader。ExchangeRate。 



Defining Informational Read´Only Properties 



The characters that represent the from currency and to currency are stored as strings�察�and are  

purely for informational purposes。 For example�察�let¨s say that you have instantiated a bunch of  

currency pairs so that the trader can prehend the currency pair in which the values of  

_fromCurrency and _toCurrency will be presented。 This means that the currency strings are  

read´only properties and are coded as follows�此�



Public Class ActiveCurrencyTrader 

    Inherits CurrencyTrader 

    Private _fromCurrency As String 

    Private _toCurrency As String 



    Public Sub New ��ByVal currExchange As Double�察�

        ByVal fromCurrency As String�察�ByVal toCurrency As String��  

        ExchangeRate = currExchange 

        _fromCurrency = fromCurrency 

        _toCurrency = toCurrency 

    End Sub 

    Public ReadOnly Property FromCurrency�┌� As String 

        Get  

            Return _fromCurrency 

        End Get 

    End Property 

    Public ReadOnly Property ToCurrency�┌� As String 

        Get  

            Return _toCurrency 

        End Get 

    End Property 

End Class 


´´´´´´´´´´´´´´´´´´´´´´Page 176´´´´´´´´´´´´´´´´´´´´´´´

154      CH AP T E R   6   *    L E A R N IN G   T HE   B AS IC S  O F   OB J E CT OR I E N T E D   P R O G R AM M IN G 



               The naming of the properties �─�FromCurrency and ToCurrency�� corresponds closely to the  

          naming of the data members ��_fromCurrency and _toCurrency��。 I do this throughout my code  

          so that I know what each piece of code means。 My convention is to use a leading underscore to  

          name private data members�察�but you can use a different notation if you prefer。 



          Adding the Conversion Methods 



          The last step to make the ActiveCurrencyTrader class plete is to add the functionality to  

          convert a value from or to a currency pair。 The ActiveCurrencyTrader class will use the exact  

          currency exchange rate。 The ConvertValue�┌��察�and ConvertValueInverse�┌� methods have protected  

          scope�察�and thus are not exposed outside the inheritance hierarchy。 ActiveCurrencyTrader  

          needs to define a pair of publicly scoped methods that will call the protected scope methods。  

          The following is the plete ActiveCurrencyTrader implementation。 



          Public Class ActiveCurrencyTrader 

              Inherits CurrencyTrader 

              Private _fromCurrency As String 

              Private _toCurrency As String 



              Public Sub New ��ByVal currExchange As Double�察�

                  ByVal fromCurrency As String�察�ByVal toCurrency As String��  

                  ExchangeRate = currExchange 

                  _fromCurrency = fromCurrency 

                  _toCurrency = toCurrency 

              End Sub 

              Public ReadOnly Property FromCurrency�┌� As String 

                  Get 

                      Return _fromCurrency 

                  End Get 

              End Property 

              Public ReadOnly Property ToCurrency�┌� As String 

                  Get 

                      Return _toCurrency 

                  End Get 

              End Property 

              Public Function ConvertTo��ByVal value As Double�� As Double 

                  Return ConvertValue��value�� 

              End Function 

              Public Function ConvertFrom��ByVal value As Double�� As Double 

                  Return ConvertValueInverse��value�� 

              End Function 

          End Class 



               The ConvertTo�┌� and ConvertFrom�┌� methods are wrappers to the ConvertValue�┌� and  

          ConvertValueInverse�┌� methods�察�and provide no added value。 But remember the problem of  

          the cashier and credit card。 Just because it seems like there is no added value�察�the reality is that  

          you are writing code that is acting as a gatekeeper and giving yourself flexibility。 


´´´´´´´´´´´´´´´´´´´´´´Page 177´´´´´´´´´´´´´´´´´´´´´´´

                       CH A PT E R   6   *    L E A R N I N G   T HE   B AS IC S  O F   O B J E CT OR I E N TE D   P R O G R AM M IN G 155 



     For example�察�suppose that CurrencyTrader。ConvertValue�┌��察�and CurrencyTrader。 

ConvertValueInverse�┌� were declared using  Public rather than  Protected。 Then any user of  

ActiveCurrencyTrader could use the functionality exposed by CurrencyTrader。 Suppose someone  

decided to change the functionality of ConvertValue�┌� and ConvertValueInverse�┌�。 At that  

point�察�you would have problems�察�because the changes to CurrencyTrader automatically imply  

changes in ActiveCurrencyTrader。 By defining your own methods�察�you are controlling and  

making sure that if things change in the future�察�you can acmodate them without needing  

to change the callers of ActiveCurrencyTrader。 

     We have now pleted the functionality of ActiveCurrencyTrader�察�so let¨s implement  

HotelCurrencyTrader。 



Implementing HotelCurrencyTrader 

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