Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2.

Slides:



Advertisements
Verwante presentaties
Les 2 klassediagrammen II
Advertisements

KINN 2010 •OOP •O Object •O Georiënteerd •P Programmeren.
Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht is: Het opbouwen van een tweetal klassen, die samen.
Van domeinklasse tot implementatie
Polymorfie.
Het ontwerpen van een klasse
Het type int Tekenen met Java operatoren
Klassen en objecten.
Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 10: Omgaan met problemen.
Hoofdstuk 2 Hallo, C# !.
‘Inleiding programmeren in Java’ Derde college Maandag 22 januari 2001 drs. F. de Vries.
Overerving Hoofdstuk 11 Hoofdstuk 11.
Hoofdstuk 10 Overerving.
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.
Static Keyword static voor functieleden functie niet voor een object aangeroepen class K {... static int minimum( int i, int j); } aanroep: K::minimum(
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.
Consoletoepassing Variabelen Klassen
Algoritmiek Object-georiënteerd Programmeren
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
JAVA1 H 9. OBJECTGEORIENTEERD PROGRAMMEREN: OVERERVING 1. INLEIDING Wat is overerving (inheritance)? Overerving is een mechanisme waarbij software opnieuw.
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
Opgave 1a: void nvoid staat in de header van een methode die geen resultaatwaarde heeft nde aanroep van een void-methode is dan een opdracht i.p.v. een.
Arrays.
OO Analyse in de praktijk OO Analyse in de praktijk IV OO basisregels.
Herhaling Java-programmatie en geautomatiseerd testen (vervolg)
Overerving Inheritance Overerving l Inleiding l Type-extensie l Compatibiliteit van een basistype met zijn extensie l Statisch en dynamisch type l Run.
Overerving: It’s a kind of magic…. Principes van OO: 1) Overerving 2) Encapsulatie 3) Polymorphisme = (deel van het) OO. paradigma.
Overloading My name is overloading, cause we are many.
Introductie tot GoF patterns in Java
Constructoren Genesis 1:1 Aarde a1 = new Aarde(“Adam”, “Eva”);
Tircms02-p les 3 Functies Strings Structuren. Functies 1. main() 2. { int k; k = 10 ; printf(“%d\n”,fac(k)); } 3. int fac(n) int n; 4. { int f; f= 1;
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.
Scope. Scope van variaben/methoden Een variabele is te gebruiken binnen de { en } waarbinnen hij is aangemaakt. Hetzelfde geld voor een methode { int.
Encapsulatie: Every man is an island upon himself.
Polymorphisme en Interfaces: inleiding
Hoofdstuk 3 Tekenen en rekenen.
Hoofdstuk 4 Nieuwe methoden. Tekenen g.drawRect(20,60,40,40); g.drawLine(20,60,40,40); g.drawLine(40,40,60,60); g.drawRect(70,60,40,40); g.drawLine(70,60,90,40);
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 8: Gebruikersinterface © 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.
Hoofdstuk 2 Hallo, C# !. Opbouw broncode nOpdrachten om het geheugen te veranderen nOpdrachten zijn gegroepeerd in methoden nMethoden zijn gegroepeerd.
Klasse uit library Android.App Activity Bij het starten van een app: nOperating system maakt een Activity -object aan… n…en neemt dat onderhanden met de.
Soorten programma’s nConsole- applicatie. Soorten programma’s nConsole- applicatie nWindows- applicatie.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 3 inleveropdrachten) college Tent. 1 Tent. 3 college prakt. 1 prakt. 3 prakt.
Herhaling: He who does not learn from history, is doomed to repeat it.
Les 3 - Operators Workshop Php Basic. ICT Academy Php Basic Content Operators Wiskundig Toewijzing Vergelijking.
Eigen klassen maken A new way of thinking.. Wat? Zie voorbeeld. Zie voorbeeld.
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)
Objectgeoriënteerd Programmeren
Gameprogrammeren: Objecten en geheugen
Gameprogrammeren: Overerving
Object georiënteerd programmeren
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Gameprogrammeren: Methoden
Gameprogrammeren: Overerving in Painter
Gameprogrammeren: Game Basics
Tinpro015b-les4 Klassen.
Voortborduren op eerder gedaan werk
Gameprogrammeren: Abstracte klassen
Unified Modeling Language
Gameprogrammeren: Klassen en objecten
Arjan Egges & Paul Bergervoet
Software Development fundamentals
Software Development fundamentals
Transcript van de presentatie:

Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2

Wat is overerving? Overerving: uit een bestaande klasse (superklasse, basisklasse) leidt je een andere klasse (subklasse) af Deze afgeleide klasse beschikt over alle eigenschappen (variabelen en methoden) van de basisklasse en eigenschappen van zichzelf

Hoe kun je overerving herkennen? Tussen de subklasse en de superklasse bestaat een is-een relatie Een rechthoek is een vierhoek Een parallellogram is een vierhoek Een paard is een zoogdier Een fiets is een voertuig Een auto is een voertuig

Superklasse/subklasse Voertuig is algemener Voertuig is een superklasse Fiets en Auto zijn speciale vormen van voertuigen Fiets is een subklasse van Voertuig auto is een subklasse van Voertuig 4

