1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn

Slides:



Advertisements
Verwante presentaties

Advertisements


Algoritmen en Datastructuren (ALDAT)
Hoofdstuk 8: Recursie.
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.
Van domeinklasse tot implementatie
PROS2 Les 11 Programmeren en Software Engineering 2.
Klassen en objecten.
Hoofdstuk 2 Hallo, C# !.
‘Inleiding programmeren in Java’ Derde college Maandag 22 januari 2001 drs. F. de Vries.
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
GESPRG Les 7 Gestructureerd programmeren in C. 92 Verwisselen Schrijf een functie waarmee twee int variabelen verwisseld kunnen worden. void wissel(int.
Hoofdstuk 8 Objecten en klassen.
Static Keyword static voor functieleden functie niet voor een object aangeroepen class K {... static int minimum( int i, int j); } aanroep: K::minimum(
Inleiding programmeren in C++ Life Science & Technology 2 februari Universiteit Leiden.
Werken aan Intergenerationele Samenwerking en Expertise.
Algoritmiek Object-georiënteerd Programmeren
6.1 Inleiding HOOFDSTUK 6 METHODEN
Deel I: Programmeertaal C 6. Arrays en Pointers
P. 1 Vakgroep Informatietechnologie Structuur Deel II C++ Classes Namespaces Type casting Reference types Constructors en Destructors Memory Management.
PEMSY1http:// 1  Herhaling: combineren van assembler en C  Herhaling: subroutine  geen nieuwe opgave Voorbeeld tentamen:
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.
OO Analyse in de praktijk OO Analyse in de praktijk IV OO basisregels.
Herhaling Java-programmatie en geautomatiseerd testen (vervolg)
C++ C++ als een verbetering van C Abstracte datatypen met classes Constructoren en destructoren Subklassen binding van functies 1.
Hoorcollege 2 Basis gameprogrammeren. Soorten programma’s Console- applicatie.
Constructoren Genesis 1:1 Aarde a1 = new Aarde(“Adam”, “Eva”);
PEMSY1http:// 1  Herhaling: combineren van assembler en C  Herhaling: subroutine  Oefening: melodie Klas EV2B: week.
Hoofdstuk 11.3 Algoritmen: Zoeken in een netwerk.
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  programma draaien vanuit ROM.
Tircms02-p les 3 Functies Strings Structuren. Functies 1. main() 2. { int k; k = 10 ; printf(“%d\n”,fac(k)); } 3. int fac(n) int n; 4. { int f; f= 1;
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,
JAVA: een platformonafhankelijke taal
VPEMSY1, D3ECPT2 : ARM Assembler 1 Hogeschool Utrecht / Electrical Engineering & Design 1  Herhaling: CMP, CMN,
PEMSY1http:// 1  Herhaling nieuwe instructies van vorige week  nieuw: combineren van assembler en C  oefeningen: assembler.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag top-down decompositie Opdrachten:
Hoofdstuk 10.3 Tekst-editor: MDI-interface Dialogen Files lezen Abstracte klassen.
Tircms03-p les 1 C++ voor C-kenners Voor Technische Informatica.
Polymorphisme en Interfaces: inleiding
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.
De laatste essentiele dingen.  Classes ◦ Syntax ◦ Constructors & Destructors  Header & Source Files ◦ Waar gebruiken we dit voor  Compiler Theorie.
Studiehouding Ergens verstand van krijgen kost tijd… Uren die je alleen in je boeken doorbrengt maken het verschil. Er is niets mis met onafhankelijkheid.
 C++ heeft een inheritance mechanisme  Manier om functionaliteit te ‘erfen’ van een parrent class ◦ Polymorphisme ◦ Zoals we het ook in C# kennen.
Soorten programma’s nConsole- applicatie. Soorten programma’s nConsole- applicatie nWindows- applicatie.
Eigen klassen maken A new way of thinking.. Wat? Zie voorbeeld. Zie voorbeeld.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
GUI & classes Een Gui in een class steken en het object gebruiken.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Objectgeoriënteerd Programmeren (2)
Objectgeoriënteerd Programmeren
Gameprogrammeren: Objecten en geheugen
Gameprogrammeren: Lists en interfaces
Gameprogrammeren: Overerving
Letterfrequentie turven
Gameprogrammeren: Methoden
Gameprogrammeren: Overerving in Painter
Basis Gameprogrammeren
C++ • C++ als een verbetering van C • Abstracte datatypen met classes • Constructoren en destructoren • Subklassen • binding van functies 1.
Tinpro015b-les6 Templates.
Tinpro015b-les4 Klassen.
Gameprogrammeren: Interfaces
Gameprogrammeren: Tiles en File I/O in Tick Tick
Gameprogrammeren: Klassen en objecten
‘Inleiding objectgeoriënteerd programmeren met PHP’ ‘Inleiding’
Arjan Egges & Paul Bergervoet
Software Development fundamentals
Software Development fundamentals
Transcript van de presentatie:

1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn

2 Inhoud ● Klassen ● Inheritance ● Pointers ● References ● Const correctness ● Standaard c++ library ● Templates

3 KIassen ● Voordelen van klassen?

4 Klassen ● Voordelen van klassen? ● Modelleren ● Modulariteit ● Informatie afschermen ● Makkelijk(er) te debuggen

5 Klassen class Box { public: void init( int, int, int ); int getVolume( ); int getLength( ); void setLength( ); … private: int length, width, height; };

6 Klassen ● Klassen bestaan uit methods (members) en variabelen ● public : toegankelijk vanuit het gehele programma ● private : toegankelijk alleen vanuit de klasse ● Variabelen zijn normaal gesproken private ● Initialiseren in constructor ● Ophalen m.b.v. speciale getter functie ● Aanpassen m.b.v. setter functie

7 Klassen int Box::getLength( ) { return length; } void Box::setLength( int l ) { length = l; }

Klassen ● Werking van een programma kan opgesplitst worden in classes ● Elke class hoort een declaratie in een header file te hebben en een uitwerking in een source file ● Elke (enigszins grote) class in aparte file ● Header file extensies:.h/.hpp/.hh ● Source file extensies:.cpp/.cc ● Source files worden apart gecompiled; header files worden alleen met includes bijgevoegd 8

Klassen ● Met goed gebruik van classes zijn geen globale variabelen nodig ● Functies bevatten bij voorkeur hooguit regels code ● Classes horen te werken als een black box; het gebruik laat niets zien over de interne werking ● De header file is een uitstekende plek voor (veel) commentaar (Doxygen) 9

Klassen Constructor –Wordt automatisch aangeroepen bij het aanmaken. –Prima manier om variabelen te initialiseren –public Box() { } Destructor –Wordt automatisch aangeroepen bij –Essentieel om geen geheugen geblokkeerd te houden –~Box() { } 10

11 Inheritance ● Wordt gebruikt om ● Functionaliteit te hergebruiken ● Eenheid te creëren tussen classes ● Kinderen die een ouder uitbreiden nemen alle members van de ouder over, behalve private members en variabelen ● Kinderen kunnen members overschrijven

12 Inheritance ● Naast public en private, nu ook protected variabelen en members ● protected : Variabele / functie is ook beschikbaar in child classes

13 Inheritance class LabeledBox : public Box { public: void init( int, int, int, char ); protected: char label; };

14 Inheritance ● virtual ● Staat als keyword voor de method van de parent class ● Maakt dat bij aanroep van een functie dynamisch wordt bepaald van welke class deze wordt aangeroepen ● Virtual constructor wordt niet gebruikt ● Virtual destructor is essentieel voor het opruimen van members van de child class! Definieer daarom altijd een virtual destructor

Inheritance Een Abstract Base Class (ABC) is een klasse waarin de functies niet geïmplementeerd zijn –Meeste functies zijn virtual –virtual int doSometing() = 0; – Goede start van een klasse – Child classes implementeren alle functies. 15

16 Inhoud ● Klassen ● Inheritance ● Pointers ● References ● Const correctness ● Standaard c++ library ● Templates

17 Pointers ● Variabelen bestaan uit twee elementen: ● Geheugenadres ● Waarde ● De waarde van een pointer is het geheugenadres van een andere variabele.

18 Pointers int i, j, *p; i = 10; j = 20; p = &i; cout << "i = " << i << "; j= "<< j << "; p= " << *p << endl; *p = 15; cout << "i = " << i << "; j= "<< j << "; p= " << *p << endl; *p = j; cout << "i = " << i << "; j= "<< j << "; p= " << *p << endl; p = &j; *p = 40; cout << "i = " << i << "; j= "<< j << "; p= " << *p << endl;

19 Pointers ● Uitkomst: ● i = 10; j= 20; p= 10 ● i = 15; j= 20; p= 15 ● i = 20; j= 20; p= 20 ● i = 20; j= 40; p= 40

20 References ● Verwijzen naar een variabele, net als pointers, maar zijn constant en nooit null ● Netter dan pointers, door constantness, en duidelijker in notatie ● Waarde wordt toegekend bij initialisatie

Rererences int i, &j = i; i = 20; cout << "i = " << i << "; j = " << j << endl; j = 40; cout << "i = " << i << "; j = " << j << endl; Waar zagen we de & eerder? 21

Rererences Pas op bij het maken van een reference naar een private variabele, dit kan het information hiding principe ondermijnen. 22

Const correctness ● Methods uit classes kunnen ook constant zijn! Een const method moet de class onveranderd laten. ● Een correcte getter functie: MyObj const & MyClass::getMyObj() const { return myobj; } ● En de setter variant: void MyClass::setMyObj(MyObj const & myobj) { this->myobj = myobj; } 23

Const correctness ● Correctheid bij het werken met constanten heeft voordelen ● Werkt als een stukje commentaar ● Voorkomt misbruik via references en pointers ● Werk vanaf het begin const correct! ● Later terugwerken kost veel moeite 24

Const correctnes Het verschil 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! In veel standaarden wordt de naam van een var die const is in hoofdletters geschreven. Niet verplicht, wel raadzaam. 25

26 Standard C++ Library ● Bestaand uit: ● C libraries: cmath, cstdlib, ctime,... – cmath: M_PI, sin() – cstdlib: (s)rand() – ctime: time() ● STL libraries – vector, list, stack, map, deque, … – Algorithm ● iostream, fstream, stringstream,... ● Other libraries: string

Standard C++ Library stack allwords; allwords.push(“voorbeeld”); cout << "Number of words = " << allwords.size() << endl; while (!allwords.empty()) { cout << allwords.top() << endl; allwords.pop(); } 27

28 Standard C++ Library ● In cstdlib geeft rand() een integer terug in het bereik [0, RAND_MAX] ● Elk random getal is pseudorandom ● Reëel random getal in [min, max)? ● (double)rand() / ((double)RAND_MAX + 1.0) geeft een getal r in [0.0, 1.0) ● min + r * (max – min) is redelijk deling van RAND_MAX door r is beter ● rand() is voldoende voor Datastructuren

Templates int add(const int x, const int y) { return x + y; } double add(const double x, const double y) { return x + y; } 29

30 Templates ● Templates ● Bestaan voor functies en voor classes ● Geven een of meer opties voor datatypes – bv vector of vector ● Creëren een nieuwe instantie van de class of functie tijdens compile time, wanneer deze ergens gebruikt wordt ● Standard c++ library maakt intensief gebruik van templates

Templates template T const add(T const &t1, T const &t2) { return t1 + t2; } 31

32 Samenvatting ● Eisen voor programmeeropdrachten: ● Teams van maximaal 2 personen ● C++, werkt op Linux en Windows (makefile) ● Werk met een goede class verdeling ● Voldoende commentaar bij elke class/method ● Geen te lange functies ● Scheiding public/private, const correctness ● Gebruik abstracte classes voor ADT's waar nuttig ● Optioneel: gebruik van templates

33 Vragen? ● ● Tijdens werkcolleges ● Buiten werkcolleges: