Programmeren in C# Interfaces. Hoofdstuk 23

Vergelijkbare documenten
Programmeren in C# Overerving

IMP Uitwerking week 13

Programmeren in C# Klassen schrijven

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

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 7 november 2014, uur

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

Objectgeoriënteerd Programmeren: WPO 2a

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

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

Labo 2 Programmeren II

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

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

VI. Klassen en objecten

Abstracte klassen & Interfaces

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, uur

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

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

Een gelinkte lijst in C#

Modelleren en Programmeren

Kleine cursus PHP5. Auteur: Raymond Moesker

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

Programmeren in C# Samenvatting van C#

Overerving & Polymorfisme

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

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET

VB Magazine Online /08 1 / 6

Programmeren in Java 3

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

Objectgeoriënteerd Programmeren: WPO 3

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

Zelftest Programmeren in Java

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

Programmeren in Java 3

Modelleren en Programmeren

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

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 9 november 2018, uur

Tentamen Imperatief Programmeren

NAAM: Programmeren 1 Examen 21/01/2011

Datastructuren Werkcollege Intro

Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, uur

Opdracht 7a. Applicatiebouw 2014/2015

Object-oriented programmeren met BlueJ en Visual Studio

Java. Basissyllabus. Egon Pas

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

Voorbeeld: Simulatie van bewegende deeltjes

SYNTRA-WEST. Cursus OOP. Deel

Programmeren: Visual Basic

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

Modelleren en Programmeren

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

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Vakgroep CW KAHO Sint-Lieven

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

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

Uitwerkingen Derde deeltentamen Imperatief programmeren Vrijdag 12 november 2010, uur

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

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

In een klassendiagram worden klassen beschreven in termen

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

Design patterns Startbijeenkomst

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

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

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

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

Modelleren & Programmeren. Jeroen Fokker

Deel 1 : Gesloten Boek

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

Informatica: C# WPO 2

1 Een beetje theorie vooraf 1. Wat is een programma? 2 Hoe maakt u een programma? 3 IL-code en JIT-compiler 5

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

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

Scala. Korte introductie. Sylvia Stuurman

ALGORITME objectgeoriënteerd programmeren

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

Modelleren en Programmeren

Programmeren (1) Examen NAAM:

TENTAMEN Programmeren 1

Transcriptie:

Programmeren in C# Interfaces Hoofdstuk 23

Programmeren in C# 2 Gradaties overerving Klassieke overerving Iets functioneels uitbreiden Code duplicatie Niet teveel aanpassingen aan bestaande code Objecten van suben superklassen Bv. Ticket en VIP Ticket Abstracte klassen Iets deels functioneels uitbreiden Zelfde nut als overerving Aanroep vastleggen voor subklassen Geen objecten van superklasse Bv. Vorm en Rechthoek Interfaces Structuur vastleggen van klasse Samenwerking programmeurs Lijsten opstellen met objecten vanuit zelfde interface Meervoudige overerving Geen objecten van interface, alles abstract Bv. IGame, IBalloon

Programmeren in C# 3 Herhaling syntax klassieke overerving public class Vierkant protected int zijde; public Vierkant(int z) this.zijde = z; public virtual int Oppervlakte() return zijde * zijde; public class Kubus : Vierkant l public Kubus(int z) : base(z) public override int Oppervlakte() return base.oppervlakte() * 6;

Resultaat Programmeren in C# 4

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

Programmeren in C# 6 Vraagjes Kan er ook staan? public class Kubus: Vierkant,Shape Waarvoor staat je base(z) in constructor van Kubus? Kan je base(z) weglaten in constructor van Kubus? Indien niet, wat moet er gebeuren opdat je het toch kan weglaten? Kan je virtual weglaten in klasse Vierkant? Indien niet, wanneer kan de het wel? Moet override daar staan in klasse Kubus? Waarvoor dient base.oppervlakte()? Hoe kan je dat weglaten? Stel je hebt nieuwe klasse Form1 Declareer en initialiseer nu een instantie variabele van de klasse Kubus en de klasse Vierkant? ToString: Schrijf functie ToString die oppervlakte weergeeft van objecten Kubus en Vierkant? Waar maak je deze functie aan? Gebruik ToString in een MessageBox binnen Form1? Hoe kan je binnen Form1 zijde aanpassen van Vierkant en Kubus object?

