Datastructuren Werkcollege Intro

Vergelijkbare documenten
Advanced C ++ Programming Datastructuren 2018

Introductie in C++ Jan van Rijn. September 2013

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

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

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

Inleiding C++ Coding Conventions

Datastructuren: stapels, rijen en binaire bomen

C++ C++ als een verbetering van C. Abstracte datatypen met classes. Constructoren en destructoren. Subklassen. binding van functies

Inleiding Software Engineering! Unit Testing, Contracten, Debugger! 13 Februari 2014!

int getaantalpassagiers{): void setaantalpassagiers(int aantalpassagiers);

Datastructuren: stapels, rijen en binaire bomen

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

Modelleren en Programmeren

Modelleren en Programmeren

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

4EE11 Project Programmeren voor W. College 2, , Blok D Tom Verhoeff, Software Engineering & Technology, TU/e

C++ programmeermethoden Bachelor Kunstmatige Intelligentie

Inleiding Een terugblik op C... 3

Kleine cursus PHP5. Auteur: Raymond Moesker

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

Stacks and queues. Introductie 45. Leerkern 45. Terugkoppeling 49. Uitwerking van de opgaven 49

Een gelinkte lijst in C#

/20. richtlijnen. Lees deze richtlijnen! Log in op de pc met. login: paswoord: examen i examen001. Log in op. x.toledo.ucll.be

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010

Overerving & Polymorfisme

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

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

Datastructuren Programmeeropdracht 3: Expressies. 1 Expressies. Deadline. Dinsdag 8 december 23:59.

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

Programmeertechnieken Week 5, 6

Abstracte klassen & Interfaces

C++ programmeermethoden Bachelor Kunstmatige Intelligentie

Modelleren en Programmeren

Veel succes! 1. Gegeven is de volgende klasse:

Vraag 1: HashTable [op 2 punten van de 20] Gegeven de header file HashTable.h van een hashtabel die pointers naar strings bijhoudt (in bijlage).

Instructies en blokken

Aanvullende toets Gameprogrammeren Woensdag 5 januari 2011, uur

Een typisch programma in C en C++ bestaat uit een aantal onderdelen:

Inhoud. Les 13 Les 16 Les 19 Les 2 Les 5 Les 8 Les 11 Les 14 Les 17 Les 20 Les 3. Les 1. Les 7. Les 4. Les 10. Les 12 Les 15. Les 6.

Project Software Engineering XML parser: Parsen van een xml CD catalogus

Derde deeltentamen Gameprogrammeren Vrijdag 7 november 2014, uur

Examen Software Ontwikkeling I 2e Bachelor Informatica Academiejaar Januari, **BELANGRIJK** : Schrijf je naam onderaan dit blad

Programmeren in C++ (deel 1)

Programmeermethoden. Recursie. week 11: november kosterswa/pm/

Programmeermethoden. Functies vervolg. Walter Kosters. week 5: 1 5 oktober kosterswa/pm/

Programmeertechnieken Week 4, 5

TENTAMEN Programmeren 1

Programmeren in Java 3

Tentamen Programmeren in C (EE1400)

TENTAMEN Programmeren 1 VOORBEELDUITWERKING

9 Meer over datatypen

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni 2011

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

Programmeertechnieken Week 6

Gevorderd Programmeren

Programmeren in C++ Efficiënte zoekfunctie in een boek

continue in een for, while of do lus herhaalt de lus vroegtijdig. De volgende herhaling wordt onmiddellijk begonnen.

Lineaire data structuren. Doorlopen van een lijst

Abstraheren van modellen

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

Modelleren en Programmeren

VI. Klassen en objecten

Academie voor ICT en Media 2013/2014

Programmeren in C# Interfaces. Hoofdstuk 23

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

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

Vakgroep CW KAHO Sint-Lieven

Stacks and queues. Hoofdstuk 6

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

Real-Time Systems (RTSYST)

Dergelijke functionaliteit kunnen we zelf ook aan eigen code toevoegen.

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

Programmeren in C# Klassen schrijven

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

Derde deeltentamen Gameprogrammeren Vrijdag 9 november 2012, uur

Objectgeoriënteerd Programmeren in C++

Tentamen in2705 Software Engineering

Programmeren in C ++ les 4

