Controls en klassen in .NET:
Objectoriëntatie in VB .NET


Grafische controls

Zoals andere klassen hebben controls eigenschappen, methodes en gebeurtenissen. Omdat ze makkelijker te maken zijn, gaan we daar even mee beginnen.

Eén aandachtspuntje: van zodra je de control gemaakt hebt, verschijnt hij in de Toolbox. Je moet echter compileren voor je hem ook effectief kan gebruiken in je programma.

Als voorbeeld nemen we een eenarmige bandiet, een gokspel waarbij een aantal figuren willekeurig worden getoond. De speler wint als er drie keer dezelfde tekening wordt getoond. Zie verder hier.

Andere voorbeelden:

Noties van objectoriëntatie

Alles in VB .NET zijn klassen. We stellen hieronder enkele noties van objectoriëntatie voor:

Encapsulatie

Gegevens en code worden ingepakt ��n klasse, en onzichtbaar maken wat niet gezien moet worden

Velden

Velden zijn gegevens (variabele, integer, string, ...) die deel uitmaken van een klasse. Ze kunnen min of meer publiek toegankelijk zijn.

Public Class MijnKlasse Public intVeld as Integer 'publiek toegankelijk
Friend strVeld as String 'zichtbaar in deze assembly
Private blnVeld as Boolean 'zichtbaar in deze klasse
Protected strAnderVeld as Boolean 'zichtbaar in deze klasse en afgeleide (overgeërfde) klassen

Meestal werkt men met eigenschappen.

Eigenschappen

Eigenschappen zijn waarden die kunnen opgevraagd of ingesteld worden. De syntaxis ziet er als volgt uit:

[Readonly] Property name As type

De editor maakt onmiddellijk het Get / Set paar aan.

Soms willen we niet dat de eigenschap kan ingesteld of afgelezen worden: de leeftijd moet berekend worden, die kunnen we niet laten instellen. Uit dit voorbeeld blijkt ook onmiddellijk dat er soms bereking moet gebeuren vlak voor het opvragen. Soms moet er ook een controle gebeuren bij het instellen van eigenschap: de zijde van een vierkant kan niet negatief zijn, bij voorbeeld.

Public Class MijnKlasse
    Property name() As String
        Get
 
        End Get
        Set(ByVal Value As String)
 
        End Set
    End Property
    ReadOnly Property leeftijd() As Integer
        Get
 
        End Get
    End Property
End Class

Constructoren

Constructoren zijn stukjes code om object te initialiseren. Ze kunnen een parameter hebben. Ze worden gebruikt om bv. noodzakelijke eigenschap in te stellen die nadien niet meer kan veranderen, zoals de naam of geboortedatum van een persoon.

Public Class mens
  Private naam As String
  Public Sub new(naam As String)
    Me.naam = naam
  End Sub
End Class

Soms moet je dit ook gebruiken om een default waarde (verstekwaarde) in te stellen. Bij breuken bijvoorbeeld is het belangrijk dat de teller op 1 staat van bij het begin, want anders kan er een deling door nul gebeuren.

Methodes

Een methode is een stukje code dat je kan oproepen via een klasse of uitvoeren op een object van die klasse. Bijvoorbeeld: een klasse mens waarin je die mens zijn naam laat zeggen.

Public Class mens
  �...
  Public Function spreek() As String
    Return "Ik heet " & Me.naam
  End Function
End Class

Functioneel kan men twee types onderscheiden: Functies geven iets terug, Subs geven niets terug.

Events / Gebeurtenissen

Er gebeurt iets in een klasse, en dan kan een ander stuk van het programma iets ondernemen. Dat kan door een event. Verlies niet uit het oog dat zo'n event moet gedeclareerd worden aan het begin van de klasse.

' Declare an event at module level.
Event LogonCompleted(UserName As String)
 
Sub Logon(ByVal UserName As String)
   ' Raise the event.
   RaiseEvent LogonCompleted(UserName)
End Sub

Een ander voorbeeld zou kunnen zijn het wijzigen van een waarde, of de verjaardag van een persoon.

Om zo'n gebeurtenis in je programma te kunnen gebruiken (om er code voor te kunnen schrijven) als je zo'n klasse gebruikt, moet je een object (instantiatie) van die klasse declareren in de algemene sectie de klasse van het formulier (buiten een Sub, dus),

Daarna vind je het object (met zijn naam) en zijn gebeurtenissen in de werkomgeving.

Dim WithEvents t As New Timer

Inheritance / overerving

Een klasse kan van een andere overerven, en neemt dan de eigenschappen, events en methoden over Ze kan die uitbreiden. Bijvoorbeeld: dier heeft een naam, en een kat heeft ook specifiek geluid.

Public Class childclass : Inherits baseclass

Eigenschappen, methodes en events worden overgenomen. Constructoren moet je nog eens extra oproepen.

Een voorbeeld: dier heet bij verstek "beestje", kat heet bij verstek "poes" en heeft als geluid "miauw".

Overloading

Je kan een klasse twee methoden hebben met dezelfde naam maar een andere signatuur (type van terugkeerwaarde, aantel en type van parameters). Een klassiek voorbeeld is een constructor met en zonder parameter. Op die manier kan je een verstekwaarde geven:

