Overerving & Polymorfisme



Vergelijkbare documenten
Objectgericht programmeren 1.

Ingebouwde klassen & methodes

Abstracte klassen & Interfaces

Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden.

IMP Uitwerking week 13

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

VI. Klassen en objecten

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

Objectgericht programmeren 1

Objectgericht ontwerpen

Modelleren en Programmeren

Modelleren en Programmeren

Programmeren in Java les 3

Tentamen Imperatief Programmeren

Informatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele

Zelftest Programmeren in Java

Tentamen Object Georiënteerd Programmeren TI oktober 2014, Afdeling SCT, Faculteit EWI, TU Delft

Java spiekbrief. Commentaar. Definitie van een methode. Types. Variabelendeclaratie. Definitie van een klasse. Namen. Definitie van een veld

Java spiekbrief. Commentaar. Definitie van een methode. Types. Variabelendeclaratie. Definitie van een klasse. Namen. Definitie van een veld

Modelleren en Programmeren

Lessen Java: Reeks pag. 1

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing

Vakgroep CW KAHO Sint-Lieven

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

public Paneel() { knop = new JButton( Klik ); knop.addactionlistener( new KnopHandler() ); tekstvak = new JTextField(10); add(knop); add(tekstvak);

Inhoud leereenheid 2. Overerving (1) Introductie 59. Leerkern 60. Samenvatting 88. Zelftoets 90. Terugkoppeling 94

Scala. Korte introductie. Sylvia Stuurman

SPOJ oplossingen Gilles Callebaut 7 augustus 2015

Om de libraries te kunnen gebruiken, moet de programmeur (een deel van) zijn programma in C/C++ schrijven.

Modelleren en Programmeren

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

Kleine cursus PHP5. Auteur: Raymond Moesker

Game of Life in Java

Ontwerp van Informatiesystemen

Modelleren en Programmeren

Objectgeoriënteerd programmeren in Java 1

voegtoe: eerst methode bevat gebruiken, alleen toevoegen als bevat() false is

Informatica. Deel II: les 1. Java versus Python. Jan Lemeire Informatica deel II februari mei Parallel Systems: Introduction

Modelleren en Programmeren

Modulewijzer Tirdat01


Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft

Programmeren 1 23 januari 2013 Prof. T. Schrijvers

Design patterns.

Voorbeeld: Simulatie van bewegende deeltjes

Modelleren en Programmeren

Programmeren in Java 3

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

NAAM: Programmeren 1 Examen 21/01/2011

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

Programmeren in C# Overerving

Info-books. Toegepaste Informatica. Deel 37: Programmeren in Java HO37. K. Behiels - J. Gils

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur

Een topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin:

OBJECT SPAGHETTI : PATTERNS BIEDEN UITKOMST? Wat is het probleem nou eigenlijk? public class CoffeeDrinker { private CoffeeProducer mycoffeeproducer;

colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser

Java Programma structuur

Versie 2: B C D D A C D A C C. Versie 3: C D A A B D A B D D. Versie 4: A D C C B D C B D D. Versie 5: B A D D C A D C A A

1 Ontwerppatronen. 1.1 Het Command patroon

Java. Basissyllabus. Egon Pas

Objectgeoriënteerd Programmeren: WPO 2a

Javascript oefenblad 1

Design patterns Startbijeenkomst

Modelleren en Programmeren

Tentamen Object Georiënteerd Programmeren TI januari 2013, Afdeling SCT, Faculteit EWI, TU Delft

Tentamen in2705 Software Engineering

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, uur

Programmeren (1) Examen NAAM:

Programmeren in C# Interfaces. Hoofdstuk 23

Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur

TENTAMEN Programmeren 1 VOORBEELDUITWERKING

Informatie over. 5VWO DT51: JavaLogo. Casper Bezemer. Toetsweek 1 13 oktober 2016

Een fragment wordt afgeleid van de basis klasse "Fragment".

import java.io.*; één klasse public class Hallo { public static void main (String[] a) ...met één functie System.out.println("Hallo!

Noties Informatica. In java fungeren objecten als een model voor de elementen waarin een probleem kan worden opgesplitst

Programmeren I. 26 augustus Algemene Richtlijnen. Richtlijnen Programmeren 1

Inhoud leereenheid 7c. JavaScript: Objecten en functies. Introductie 59. Leerkern 60. Samenvatting 82. Opdrachten 83. Zelftoets 89.

SYNTRA-WEST. Cursus OOP. Deel

NAAM: Programmeren 1 Examen 29/08/2012

Modelleren en Programmeren

Datastructuren en algoritmen

Modulewijzer tirprog02/infprg01, programmeren in Java 2

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts

Syntax van opdracht. opdracht. expressie. variabele. = expressie ; klasse naam. methode naam. property naam += object

Transcriptie:

Overerving & Polymorfisme

Overerving Sommige klassen zijn speciaal geval van andere klasse Docent is een speciaal geval van werknemer, dwz. elke docent is ook werknemer Functionaliteit van docent = functionaliteit van werknemer + extra s Hergebruik van code

public class Werknemer { private Datum geboortedatum; private String naam; public Werknemer() { public String getnaam() { return naam; public void setnaam(string n) { naam = n; public class Docent { private Datum geboortedatum; private String naam; public Docent() { public String getnaam() { return naam; public void setnaam(string n) { naam = n; private Vak[] vakken; public boolean doceert(vak v) { for (int i = 0; i < vakken.length; i++) if (vakken[i].equals(v)) return true; return false;

public class Werknemer { private Datum geboortedatum; private String naam; public Werknemer() { public String getnaam() { return naam; public void setnaam(string n) { naam = n; public class Docent extends Werknemer { public Docent() { private Vak[] vakken; public boolean doceert(vak v) { for (int i = 0; i < vakken.length; i++) if (vakken[i].equals(v)) return true; return false;

public class Werknemer { private Datum geboortedatum; private String naam; public Werknemer() { public String getnaam() { return naam; public void setnaam(string n) { naam = n; Docent d = new Docent(); d.setnaam("joost Vennekens"); System.out.println(d.getNaam()); public class Docent extends Werknemer { public Docent() { private Vak[] vakken; public boolean doceert(vak v) { for (int i = 0; i < vakken.length; i++) if (vakken[i].equals(v)) return true; return false;

public class ComplexGetal { private double reeel; private double imaginair; public ComplexGetal(double r, double i) { reeel = r; imaginair = i; public ComplexGetal plus(complexgetal ander) { return new ComplexGetal(ander.getReeel() + getreeel(), ander.getimaginair() + getimaginair()); public class ReeelGetal extends ComplexGetal { public ReeelGetal(double getal) { super (getal, 0); ReeelGetal r = new ReeelGetal(5.0); ReeelGetal s = new ReeelGetal(5.0); ComplexGetal som = r.plus(s);

Superklasse Bankrekening Subklasse Spaarrekening Zichtrekening public class Bankrekening {... public class Zichtrekening extends Bankrekening {... public class Spaarrekening extends Bankrekening {...

public class Rechthoek { private double breedte; private double hoogte; public Rechthoek(double h, double b) { breedte = b; hoogte = h; public double oppervlakte() { return breedte * hoogt; public void draai() { double tmp = breedte; breedte = hoogte; hoogte = tmp; public class Vierkant extends Rechthoek { public Vierkant(double grootte) { super (grootte, grootte); Vierkant v = new Vierkant(7.5); v.draai();

public class Rechthoek { private double breedte; private double hoogte; Overloading public Rechthoek(double h, double b) { breedte = b; hoogte = h; public double oppervlakte() { return breedte * hoogte; public void draai() { double tmp = breedte; breedte = hoogte; hoogte = tmp; public class Vierkant extends Rechthoek { public Vierkant(double grootte) { super (grootte, grootte); public void draai() { Vierkant v = new Vierkant(7.5); v.draai();

Polymorfisme Verschillende methodes mogen dezelfde naam hebben als hun argumenten verschillen Geldt ook voor impliciete argument this De meest specifieke methode die van toepassing is wordt uitgevoerd

Dynamische typering Een variabele heeft een type Statisch gedeclareerd Bankrekening mijnrekening; Een object heeft een type Dynamisch bepaald mijnrekening = new Zichtrekening();

Overeenkomst Type van een object moet een subklasse zijn van type van de variable Bankrekening mijnrekening = new Bankrekening(); Bankrekening mijnrekening = new Zichtrekening(); Zichtrekening mijnrekening = new Bankrekening(); Vierkant x = new Rechthoek(); Rechthoek x = new Vierkant(); Vierkant x = new Vierkant() Gelijkaardig voor primitieve types int a = 9.2; double a = 9;

Overeenkomst Type van een object moet een subklasse zijn van type van de variable Bankrekening mijnrekening = new Bankrekening(); Bankrekening mijnrekening = new Zichtrekening(); Zichtrekening mijnrekening = new Bankrekening(); Vierkant x = new Rechthoek(); Rechthoek x = new Vierkant(); Vierkant x = new Vierkant() Gelijkaardig voor primitieve types int a = 9.2; double a = 9;

public class Rechthoek { protected double breedte; protected double hoogte;... public boolean pastin(rechthoek ander) { return (this.breedte <= ander.breedte) && (this.hoogte <= ander.hoogte) (this.breedte <= ander.hoogte) && (this.hoogte <= ander.breedte) ; public boolean pastin(vierkant ander) { return (this.breedte <= ander.breedte) && (this.hoogte <= ander.breedte) ; Vierkant x = new Vierkant(7); Rechthoek y = new Vierkant(2); public class Vierkant extends Rechthoek { Rechthoek z = new Rechthoek(3,4);... x.pastin(x); public boolean pastin(vierkant ander) { y.pastin(x); return (this.breedte <= ander.breedte); z.pastin(x); x.pastin(y); public boolean pastin(rechthoek ander) { return (this.breedte <= ander.breedte) && (this.breedte <= ander.hoogte) ; Dynamische type Statische type

public class Rechthoek { protected double breedte; protected double hoogte;... public boolean pastin(rechthoek ander) { return (this.breedte <= ander.breedte) && (this.hoogte <= ander.hoogte) (this.breedte <= ander.hoogte) && (this.hoogte <= ander.breedte) ; public boolean pastin(vierkant ander) { return (this.breedte <= ander.breedte) && (this.hoogte <= ander.breedte) ; Vierkant x = new Vierkant(7); Rechthoek y = new Vierkant(2); public class Vierkant extends Rechthoek { Rechthoek z = new Rechthoek(3,4);... x.pastin(x); public boolean pastin(vierkant ander) { y.pastin(x); return (this.breedte <= ander.breedte); z.pastin(x); x.pastin(y); public boolean pastin(rechthoek ander) { return (this.breedte <= ander.breedte) && (this.breedte <= ander.hoogte) ; Dynamische type Statische type

public class Rechthoek { protected double breedte; protected double hoogte;... public boolean pastin(rechthoek ander) { return (this.breedte <= ander.breedte) && (this.hoogte <= ander.hoogte) (this.breedte <= ander.hoogte) && (this.hoogte <= ander.breedte) ; public boolean pastin(vierkant ander) { return (this.breedte <= ander.breedte) && (this.hoogte <= ander.breedte) ; Vierkant x = new Vierkant(7); Rechthoek y = new Vierkant(2); public class Vierkant extends Rechthoek { Rechthoek z = new Rechthoek(3,4);... x.pastin(x); public boolean pastin(vierkant ander) { y.pastin(x); return (this.breedte <= ander.breedte); z.pastin(x); x.pastin(y); public boolean pastin(rechthoek ander) { return (this.breedte <= ander.breedte) && (this.breedte <= ander.hoogte) ; Dynamische type Statische type

public class ComplexGetal {... public ComplexGetal plus(complexgetal ander) { return new ComplexGetal(ander.getReeel() + getreeel(), ander.getimaginair() + getimaginair()); public class ReeelGetal extends ComplexGetal {... public ReeelGetal plus(reeelgetal ander) { return new ReeelGetal(ander.getReeel() + getreeel()); ReeelGetal r = new ReeelGetal(5.0); ReeelGetal s = new ReeelGetal(5.0); ReeelGetal som = r.plus(s);

public class ComplexGetal {... public ComplexGetal plus(complexgetal ander) { double som_r = ander.getreeel() + getreeel(); double som_i = ander.getimaginair() + getimaginair(); if (som_i == 0) return new ReeelGetal(som_r); else return new ComplexGetal(som_r, som_i); public class ReeelGetal extends ComplexGetal {... public ReeelGetal plus(reeelgetal ander) { return new ReeelGetal(ander.getReeel() + getreeel()); Mag dit wel?

public class ComplexGetal {... public ComplexGetal plus(complexgetal ander) { double som_r = ander.getreeel() + getreeel(); double som_i = ander.getimaginair() + getimaginair(); if (som_i == 0) return new ReeelGetal(som_r); else return new ComplexGetal(som_r, som_i); public class ReeelGetal extends ComplexGetal {... public ReeelGetal plus(reeelgetal ander) { return new ReeelGetal(ander.getReeel() + getreeel()); Mag dit wel? ComplexGetal r = new ComplexGetal(1,-1); ComplexGetal s = new ComplexGetal(1,1); ReeelGetal som = r.plus(s);

Typecasting Soms weten wij dat een variabele een strenger type heeft dan de compiler kan afleiden ComplexGetal r = new ComplexGetal(1,-1); ComplexGetal s = new ComplexGetal(1,1); ReeelGetal som = (ReeelGetal) r.plus(s);

Kwis (3) class X { public void a() { System.out.println("x"); class Y extends X { public void a() { System.out.println("y"); class Z extends Y { public void a() { System.out.println("z"); public static void main(string[] args) { X x = new X(); x.a(); x = new Z(); x.a(); Y y = new Z(); y.a(); y = new Y(); y.a();

public class Lijst { private Element eerste; public void voegtoe(int i) { if (eerste!= null) eerste.voegtoe(i); else eerste = new Element(i); public String tostring() { Element huidige = eerste; String resultaat = ""; while (huidige!= null) { resultaat += huidige.tostring(); resultaat += " "; huidige = huidige.getvolgende(); return resultaat; class Element { private int waarde; private Element volgende; private void setvolgende(element v) { volgende = v; Element getvolgende() { return volgende; Element(int i) { waarde = i; void voegtoe(int i) { if (volgende == null) setvolgende(new Element(i)); else getvolgende().voegtoe(i); public String tostring() { return "" + waarde;

public class Lijst { private Element eerste; public void voegtoe(int i) { if (eerste!= null) eerste.voegtoe(i); else eerste = new Element(i); public String tostring() { Element huidige = eerste; String resultaat = ""; while (huidige!= null) { resultaat += huidige.tostring(); resultaat += " "; huidige = huidige.getvolgende(); return resultaat; public class Vermenigvuldigingstafel { private Lijst tafel; public Vermenigvuldigingstafel(int g) { tafel = new Lijst(); for (int i = 1; i <= 10; i++) { tafel.voegtoe(g*i); public Lijst gettafel() { return tafel; public static void main(string[] a) { int g = Integer.parseInt(a[0]); Vermenigvuldigingstafel t; t = new Vermenigvuldigingstafel(g); System.out.println(t.getTafel());

Slotbemerkingen

Het paradigma OO is manier om over software systeem te denken nl., als verzameling van objecten die elk verantwoordelijke zijn voor bepaald stuk afgeschermde functionaliteit die al dan niet kunnen overkomen met objecten uit de echte wereld

Belangrijke termen Object Klasse Encapsulatie Overerving Polymorfisme