De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Visual Basic.NETPag.1 Hoofdstuk 5 – Object Based Programmeren Inleiding Abstract type Time implementeren via een klasse Klasse Scope Toegang tot members.

Verwante presentaties


Presentatie over: "Visual Basic.NETPag.1 Hoofdstuk 5 – Object Based Programmeren Inleiding Abstract type Time implementeren via een klasse Klasse Scope Toegang tot members."— Transcript van de presentatie:

1 Visual Basic.NETPag.1 Hoofdstuk 5 – Object Based Programmeren Inleiding Abstract type Time implementeren via een klasse Klasse Scope Toegang tot members Initialiseren van klasse-objecten: constructoren Gebruik van overladen van constructoren Eigenschappen Compositie: Objecten als instantievariabelen van andere klasses Gebruik van “me” Garbage Collection Gedeelde klasse members Const en ReadOnly members Data abstractie en Information Hiding Hergebruik van software Namespaces and Assemblies

2 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Inleiding Alles in.NET is een object  Instanties van een klasse  Een literal zoals 7 of “Welcome”  Een klasse kan ook handelen als een object Object  State : attributen en properties  Gedrag : methodes en events  Interface : toegang tot object’s data en gedrag vanuit applicatie  Identity : gegeven door systeem (CLR) Klassen : voor de creatie van een ADT(Abstract Data Type)  Inkapselen  Overerving  Polymorfisme

3 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Implementatie van klasse CTime

4 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Implementatie van klasse CTime Class CTime inherits existing pieces of class Object. 1 ' CTime.vb 2 ' Represents time in 24-hour format. 3 4 Class CTime 5 Inherits Object 6 7 ' declare Integer instance values for hour, minute and second 8 Private mHour As Integer ' Private mMinute As Integer ' Private mSecond As Integer ' ' Method New is the CTime constructor method, which initializes 13 ' instance variables to zero 14 Public Sub New() 15 SetTime(0, 0, 0) 16 End Sub ' New ' set new time value using universal time; 19 ' perform validity checks on data; 20 ' set invalid values to zero 21 Public Sub SetTime(ByVal hourValue As Integer, _ 22 ByVal minuteValue As Integer, ByVal secondValue As Integer) ' check if hour is between 0 and 23, then set hour 25 If (hourValue >= 0 AndAlso hourValue < 24) Then 26 mHour = hourValue 27 Else 28 mHour = 0 29 End If ' check if minute is between 0 and 59, then set minute 32 If (minuteValue >= 0 AndAlso minuteValue < 60) Then 33 mMinute = minuteValue 34 Else 35 mMinute = 0 36 End If de New constructor CTime class definition. Erft van klasse Object

5 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag. 5 Class CTime inherits existing pieces of class Object. 38 ' check if second is between 0 and 59, then set second 39 If (secondValue >= 0 AndAlso secondValue < 60) Then 40 mSecond = secondValue 41 Else 42 mSecond = 0 43 End If End Sub ' SetTime ' convert String to universal-time format 48 Public Function ToUniversalString() As String 49 Return String.Format("{0}:{1:D2}:{2:D2}", _ 50 mHour, mMinute, mSecond) 51 End Function ' ToUniversalString ' convert to String in standard-time format 54 Public Function ToStandardString() As String 55 Dim suffix As String = " PM" 56 Dim format As String = "{0}:{1:D2}:{2:D2}" 57 Dim standardHour As Integer ' determine whether time is AM or PM 60 If mHour < 12 Then 61 suffix = " AM" 62 End If ' convert from universal-time format to standard-time format 65 If (mHour = 12 OrElse mHour = 0) Then 66 standardHour = Else 68 standardHour = mHour Mod End If Return String.Format(format, standardHour, mMinute, _ 72 mSecond) & suffix 73 End Function ' ToStandardString 74 End Class ' CTime

6 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag. 6 Class CTime inherits existing pieces of class Object. 1 ' TimeTest.vb 2 ' Demonstrating class CTime. 3 4 Imports System.Windows.Forms 5 6 Module modTimeTest 7 8 Sub Main() 9 Dim time As New CTime() ' call CTime constructor 10 Dim output As String output = "The initial universal times is: " & _ 13 time.ToUniversalString() & vbCrLf & _ 14 "The initial standard time is: " & _ 15 time.ToStandardString() time.SetTime(13, 27, 6) ' set time with valid settings output &= vbCrLf & vbCrLf & _ 20 "Universal time after setTime is: " & _ 21 time.ToUniversalString() & vbCrLf & _ 22 "Standard time after setTime is: " & _ 23 time.ToStandardString() time.SetTime(99, 99, 99) ' set time with invalid settings output &= vbCrLf & vbCrLf & _ 28 "After attempting invalid settings: " & vbCrLf & _ 29 "Universal time: " & time.ToUniversalString() & _ 30 vbCrLf & "Standard time: " & time.ToStandardString() MessageBox.Show(output, "Testing Class CTime") 33 End Sub ' Main End Module ' modTimeTest

7 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Implementatie van klasse CTime Object declaratie en Instantiatie  Intrinsic (klasse als een type) “Welcome to.NET” 200  Als instantie van een klasse (klasse als een factory) Dim objRandom As Random ‘creatie van object variabele objRandom = New Random() ‘creatie van instantie van klasse,d.i. van object Of Dim objRandom As New Random() Of Dim objRandom As Random = New Random()  De klasse wordt als object gebruikt (klasse als een utility) Console.writeline Image.FromFile

8 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Implementatie van klasse CTime Creatie van een klasse  Project > Add Class  Opent code venster

9 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Implementatie van klasse CTime  Nu kunnen we de klasse definieren Member variabelen Methodes Properties Events

10 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag De Scope van een klasse Instance variabelen en methodes (members genaamd)  Binnen de klasse (class-scope) Toegankelijk in alle methodes via de naam  Buiten de klasse (vanuit een applicatie) Enkel de Public(Friend, Protected) class members zijn toegankelijk via een “handle” (ObjectReferenceName.memberName)  Variabelen gedeclareerd binnen een methode (block- scope) Enkel toegankelijk binnen die methode Een variabele met block scope kan dezelfde naam hebben als variabele met class-scope => om toch toegang te hebben tot class scope variabele gebruik je dan keyword Me en de dot operator

11 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Toegang tot members Access Modifiers  Controleren van de toegang tot de instance variabelen en methodes van een klasse Public –Toegankelijk van buitenaf. Vormen de interface van de klasse Private –Leden zijn niet van buitenaf toegankelijk, enkel binnen de klasse –Indien je ze van buitenaf probeert te benaderen, genereert de compiler een foutmelding Friend –Enkel toegankelijk binnen het project Protected –Enkel toegankelijk voor klassen die erven van deze klasse

12 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Toegang tot members Toegang tot private data : Properties  Stelregel : maak data in klasse private! Ontwikkel een interface om deze data te manipuleren!  Bevat 2 accessors Get : opvragen van private data –Converteren van data naar een extern formaat Set : instellen van private data –Validatie van de data –Converteren van data naar een intern formaat

13 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Constructor Wordt automatisch uitgevoerd bij creatie van een nieuw object van die klasse adhv de New operator Dim ObjectReference As New ClassName(arguments) Verzorgt de initialisatie van het object Heeft de naam New Kan initializers (parameters) bevatten Heeft geen return type Er kunnen meerdere constructors bestaan binnen 1 klasse (overloading) Voorbeeld Public Sub New() SetTime(0, 0, 0) End Sub

14 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Constructor Klassen zonder constructor  de compiler maakt zelf een default constructor aan (geen argumenten en geen code)  Deze default constructor initialiseert enkel de members met hun default waarden (boolean : false; getallen : 0, objecten : nothing) Klassen met constructors  Als een klasse enkel constructors met parameters bevat, en geen default constructor, dan krijgt de klasse geen default constructor. Als bij creatie van een object wordt gepoogd een default constructor aan te roepen => syntax fout

15 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Constructor Variabele Initializers  Variabelen worden geinitialiseerd door de runtime nog voor de constructor wordt uitgevoerd  Voorbeeld Public Class TV Private mChannel as Integer = 0 Private mOn As Boolean = True Private mVolume As Double =.5 End Class

16 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Constructor overloading Een klasse met meer dan 1 constructor Onderscheid tussen de verschillende constructors  Aantal argumenten  Type van de argumenten Voorbeeld Dim time1 As New CTime() Dim time2 As New CTime(2) Dim time3 As New CTime(21, 34) Dim time4 As New CTime(12, 25, 42) Dim time5 As New CTime(27, 74, 99) Dim time6 As New CTime(time4) ' use time4 as initial value

