De koektrommel of de grabbelton

Slides:



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

Algoritmen en Datastructuren (ALDAT)
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 1.
EVMINX4 Week 3 Algoritmen en Datastructuren (ALDAT)
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.
PROS2 Les 11 Programmeren en Software Engineering 2.
Greenfoot Workshop Bobby - Snake.
De implementatie van de UIML standaard in UIML.NET Ingo Berben Eindwerk voorgedragen tot het behalen van de graad van bachelor in de informatica/ICT/kennistechnologie.
1 Datastructuren Lijstjes (Stacks & Queues) Onderwerp 7.
Java patterns Introductie tot GoF patterns in Java.
Inleidend probleem Data structuur (hiërarchie van classes)
Hoorcollege 7 Collections, arrays. Programma ‘Snowflakes’ Sneeuwvlok object.
Algoritmiek Object-georiënteerd Programmeren
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 3.
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
Looking at Code Size and Performance Kevin Muys.  Hoe efficiënt is C++ vergeleken met C  Hoe beïnvloed C++ het benodigde geheugen  Oplossingen voor.
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.
Opgave 2a nMet een InputStream lees je bytes uit een binare file nMet een Reader lees je characters uit een tekstfile.
OO Analyse in de praktijk OO Analyse in de praktijk V Enkele Design Patterns.
Herhaling Java-programmatie en geautomatiseerd testen (vervolg)
KINN 2010 OOP O Object O Georiënteerd P Programmeren.
Starten met PHP Dynamischer bouwen. PHP is een een scripttaal waarmee de server pagina’s in elkaar kunt laten zetten. Het verschil met HTML: Een php pagina.
Handleiding ClassDojo
Overerving: It’s a kind of magic…. Principes van OO: 1) Overerving 2) Encapsulatie 3) Polymorphisme = (deel van het) OO. paradigma.
Tircms03-p les 6 Templates. Functietemplates void verwissel(int &x, int &y); { int w=x;x=y;y=w;} Dezelfde functie voor meerdere types heet een functietemplate.
Introductie tot GoF patterns in Java
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,
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Tircms03-p les 1 C++ voor C-kenners Voor Technische Informatica.
Polymorphisme en Interfaces: inleiding
Gevorderde programmeer les
Gevorderde PROGRAMMeer Les
Prototyping Week 7 // Tweenlite & API. TweenMax Snel mooie en effectieve animatie.
Hoe maak je een account aan via CMD (opdrachtprompt) © Robin Uters.
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.
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.
Plan voor uitvoering. Gebruik je boek Begin bij 8.4 de innovatiecyclus Stap 1 is eigenlijk het onderzoek wat je al gedaan hebt Je begint je ontwerp met.
Welkom! maandag 16 November 2015 Les B-2.
Hoe maak ik een PowerPoint presentatie?
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.
Informatica Welkom! maandag 16 November Les B-1.
Uitleg bij de vragenlijst Veiligheidsbeleving
Windows applicatieontwikkeling
BEGINNER EV3 PROGRAMMEER Les
Objectgeoriënteerd Programmeren
Gameprogrammeren: Objecten en geheugen
Gameprogrammeren: Lists en interfaces
Object georiënteerd programmeren
Gameprogrammeren: Methoden
Gameprogrammeren: Programmastructuur
Robots en programmeren
Gameprogrammeren: Properties
Tinpro015b-les6 Templates.
Tinpro015b-les4 Klassen.
Gameprogrammeren: Abstracte klassen
Gameprogrammeren: Interfaces
Gameprogrammeren: Klassen en objecten
ASP.NET MVC Web Development
Informatie-analyse 1: Er zijn veel manieren om een database te vullen
ASP.NET MVC Web Development
Software Development fundamentals
Software Development fundamentals
Software Development fundamentals
Software Development fundamentals
Software Development fundamentals
Gameprogrammeren: Arrays
Transcript van de presentatie:

De koektrommel of de grabbelton Een presentatie over Templates Door Paul Bouman

Abstracte Datatypes Algemene ideeën over de opslag van gegevens. Toepasbaar op allerlei soorten data. Voorbeelden zijn terug te vinden in ontelbare informatica boeken. Gebruikt in talloze algortimen Stack Heap Tree List Map Queue

