Ds intro

12

Transcript of Ds intro

Page 1: Ds intro

Universiteit LeidenThe Netherlands

Leiden University. The university to discover.

Datastructuren Werkcollege Intro

Bart Hijmans, Universiteit Leiden.

Page 2: Ds intro

Leiden University. The university to discover.

Datastructuren Werkcollege Intro

1 | 11Focus

� Ervaring in gebruik en implementatie van datastructuren

� Kennis van mogelijkheden

� Programmeren voor andere programmeurs

Page 3: Ds intro

Leiden University. The university to discover.

Datastructuren Werkcollege Intro

2 | 11Uit Eerdere Colleges

� Korte, herbruikbare en leesbare functies

� E�cië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()

Page 4: Ds intro

Leiden University. The university to discover.

Datastructuren Werkcollege Intro

3 | 11Files

� Iedere klasse een eigen header (.h) met klassede�nitie

� Een andere programmeur ziet alleen de .h!

� Iedere klasse een eigen source (.cc of .cpp) met uitwerking

� Uitzondering: bij overerving mag de uitwerking in de .h

� Voor header �les, gebruik preprocessor operaties om dubbele

de�nities te voorkomen:

#ifndef Bestandsnaam.h#define Bestandsnaam.h// normale code hier#endif

Page 5: Ds intro

Leiden University. The university to discover.

Datastructuren Werkcollege Intro

4 | 11Abstractie

� 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

Page 6: Ds intro

Leiden University. The university to discover.

Datastructuren Werkcollege Intro

5 | 11Const Correctness

� 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;

� static functies kunnen niet const zijn

Page 7: Ds intro

Leiden University. The university to discover.

Datastructuren Werkcollege Intro

6 | 11Const Correctness (2)

� 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!

Page 8: Ds intro

Leiden University. The university to discover.

Datastructuren Werkcollege Intro

7 | 11Commentaar Boven Files

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

Page 9: Ds intro

Leiden University. The university to discover.

Datastructuren Werkcollege Intro

8 | 11Commentaar Boven Functies

� Boven (member)functiedeclaraties

class dinges{public:

// commentaar hier!void doeIets();

}

// Niet hier!void dinges::doeIets(){}

Page 10: Ds intro

Leiden University. The university to discover.

Datastructuren Werkcollege Intro

9 | 11Commentaar Boven Functies (2)

/*** @function functienaam* @abstract beschrijving wat de functie doet* @param parameternaam beschrijving rol parameter* @return beschrijving van het resultaat* @pre exacte beschrijving preconditie* @post exacte beschrijving postconditie**/

� precondities moeten testbaar zijn!

Page 11: Ds intro

Leiden University. The university to discover.

Datastructuren Werkcollege Intro

10 | 11Uitzonderlijke Gevallen

� 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

Page 12: Ds intro

Leiden University. The university to discover.

Datastructuren Werkcollege Intro

11 | 11Standard Template Library datastructuren

� 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

� stack<string> myStack; //een stack met strings� list<int> myList; //een list met ints