De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Overerving Hoofdstuk 11. Visual Basic.NET voor studenten2 In dit hoofdstuk … een nieuwe klasse maken op basis van een bestaande klasse Wanneer en hoe.

Verwante presentaties


Presentatie over: "Overerving Hoofdstuk 11. Visual Basic.NET voor studenten2 In dit hoofdstuk … een nieuwe klasse maken op basis van een bestaande klasse Wanneer en hoe."— Transcript van de presentatie:

1 Overerving Hoofdstuk 11

2 Visual Basic.NET voor studenten2 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

3 Hoofdstuk 11 Visual Basic.NET voor studenten3 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)

4 Hoofdstuk 11 Visual Basic.NET voor studenten4 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 Set(ByVal Value As Integer) yCoord = Value End Set End Property 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)

5 Hoofdstuk 11 Visual Basic.NET voor studenten5 Een subklasse: Bubble Public Class Bubble Inherits Sphere 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

6 Hoofdstuk 11 Visual Basic.NET voor studenten6 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

7 Hoofdstuk 11 Visual Basic.NET voor studenten7 Protected Doel: instantievariabelen beschikbaar stellen voor subklassen Dus: de klasse voorbereiden op hergebruik Niveaus 1. Public overal toegankelijk 2. Protected enkel toegankelijk vanuit een subklasse en vanuit de klasse zelf 3. Private enkel toegankelijk vanuit de klasse zelf 4. 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

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

9 Hoofdstuk 11 Visual Basic.NET voor studenten9 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

10 Hoofdstuk 11 Visual Basic.NET voor studenten10 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

11 Hoofdstuk 11 Visual Basic.NET voor studenten11 UML Diagram Overerving wordt aangeduid door een gesloten, driehoekige pijl van de subklasse naar de superklasse Sound()  “huh?” Sound()  “Woef woef” Sound()  “Kef kef” 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!”

12 Hoofdstuk 11 Visual Basic.NET voor studenten12 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

13 Hoofdstuk 11 Visual Basic.NET voor studenten13 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

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

15 Hoofdstuk 11 Visual Basic.NET voor studenten15 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

16 Hoofdstuk 11 Visual Basic.NET voor studenten16 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

17 Hoofdstuk 11 Visual Basic.NET voor studenten17 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.

18 Hoofdstuk 11 Visual Basic.NET voor studenten18 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 End Sub ' remainder of class End Class

19 Hoofdstuk 11 Visual Basic.NET voor studenten19 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?

20 Hoofdstuk 11 Visual Basic.NET voor studenten20 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!

21 Hoofdstuk 11 Visual Basic.NET voor studenten21 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

22 Hoofdstuk 11 Visual Basic.NET voor studenten22 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 klasse kan je geen objecten maken. Logisch, want een shape heeft fysisch nog geen betekenis 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

23 Hoofdstuk 11 Visual Basic.NET voor studenten23 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

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

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

26 Hoofdstuk 11 Visual Basic.NET voor studenten26 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.

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

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

29 Hoofdstuk 11 Visual Basic.NET voor studenten29 Partial Public Class Form1 ' Hier schrijf je eigen code, zoals: ' - event-code '- methodes '-... End Class _ Partial Class Form1 Inherits System.Windows.Forms.Form ' Hier staat code gegenereerd door de IDE End Class Form1.vb Form1.Designer.vb


Download ppt "Overerving Hoofdstuk 11. Visual Basic.NET voor studenten2 In dit hoofdstuk … een nieuwe klasse maken op basis van een bestaande klasse Wanneer en hoe."

Verwante presentaties


Ads door Google