Programmeren in C# 7 Vraagjes Waarvoor staat abstract class (waarom,wanneer)? Als je abstract weglaat, wat moet je dan nog aanpassen? Stel je hebt nieuwe klasse MainWindow Declareer en initialiseer nu een instantie variabele van de klasse Shape en de klasse Circle? Kan je de functie MoveRight laten inwerken op beide objecten? Zal de functie drawarea.drawellipse(pen, xcoord, ycoord, size, size); problemen opleveren wanneer je ze laat uitvoeren op een Circle object?

In dit hoofdstuk Interfaces gebruiken voor de structuur van een programma Onderlinge aansluiting, meerdere programmeurs Polymorfie: lijst in 1 keer itereren Interfaces versus abstracte klassen Programmeren in C# 8

Inleiding Een interface beschrijft de uiterlijke verschijningsvorm van een klasse Geen implementaties van methodes of properties Niet te verwarren met grafische user interface Doel: Ondersteunen van het ontwerp Bevorderen van onderlinge aansluiting (eng: cohesion) Het concept interface bestaat eveneens in Java Programmeren in C# 9

Programmeren in C# 10 Syntax interface public interface IBalloon void ChangeSize(int diameter); void Display(Graphics drawarea); int X get; set; Geen class sleutelwoord Geen access modifiers bij methoden en properties Dit is puur een beschrijving van diensten: uiterlijke verschijningsvorm van een klasse Het bevat geen implementatie! get: mogelijkheid tot lezen, set: mogelijkheid tot schrijven à dit zijn ook geen implementaties!

Interface Kan gecompileerd worden samen met andere klassen Wordt gecheckt of klasse op juiste manier wordt gebruikt Kan niet uitgevoerd worden Programmeren in C# 11

Programmeren in C# 12 public class Balloon : IBalloon private int diameter; private int x, y; public interface IBalloon void ChangeSize(int diameter); void Display(Graphics drawarea); int X get; set; Een klasse kan één of meerdere interfaces implementeren public void ChangeSize(int diameter) this.diameter = diameter; public int X get return x; set x = value; De klasse is verplicht om alle methodes en properties uit de interface te implementeren public void Display(Graphics drawarea) Pen pen = new Pen(Color.Black); drawarea.drawellipse(pen, x, y, diameter, diameter);

Programmeren in C# 13 Interfaces van interface Interfaces kunnen ook overerven van andere interfaces public interface IColoredBalloon : IBalloon void SetColor(Color c);

Programmeren in C# 14 Nut 1: Aansluiting Interfaces worden vaak eerst uitgeschreven aan de hand van een analyse Vervolgens worden de interfaces verdeeld onder de programmeurs en geïmplementeerd Voorbeeld: Stel Jan moet interface IBalloon implementeren en Mieke moet IGame implementeren. Bovendien heeft Mieke de implementatie van IBalloon nodig. Omdat je werkt met interfaces hoeft Mieke niet te wachten en kan ze onmiddellijk starten met de implementatie van IGame, eventueel gebruik makend van een Mock implementatie van IBalloon. Een Mock implementatie is een zeer eenvoudige implementatie die weinig of geen functionaliteit bevat, maar louter als bedoeling heeft testen of verdere implementaties te bewerkstelligen.

Programmeren in C# 15 Demo Interface Spel waarbij voorwerp random horizontaal over scherm verplaatst bij elke drukknop. Stel 3 programmeurs: Interface, Voorwerp, Spel - Interface programmeur moet weten wat spel doet en hoe voorwerp eruitziet - Spel programmeurmoetweten wat voorwerp doet Brainstorm meeting om interfaces vast te leggen van Spel en Voorwerp. IShape -> Balloon Display op graphics, X IGame -> Game Replace van IShape op graphics GUI Game tonen met een IShape