17 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Constructor overloading constructor initializes each variable to zero and ensures that each object starts in consistent state Public Sub New() SetTime() End Sub ' New ‘ constructor: hour supplied; minute and second default to 0 Public Sub New(ByVal hourValue As Integer) SetTime(hourValue) End Sub ' New ' constructor: hour and minute supplied; second defaulted to 0 Public Sub New(ByVal hourValue As Integer, ByVal minuteValue As Integer) SetTime(hourValue, minuteValue) End Sub ' New ‘constructor: hour, minute and second supplied Public Sub New(ByVal hourValue As Integer, ByVal minuteValue As Integer, _ ByVal secondValue As Integer) SetTime(hourValue, minuteValue, secondValue) End Sub ' New ' constructor: another CTime object supplied Public Sub New(ByVal timeValue As CTime) SetTime(timeValue.mHour, timeValue.mMinute, timeValue.mSecond) End Sub ' New

18 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Constructor overloading Public Sub SetTime(Optional ByVal hourValue As Integer = 0, _ Optional ByVal minuteValue As Integer = 0, _ Optional ByVal secondValue As Integer = 0) ' perform validity checks on hour, then set hour If (hourValue >= 0 AndAlso hourValue < 24) Then mHour = hourValue Else mHour = 0 End If ' perform validity checks on minute, then set minute If (minuteValue >= 0 AndAlso minuteValue < 60) Then mMinute = minuteValue Else mMinute = 0 End If ' perform validity checks on second, then set second If (secondValue >= 0 AndAlso secondValue < 60) Then mSecond = secondValue Else mSecond = 0 End If End Sub

19 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Constructor overloading Public Sub New(Optional ByVal hourValue As Integer = 0, _ Optional ByVal minuteValue As Integer = 0, _ Optional ByVal secondValue As Integer = 0) SetTime(hourValue, minuteValue, secondValue) End Sub ' New Public Sub New(ByVal timeValue As CTime) SetTime(timeValue.mHour, timeValue.mMinute, timeValue.mSecond) End Sub ' New  Werken met optionele parameters

20 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Constructor overloading Public Class Window Private Topleft As Point Private Size As Size Private Caption As String Public Sub New(ByVal topleft As Point, ByVal size As size, ByVal caption As String) Me.topleft = topleft Me.size = size Me.caption = caption End Sub Public Sub New(ByVal x As Integer, ByVal y As Integer, _ ByVal width As Integer, ByVal height As Integer, ByVal caption As String) Me.New(New Point(x, y), New Size(width, height), caption) End Sub End Class  Oproepen van Me.new

21 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Properties Private instance variabelen en Public properties  Get accessor : geeft read-access Functie voor uitlezen van een instance variabele Controleert formattering en weergave van de data  Set accessor : geeft write-access Functie voor het plaatsen van een waarde in een variabele Validatie  Get en Set accessors zijn niet verplicht Een property met enkel een Get accessor is een ReadOnly property Een property met enkel een Set accessor is een WriteOnly property

22 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Properties Toevoegen van een property aan een klasse  Declaratie van lokale variabele voor bijhouden van waarde (indien nodig) Private mHour As Integer  Declareer property Typ in de keywords Public Property gevolgd door naam van property en data type property.Net genereert automatisch raamwerk met Get en Set Public Property Hour() As Integer Get End Get Set(ByVal Value As Integer) End Set End Property  Schrijf de code voor Get en Set property procedures.

23 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Properties  Voorbeeld property Hour ' property Hour 56 Public Property Hour() As Integer ' return mHour value 59 Get 60 Return mHour 61 End Get ' set mHour value 64 Set(ByVal value As Integer) If (value >= 0 AndAlso value < 24) Then 67 mHour = value 68 Else 69 mHour = 0 70 End If End Set End Property ' Hour Definitie property Hour Validatie input mHour

24 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Properties De settime procedure wordt dan ' set new time value using universal time; uses properties to perform validity checks on data Public Sub SetTime(ByVal hourValue As Integer, _ ByVal minuteValue As Integer, ByVal secondValue As Integer) Hour = hourValue ' looks Minute = minuteValue ' dangerous Second = secondValue ' but it is correct End Sub ' SetTime

