De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Overerving Hoofdstuk 11 Hoofdstuk 11.

Verwante presentaties


Presentatie over: "Overerving Hoofdstuk 11 Hoofdstuk 11."— Transcript van de presentatie:

1 Overerving Hoofdstuk 11 Hoofdstuk 11

2 Visual Basic .NET voor studenten
In dit hoofdstuk … een nieuwe klasse maken op basis van een bestaande klasse Wanneer en hoe Protected variabelen Wanneer en hoe methodes overschrijven UML MyBase en MustInherit Visual Basic .NET voor studenten

3 Visual Basic .NET voor studenten
Inleiding Hoe hergebruik stimuleren Een bestaande klasse die “bijna” alles doet wat je wil kan je m.b.v. overerving uitbreiden Overerving is niet de enige oplossing. Een andere (en vaak betere) methode is compositie (hoofdstuk 20) Visual Basic .NET voor studenten Hoofdstuk 11

4 Een basisklasse: Sphere
Public Class Sphere Protected xCoord As Integer = 100 Protected yCoord As Integer = 100 Protected myPen As Pen = New Pen(Color.Black) Public WriteOnly Property X() As Integer Set(ByVal Value As Integer) xCoord = Value End Set End Property Public WriteOnly Property Y() As Integer yCoord = Value Public Overridable Sub Display(ByVal drawArea As Graphics) drawArea.DrawEllipse(myPen, xCoord, yCoord, 20, 20) End Sub End Class Beschrijft enkel stilstaande objecten Deze klasse dient als basis voor Bubble (afmeting veranderen) en de klasse Ball (horizontaal bewegen) Visual Basic .NET voor studenten Hoofdstuk 11

5 Een subklasse: Bubble Public Class Bubble Inherits Sphere superklasse
Protected radius As Integer = 10 Public WriteOnly Property Size() As Integer Set (ByVal value As Integer) radius = value End Set End Property Public Overrides Sub Display(ByVal drawArea As Graphics) drawArea.DrawEllipse(myPen, xCoord, yCoord, _ 2 * radius, 2 * radius) End Sub End Class superklasse Overschrijft het gedrag van de basisklasse Sphere Visual Basic .NET voor studenten Hoofdstuk 11

6 Betekenis van overerven
“Dit betekent dat deze klasse alle items van de klasse Sphere overerft. Bovendien heeft deze klasse toegang tot alle items die niet als Private binnen de klasse Sphere staan aangegeven” Ook de Private items worden dus overgeërfd, ze zijn enkel niet toegankelijk Visual Basic .NET voor studenten Hoofdstuk 11

7 Visual Basic .NET voor studenten
Protected Doel: instantievariabelen beschikbaar stellen voor subklassen Dus: de klasse voorbereiden op hergebruik Niveaus Public overal toegankelijk Protected enkel toegankelijk vanuit een subklasse en vanuit de klasse zelf Private enkel toegankelijk vanuit de klasse zelf Lokale variabelen bestaan enkel binnen de body van een methode Deze sleutelwoorden zijn eveneens van toepassing op methoden Dilemma: wanneer maak ik een variabele Private en wanneer Protected? Hergebruik = moeilijk voorspelbaar Visual Basic .NET voor studenten Hoofdstuk 11

8 Visual Basic .NET voor studenten
Aanvullende items De subklasse kan vanzelfsprekend aangevuld worden met instantievariabelen, methodes en properties, net zoals een “gewone” klasse Voorbeelden radius Size() property Visual Basic .NET voor studenten Hoofdstuk 11

9 Visual Basic .NET voor studenten
Overschrijven Methoden/Properties uit de basisklasse van een nieuwe implementatie voorzien Sleutelwoorden Overridable Deze methode/property van de basisklasse kan mogelijk overschreven worden Overrides Deze methode/property van de subklasse overschrijft een methode/property van de basisklasse Deze methode/property kan mogelijk opnieuw overschreven worden door een verdere subklasse van deze (sub)klasse Visual Basic .NET voor studenten Hoofdstuk 11

10 Visual Basic .NET voor studenten
Overschrijven Experiment: tracht eens een methode te overschrijven van een superklasse die niet Overridable is? Beschouw volgende klassen. Schrijf een implementatie uit op papier alsook een testprogramma Visual Basic .NET voor studenten Hoofdstuk 11

