Overerving Hoofdstuk 11 Hoofdstuk 11.

Slides:



Advertisements
Verwante presentaties
KINN 2010 •OOP •O Object •O Georiënteerd •P Programmeren.
Advertisements

Gegevensstructuren: list boxen en lijsten
Objecten Hoofdstuk 6 Hoofdstuk 6 Hoofdstuk 6 1.
Het type int Tekenen met Java operatoren
Klassen en objecten.
Hoofdstuk 6: Controle structuren
Hoofdstuk 2 Hallo, C# !.
Les 2 Basisbouwstenen (deel 1)
‘Inleiding programmeren in Java’ Derde college Maandag 22 januari 2001 drs. F. de Vries.
Exceptions Hoofdstuk 17 Hoofdstuk 17.
Klassen schrijven Hoofdstuk 10. Visual Basic.NET voor studenten2 In dit hoofdstuk … Hoe schrijf je een klasse Constructormethodes Public methoden Variabelen.
Herhaling: For, While en Do
Methoden en argumenten
Consoleprogramma’s Hoofdstuk 19. Visual Basic.NET voor studenten2 In dit hoofdstuk … Hoe consoletoepassingen maken In- en uitvoer bij consoleprogramma’s.
Bestanden Hoofdstuk 18 Hoofdstuk 18.
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Hoofdstuk 8 Objecten en klassen.
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
Oefeningen Hoofdstuk 3.
Visual Basic.
Consoletoepassing Variabelen Klassen
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
Overerving Toepassingen. Overerving: toepassingen zoefening 1 : eenvoudige overerving.
JAVA1 H 9. OBJECTGEORIENTEERD PROGRAMMEREN: OVERERVING 1. INLEIDING Wat is overerving (inheritance)? Overerving is een mechanisme waarbij software opnieuw.
OO Analyse in de praktijk OO Analyse in de praktijk V Enkele Design Patterns.
Herhaling Java-programmatie en geautomatiseerd testen (vervolg)
Visual Basic 2005/2008 OOP in praktijk André Obelink - MCSD, MVP Web: Web: -
KINN 2010 OOP O Object O Georiënteerd P Programmeren.
Testen Hoofdstuk 22. Visual Basic.NET voor studenten2 Inleiding Testen hebben als doel het ontdekken van bugs Het is echter onmogelijk om met testen te.
Visual Basic.NET voor studenten De VB- ontwikkelomgeving Hoofdstuk 2.
Hoofdstuk 5 Interactie. Controls Form Label Button Label TextBox.
Programmeerstijl Hoofdstuk 21. Visual Basic.NET voor studenten2 Inleiding Belang van een goede programmeerstijl:  Programma’s worden door meerdere mensen.
Debuggen Hoofdstuk 9 Hoofdstuk 9.
Les 7 Multiple Document Interface Programmeren met Visual Basic Karl Moens.
Arrays Hoofdstuk 14 Hoofdstuk 14.
Overerving: It’s a kind of magic…. Principes van OO: 1) Overerving 2) Encapsulatie 3) Polymorphisme = (deel van het) OO. paradigma.
Objectgeoriënteerd Ontwerp
Interfaces Hoofdstuk 23 Hoofdstuk 23.
Variabelen en berekeningen
Constructoren Genesis 1:1 Aarde a1 = new Aarde(“Adam”, “Eva”);
Hoofdstuk 6 – Objectgeoriënteerd Programmeren: Overerving
Tweedimensionale arrays
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Encapsulatie: Every man is an island upon himself.
Polymorfie Hoofdstuk 24. Visual Basic.NET voor studenten2 Inleiding Polymorfie zorgt ervoor dat een gegeven object verschillende “vormen” kan aannemen.
Polymorphisme en Interfaces: inleiding
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2.
 C++ heeft een inheritance mechanisme  Manier om functionaliteit te ‘erfen’ van een parrent class ◦ Polymorphisme ◦ Zoals we het ook in C# kennen.
Java & het Web Programma: Contexts Listeners Scope/Attributes Thread safety.
Les 3 - Operators Workshop Php Basic. ICT Academy Php Basic Content Operators Wiskundig Toewijzing Vergelijking.
OOP en.NET. Objecten Is geen ‘nieuw’ mysterieus woord Overal om ons heen zien we objecten: – TV – Computer – Auto – Wasmachine – ….
GEGEVENSSTRUCTUREN IN.NET. Inleiding  Enumerated type  Structure  Collecties  Typed collections  Untyped collections.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Objectgeoriënteerd Programmeren (2)
Gameprogrammeren: Overerving
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Gameprogrammeren: Methoden
Gameprogrammeren: Overerving in Painter
Gameprogrammeren: Abstracte klassen
Gameprogrammeren: Interfaces
Unified Modeling Language
Gameprogrammeren: Klassen en objecten
‘Inleiding objectgeoriënteerd programmeren met PHP’ ‘Inleiding’
Arjan Egges & Paul Bergervoet
Software Development fundamentals
Software Development fundamentals
Transcript van de presentatie:

Overerving Hoofdstuk 11 Hoofdstuk 11

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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