25 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Objecten als instances van andere klassen Compositie: gebruik van referenties naar objecten van bestaande klasses als members van nieuwe objecten “heeft een”-relatie  Vb1. Een alarmklok heeft een tijd Dus de klasse CAlarmClock zal als instantievariabele een referentie naar een CTime object hebben  Vb2. Een werknemer heeft een geboortedatum en een inhuurdatum

26 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag 'CDay.vb 2 ' Encapsulates month, day and year. 3 4 Imports System.Windows.Forms 5 6 Class CDay 7 Inherits Object 8 9 Private mMonth As Integer ' Private mDay As Integer ' 1-31 based on month 11 Private mYear As Integer ' any year ' constructor confirms proper value for month, then calls 14 ' method CheckDay to confirm proper value for day 15 Public Sub New(ByVal monthValue As Integer, _ 16 ByVal dayValue As Integer, ByVal yearValue As Integer) ' ensure month value is valid 19 If (monthValue > 0 AndAlso monthValue <= 12) Then 20 mMonth = monthValue 21 Else 22 mMonth = ' inform user of error 25 Dim errorMessage As String = _ 26 "Month invalid. Set to month 1." MessageBox.Show(errorMessage, "", _ 29 MessageBoxButtons.OK, MessageBoxIcon.Error) 30 End If mYear = yearValue 33 mDay = CheckDay(dayValue) ' validate day End Sub ' New Constructor voor CDay klasse met 3 argumenten Declaratie van 3 Integers als Private instantievariabelen

27 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag ' confirm proper day value based on month and year 38 Private Function CheckDay(ByVal testDayValue As Integer) _ 39 As Integer Dim daysPerMonth() As Integer = _ 42 {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} If (testDayValue > 0 AndAlso _ 45 testDayValue <= daysPerMonth(mMonth)) Then Return testDayValue 48 End If ' check for leap year in February 51 If (mMonth = 2 AndAlso testDayValue = 29 AndAlso _ 52 mYear Mod 400 = 0 OrElse mYear Mod 4 = 0 AndAlso _ 53 mYear Mod 100 <> 0) Then Return testDayValue 56 Else ' inform user of error 59 Dim errorMessage As String = _ 60 "day " & testDayValue & "invalid. Set to day 1. " MessageBox.Show(errorMessage, "", _ 63 MessageBoxButtons.OK, MessageBoxIcon.Error) Return 1 ' leave object in consistent state 66 End If 68 End Function ' CheckDay ' create string containing month/day/year format 71 Public Function ToStandardString() As String 72 Return mMonth & "/" & mDay & "/" & mYear 73 End Function ' ToStandardString 75 End Class ' CDay

28 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag ' CEmployee.vb 2 ' Represent employee name, birthday and hire date. 4 Class CEmployee 5 Inherits Object 6 7 Private mFirstName As String 8 Private mLastName As String 9 Private mBirthDate As CDay ' member object reference 10 Private mHireDate As CDay ' member object reference ' CEmployee constructor 13 Public Sub New(ByVal firstNameValue As String, _ 14 ByVal lastNameValue As String, _ 15 ByVal birthMonthValue As Integer, _ 16 ByVal birthDayValue As Integer, _ 17 ByVal birthYearValue As Integer, _ 18 ByVal hireMonthValue As Integer, _ 19 ByVal hireDayValue As Integer, _ 20 ByVal hireYearValue As Integer) mFirstName = firstNameValue 23 mLastName = lastNameValue ' create CDay instance for employee birthday 26 mBirthDate = New CDay(birthMonthValue, birthDayValue, _ 27 birthYearValue) 29 ' create CDay instance for employee hire date 30 mHireDate = New CDay(hireMonthValue, hireDayValue, _ 31 hireYearValue) 32 End Sub ' New 34 ' return employee information as standard-format String 35 Public Function ToStandardString() As String 36 Return mLastName & ", " & mFirstName & " Hired: " _ 37 & mHireDate.ToStandardString() & " Birthday: " & _ 38 mBirthDate.ToStandardString() 39 End Function ' ToStandardString 41 End Class ' CEmployee 2 Private Strings en 2 Private referenties naar objecten van de klasse CDay als instantievariabelen De constructor van de CDay klasse wordt gebruikt om een geboortedatum en een inhuurdatum aan te maken

29 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Objecten als instances van andere klassen 1 ' Fig. 8.10: CompositionTest.vb 2 ' Demonstrate an object with member object reference. 3 4 Imports System.Windows.Forms 5 6 Module modCompositionTest 7 8 Sub Main() 9 Dim employee As New CEmployee( _ 10 "Bob", "Jones", 7, 24, 1949, 3, 12, 1988) MessageBox.Show(employee.ToStandardString(), _ 13 "Testing Class Employee") 14 End Sub ' Main End Module ' modCompositionTest Om een werknemer aan te maken wordt de constructor van de CEmployee klasse opgeroepen, die op zijn beurt tweemaal de constructor van de CDay klasse zal oproepen voor de constructie van de geboorte- en inhuurdatum

30 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag. 30 Oefening Pas de CDay klasse aan met een methode NextDay die de datum met één dag verhoogt. Het CDay object moet steeds in een consistente staat blijven. Schrijf een programma dat de NextDay methode test in een lus waarbij in elke iteratie de huidige datum getoond wordt om aan te tonen dat de NextDay methode op een correcte manier werkt. Let hierbij vooral op:  Overgang naar een nieuwe maand  Overgang naar een nieuw jaar

31 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Gebruik van de Me referentie Elk object heeft toegang tot een referentie naar zichzelf via Me  Expliciet: voor de duidelijkheid, zelfs al is het niet nodig  Impliciet: om te refereren naar instantievariabelen, eigenschappen en methodes van een object

32 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Gebruik van de Me referentie 1 ' CTime4.vb 2 ' Encapsulate time using Me reference. 3 4 Class CTime4 5 Private mHour, mMinute, mSecond As Integer 6 7 ' CTime4 constructor 8 Public Sub New(ByVal mHour As Integer, _ 9 ByVal mMinute As Integer, ByVal mSecond As Integer) Me.mHour = mHour 12 Me.mMinute = mMinute 13 Me.mSecond = mSecond 14 End Sub ' New ' create String using Me and implicit references 17 Public Function BuildString() As String 18 Return "Me.ToUniversalString(): " & Me.ToUniversalString() _ 19 & vbCrLf & "ToUniversalString(): " & ToUniversalString() 20 End Function ' BuildString ' convert to String in standard-time format 23 Public Function ToUniversalString() As String 24 Return String.Format("{0:D2}:{1:D2}:{2:D2}", _ 25 mHour, mMinute, mSecond) 26 End Function ' ToUniversalString End Class ' CTime4 Aangezien de argumenten dezelfde naam hebben als de instantievariabelen, moet je Me gebruiken om expliciet naar de instantievariabelen te refereren Om de functie ToUniversalString op te roepen, is het niet nodig om expliciet Me te gebruiken (lijn 18). Als je het impliciet doet (lijn 19), dan is het resultaat hetzelfde.

33 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Garbage collection Via keyword new wordt geheugen gealloceerd en daarna wordt de constructor opgeroepen, die mogelijk nog andere systeembronnen nodig heeft (vb. netwerk- en/of databankconnecties). Er moet voor het object een manier zijn om deze terug te geven wanneer het object niet meer gebruikt wordt  garbage collection Hoe referentie naar object vernietigen?  Expliciet : -myPerson=nothing -Door onze variabele naar een ander object te doen verwijzen: myPerson = New Person()  Impliciet : variabele gaat out-of-scope

34 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Garbage collection In VB.Net:  Objecten waar geen referenties meer naar bestaan, worden door de garbage collector gezocht, zodat het geheugen automatisch opnieuw kan vrijgeven worden  Geen lekken zoals in C of C++  Finalizer methode: zorgt voor de eindhuishouding net voor de garbage collector langskomt

35 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Shared klasse members Een Shared klassevariabele:  Een programma bevat slechts 1 kopie van die variabele in geheugen (Wordt dus maar één keer bijgehouden per klasse, niet één keer per object zoals andere instantievariabelen)  Alle klasse objecten delen dezelfde copy van die variabele  Is niet hetzelfde als een “global” variabele in C en C++ want Shared klassevariabelen hebben klasse scope. Referentie naar Public Shared member kan via: klasseNaam.sharedMemberNaam Referentie naar Private Shared member kan alleen via members van deze klasse Shared members bestaan gedurende de hele duur van de uitvoering van het programma, zelfs als er geen objecten van die klasse meer bestaan.