Overerving OVERERVING SUPERKLASSE SUBKLASSE A SUBKLASSE BSUBKLASSE C

Overerving Superklasse Subklassen Klasse Rechthoek erft van klasse Vierhoek Klasse Parallellogram erft ook van Vierhoek

Subklasse van een subklasse

Overerving in Java Subklasse erft alle methoden en attributen, niet de constructoren class Parallellogram extends Vierhoek class Rechthoek extends Vierhoek

Eenvoudig voorbeeld class Rechthoek { protected int breedte = 200, hoogte = 100; void print() { // print een rechthoek mbv kruisjes } class FlexRechtHoek extends Rechthoek { void breder() { breedte++; } void hoger() { hoogte++; } }

Eenvoudig voorbeeld private variabelen van een superklasse (breedte en hoogte) moeten protected worden als er in de subklassen methoden zijn die deze variabelen gebruiken

Eenvoudig voorbeeld Rechthoek r = new Rechthoek(); FlexRechtHoek fr = new FlexRechtHoek(); r.print(); fr.print(); fr.breder(); fr.hoger();

Eenvoudig voorbeeld Rechthoek r = new Rechthoek(); FlexRechtHoek fr = new FlexRechtHoek(); r.print(); fr.print(); fr.breder(); fr.hoger(); Wat kan niet? r.breder(); r.hoger();

Overriding Stel je hebt een methode print() in een superklasse Elke subklasse erft automatisch deze methode Maar als je wilt kunt je de methode print() opnieuw definiëren in de subklasse Dit heet overriding De geërfde methode wordt overschreven door de nieuwe definitie 13

Voorbeeld Superklasse Rechthoek heeft een methode print() De methode zet een rechthoek (van variabele breedte en hoogte) met behulp van kruisjes op het scherm: x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 14

Voorbeeld Subklasse FlexRechthoek Deze heeft een ook methode print() Deze methode zet een rechthoek (van variabele breedte en hoogte) op het scherm met behulp van een zelfgekozen symbool:

De subklasse class FlexRechthoek extends Rechthoek { private String symbool; Flexrechthoek(int ho,int br, String symbool) { super( ho. br ); this.symbool = symbool; } void print() {// overriding // print een rechthoek mbv symbool }

super() Let op de aanroep van de constructor van de superklasse in de constructor van de subklasse FlexRechthoek(int ho,int br, String symbool { super( ho, br ); this.symbool = symbool; } 17

Voorbeeld overriding private Rechthoek r; private FlexRechthoek fr; //... r = new Rechthoek( 70, 30 ); fr = new FlexRechthoek( 70, 30, "5" ); //... r.print(); // printmethode uit klasse Rechthoek fr.print(); // printmethode uit klasse FlexRechthoek

Overriding In de subklasse toch de methode van de superklasse aanroepen kan door super.naamVanDeMethode(parameters) public void print() { if( … ) super.print(); // … } 19

Overriding Bij overriding hebben de methoden in de super-en subklasse dezelfde naam Ze hebben hetzelfde aantal parameters die in dezelfde volgorde staan en die van hetzelfde type zijn 20

Overloading Bij overloading hebben methoden in dezelfde klasse dezelfde naam, maar een ander aantal parameters, of parameters van een ander type Zodanig dat bij een aanroep de compiler weet welke van de twee methoden je bedoelt 21

Dynamische binding class Rechthoek { protected int breedte, hoogte; // … void print() { // … } class FlexRechthoek extends Rechthoek { private String symbool; // … void print() {// overriding // … } 22

Dynamische binding Bij RechtHoek en FlexRechtHoek is sprake van overerving En ze hebben allebei een methode die print() heet Er is dus sprake van overriding Overriding, en dus overerving, is een voorwaarde voor dynamische binding 23

Statisch en dynamisch type Elke instantie van FlexRechtHoek heeft niet een, maar twee typen Een FlexRechtHoek is een RechtHoek Dat betekent dat je kunt declareren: RechtHoek rh = new FlexRechtHoek( 30,40 ); Wat is dan het type van rh? Het statische type is RechtHoek Het dynamische type is FlexRechtHoek 24

Dynamische binding Wat gebeurt er bij de opdracht rh.print();? Wordt print() van RechtHoek aangeroepen of print() van FlexRechtHoek? Bij overriding wordt de methode print() van het dynamische type gebruikt Dat heet dynamische binding In dit geval wordt dus print() van FlexRechtHoek gebruikt 25

Dynamische binding Dynamische binding lijkt vrij subtiel en onschuldig Maar heeft belangrijke gevolgen En maakt het leven van de programmeur een stuk aangenamer Je hoeft immers in de code niet uit te zoeken wat het precieze type van een object is Want het Javasysteem weet in runtime wat het precieze, dynamische type is 26

Dynamische binding Een toepassing daarvan vind je in het voorbeeld van de Bank, met de superklasse Rekening en twee subklassen Bankrekening en Spaarrekening Dynamische binding wordt nog krachtiger door het gebruik van zogeheten interfaces Deze komen in hoofdstuk 9 aan bod 27

Klasselid Attributen of methoden heten ook wel klasseleden of class members 28

29 Einde