Public Class hond
  Private naam As String
  Public Sub new(naam As String)
    Me.naam = naam
  End Sub
  Public Sub new()
    Me.naam= "woef"
  End Sub
End Class
 

Voorbeelden

Een en ander kunnen we toelichten met deze code:

  • De klasse dier
    Public Class dier
        Protected dnaam As String
        Public Sub New(ByVal naam)
            Me.dnaam = naam
        End Sub
        Public Sub New()
            Me.dnaam = "beestje"
        End Sub
        Property naam() As String
            Get
                Return Me.dnaam
            End Get
            Set(ByVal Value As String)
                Me.dnaam = naam
            End Set
        End Property
    End Class
     
  • De klasse kat
    Public Class kat : Inherits dier
        Public Sub New()
            MyBase.New("poes") 'we wijzigen de default constructor
        End Sub
        Public Sub New(ByVal naam As String)
            MyBase.New(naam)
        End Sub
        Public ReadOnly Property geluid() As String
            Get
                geluid = "miauw"
            End Get
        End Property
    End Class
     
  • Je kan als volgt een dier aanmaken en oproepen:
    Dim tegevennaam As String
    tegevennaam = InputBox("Geef een naam aan het dier")
    Dim d As dier
    If Not tegevennaam = "" Then
      d = New dier(tegevennaam) 'andere  constructor
      Else
      d = New dier 'default constructor
    End If
    MsgBox(d.naam)
  • Een kat aanmaken en oproepen gaat als volgt:
    Dim tegevennaam As String
    tegevennaam = InputBox("Geef een naam aan de kat")
    Dim k As kat
    If Not tegevennaam = "" Then
      k = New kat(tegevennaam) 'andere constructor
        Else
          k = New kat 'default constructor
    End If
    MsgBox(k.naam & vbCrLf & k.geluid)
  • Je kan het programma bekijken en het project downloaden.

Namespaces

Namespaces zijn ruimten waarbinnen klassen gedefinieerd kunnen worden. Er ontstaan geen conflicten tussen verschillende namespaces.

Namespace eerste
  Public Class test
  '...
 
End Class
End Namespace

Namespace tweede
  Public Class test
  '...
End Class
End Namespace

Je kan een namespace importeren aan het begin van een module / klasse.

Imports Microsoft.VisualBasic.Constants

Voorbeelden / oefeningen

  • Persoon*
    Een persoon heeft een naam, geboortedatum, geslacht, leeftijd.
  • Jaren*
    Van een jaar berekenen we of het een schrikkeljaar is, de eeuw, en de weekdag waarop Kerstmis valt.
  • Temperatuur
    In graden C of F. Je kan zien dat het werken met klassen het programmeren een stuk eenvoudiger kan maken.
  • Vierkant
    Een vierkant heeft een zijde, oppervlakte, omtrek.
  • Breuk*
    Een breuk heeft een teller, noemer, waarde. We moeten vereenvoudigen als teller en noemer door hetzelfde getal deelbaar zijn.
  • Puntenboek*
    Variant op de vorige toepassing. Geen vereenvoudiging meer, maar je moet kunnen optellen bij de teller (het behaald aantal punten) en bij de noemer (het maximum van de te verdienen punten).
  • Belegging / bedrag
    Een belegging heeft een waarde, een percentage (eigenschappen) en een vervaldag waarop de intrest wordt bijgeteld. Indien het een belegging in euro is, is de waarde in BEF alleen-lezen.
  • Hoeken*
    We gaan rekenen met graden in een .NET klasse. We voorzien de waarde in graden en radialen, en de eigenschappen sinus, cosinus en tangens. We voorzien ook de mogelijkheid om bij een hoek een andere hoek op te tellen, vereenvoudiging (geen negatieve hoeken, geen hoeken groter dan 360°) en de weergave met minuten en seconden.
  • Uren tellen*
    Je kan in VB uren tellen, maar uren zijn daar delen van een dag. We bouwen een klasse om met uren te rekenen en uren weer te geven met minuten en seconden.

Je kan de klassen in actie zien en het project downloaden. De klassen met * zijn niet inbegrepen en kan je apart downloaden.

Je kan de controls in actie zien en het project downloaden. De controls met * zijn niet inbegrepen en kan je apart downloaden.

Gebruik

Wat kan je met die klassen en controls doen?

  • Je kan de code hergebruiken in andere programmeerprojecten. Op die manier kan je code die je geschreven hebt en waarvan je weet dat ze werkt, hergebruiken zonder die code nog ooit opnieuw te moeten schrijven.
  • Je kan de code hergebruiken door het .VB bestand op te slaan en aan nieuwe projecten toe te voegen. Voordeel hiervan is dat je makkelijker aanpassingen kan doen.
  • Je kan de gecompileerde code hergebruiken (het DLL bestand aan je project toevoegen). Voordeel hiervan is dat je je geen zorgen moet maken, maar je moet dat DLL bestand natuurlijk meegeven met het nieuwe gecompileerde programma.

[VB Web] - [hlrnet] - [copyright]