C++ voor C-kenners. Jeroen Fokker Informatica Instituut Universiteit Utrecht januari 1995

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

Modelleren en Programmeren

Programmeren in C# Overerving

Dynamisch Programmeren. Het Rugzakprobleem

Tentamen Inleiding Programmeren (IN1608WI), duur van de toets 2 uur Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, uur

Datastructuren en algoritmen

Vorig jaar in 5v cluster, tot en met OO hoofdstukken, geen problemen. Nu in mengcluster, tot OO hoofdstukken, wel problemen bij 4h leerlingen

Objectgeoriënteerd Programmeren in C++

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 29 januari 2016, uur

Modelleren en Programmeren

3 e jaars GameTech student C++ voor hobby, eerste programmeertaal Assistent bij een heleboel vakken

OEFENINGEN PYTHON REEKS 1

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

Javascript oefenblad 1

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

Programmeermethoden. Pointers. Walter Kosters. week 10: november kosterswa/pm/

Design principes.

4EE11 Project Programmeren voor W. College 4, , Blok D Tom Verhoeff, Software Engineering & Technology, TU/e

EE1400: Programmeren in C BSc. EE, 1e jaar, , 3e college

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

Transcriptie:

Bart Hijmans, Universiteit Leiden. Universiteit Leiden The Netherlands

Focus 1 19 ˆ Ervaring in gebruik en implementatie van datastructuren ˆ Kennis van mogelijkheden ˆ Programmeren voor andere programmeurs ˆ Twee nieuwe concepten: ˆ Templates ˆ Inheritance

Template classes 2 19 ˆ Templates worden gebruikt voor functies en datastructuren die op willekeurige datatypen werken. ˆ Kies een type bij instantiatie ˆ Maak een datastructuur 1 keer en het werkt voor alle types

Template Classes: Voorbeeld Klasse 3 19 template <class T> class datastructuur{ void insert(t item); }; template <class T> void datastructuur<t>::insert(t item){...} ˆ T is een naam voor het type van de variabele "item" ˆ Zet bij gebruik van templates de implementatie in de header le!

Template Classes: Voorbeeld Gebruik 4 19 #include <datastructuur.h> void functie(){ datastructuur<int> ds1; ds1.insert(3); } datastructuur<konijn> ds2; konijn Stampertje; ds2.insert(stampertje);

Overerving 5 19 ˆ Overerving of "inheritance" wordt gebruikt om: ˆ Functionaliteit te hergebruiken ˆ Eenheid te creëren tussen classes ˆ Kindclasses nemen memberfuncties en -variabelen over van de ouders, behalve private members ˆ Kinderen kunnen members overschrijven ˆ Naast public en private, nu ook protected members ˆ Protected: Variabele / functie niet bereikbaar van buiten, wél bereikbaar vanuit kinderen

Overerving, Syntax 6 19 class rechthoek{ public: rechthoek(int l, int b) void setlengte(int l); void setbreedte(int b); int getlengte(); int getbreedte(); protected: int lengte, breedte; }; class gekleurderechthoek : public rechthoek { public: gekleurderechthoek(int l, int b, int k); private: int kleur; };

Overerving en templates 7 19 ˆ Kies bij overerving of je de templates wil overerven of alleen voor een speciek datatype template <class T> class ouder{... }; template <class T> class templatedkind : public ouder<t>{... }; class integerkind : public ouder<int>{... };

Netjes Programmeren 8 19 ˆ Korte, herbruikbare en leesbare functies ˆ Eciënte code ˆ Consequent inspringen ˆ Consequente naamgeving voor variabelen ˆ Gebruik geen Nederlands en Engels door elkaar ˆ Overweeg bijvoorbeeld camel case: maaknaamvoorfunctie() ˆ of lage streepjes: maak_naam_voor_functie() ˆ gebruik geen using namespace std; in een.h ˆ Dring je namespace niet op aan de gebruiker ˆ Gebruik std::string, std::cout, std::endl etc.

Files 9 19 ˆ Iedere klasse een eigen header (.h) met klassedenitie ˆ Een andere programmeur ziet alleen de.h! ˆ Iedere klasse een eigen source (.cc of.cpp) met uitwerking ˆ Uitzondering: bij templates mag de uitwerking in de.h ˆ Voor header les, gebruik preprocessor operaties om dubbele denities te voorkomen: #ifndef Bestandsnaam_h #define Bestandsnaam_h // normale code hier #endif

