verschil tss Property, functie, subroutine

Status
Niet open voor verdere reacties.

verhaba

Gebruiker
Lid geworden
8 feb 2008
Berichten
79
Hallo

Na een week in de theorie gezocht te hebben heb ik nog steeds geen antwoord gevonden op één van die (zovele) vragen, nml wanneer gebruik je een Property, functie of een subroutine (=procedure). Is er een duidelijk onderscheid wanneer je wat gebruikt. Bij een Property stel je zowel je setter als getter in, terwijl dat je bij de functie (getter) en bij de subroutine (setter) appart doet. Maar dat kan je dan ook bij een Property blijkbaar ook... Dat is me allemaal wel wat verwarrend.

Vandaar mijn vraag of er een duidelijk onderscheid kan gemaakt worden wanneer een property, functie of subroutine te gebruiken. En spelen de acces modifiers hier een rol in? Zoja de welke? Misschien speelt de naamgeving van je members/ objecten hierin een rol om niet tegen de guidelines in te druisen.

Thx voor jullie antwoord... Groetjes.
 
Laatst bewerkt:
Hallo

Na een week in de theorie gezocht te hebben heb ik nog steeds geen antwoord gevonden op één van die (zovele) vragen, nml wanneer gebruik je een Property, functie of een subroutine (=procedure). Is er een duidelijk onderscheid wanneer je wat gebruikt. Bij een Property stel je zowel je setter als getter in, terwijl dat je bij de functie (getter) en bij de subroutine (setter) appart doet. Maar dat kan je dan ook bij een Property blijkbaar ook... Dat is me allemaal wel wat verwarrend.

Vandaar mijn vraag of er een duidelijk onderscheid kan gemaakt worden wanneer een property, functie of subroutine te gebruiken. En spelen de acces modifiers hier een rol in? Zoja de welke? Misschien speelt de naamgeving van je members/ objecten hierin een rol om niet tegen de guidelines in te druisen.

Thx voor jullie antwoord... Groetjes.
Functie => Retouneert een waarde!
Aan te roepen met: "<functienaam>(<argument>)

Subroutine => Voert alleen een actie uit!
Aan te roepen met: " <subroutinenaam>()

Property => Eigenschap voor een control/class
In te stellen met: <Class/control-naam>.<propertynaam> = <waarde>
uit te lezen met: <variblenaam> = <class/controlnaam>.<propertynaam>
 
Wel ik denk dat we dit best met een voorbeeld demonstreren:

Code:
Public Class Vierkant

    'Member variabelen die we locaal gebruiken en gaan encapsuleren
    Private m_color As Color
    Private m_size As Integer
    Private m_graphic As Graphics

    'Constructor
    Public Sub New(ByRef kleur As Color, ByVal grootte As Integer)
        'Vervolgens initialiseren we de member variabelen
        Me.m_color = kleur
        Me.m_size = grootte

        'Vervolgens willen we (sub)routine oproepen waarin we bijvoorbeeld
        'ons vierkant initialiseren.
        initialiseer()

    End Sub
    'Private function aangezien we deze enkel binnen de klasse willen oproepen
    Private Sub initialiseer()
        m_graphic = Graphics.FromImage(New Bitmap(m_size, m_size))
    End Sub
    'Een publieke functie die we buiten de klassen oproepen om de oppervlakte
    'van het vierkant object te achterhalen
    Public Function GetOppervlakte()
        Return m_size * m_size
    End Function
    'We hebben eerder member variabelen aangemaakt die enkel beschikbaar zijn
    'binnen de klasse zelf (private). Nu willen we deze publiek delen zonder
    'de variabele direct beschikbaar te maken en met enige controle. Dit noemt in
    'OOP termen : Encapsulation (information hiding).
    'We gaan voor deze member variabelen publieke properties maken
    Public Property Size() As Integer
        Get
            Return m_size
        End Get
        Set(ByVal value As Integer)
            m_size = value
        End Set
    End Property
    'Dit doen we ook voor de kleur
    Public Property Color() As Color
        Get
            Return m_color
        End Get
        Set(ByVal value As Color)
            m_color = value
        End Set
    End Property

End Class

Public Class Test
    Sub main()
        'We maken een nieuw Object aan van de Vierkant klasse
        ' en geven een kleur en grootte mee
        Dim vk As New Vierkant(Color.Red, 12)

        'Vervolgens kunnen we publieke eigenschappen Color en size
        'aanpassen
        vk.Color = Color.AliceBlue
        vk.Size = 10

        'Als laatste roepen we een functie op die de oppervlakte teruggeeft
        'en deze in een variabele plaatst.
        Dim oppervlakte As Integer
        oppervlakte = vk.GetOppervlakte()
    End Sub
End Class


Dus:

Member variabelen: zijn variabelen die je enkel binnen de klasse gebruikt. Deze worden vaak voorzien van een m_.... Deze zijn bijna altijd private.
Functies : Methoden die een waarde terugkeren via het return keyword.
Subroutines : Methoden die een bepaalde functionaliteit hebben maar niets terug geven.
Properties: Structuren die member variabelen publiek beschikbaar maken.

Er bestaat geen verschil tussen een Getter/Setter (zijnde een publiek subroutine en functie) en een property. Een property is er eigenlijk enkel om gebruiksgemak en om een object publiek met dezelfde naam te getten en setten. Verder is de werking van beide gelijk.
 
Hey,
Hartelijk dank voor je bericht. Ik had al voor een groot stuk antwoord gevonden op mijn vraag, maar je aanvulling komt zeker van pas. Kennis kom je nooit te kort, nietwaar.
Hartelijk dank :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan