Programmeren in C# Overerving

Vergelijkbare documenten
Programmeren in C# Interfaces. Hoofdstuk 23

Programmeren in C# Klassen schrijven

Objectgeoriënteerd Programmeren: WPO 2a

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

IMP Uitwerking week 13

VI. Klassen en objecten

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

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

Overerving & Polymorfisme

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, uur

ALGORITME objectgeoriënteerd programmeren

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces.

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, uur

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

Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers

Programmeren in C# Samenvatting van C#

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

Objectgeoriënteerd Programmeren: WPO 3

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

Verder zijn er de nodige websites waarbij voorbeelden van objectgeoriënteerd PHP (of Objec Oriented PHP, OO PHP) te vinden zijn.

Klassen. Hoofdstuk Klassen

Project network. Gebaseerd op paragrafen , uit het boek. We simuleren een sociaal netwerk

Aanvullende toets Gameprogrammeren Woensdag 5 januari 2011, uur

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

Modelleren en Programmeren

Zelftest Programmeren in Java

Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 23 december 2016, uur

Modeleren. Modelleren. Together UML. Waarvan maken we een model? overzicht les 14 t/m 18. ControlCenter 6.2

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

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

Abstracte klassen & Interfaces

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

Veel succes! 1. Gegeven is de volgende klasse:

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

Derde deeltentamen Gameprogrammeren Vrijdag 7 november 2014, uur

Labo 2 Programmeren II

Datastructuren Werkcollege Intro

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

HOOfDsTuk 1 Objecten en klassen

Kleine cursus PHP5. Auteur: Raymond Moesker

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 10 november 2017, uur

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 11 november 2016, uur

Scala. Korte introductie. Sylvia Stuurman

Programmeren 1 20 januari 2012 Prof. T. Schrijvers

Windows-applicatie. using System.Windows.Forms; using System.Drawing; class HalloWin1 { static void Main ( )

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

Omschrijf bij ieder onderdeel van de methode de betekenis ervan. Java kent twee groepen van klassen die een GUI kunnen maken: awt en swing.

Programmeren in Java 3

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

NAAM: Programmeren 1 Examen 21/01/2011

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

Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, uur

Deel I Hoofdstuk 2: Het klassenmodel

programmeren Mobiel Mobilofoon 1960 Apple iphone 2007 met ios Nokia Samsung S met Android Motorola Dyna-Tac 1973

public Bier ( string N, double P, Brouwerij B) { Naam = N; AlcoholPerc = P; Brouwer = B;

Veel succes! 1. Deze opgave bestaat uit een aantal deelvragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

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

Tweede deeltentamen Imperatief programmeren versie 1 Vrijdag 20 oktober 2017, uur

SYNTRA-WEST. Cursus OOP. Deel

Inleiding Programmeren 2

Inleiding Programmeren 2

et Zend Framework bestaat volledig uit objectgeoriënteerde

Uitwerking Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, uur

3.1 Opsomming data type

Derde deeltentamen Gameprogrammeren Vrijdag 8 november 2013, uur

Introductie in C++ Jan van Rijn. September 2013

Tentamen Imperatief Programmeren

SYNTRA-WEST. Initiatiecursus JAVA. Deel

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

Voorbeeld: Simulatie van bewegende deeltjes

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing

Objectgeoriënteerd Programmeren: WPO 4

In de tweede regel plaatsen we in het gereserveerde stukje geheugen een getal.

Modelleren & Programmeren. Jeroen Fokker

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur

Een gelinkte lijst in C#

Modelleren en Programmeren

Derde deeltentamen Gameprogrammeren Vrijdag 9 november 2012, uur

INLEIDING... 1 AFSPRAKEN... 2 INHOUDSOPGAVE...

Programmeren in Java 3

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur

Software-Ontwikkeling I Academiejaar

Programmeren (1) Examen NAAM:

VB Magazine Online /08 1 / 6

Vakgroep CW KAHO Sint-Lieven

Uitwerking Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 10 november 2017, uur

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

Uitwerking Derde deeltentamen Imperatief programmeren Vrijdag 8 november 2013, uur

Modelleren en Programmeren

Veel succes! 1. Deze opgave bestaat uit een aantal deelvragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

Uitwerkingen Derde deeltentamen Imperatief programmeren Vrijdag 12 november 2010, uur

TENTAMEN Programmeren 1 VOORBEELDUITWERKING

Modelleren en Programmeren

Zo vind u hierin de volgende documentatie over de klasse Applet: +----java.awt.panel java.applet.applet

Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, uur

Ontwerp van Informatiesystemen

Activity. Bij het starten van een app: Operating system maakt een Activity -object aan. en neemt dat onderhanden met de methode OnCreate( )

Java. Basissyllabus. Egon Pas

Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 3 februari 2017, uur

Uitwerkingen aanvullende toets Gameprogrammeren (INFOB1GP) Vrijdag 4 januari 2013, uur

Transcriptie:

Programmeren in C# Overerving

Programmeren in C# 2 public class Balloon private int x = 50; private int y = 50; private int diameter = 20; public int Diameter getreturn diameter; setif (value<100) diameter = value; public Color FillColor get; set; public Balloon(int initialx) x = initialx;y = 50;diameter = 20; public Balloon()x=30; public void MoveRight(int xstep) x = x + xstep; public void ChangeSize(int change) diameter = diameter + change; public partial class Form1 : Form Balloon b; public Form1() InitializeComponent(); b=new Balloon(10); private void button1_click( object sender, EventArgs e) label1.text= Convert.ToString( b.diameter); b.diameter=200; b.fillcolor=color.black; b.changesize(10);

Programmeren in C# 3 In dit hoofdstuk Een nieuwe klasse maken op basis van een bestaande klasse Overschrijven: protectedvs virtual Object klasse base Constructor Abstract klasse Partial klasse

Inleiding Hoe hergebruik stimuleren Een bestaande klasse die bijna alles doet wat je wil kan je m.b.v. overerving uitbreiden Programmeren in C# 4

Programmeren in C# 5 Een basisklasse: Sphere public class Sphere protected int xcoord = 100; protected int ycoord = 100; protected Pen pen = new Pen(Color.Black); public int X set xcoord = value; Beschrijft enkel stilstaande objecten Deze klasse dient als basis voor Bubble (afmeting veranderen) en de klasse Ball (horizontaal bewegen) public int Y set ycoord = value; public virtual void Display(Graphics drawarea) drawarea.drawellipse(pen, xcoord, ycoord, 20, 20);

Uitbreiding 1 Stel je wil nieuwe klasse die zeepbellen omschrijft Ook in staat zijn om afmetingen bel te veranderen Bel verticaal te bewegen In plaats van klasse Sphere te veranderen, nieuwe klasse schrijven die deze uitbreidt Programmeren in C# 6

Een subklasse: Bubble public class Bubble : Sphere protected int radius = 10; public int Size set radius = value; public override void Display(Graphics d) d.drawellipse(pen, xcoord, ycoord, 2*radius,2*radius); public class Sphere protected int xcoord = 100; protected int ycoord = 100; protected Pen pen = new Pen(Color.Black); public int X set xcoord = value; public int Y set ycoord = value; public void MoveVertical(int amount) ycoord += amount; public virtual void Display (Graphics d) d.drawellipse(pen, xcoord, ycoord, 20, 20); Programmeren in C# 7

Programmeren in C# 8 Klassediagram Sphere public partial class Form1 : Form Sphere s; Bubble b; Bubble public Form1() InitializeComponent(); b=new Bubble(); s=new Sphere(); private void button1_click( object sender, EventArgs e) b.x = 10; Kan dit?

Uitbreiding 2 Stel je wil nieuwe klasse Ball die ook links en rechts kan verplaatsen, 11.1 public class Bubble : Sphere protected int radius = 10; public int Size set radius = value; public override void Display(Graphics d) d.drawellipse(pen, xcoord, ycoord, 2*radius,2*radius); public void MoveVertical(int amount) ycoord += amount; public class Sphere protected int xcoord = 100; protected int ycoord = 100; protected Pen pen = new Pen(Color.Black); public int X set xcoord = value; public int Y set ycoord = value; public virtual void Display (Graphics d) d.drawellipse(pen, xcoord, ycoord, 20, 20); Programmeren in C# 9

Klassediagram Programmeren in C# 10

Programmeren in C# 11 Betekenis van overerven Dit betekent dat deze klasse alle items van de klasse Sphere overerft, behalve de constructoren. 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

Programmeren in C# 12 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 en properties Dilemma: wanneer maak ik een variabele private en wanneer protected? à Hergebruik = moeilijk voorspelbaar

Analogie protected Geld Vrij beschikbaar van ouders voor kinderen, kleinkinderen public Geld Beschikbaar voor iedereen private Geld Enkel beschikbaar voor jezelf Sphere Bubble Programmeren in C# 13

Programmeren in C# 14 Aanvullende items De subklasse kan vanzelfsprekend aangevuld worden met instantievariabelen, methodes en properties, net zoals een gewone klasse Voorbeelden radius Size property MoveVertical methode Sphere Bubble

Programmeren in C# 15 Overschrijven Methoden/Properties uit de basisklasse van een nieuwe implementatie voorzien Voorbeeld: Methode Display in Sphere en Bubble Sleutelwoorden Virtual - Superklasse Deze methode/property van de basisklasse kan mogelijk overschreven worden Override - Subklasse Deze methode/property van de subklasse overschrijft een methode/property van de basisklasse Deze methode/property kan mogelijk Sphere Bubble opnieuw overschreven worden door een verdere subklasse van deze (sub)klasse

Programmeren in C# 16 Overschrijven en overladen Verschil?

In dit hoofdstuk Overschrijven: protectedvs virtual Object klasse base Constructor Abstract klasse Partial klasse Programmeren in C# 17

Programmeren in C# 18 Klassediagram Object Sphere Elke klasse is subklasse van Object. Dient niet expliciet vermeld te worden Bubble

System.Object De properties en methodes van deze klasse zijn universeel (voor elke klasse) nuttig en noodzakelijk. Waarom zou je ToString() willen overschrijven? ToString() is methode die string representatie van Object weergeeft Indien niet overschreven is dit naam van klasse Door dit in subklasse te overschrijven kan je de verschillende interessante eigenschappen van een object weergeven door 1 enkele functie-oproep Zie klasse Animals Programmeren in C# 19

Programmeren in C# 20 UML Diagram Sound() à huh? Sound() à Woef woef Overerving wordt aangeduid door een gesloten, driehoekigepijl van de subklassenaarde superklasse 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

Demo - Zelf 1. Animal klasse Property Name (Automatic) Over te schrijven functie Sound() -> Euh Overschrijving van ToString() -> Name+Sound() 2. Dog klasse Overerving met Animal Constructor met String parameter voor Name in te stellen Overgeschreven functie Sound() > Woef 3. MainWindow Instantievariabelen van Animal en Dog Geef property Name van Animal instantie een naam Knop MessageBox.Show() met oproep van Tstring op instantievariaelen Programmeren in C# 21

Programmeren in C# 22 Wat is de uitvoer? Testprogramma... Animal anim1, anim2, anim3; anim1 = new Animal("Woefie"); anim2 = new Dog("Pluto"); anim3 = new SmallDog("Fifike"); Sound() à huh? Sound() à Woef woef PrintAnimal(anim1); PrintAnimal(anim2); PrintAnimal(anim3);... Sound() à Kef kef private void PrintAnimal(Animal anim) string line = String.Format("animal (0) sounds as: 1", anim.name, anim.sound()); MessageBox.Show(line);

Regel Object kan meerdere types hebben Bij aanroep van bepaalde property of methode Eerst kijken in klasse zelf Vervolgens naar directe superklasse Zo verder in hierarchie Indien het niet gevonden wordt, dan foutmelding Programmeren in C# 23

Programmeren in C# 24 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#, VB.NET: Single Inheritance C++: Multiple Inheritance De ultieme superklasse waar elke andere klasse van overerft: System.Object

In dit hoofdstuk Overschrijven: protectedvs virtual Object klasse base Constructor Abstract klasse Partial klasse Programmeren in C# 25

Programmeren in C# 26 base Indien methode/property in superklasse zelfde naam heeft Dmv base: Referentie naar het (onmiddellijke) super-gedeelte van dit object Veel gebruikt: de overschreven methode doet hetzelfde als de methode van de superklasse + net iets meer

Programmeren in C# 27 Voorbeeld public class Vierkant protected int zijde; public Vierkant(int z) this.zijde = z; public virtual int Oppervlakte() return zijde * zijde; public class Kubus : Vierkant public Kubus(int z) : base(z) public override int Oppervlakte() return base.oppervlakte() * 6;

base in Demo Constructor in Animal met parameter Constructor in Dog aanpassen base in Sound() van Dog gebruiken Programmeren in C# 28

In dit hoofdstuk Overschrijven: protectedvs virtual Object klasse base Constructor Abstract klasse Partial klasse Programmeren in C# 29

Programmeren in C# 30 Constructor Heeft dezelfde naam als de klasse, aanroep met 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.

Balloon voorbeeld public class Balloon protected int xcoord, ycoord, radius; public Balloon() xcoord = 10; ycoord = 10; radius = 20; public Balloon(int initialx, int initialy, int initialradius) xcoord = initialx; ycoord = initialy; radius = initialradius; // remainder of the class Programmeren in C# 31

Programmeren in C# 32 Balloon voorbeeld public class DifferentBalloon : Balloon public DifferentBalloon(int initialx, int initialy) : base() xcoord = initialx; ycoord = initialy; radius = 20; Deze oproep gebeurt altijd als eerste, tenzij je expliciet een andere constructor van de parent oproept. Dit schrijf je buiten de method body. // remainder of the class Wat zou er gebeuren als in Balloon de constructor zonder parameters wordt weggelaten?

Programmeren in C# 33 Balloon voorbeeld public class ModifiedBalloon : Balloon public ModifiedBalloon(int initialx, int initialy, int radius) : base(initialx, initialy, radius) // remainder of the class Expliciete oproep van de parent constructor. Merk op: deze constructor dient gedeclareerd, want constructors worden niet overgeërfd!

Programmeren in C# 34 Oefeningen, p216 11.2: ColoredSphere Erft Sphere over Kleur bij aanmaak instellen 11.3: Zoek fout

In dit hoofdstuk Overschrijven: protectedvs virtual Object klasse base Constructor Abstract klasse Partial klasse Programmeren in C# 35

Programmeren in C# 36 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 Gebruik van het sleutelwoord abstract In methode In klasse

Gebruik abstracte klassen Kijk naar bib klassen: hoe hoger in hierarchie Bovenste laag van klassen in grote OO programma s Ook in biologie: zoogdieren Programmeren in C# 37

Programmeren in C# 38 Voorbeeld public abstract class Shape protected int xcoord, ycoord; protected int size; protected Pen pen = new Pen(Color.Black); public void MoveRight() xcoord += 10; Van deze klasse kan je geen objecten maken. Logisch, want een shape heeft fysisch nog geen betekenis. public abstract void Display(Graphics drawarea); 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.

Programmeren in C# 39 Subklasse Circle public class Circle : Shape public override void Display(Graphics drawarea) drawarea.drawellipse(pen, xcoord, ycoord, size, size); Een Circle is een Shape met een concrete vorm. Nu kan de Display methode zinvol geïmplementeerd worden.

Programmeren in C# 40 Oefening Animal, SmallDog, Dog Welke klasse / methode is mogelijk abstract? Pas de code aan

Abstract in demo 1. Animal abstract Klasse header Sound abstract Constructor weg 2. Dog Constructor aanpassen Sound aanpassen 3. Form Animal instantieverwijderen Programmeren in C# 41

Programmeren in C# 42 UML notatie Abstracte klassen en methoden worden schuin gedrukt weergegeven

Programmeren in C# 43 Extra: sealed 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 sealed, een wiskundige functie ligt voor altijd vast.

Programmeren in C# 44 Extra: Voorbeeld public sealed class SmallDog : Dog...

In dit hoofdstuk Overschrijven: protectedvs virtual Object klasse base Constructor Abstract klasse Partial klasse Programmeren in C# 45

Partiële klassen Meestal aparte klassen in aparte bestanden Soms 1 klasse in verschillende bestanden Mbv sleutelwoord partial Om de gegenereerde code netjes te kunnen scheiden van de code van de programmeur Geen goed idee om gegenereerde code aan te passen Voor eigen klassen niet aanbevolen Programmeren in C# 46

Programmeren in C# 47 partial public partial class Form1 : Form... Form1.vb partial class Form1 private System.ComponentModel.IContainer components = null; protected override void Dispose(bool disposing)... #region Windows Form Designer generated code... Form1.Designer.cs

Samenvatting Programmeren in C# 48

Programmeren in C# 49 Samenvatting Overerving voor hergebruik van code te vermijden Subklasse en superklasse protected Methoden overschrijven: virtual, override base object gebruiken in subklasse Constructor in subklasse abstract methoden en klassen partial klassen

Oefening: 11.6 Vervolledig Programma Shape met - Triangle - Rectangle - Square - Circle Methode voor oppervlakte en voor omtrek Programmeren in C# 50

Oefening: 11.3 Zet structuur op van Bankrekening GoudenRekening GewoneRekening Programmeren in C# 51