Programmeren in C# 16 Onderlinge aansluiting Het afspreken van standaarden zorgt ervoor dat onderlinge uitwisselbaarheid verbetert, bijvoorbeeld: Stopcontacten Audio- en videoaansluitingen DVD standaarden Het concept interface brengt deze voordelen naar de softwarewereld

Programmeren in C# 17 Nut 2: Gezamelijke behandeling public interface IDisplayable void Display(Graphics drawarea); public class Square : IDisplayable private int x, y; private int size; Alle klassen die moeten getekend kunnen worden moeten deze interface implementeren Een klasse die de interface implementeert, kan op het scherm getoond worden public void Display(Graphics drawarea) Pen pen = new Pen(Color.Black); drawarea.drawrectangle(pen, x, y, size, size); // other methods and properties

Programmeren in C# 18 Voorbeeld Het grote voordeel is dat het gedeelte van het programma dat vormen moet tekenen kan gebruik maken van polymorfie (en dus enkel op de hoogte moet zijn van de interface) public class DrawingProgram private List<IDisplayable> shapes = new List<IDisplayable>();... public void UpdateScreen() foreach (IDisplayable shape in shapes) shape.display(myarea);...

Demo Maak extra klasse Square die interface implementeert Maak lijst in Form1 van Ishape Voeg Square en Balloon object in lijst Maak button2 en laat alle elementen in lijst in 1 keer afdrukken Programmeren in C# 19

Toepassing van interfaces: IList Een ListBox control heeft achter de schermen een klasse die de items beheert Deze klasse is een implementatie van een interface IList Programmeren in C# 20

Programmeren in C# 21 Toepassing van interfaces: IList public interface IList : ICollection, IEnumerable int Add(object value); void Clear(); bool Contains(object value); int IndexOf(object value); void Insert(int index, object value); void Remove(object value); void RemoveAt(int index); bool IsFixedSize get; bool IsReadOnly get; object Item(int index) get; set;

Programmeren in C# 22 Toepassing van interfaces: IList IList mylist = shoppinglistbox.items; Geeft als resultaat een instantie van ListBox.ObjectCollection terug public class ObjectCollection : IList

Programmeren in C# 23 Verschil met abstracte klassen 1. Een abstracte klasse kan voor sommige methodes een implementatie voorzien, een interface kan dit nooit 2. Een klasse kan meerdere interfaces implementeren, maar slechts van één (abstracte) klasse overerven Om over te erven hoeft de parent klasse niet abstract te zijn! 3. Een interface zorgt al tijdens compilatie voor controle, bij een abstracte klasse wordt er pas tijdens de uitvoering gekoppeld met een concrete methode/property 4. Een interface alleen wil nog niet zeggen dat deze zal gebruikt worden voor overerving

Dieren Waarom? Dier -> Interface Vogel -> Abstracte klasse Papegaai -> Klasse Programmeren in C# 24

Oefening 1: ontwerpbeschrijving 23.2 Maak interface IBankrekening Maak klasse Bankrekening die IBankrekening implementeert Maak basic GUI Gebruiker haalt bedrag uit Textbox Knop voor storting of opname Label met bedrag erin Programmeren in C# 25

Oefening 2: Dierentuin Zorg dat directeur van dierentuin een overzicht kan krijgen van elk dier en zijn bijhorende eigenschappen Aparte eigenschappen per categorie Eet Zegt Programmeren in C# 26

Oefening 3: Experimenteer met code CyberSpace Invader (Hfst 20 in boek) Voeg meerdere spelers toe Voeg verschillende soortenbommentoe Programmeren in C# 27

Programmeren in C# 28 Oefening 4: aansluiting 23.5 Maak interface IMyList (Add, IndexOf, Remove) Maak klasse StringList die IMyList implementeert IV: Array van string variabelen, int lengte van array Overschrijving van methodes Add, IndexOf, Remove Property P get om array terug te geven Maak basic GUI Textbox om tekst in te geven Knop voor Add, Remove, IndexOf Listbox om lijst in te zetten Code achter GUI IV van StringList a Event achter knop listbox1.datasource = null; listbox1.datasource = a.p Kan je overerving nemen van - Ilist - List - ArrayList