|
Dit artikel is gepubliceerd op woensdag 28 april 2010 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
Indien men in een bepaalde implementatie zowel een ingekapseld veld als een publieke member kan gebruiken om een bepaalde waarde van een object aan te spreken, valt het doorgaans aan te raden deze waarde via de publieke member te benaderen.
Deze publieke member garandeert immers - althans zolang de abstractie van de klasse ongewijzigd blijft - steeds dezelfde waarde op te leveren.
Stel dat we bij het opvragen van de Tax van een Product een percentage wensen te ontvangen : Visual Basic Broncode Namespace Example1
Module Client
Public Sub Main()
Dim product1 As New Product
product1.Price = 1000
product1.Tax = 21
Console.WriteLine(product1.Tax = 21)
Console.WriteLine(product1.GetPriceIncludingTax() = 1210)
Console.ReadLine()
End Sub
End Module
End NamespaceDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
Visual Basic Output True
True Dan kunnen we bijvoorbeeld deze ingestelde Tax waarde rechtstreeks in het m_Tax veld bewaren : Visual Basic Broncode Namespace Example1
Class Product
Private m_Price As Decimal
Public Property Price() As Decimal
Get
Price = m_Price
End Get
Set(ByVal value As Decimal)
m_Price = value
End Set
End Property
Private m_Tax As Decimal
Public Property Tax() As Decimal
Get
Tax = m_Tax
End Get
Set(ByVal value As Decimal)
m_Tax = value
End Set
End Property
End Class
End NamespaceDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
Indien we in een GetPriceIncludingTax implementatie de taxwaarde wensen te gebruiken kunnen we deze waarde zowel via Tax als m_Tax deze waarde benaderen.
Toch valt in dergelijke gevallen aan te raden de publieke member te gebruiken om dergelijke waarde aan te spreken. Van Tax zijn we immer zeker dat het steeds dezelfde waarde zal opleveren. We hebben immers in de abstractie vastgelegd dat indien we deze waarde opvragen we het percentage wensen te ontvangen. Visual Basic Broncode Namespace Example1
Partial Class Product
Public Function GetPriceIncludingTax() As Decimal
GetPriceIncludingTax = Price * (1 + (Tax / 100))
End Function
End Class
End NamespaceDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
Van m_Tax zijn we echter niet zo zeker, momenteel zal deze dezelfde waarde representeren : Visual Basic Broncode Namespace Example2
Class Product
Private m_Price As Decimal
Public Property Price() As Decimal
Get
Price = m_Price
End Get
Set(ByVal value As Decimal)
m_Price = value
End Set
End Property
Private m_Tax As Decimal
Public Property Tax() As Decimal
Get
Tax = m_Tax
End Get
Set(ByVal value As Decimal)
m_Tax = value
End Set
End Property
Public Function GetPriceIncludingTax() As Decimal
GetPriceIncludingTax = Price * (1 + (m_Tax / 100))
End Function
End Class
Module Client
Public Sub Main()
Dim product1 As New Product
product1.Price = 1000
product1.Tax = 21
Console.WriteLine(product1.Tax = 21)
Console.WriteLine(product1.GetPriceIncludingTax() = 1210)
Console.ReadLine()
End Sub
End Module
End NamespaceDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
Visual Basic Output True
True We kunnen echter op eender welk moment de implementatie van de property Tax veranderen, en dit zonder de abstractie van het type Product aan te tasten.
We zouden bijvoorbeeld in plaats van het percentage, het effectieve taxbedrag kunnen bewaren : Visual Basic Broncode Namespace Example3
Class Product
Private m_Price As Decimal
Public Property Price() As Decimal
Get
Price = m_Price
End Get
Set(ByVal value As Decimal)
m_Price = value
End Set
End Property
Private m_Tax As Decimal
Public Property Tax() As Decimal
Get
Tax = (m_Tax / Price) * 100
End Get
Set(ByVal value As Decimal)
m_Tax = Price * (value / 100)
End Set
End Property
End Class
End NamespaceDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
Indien we de implementatie van GetPriceIncludingTax niet aanpassen, krijgen we een foutief resultaat : Visual Basic Broncode Namespace Example3
Partial Class Product
Public Function GetPriceIncludingTax() As Decimal
GetPriceIncludingTax = Price * (1 + (m_Tax / 100))
End Function
End Class
Module Client
Public Sub Main()
Dim product1 As New Product
product1.Price = 1000
product1.Tax = 21
Console.WriteLine(product1.Tax = 21)
Console.WriteLine(product1.GetPriceIncludingTax() = 1210)
Console.ReadLine()
End Sub
End Module
End NamespaceDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
Visual Basic Output True
False Indien we in de implementatie van GetPriceIncludingTax toch gewoon de publieke property Tax uitlezen, hebben we geen enkel probleem : Visual Basic Broncode Namespace Example4
Class Product
Private m_Price As Decimal
Public Property Price() As Decimal
Get
Price = m_Price
End Get
Set(ByVal value As Decimal)
m_Price = value
End Set
End Property
Private m_Tax As Decimal
Public Property Tax() As Decimal
Get
Tax = (m_Tax / Price) * 100
End Get
Set(ByVal value As Decimal)
m_Tax = Price * (value / 100)
End Set
End Property
Public Function GetPriceIncludingTax() As Decimal
GetPriceIncludingTax = Price * (1 + (Tax / 100))
End Function
End Class
Module Client
Public Sub Main()
Dim product1 As New Product
product1.Price = 1000
product1.Tax = 21
Console.WriteLine(product1.Tax = 21)
Console.WriteLine(product1.GetPriceIncludingTax() = 1210)
Console.ReadLine()
End Sub
End Module
End NamespaceDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
Visual Basic Output True
True
Dit artikel is gepubliceerd op woensdag 28 april 2010 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
Visual Basic 2008 & 2010 Boeken
Berichten
|