36 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Shared klasse members Een Shared method:  Heeft geen toegang tot niet-Shared klasse members  Heeft geen Me referentie, aangezien ze onafhankelijk is van de klasse objecten en zelfs wanneer er geen objecten van deze klassen zijn toch bestaat Klasse CEmployee2  Gebruikt een Private Shared klassevariabele mCount om het aantal werknemers (= het aantal objecten van de klasse CEmployee2 die in het geheugen zitten, inclusief degene die al gemarkeerd staan om door de garbage collector opgehaald te worden) bij te houden.

37 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Shared klasse members 1 ' CEmployee2.vb 2 ' Class CEmployee2 uses Shared variable. 3 4 Class CEmployee2 5 Inherits Object 6 7 Private mFirstName As String 8 Private mLastName As String 9 10 ' number of objects in memory 11 Private Shared mCount As Integer ' CEmployee2 constructor 14 Public Sub New(ByVal firstNameValue As String, _ 15 ByVal lastNameValue As String) mFirstName = firstNameValue 18 mLastName = lastNameValue mCount += 1 ' increment shared count of employees 21 Console.WriteLine _ 22 ("Employee object constructor: " & mFirstName & _ 23 " " & mLastName) 24 End Sub ' New ' finalizer method decrements Shared count of employees 27 Protected Overrides Sub Finalize() 28 mCount -= 1 ' decrement mCount, resulting in one fewer object 29 Console.WriteLine _ 30 ("Employee object finalizer: " & mFirstName & _ 31 " " & mLastName & "; count = " & mCount) 32 End Sub ' Finalize 33

38 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Shared klasse members 34 ' return first name 35 Public ReadOnly Property FirstName() As String Get 38 Return mFirstName 39 End Get End Property ' FirstName ' return last name 44 Public ReadOnly Property LastName() As String Get 47 Return mLastName 48 End Get End Property ' LastName ' property Count 53 Public ReadOnly Shared Property Count() As Integer Get 56 Return mCount 57 End Get End Property ' Count End Class ' CEmployee2 Als er geen objecten van de klasse CEmployee2 zijn, kan de Property Count gebruikt worden om een referentie naar mCount te verkrijgen.

39 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag ' SharedTest.vb 2 ' Demonstrates Shared members. 4 Imports System.Windows.Forms 5 6 Module modSharedTest 7 8 Sub Main() 9 Dim output As String Console.WriteLine("Employees before instantiation: " & _ 12 CEmployee2.Count) Dim employee1 As CEmployee2 = _ 15 New CEmployee2("Susan", "Baker") 17 Dim employee2 As CEmployee2 = _ 18 New CEmployee2("Bob", "Jones") ' output of employee2 after instantiation 21 Console.WriteLine(vbCrLf & _ 22 "Employees after instantiation: " & vbCrLf & _ 23 "via Employee.Count: " & CEmployee2.Count) ' display name of first and second employee 26 Console.WriteLine(vbCrLf & "Employees 1: " & _ 27 employee1.FirstName & " " & employee1.LastName & _ 28 vbCrLf & "Employee 2: " & employee2.FirstName & " " & _ 29 employee2.LastName) ' mark employee1 and employee2 for garbage collection 32 employee1 = Nothing 33 employee2 = Nothing System.GC.Collect() ' request garbage collection 36 End Sub ' Main End Module ' modShared Twee objecten van de klasse CEmployee2, dus mCount staat op 2.

40 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Shared klasse members Employees before instantiation: 0 Employee object constructor: Susan Baker Employee object constructor: Bob Jones Employees after instantiation: via Employee.Count: 2 Employees 1: Susan Baker Employee 2: Bob Jones Employee object finalizer: Bob Jones; count = 1 Employee object finalizer: Susan Baker; count = 0

