Klassen schrijven Hoofdstuk 10
Visual Basic.NET voor studenten2 In dit hoofdstuk … Hoe schrijf je een klasse Constructormethodes Public methoden Variabelen Properties
Hoofdstuk 10 Visual Basic.NET voor studenten3 Inleiding Wat is een klasse? Wat is een object? Hoe maak je een object? Welke klassen ken je tot hiertoe in VB.NET?
Hoofdstuk 10 Visual Basic.NET voor studenten4 Een klasse Heeft Private member variabelen Toestand Heeft (een) constructormethode(s) New Heeft Public methoden Aanspreekpunt voor de buitenwereld Heeft Properties Gecontroleerde toegang tot de toestand Heeft Private methoden Hulpmethoden enkel beschikbaar binnen het object
Hoofdstuk 10 Visual Basic.NET voor studenten5 Een eigen klasse ontwerpen Een programma dat Balloon objecten kan tekenen
Hoofdstuk 10 Visual Basic.NET voor studenten6 UML klassediagram Een klasse wordt weergegeven in een rechthoek met 3 compartimenten Klassenaam Member variabelen Methodes Voor een variabele of methode staan er modifiers - betekent Private # betekent Protected + betekent Public Je krijgt onmiddellijk een beeld van de structuur van de applicatie
Hoofdstuk 10 Visual Basic.NET voor studenten7 Balloon.vb Public Class Balloon Private x As Integer = 50 Private y As Integer = 50 Private diameter As Integer = 20 Private myPen As Pen = New Pen(Color.Black) Public Sub MoveRight(ByVal xStep As Integer) x = x + xStep End Sub Public Sub ChangeSize(ByVal change As Integer) diameter = diameter + change End Sub Public Sub Display(ByVal drawArea As Graphics) drawArea.DrawEllipse(myPen, x, y, diameter, diameter) End Sub End Class Klassenaam begint met hoofdletter Lege lijnen + inspringen (leesbaarheid) 1 klasse per.vb bestand (d.i. niet verplicht, wel goede gewoonte)
Hoofdstuk 10 Visual Basic.NET voor studenten8 Demo Voeg de klasse Balloon toe ‘Add Class’ in het ‘Project menu’
Hoofdstuk 10 Visual Basic.NET voor studenten9 Private variabelen Public Class Balloon Private x As Integer = 50 Private y As Integer = 50 Private diameter As Integer = 20 Private myPen As Pen = New Pen(Color.Black) Public Sub MoveRight(ByVal xStep As Integer) x = x + xStep End Sub Public Sub ChangeSize(ByVal change As Integer) diameter = diameter + change End Sub Public Sub Display(ByVal drawArea As Graphics) drawArea.DrawEllipse(myPen, x, y, diameter, diameter) End Sub End Class Beschrijven de toestand van elk Balloon object Zijn niet toegankelijk voor de buitenwereld Variabelen Public maken is een slechte programmeerstijl
Hoofdstuk 10 Visual Basic.NET voor studenten10 Public methoden Public Class Balloon Private x As Integer = 50 Private y As Integer = 50 Private diameter As Integer = 20 Private myPen As Pen = New Pen(Color.Black) Public Sub MoveRight(ByVal xStep As Integer) x = x + xStep End Sub Public Sub ChangeSize(ByVal change As Integer) diameter = diameter + change End Sub Public Sub Display(ByVal drawArea As Graphics) drawArea.DrawEllipse(myPen, x, y, diameter, diameter) End Sub End Class Beschrijven het gedrag van elk Balloon object Vormen de connectie, interface met de buitenwereld Zeer vaak manipuleren Public methodes de interne toestand van een object op een gecontroleerde manier
Hoofdstuk 10 Visual Basic.NET voor studenten11 Inkapseling Informatie verbergen Engels: encapsulation Zeer belangrijk OO principe! Elk object heeft een toestand die verborgen blijft voor de buitenwereld Elk object vertoont een bepaald gedrag die deze toestand beïnvloedt De buitenwereld kan enkel het object manipuleren via Public Methodes Properties
Hoofdstuk 10 Visual Basic.NET voor studenten12 Inkapseling Public Class Balloon Private x As Integer = 50 Private y As Integer = 50 Private diameter As Integer = 20 Private myPen As Pen = New Pen(Color.Black) Public Sub MoveRight(ByVal xStep As Integer) x = x + xStep End Sub Public Sub ChangeSize(ByVal change As Integer) diameter = diameter + change End Sub Public Sub Display(ByVal drawArea As Graphics) drawArea.DrawEllipse(myPen, x, y, diameter, diameter) End Sub End Class Standpunt van de ontwerper van de klasse
Hoofdstuk 10 Visual Basic.NET voor studenten13 Inkapseling Public Class Balloon Private x As Integer = 50 Private y As Integer = 50 Private diameter As Integer = 20 Private myPen As Pen = New Pen(Color.Black) Public Sub MoveRight(ByVal xStep As Integer) x = x + xStep End Sub Public Sub ChangeSize(ByVal change As Integer) diameter = diameter + change End Sub Public Sub Display(ByVal drawArea As Graphics) drawArea.DrawEllipse(myPen, x, y, diameter, diameter) End Sub End Class Standpunt van de gebruiker van de klasse
Hoofdstuk 10 Visual Basic.NET voor studenten14 Properties Zorgen voor een gecontroleerde toegang tot member variabelen Lezen: get access Schrijven: set access Dit lijkt alsof je rechtstreeks member variabelen verandert, maar je doet dit via (property-)methoden! name = TextBox1.Text TextBox1.Visible = False
Hoofdstuk 10 Visual Basic.NET voor studenten15 Voorbeeld Private Sub DisplayXButton_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles DisplayXButton.Click TextBox1.Text = CStr(myBalloon.XCoord) End Sub Private Sub ChangeXButton_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles ChangeXButton.Click myBalloon.XCoord = CInt(TextBox1.Text) myBalloon.Display(drawArea) End Sub
Hoofdstuk 10 Visual Basic.NET voor studenten16 Property definitie Properties verschijnen in UML op dezelfde locatie als de methoden Public Property XCoord() As Integer Get Return x End Get Set(ByVal value As Integer) x = value End Set End Property
Hoofdstuk 10 Visual Basic.NET voor studenten17 ReadOnly of WriteOnly Property Public ReadOnly Property XCoord() As Integer Get Return x End Get End Property Public WriteOnly Property XCoord() As Integer Set(ByVal value As Integer) x = value End Set End Property
Hoofdstuk 10 Visual Basic.NET voor studenten18 Waarom properties? De interne voorstelling wordt verborgen Bv: stel dat je ipv met een (x,y) stelsel met een polair assenstelsel (r,θ) zou werken, dan moeten de property methods de omrekening doen naar x en y Onderscheid tussen get en set is mogelijk Toegangscontrole is mogelijk, bv enkel x en y tussen -100 en 100 is toegestaan (x,y) r θ
Hoofdstuk 10 Visual Basic.NET voor studenten19 Methode of property? Methode = actie, gedrag, vaardigheid, … Naam = werkwoord Property = toestand, informatie, eigenschap, … Naam = zelfstandig naamwoord Soms is het onderscheid een kwestie van smaak en/of stijl ChangeColor() in plaats van Color
Hoofdstuk 10 Visual Basic.NET voor studenten20 Constructor Speciale methode om een object te creëren Deze methode heeft de naam New Parameters zijn mogelijk Als je geen constructor definieert, dan is er toch (impliciet) een default constructor zonder parameters. Deze initialiseert alle member variabelen op hun default waarde Van zodra je zelf één (of meer) constructors schrijft, dan vervalt deze default constructor
Hoofdstuk 10 Visual Basic.NET voor studenten21 Constructor: voorbeeld Public Sub New (ByVal initialX as Integer, _ ByVal initialY as Integer, _ ByVal initialDiameter as Integer) x = initialX y = initialY diameter = initialDiameter End Sub Dim balloon1 As Balloon = New Balloon(10, 10, 50) ' wanneer compileert dit niet? Dim balloon2 As Balloon = New Balloon()
Hoofdstuk 10 Visual Basic.NET voor studenten22 Private methoden Interne hulpfuncties (binnen het object) Als je deze methodes binnen andere methodes van het object gebruikt, hoef je geen object ervoor te zetten. Eventueel mag het woord Me Public Sub SomeMethod() Dim area As Integer... area = CalcArea()... area = Me.CalcArea() End Sub
Hoofdstuk 10 Visual Basic.NET voor studenten23 Bewerkingen op objecten De bewerkingen op Primitieve types liggen vast De bewerkingen op Objecten worden bepaald door de Methodes die op deze objecten bestaan
Hoofdstuk 10 Visual Basic.NET voor studenten24 Objecten vernietigen Garbage collection is een proces dat uitgevoerd wordt door de “Common Language Runtime” van.NET Het zorgt ervoor dat niet meer gebruikte objecten worden verwijderd, zodat het geheugen weer vrijkomt voor nieuwe objecten Je kan als programmeur een hint geven dat je een object niet meer nodig hebt door aan de variabele de waarde Nothing toe te kennen Dim myBalloon as Balloon myBalloon = New Balloon(10,10,10) … myBalloon = New Balloon(20,10,30) Dit maakt het eerste object niet meer toegankelijk, dus kan verwijderd worden
Hoofdstuk 10 Visual Basic.NET voor studenten25 Shared methoden en properties Soms heeft het logisch gezien geen nut om van een klasse objecten te maken Typische voorbeelden zijn bibliotheken van functies De methoden en properties spelen dan op klasse niveau ipv op object niveau Sleutelwoord: Shared
Hoofdstuk 10 Visual Basic.NET voor studenten26 Shared methoden en properties Hoe zou je zelf de kleuren Black en White definiëren in de klasse Color? Public Class Math Public Shared Function Sqrt(ByVal value As Double) As Double... End Function End Class... x = Math.Sqrt(64)... Imports System.Math... x = Sqrt(64)...