11 Visual Basic .NET voor studenten
UML Diagram Sound()  “huh?” Overerving wordt aangeduid door een gesloten, driehoekige pijl van de subklasse naar de superklasse Sound()  “Woef woef” Overerving noemt men ook wel eens de IS-EEN relatie: “Een SmallDog is een Dog” “Een Dog is een Animal” “Een SmallDog is ook een Animal” “Niet alle Dogs zijn SmallDogs!” Sound()  “Kef kef” Visual Basic .NET voor studenten Hoofdstuk 11

12 Visual Basic .NET voor studenten
Testprogramma Wat is de uitvoer? ... Dim anim1, anim2, anim3 As Animal anim1 = New Animal("Woefie") anim2 = New Dog("Pluto") anim3 = New SmallDog("Fifike") PrintAnimal(anim1) PrintAnimal(anim2) PrintAnimal(anim3) Private Sub PrintAnimal(ByVal animal As Animal) MessageBox.Show("animal (" & _ animal.Name & ") sounds as: " & _ animal.Sound) End Sub Visual Basic .NET voor studenten Hoofdstuk 11

13 Overerving in de praktijk
Een subklasse erft steeds alles over van al zijn superklassen (behalve constructors; zie later) Enkel de Protected en Public members zijn beschikbaar, de Private members blijven achter de schermen aanwezig Een klasse kan rechtstreeks slechts van één andere klasse overerven (= Single Inheritance) Java,C#: Single Inheritance C++: Multiple Inheritance De ultieme superklasse waar elke andere klasse van overerft: System.Object Visual Basic .NET voor studenten Hoofdstuk 11

14 Visual Basic .NET voor studenten
System.Object De properties en methodes van deze klasse zijn universeel (voor elke klasse) nuttig en noodzakelijk. Waarom zou je ToString() willen overschrijven? Visual Basic .NET voor studenten Hoofdstuk 11

15 Visual Basic .NET voor studenten
MyBase Referentie naar het (onmiddellijke) super-gedeelte van dit object Wordt gebruikt om methode / property / variabele aanroepen te doen van de superklasse Veel gebruikt: de overschreven methode doet hetzelfde als de methode van de superklasse + net iets meer Visual Basic .NET voor studenten Hoofdstuk 11

16 Visual Basic .NET voor studenten
Voorbeeld Public Class Vierkant Protected zijde As Integer Public Sub New(ByVal z As Integer) Me.zijde = z End Sub Public Overridable Function Oppervlakte() As Integer Return zijde * zijde End Function End Class Public Class Kubus Inherits Vierkant Public Sub New(ByVal z As Integer) MyBase.New(z) 'Me.New(z) ' Wat is hier mis mee? End Sub Public Overrides Function Oppervlakte() As Integer Return MyBase.Oppervlakte * 6 End Function End Class Visual Basic .NET voor studenten Hoofdstuk 11

17 Visual Basic .NET voor studenten
Constructor Genaamd New() Als geen constructor is voorzien  impliciet een default constructor zonder params Als je wel een constructor voorziet  moet je expliciet een parameterloze constructor declareren indien nodig Constructors worden niet overgeërfd! Een constructor van een subklasse roept impliciet de default constructor van de superklasse op, tenzij je expliciet een andere constructor van de parent klasse aanroept. Visual Basic .NET voor studenten Hoofdstuk 11

18 Visual Basic .NET voor studenten
Balloon voorbeeld Public Class Balloon Protected xCoord, yCoord, radius As Integer Public Sub New() xCoord = 10 yCoord = 10 radius = 20 End Sub Public Sub New(ByVal initialX As Integer, _ ByVal initialY As Integer, _ ByVal initialRadius As Integer) xCoord = initialX yCoord = initialY radius = initialRadius ' remainder of class End Class Visual Basic .NET voor studenten Hoofdstuk 11