41 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Const en ReadOnly members Constanten: Const of Readonly gebruiken?  Const: MOET geïnitialiseerd worden in de declaratie  ReadOnly: KAN geïnitialiseerd worden in de declaratie of in de constructor van de klasse  Beiden mogen, eens ze een waarde gekregen hebben, nooit meer aangepast worden  Als de waarde van een Const kan bepaald worden door de compiler, dan kan deze toegekend worden aan de Const data member, terwijl de waarde van ReadOnly members slechts at runtime bepaald wordt Vb. Convert.ToDouble (“ ”)  Er wordt een constante String gebruikt, maar dit geeft een syntax error als je deze waarde aan een Const wilt toekennen, omdat de compiler de waarde nog niet kent. Toekenning aan een ReadOnly kan wel.

42 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Const en ReadOnly members 1 ' CCircleConstants.vb 2 ' Encapsulate constants PI and radius. 3 4 Class CCircleConstants 5 6 ' PI is constant data member 7 Public Const PI As Double = ' radius is uninitialized constant 10 Public ReadOnly RADIUS As Integer ' constructor of class CCircleConstants 13 Public Sub New(ByVal radiusValue As Integer) 14 RADIUS = radiusValue 15 End Sub ' New End Class ' CCircleConstants PI is Const want de waarde is bekend at compile time RADIUS is ReadOnly want de waarde wordt maar bepaald at runtime

43 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Const en ReadOnly members 1 ' ConstAndReadOnly.vb 2 ' Demonstrates Const and ReadOnly members. 3 4 Imports System.Windows.Forms 5 6 Module modConstAndReadOnly 7 8 Sub Main() 9 Dim random As Random = New Random() 10 Dim circle As CCircleConstants = _ 11 New CCircleConstants(random.Next(1, 20)) Dim radius As String = Convert.ToString(circle.RADIUS) Dim output As String = "Radius = " & radius & vbCrLf _ 16 & "Circumference = " + String.Format("{0:N3}", _ 17 circle.RADIUS * 2 * CCircleConstants.PI) MessageBox.Show(output, "Circumference", _ 20 MessageBoxButtons.OK, MessageBoxIcon.Information) 21 End Sub ' Main End Module ' modConstAndReadOnly Random geheel getal bepalen in het interval [1-20] Toegang tot de ReadOnly variabele RADIUS Toegang tot de Const variabele PI

44 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Data abstraction en information hiding Stacks  Last In, First Out Vb. Stapel met dienbladen in de cafetaria “push” en “pop” functies Queue  First In, First Out Vb. Printer die documenten in FIFO volgorde print “enqueue” en “dequeue” functies

45 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Software herbruikbaarheid Rapid Application Development (RAD)  Hergebruik van software Snellere ontwikkeling van krachtige software van hoge kwaliteit

46 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Namespaces en Assemblies Framework Class Library (FCL) .NET framework Moet geïmporteerd worden in een Visual Basic programma door een referentie naar deze bibliotheken toe te voegen (zie Hfdst 2)  Namespaces Conventie: unieke klassenamen, zodat er een minimaal aantal collisies kunnen optreden Klasses met dezelfde naam kunnen wél nog in verschillende namespaces voorkomen

47 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Namespaces en Assemblies Maken van een klassenbibliotheek  File > New > Project... Visual Basic Projects als Project Type Class Library als Template Naam: EmployeeLibrary  Opm : klasses zijn Public zodat ze toegankelijk zijn van buitenaf  Hernoem de klasse Class1.vb in de Solution Explorer als CEmployee.vb en pas de code aan  Kies Build > Build Solution om de code te compileren  Maakt een dll bestand aan in de bin directory van het project Gebruik in ander project : voeg referentie toe  Project > Add Reference  Localiseer met Browse de dll  Importeer de namespace : Imports EmployeeLibrary

48 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag ' CEmployee3.vb 2 ' Class CEmployee3 uses Shared variable. 3 4 Public Class CEmployee3 5 Inherits Object 6 7 Private mFirstName As String 8 Private mLastName As String 9 10 ' number of objects in memory 11 Private Shared mCount As Integer ' CEmployee3 constructor 14 Public Sub New(ByVal firstNameValue As String, _ 15 ByVal lastNameValue As String) mFirstName = firstNameValue 18 mLastName = lastNameValue mCount += 1 ' increment shared count of employees 21 Console.WriteLine _ 22 ("Employee object constructor: " & mFirstName & _ 23 " " & mLastName) 24 End Sub ' New ' finalizer method decrements Shared count of employees 27 Protected Overrides Sub Finalize() 28 mCount -= 1 ' decrement mCount, resulting in one fewer object 29 Console.WriteLine _ 30 ("Employee object finalizer: " & mFirstName & _ 31 " " & mLastName & "; count = " & mCount) 32 End Sub ' Finalize 33