Abstractie 10 19 ˆ private, public en protected functies en variabelen ˆ Public: alleen functies die voor de gebruiker bedoeld zijn ˆ Private: alle variabelen (gebruik public get en set functies) ˆ Private: interne hulpfuncties ˆ Protected is vergelijkbaar met private, maar ook toegankelijk vanuit afgeleide klasses door inheritence. ˆ Zorg dat een gebruiker een datastructuur niet kapot kan maken ˆ Beschermt data en programmeurs ˆ Geef nooit interne pointers terug!

Output 11 19 ˆ Gebruik ostream voor output ˆ Ostream is de ouderklasse van o.a. cout, ofstream en ostringstream ˆ Laat de gebruiker kiezen wat hij er mee doet datastructuur::output(ostream & out){ out << data; } datastructuur ds; ds.output(cout); ofstream outfile("example.txt"); ds.output(outfile);

Commentaar Boven Files 12 19 /** * klassenaam: beschrijving van klasse/programma * @author naam (studentnummer) * @author naam (studentnummer) * @file filenaam * @date datum laatste wijziging **/

Commentaar Boven Functies 13 19 ˆ Boven (member)functiedeclaraties ˆ Programmeurs die een library gebruiken zien alleen de header! class dinges{ public: // commentaar hier! void doeiets(); } // Niet hier! void dinges::doeiets(){ }

Commentaar Boven Functies (2) 14 19 /** * @function functienaam * @abstract beschrijving wat de functie doet, inclusief hulpfuncties. Noem hulpfuncties niet! * @param parameternaam beschrijving rol parameter * @return beschrijving van het resultaat * @pre exacte beschrijving preconditie * @post exacte beschrijving postconditie wat is er veranderd na het uitvoeren van de functie? **/ ˆ Er is niet altijd een pre- of postconditie ˆ Beschrijf wat een functie doet, niet hoe!

Precondities 15 19 ˆ Wat moet er gelden voor een functie kan worden aangeroepen? ˆ Voorbeelden: ˆ De datastructuur mag niet leeg zijn ˆ Er moeten minstens n elementen in de datastructuur zitten ˆ De operator "<" (of "<<" voor output) moet gedenieerd zijn op type T ˆ precondities moeten testbaar zijn!

Const Correctness 16 19 ˆ Laat de programmeur weten welke functies niks veranderen aan de datastructuur en welke parameters zeker niet worden aangepast. ˆ const voor een parameter betekent dat dat parameter niet wordt aangepast ˆ const aan het eind van een functiedeclaratie betekent dat de datastructuur niet wordt aangepast bool zetinlijst(const int & waarde); bool haaluitlijst(const int & plaats, int & waarde); bool isinlijst(const int & waarde) const; ˆ const call-by-reference is ecienter voor grotere datatypes dan call-by-value ˆ static functies kunnen niet const zijn

Const Correctness (2) 17 19 ˆ Let op de verschillen tussen: ˆ int const * p; // p is pointer to const int ˆ int * const p; // p is const pointer to int ˆ int const * const p;//p is const pointer to const int ˆ Lees van rechts naar links ˆ Het is niet in alle gevallen mogelijk alles te verbieden, zorg wel dat je je er aan houdt!

Uitzonderlijke Gevallen 18 19 ˆ Wat gebeurt er als: ˆ een datastructuur vol is? ˆ een datastructuur leeg is? ˆ er een lege string wordt meegegeven? ˆ er een nullpointer wordt meegegeven? ˆ Let op dat postcondities alle gevallen beslaan ˆ Stel eisen aan parameters waar nodig ˆ Return booleans als een operatie kan falen! ˆ Gebruik nooit cout (of cerr) in een memberfunctie voor errors

Standard Template Library datastructuren 19 19 ˆ Bevat veel standaard datastructuren, waaronder vectors, lists, stacks, maps, queues en deques ˆ De interne werking is bijna altijd onbelangrijk. ˆ Toegevoegd als include, bv #include <stack> ˆ Datastructuren zijn templates, ze werken voor elk type data, maar voor maar 1 tegelijk ˆ vector<string> myvector; //een vector met strings ˆ list<int> mylist; //een list met ints