Voorbeeld: List met alleen add Class IntList { Node first, last; List() {} add(int i) { Node n = new Node(i); last.next = n; n.prev = last; last = n; } Class Node int inhoud; Node prev; Node next; Maar hier kunnen we alleen ints in opslaan!

We willen een Koektrommel Stap 1: Neem de lijst voor ints Class IntList { Node first, last; List() {} add(int i) { Node n = new Node(i); last.next = n; n.prev = last; last = n; } Stap 2: Kopieer de code Class IntList { Node first, last; List() {} add(int i) { Node n =new Node(i); last.next = n; n.prev = last; last = n; } Class Node int inhoud; Node prev, next; Stap 3: Pas de code aan Class KoekList { Node first, last; List() {} add(Koek i) { Node n = new Node(i); last.next = n; n.prev = last; last = n; } Class Node Koek inhoud; Node prev, next;

Nadelen Bijna identieke code voor het opslaan van ints en koeken. Als we iets willen veranderen in onze lijst, moeten we dat nu op twee plekken doen! Bij grote projecten met niet alleen ints en koeken, krijg je nog veel meer identieke code.

Oplossing 1: Smalltalk stijl Class ObjectList { Node first, last; List() {} add(Object i) { Node n = new Node(i); last.next = n; n.prev = last; last = n; } Class Node Object inhoud; Node prev, next; Object-georienteerde talen kennen “type overerving” Laat alle objecten afstammen van één type (bijvoorbeeld Object) Laat de datastructuur werken met Objecten in plaats van met ints of Koeken.

Probleem 1: Klassen van anderen In C++ stammen klassen NIET automatisch van één ouder af. Je kunt er zelf voor zorgen. Maar wat bij bibliotheken die dat niet doen?

Oplossing: Multiple Inheritance Object OVorm Is dit wat we willen? Je ziet door de bomen het bos niet meer! OVierkant OCirkel ODriehoek

Probleem 2: Bugs List koek1 = new List(); List koek2 = new List(); KokosMakroon km, ab, fg; BokkenPoot bp, rs, pq; koek1.add(km); koek1.add(ab); koek1.add(fg); koek1.add(bp); koek1.add(rs); koek1.add(pq); List koek1 = new List(); List koek2 = new List(); KokosMakroon km, ab, fg; BokkenPoot bp, rs, pq; koek1.add(km); koek1.add(ab); koek1.add(fg); koek1.add(bp); koek1.add(rs); koek1.add(pq); List koek1 = new List(); List koek2 = new List(); KokosMakroon km, ab, fg; BokkenPoot bp, rs, pq; koek1.add(km); Bij het ophalen van Objecten uit de datastructuren moet er gecast worden. Hierdoor kunnen er fouten in het programma slopen die pas ontdekt worden tijdens het uitvoeren. koek1 en koek2 zijn nu geen nette koektrommels meer, maar koek1 is een slordige grabbelton!

Templates Vaak wordt duplicatie van code voorkomen met parametrisatie. In C++ kan dat met behulp van Templates In Java (vanaf 1.5) tegenwoordig ook met behulp van Generics De twee hebben grote verschillen, maar die vallen niet direct op voor de programmeur.

Hoe werkt het? Stap 1: Schrijf een template klasse Template <class T> Class List { Node<T> first, last; List() {} add(T i) { Node<T> n = new Node<T>(i); last.next = n; n.prev = last; last = n; } Class Node T inhoud; Node<T> prev, next; Stap 2: Gebruik deze voor elk type dat je wilt List<KokosMakroon> koek1; List<BokkenPoot> koek2; Stap 3: De compiler kopieert de code van List voor elke klasse die je gebruikt.

Templates vs. Generics Templates maken object code voor elke combinatie van parameters. Je moet je broncode distribueren en bij het compilen gelinked worden. Generics leiden tot één generiek stuk object code. Objectcode is daarom distribueerbaar en kan runtime gelinked worden.

Templates vs. Generics (2) Templates kunnen andere parameters krijgen dan typen. Hierdoor is het mogelijk om Template Metaprogramming toe te passen. Dit is turing compleet! Bij generics is het alleen mogelijk om types als parameter mee te geven. Voor meer informatie over niet-type parameters bij Templates en Template Meta Programming verwijs ik graag naar het boek Thinking in C++ Volume 2 van Bruce Eckel en de Wikipedia Pagina over Template Metaprogamming.

Conclusie Met templates kan code duplicatie voorkomen worden. Met templates kan je een erg ingewikkelde multiple inheritance structuur voorkomen. Met templates worden types bij het compilen gecontroleerd. Hierdoor wordt het makkelijker bekende datastructuren en algoritmes op nieuwe problemen toe te passen.