19 Visual Basic .NET voor studenten
Balloon voorbeeld Class DifferentBalloon Inherits Balloon Public Sub New(ByVal initialX As Integer, _ ByVal initialY As Integer) MyBase.New() xCoord = initialX yCoord = initialY radius = 20 End Sub ' remainder of class End Class Deze oproep gebeurt altijd, tenzij je expliciet een andere constructor van de parent oproept. Dit dient dan de eerste lijn van de body te zijn Wat zou er gebeuren als in Balloon de constructor zonder parameters wordt weggelaten? Visual Basic .NET voor studenten Hoofdstuk 11

20 Visual Basic .NET voor studenten
Balloon voorbeeld Class ModifiedBalloon Inherits Balloon Public Sub New(ByVal initialX As Integer, _ ByVal initialY As Integer, _ ByVal initialRadius As Integer) MyBase.New(initialX, initialY, initialRadius) End Sub ' remainder of class End Class Expliciete oproep van de parent constructor. Merk op: deze constructor dient gedeclareerd, want constructors worden niet overgeërfd! Visual Basic .NET voor studenten Hoofdstuk 11

21 Visual Basic .NET voor studenten
Abstracte klassen Zeer dikwijls zijn base klassen van een inheritance tree niet instantieerbaar: Deze klassen voorzien enkel gemeenschappelijke kenmerken voor subklassen, zowel properties als methoden Deze klassen voorzien methoden/properties zonder implementatie, die wel in subklassen zinvol kunnen worden ingevuld Visual Basic .NET voor studenten Hoofdstuk 11

22 Voorbeeld (licht gewijzigd)
Public MustInherit Class Shape Protected xCoord, yCoord As Integer Protected myPen As Pen = New Pen(Color.Black) Public Sub MoveRight() xCoord = xCoord + 10 End Sub Public MustOverride Sub Display(ByVal drawArea As Graphics) End Class Van deze methode bestaat (nog) geen implementatie. Deze moet ingevuld worden in de subklassen. Logisch, want een Shape is pas toonbaar als we al zijn eigenschappen bepaald hebben Van deze klasse kan je geen objecten maken. Logisch, want een shape heeft fysisch nog geen betekenis Visual Basic .NET voor studenten Hoofdstuk 11

23 Visual Basic .NET voor studenten
Subklasse Circle Public Class Circle Inherits Shape Protected radius As Integer ... Public Overrides Sub Display(ByVal drawArea As Graphics) drawArea.DrawEllipse(myPen, xCoord, yCoord, radius, radius) End Sub End Class Een Circle is een Shape met een straal (radius). Nu kan de Display methode zinvol geïmplementeerd worden Visual Basic .NET voor studenten Hoofdstuk 11

24 Visual Basic .NET voor studenten
Oefening Animal, SmallDog, Dog Welke klasse / methode is mogelijk abstract? Pas de code aan Visual Basic .NET voor studenten Hoofdstuk 11

25 Visual Basic .NET voor studenten
UML notatie Abstracte klassen en methoden worden schuin gedrukt weergegeven Visual Basic .NET voor studenten Hoofdstuk 11

26 Visual Basic .NET voor studenten
NotInheritable In sommige gevallen kan je als programmeur beslissen dat van een klasse niet meer kan overgeërfd worden Veiligheidsoverweging Bv. een klasse die een methode heeft om paswoorden te valideren Let hiermee op, want je beperkt dus hergebruik van je klasse! Soms zijn toch zinvolle voorbeelden te vinden: De klasse System.Math is NotInheritable, een wiskundige functie ligt voor altijd vast. Visual Basic .NET voor studenten Hoofdstuk 11

27 Visual Basic .NET voor studenten
Voorbeeld Public NotInheritable Class SmallDog ... End Class Visual Basic .NET voor studenten Hoofdstuk 11

28 Visual Basic .NET voor studenten
Partial Om de gegenereerde code netjes te kunnen scheiden van de code van de programmeur Voor eigen klassen niet aanbevolen Visual Basic .NET voor studenten

29 Visual Basic .NET voor studenten
Partial Form1.vb Public Class Form1 ' Hier schrijf je eigen code, zoals: ' - event-code ' - methodes ' - ... End Class <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ Partial Class Form1 Inherits System.Windows.Forms.Form ' Hier staat code gegenereerd door de IDE End Class Form1.Designer.vb Visual Basic .NET voor studenten


Download ppt "Overerving Hoofdstuk 11 Hoofdstuk 11."

Verwante presentaties


Ads door Google