49 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Namespaces en Assemblies 34 ' return first name 35 Public ReadOnly Property FirstName() As String Get 38 Return mFirstName 39 End Get End Property ' FirstName ' return last name 44 Public ReadOnly Property LastName() As String Get 47 Return mLastName 48 End Get End Property ' LastName ' property Count 53 Public ReadOnly Shared Property Count() As Integer Get 56 Return mCount 57 End Get End Property ' Count End Class ' CEmployee3

50 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag ' AssemblyTest.vb 2 ' Demonstrates assembly files and namespaces. 3 4 Imports EmployeeLibrary ' contains class CEmployee3 5 6 Module modAssemblyTest 7 8 Public Sub Main() 9 Dim output As String Console.WriteLine("Employees before instantiation: " & _ 12 CEmployee3.Count) Dim employee1 As CEmployee3 = _ 15 New CEmployee3("Susan", "Baker") Dim employee2 As CEmployee3 = _ 18 New CEmployee3("Bob", "Jones") ' output of employee after instantiation 21 Console.WriteLine(vbCrLf & "Employees after instantiation:" _ 22 & vbCrLf & "via Employee.Count: " & CEmployee3.Count) ' display name of first and second employee 25 Console.WriteLine(vbCrLf & "Employees 1: " & _ 26 employee1.FirstName & " " & employee1.LastName & _ 27 vbCrLf & "Employee 2: " & employee2.FirstName & " " & _ 28 employee2.LastName) ' mark employee1 and employee2 for garbage collection 31 employee1 = Nothing 32 employee2 = Nothing System.GC.Collect() ' request garbage collection 35 End Sub ' Main End Module ' modAssemblyTest Referentie naar de EmployeeLibrary.dll file

51 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Namespaces en Assemblies Employees before instantiation: 0 Employee object constructor: Susan Baker Employee object constructor: Bob Jones Employees after instantiation: via Employee.Count: 2 Employees 1: Susan Baker Employee 2: Bob Jones Employee object finalizer: Bob Jones; count = 1 Employee object finalizer: Susan Baker; count = 0

52 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Class View en Object Browser Class View  Toont de klassen uit een project Kies View > Class View Hiërarchische structuur van knopen (klasses, variabelen, methodes, …) Object Browser  Toont de Framework Class Library (FCL) klasses die beschikbaar zijn in Visual Basic Om deze te openen, klik met de rechtermuisknop op om het even welke klasse of methode in de code editor en kies Go To Definition De Object Browers toont de functionaliteit voorzien voor het specifieke object

53 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Class View en Object Browser Class View van CTime klasse en modTimeTest module

54 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Class View en Object Browser Object Browser wanneer de gebruiker rechts klikt op Object uit CTime.vb

55 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag. 55 Alle icoontjes

56 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag. 56 Addendum UML Object ->.Net Object  Entiteit met toestand, gedrag en identiteit UML Class ->.NET Class of Structure  Entiteit met rol van type, factory en service object UML Association ->.NET Reference  Entiteit voor communicatie tussen objecten

57 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag. 57 Addendum UML Package ->.Net Project  Verzameling van elementen (classes, interfaces, sub- packages) UML Component ->.NET Assembly  Entiteit voor het bouwen van applicaties

58 Hoofdstuk 5: Object Based programmerenVisual Basic.NETPag Implementatie van klasse CTime Abstract Data Types (ADT)  Klassen laten toe een data type te definieren  Instance variable Object in consistente staat Initializeert de instance variables Informatie hiding Programma’s die nooit aangepast moeten worden, vormen een uitzondering. Om te kunnen anticiperen op deze veranderingen, is het goed dat klasses gebruikt worden, zodat het programma gemakkelijker aanpasbaar is.


Download ppt "Visual Basic.NETPag.1 Hoofdstuk 5 – Object Based Programmeren Inleiding Abstract type Time implementeren via een klasse Klasse Scope Toegang tot members."

Verwante presentaties


Ads door Google