ist die Datenkapselung nicht bereits dadurch gewährleistet, indem man die Eigenschaft bzw. Variable auf private setzt, und der Zugriff dann nur über Klasseneigene Methoden/Funktionen erfolgt?
Korrekt.
Worin die Verbesserung liegt?
ohne Property:
Option Explicit
Private m_Baujahr As Integer
Public Function GetBaujahr() As Integer
GetBaujahr = m_Baujahr
End Function
Public Sub SetBaujahr(Baujahr As Integer)
If Baujahr < 1886 Then
Call Err.Raise(5, TypeName(Me) & ".Baujahr()") '5 = invalid arg
End If
m_Baujahr = Baujahr
End Sub
Verwendung:
Option Explicit
Sub Test()
Dim objAuto As Auto
Set objAuto = New Auto
'unterschiedliche Namen für das Setzen und Abrufen der Information
'(der Programmierer muss wissen/entscheidet was aufgerufen wird)
objAuto.SetBaujahr 1973
Debug.Print objAuto.GetBaujahr
End Sub
Mit Property:
'Klasse: Auto
Option Explicit
Private m_Baujahr As Integer
Public Property Get Baujahr() As Integer
Baujahr = m_Baujahr
End Property
Public Property Let Baujahr(RHS As Integer)
If RHS < 1886 Then
Call Err.Raise(5, TypeName(Me) & ".Baujahr") '5 = invalid arg
End If
m_Baujahr = RHS
End Property
Verwendung:
Option Explicit
Sub Test()
Dim objAuto As Auto
Set objAuto = New Auto
'GLEICHE Namen für das Setzen und Abrufen der Information
'(wird anhand der jeweiligen Operation autom. ermittelt)
objAuto.Baujahr = 1973
Debug.Print objAuto.Baujahr
End Sub
Besser strukturierter & lesbarer Code.
In anderen - aktuelleren - Sprachen wird das noch deutlicher.
|