Gevorderd Programmeren



Vergelijkbare documenten
Inleiding C++ Coding Conventions

UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS

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

Datastructuren Werkcollege Intro

Vakgroep CW KAHO Sint-Lieven

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

Introductie in C++ Jan van Rijn. September 2013

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

Labo 1 Programmeren II

Dit document bevat informatie over make bij het eerstejaars college Programmeermethoden, Universiteit Leiden, najaar 2010, zie

Inhoud Inhoud. Over dit boek 7. 1 Eclipse IDE (Integrated Development Environment) 9. 2 Functionele specificatie 13

Modelleren en Programmeren

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

eerste voorbeelden in Java

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Python. Vraag 1: Expressies en types. Vraag 1 b: Types -Ingebouwde functies- Vraag 1 a 3/10/14

Java. Basissyllabus. Egon Pas

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

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

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

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

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

Gevorderde Programmeertechnieken

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

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).

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

Software-Ontwikkeling I Academiejaar

Inhoudsopgave. Hoofdstuk 1: Ant...4

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

Syntax- (compile), runtime- en logische fouten Binaire operatoren

Werkomgeving. Android Studio. Android - werkomgeving 1/6

9 Meer over datatypen

Een gelinkte lijst in C#

Inleiding programmeren

Project 2: LOTTO simulatie Programmeren I

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

SYNTRA-WEST. Cursus OOP. Deel

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

Zelftest Programmeren in Java

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

Kleine cursus PHP5. Auteur: Raymond Moesker

Enterprise Connectivity. Marnix van Bo. TU Delft Elek Software Architect 20 jaar ervarin ontwikkeling

Scala. Korte introductie. Sylvia Stuurman

Programmeren in Java les 3

OEFENINGEN PYTHON REEKS 1

Zelftest Inleiding Programmeren

INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN

Zelftest Java concepten

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

Vereiste kennis. 1 Java-editor. 2 Het compileren van een programma

Javascript oefenblad 1

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

Software-Ontwikkeling I Academiejaar

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

Versturen van vanuit een Delphi VCL toepassing

Labo spraak- & beeldverwerking. Stijn De Beugher Dries Hulens

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft

Voor de database wordt een Access 2000 bestand gebruikt, met voorlopig 1 tabel:

Programmeren in C# Klassen schrijven

1e college Introductie Applicatiebouw. Applicatiebouw{ } Onderdeel van SmartProducts

Gentoo linux. Introductie. Gentoo is anders. LinuxFocus article number door Guido Socher (homepage) Over de auteur:

Modulewijzer tirprog02/infprg01, programmeren in Java 2

Academie voor ICT en Media 2013/2014

Programmeren met Arduino-software

Demo document template available on the Rapptorlab website

Programmeren in Java

Sumo-robotcompetitie. Uitlegsessie 15 maart 2011

IDE gebruik en introductie Java. Programmeertechnieken, Tim Cocx

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie

Opgaven. Python Assessment

Turbo Pascal (deel 1)

DIAGNOSTISCHE TOETS Softwaresystemen UITWERKING

Deeltentamen Grammatica s en ontleden 22 december 2005

Object-oriented programmeren met BlueJ en Visual Studio

Dynamiek met VO-Script

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

voegtoe: eerst methode bevat gebruiken, alleen toevoegen als bevat() false is


Design patterns Startbijeenkomst

Modelleren & Programmeren. Jeroen Fokker

Objectgericht programmeren 1.

NAAM: Programmeren 1 Examen 21/01/2011

C++ programmeermethoden Bachelor Kunstmatige Intelligentie

C++ programmeermethoden Bachelor Kunstmatige Intelligentie

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

Datastructuren: stapels, rijen en binaire bomen

Programmeren volgens het lagenmodel in C# met Visual Studio

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,

Programmeren volgens het lagenmodel in C# met Visual Studio

Modulewijzer Tirdat01

TI1206 Object Georiënteerd Programmeren (computertentamen) 28 oktober 2015, 13:30-16:30

Oefeningenexamen Informatica: juni 2015

Tentamen Imperatief Programmeren

APPLICATIEBOUW 1E COLLEGE: INTRODUCTIE. Onderdeel van SmartProducts

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

Windows applicaties met VB.NET VB Express 2010

Programmeren volgens het lagenmodel in C# met Visual Studio 2013 HA Informaticabeheer Bert Cauwenberg en Lieven Pauwels Werkgroep Handel 2015

Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368

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

Android Development CCSS2011

Transcriptie:

Gevorderd Programmeren Praktijk nota s Opleiding Bachelor of Science in Informatica, van de Faculteit Wetenschappen, Universiteit Antwerpen. Nota s bij de cursus voor academiejaar 2008-2009. J. Broeckhove Onderzoeksgroep Computationeel Modelleren en Programmeren

Inhoudsopgave 1 C++ werkomgevingen en voorbeeldprogramma s 2 1.1 Inleiding.................................. 2 1.2 Voorbeeldprogramma s.......................... 3 1.3 Gebruik van de voorbeeldcode....................... 3 2 Codeer conventies 4 2.1 Makefiles.................................. 4 2.2 Organisatie van bronbestanden...................... 4 2.3 Algemeen................................. 5 2.4 Indentatie................................. 5 2.5 Commentaar................................ 6 2.6 Naamgeving................................ 6 2.7 Preprocessing............................... 9

HOOFDSTUK 1 C++ werkomgevingen en voorbeeldprogramma s 1.1 Inleiding De C++ practica bestaan 10 sessies van elk drie uur, in een van de computerlabo s. Je werkt er onder SuSe Linux op een desktop werkstation. Dat geeft je de beschikking over een UNIX omgeving, met diverse grafische editors en met de tools die je nodig hebt: compiler (GNU gcc), linker, bijbehorende runtime libraries, make en doxygen. De make is build tool en doxygen is een documentatie generator. We werken in de practica in een Unix/Linux omgeving: daar zijn deze tools allemaal beschikbaar. Wie thuis geen Linux kan of wil installeren (als aparte partitie of via virtualizatie) kan de Cygwin omgeving onder Windows gebruiken. Er bestaan natuurlijk andere platformen en in het bijzonder ook zogenaamde IDE s (Integrated development Environment). Er zijn evenwel twee goede redenen om bij de eerste kennismaking met C++ niet voor de kiezen: Het is voor een informaticus belangrijke inzicht te hebben in in het functioneren van build tools, compilers enzomeer en daarvoor moet je ze eens expliciet gebruiken. Bij IDE s functioneren die achter de schermen en dan verwerf je dat inzicht niet. Het leren gebruiken van een IDE vergt tijd en moeite, en in het begin moet de focus volledig op de C++ liggen. De opgaven voor de practica worden wekelijks via het Blackboard systeem kenbaar gemaakt. Een van de elementen die de brug tussen theorie en practica slaat zijn de voorbeeldprogramma s die je ter beschikking gesteld krijgt.

1.2. VOORBEELDPROGRAMMA S 3 1.2 Voorbeeldprogramma s De voorbeeldprogramma s vormen een belangrijk onderdeel van het studiemateriaal. Deze programma s worden in de theorieles gebruikt om mechanismen van C++ te verduidelijken en voor de practica zijn het interessante startpunten. Gevolg gevend aan hetgeen in voorgaande sectie werd gezegd, wordt het project meeggeven zonder enige IDE zoals bijvoorbeeld MS Visual of Eclipse. Het installeren en gebruiken is vrij eenvoudig en wordt ook in de practica uiteengezet. Samengevat 1. je expandeerd het gecomprimeerde file om zo de directory met de democode op je systeem aan te brengen 2. je gaat naar de project directory en vindt daar subdirectories die elk verband houden met een deel van het project Het file Readme.txt geeft een summier ovezicht van de directorystructuur van het project. In de subdirectory unix vindt men essentiële file in verband met het gebruik van make. Het Readme.txt file daar geeft een summiere uiteenzetting over de targets. Een woord van waarschuwing: de makefiles in dit project zijn van een hoge complexiteit omdat ze een aantal werkmogelijkheden (zoals automatische detectie van nieuwe sources) implementeren die het gebruik van de projectstructuur zeer makkelijk maken. Het is niet vereist dat je ze van begin af aan kan ontleden en verder gebruiken. 1.3 Gebruik van de voorbeeldcode Het is uiteraard de bedoeling dat je de voorbeeldprogramma s bestudeerd. Maar meer nog is het de bedoeling dat je als materiaal beschouwd waarmee je kan experimeteren. Je doet dat door de code te wijzigen en uit te breiden en te analyseren of ze nog compileerbaar of uitvoerbaar is en wat de uitvoering als resultaat oplevert.op dit gebied is oefening baart kunst weldegelijk van toepassing en zal ook je inzicht in C++ groeien.

HOOFDSTUK 2 Codeer conventies 2.1 Makefiles In elk project komt minstens 1 makefile voor die minimaal volgende rules bevat rule om het project te compileren, te linken en de doxygen documentatie te genereren (via make of make all) rule om de objectfiles te verwijderen (via make clean) 2.2 Organisatie van bronbestanden Elk C++ bronbestand bestaat uit de volgende onderdelen 1. voor een headerfile, de multiple definition guard die meervoudige definitie door het meermaals includeren van het file verhindert 2. een algemeen commentaarblok in javadoc stijl dat volgende elementen bevat korte beschrijving @author @date @version 3. een include blok 4. de globale use statements

2.3. ALGEMEEN 5 5. het body-gedeelte Plaats een witregel tussen elk van deze onderdelen. 2.3 Algemeen Gebruik altijd slechts één statement per regel! Dus niet: a++;b++; maar wel a++; b++; Let er ook op dat je bij het aanroepen van procedures en methoden steeds de ronde haakjes plaatst, ook al geef je geen parameters mee! 2.4 Indentatie Alle onderdelen van sectie 2.2 worden tegen de kantlijn geplaatst. 2.4.1 Haakjes Hoewel er nog meerdere stijlen bestaan voor wat betreft het plaatsen van haakjes, zullen wij één van onderstaande conventies volgen. 1 int 2 somefunction ( i n t someargument ) { 3... 4 for (i = 0; i < 100; i ++) { 5... 6 } 7... 8 } Het openingshaakje staat op dezelfde lijn als zijn voorganger en het sluitingshaakje op een nieuwe regel. Een andere stijl gebruikt die conventie voor blokken in een functie- of klassedefinitie, maar zet het openingshaakje voor functie bodies en klassedefinities op een nieuwe regel: 1 int 2 somefunction ( i n t someargument ) 3 { 4... 5 for (i = 0; i < 100; i ++) { 6... 7 } 8... 9 }

2.5. COMMENTAAR 6 2.4.2 Regels afbreken Zorg ervoor dat de regels in uw code niet te lang worden (zodanig dat je niet moet gaan scrollen om een regel te lezen). Dikwijls is dit echter onvermijdelijk. Breek in die situaties de regel af en indenteer hem een tabpositie meer dan de eerste regel. Neem bij het afbreken volgende regels in acht: breek af na een komma breek af voor een operator verkies higher-level-afbreken boven lower-level (zoals bijvoorbeeld in lange expressies 2.5 Commentaar Op sommige plaatsen (zoals bij lange, ingewikkelde expressies) kan het nodig zijn een woordje commentaar toe te voegen. Aarzel niet dit dan ook te doen. Procedures, klassen en methods worden ook voorzien van een commentaarblok in javadoc stijl met volgende gegevens: korte beschrijving @param voor elke gebruikte parameter @return @exception indien er exceptions gethrowd worden 2.6 Naamgeving Goede naamgeving is zeer belangrijk en dus is het aangewezen zo weinig mogelijk afkortingen te gebruiken en namen zo logisch mogelijk te kiezen (dus zorg ervoor dat ze overeenstemmen met de realiteit!). 2.6.1 Namespaces Namespaces beginnen steeds met een hoofdletter. In geval van meerdere woorden worden deze onderscheiden door een hoofdletter. 1 namespace MyNameSpace { 2... 3 }

2.6. NAAMGEVING 7 2.6.2 Types, Acroniemen Begin de naam van een een type en een acroniem steeds met een hoofdletter. In geval van meerdere woorden worden deze onderscheiden door een hoofdletter. 1 typedef int MyTypeDef / / T y p e 2 SWLString mystring (" Secret World Live!") / / A c r o n i e m 2.6.3 Templateparameters Templateparameters moeten steeds beginnen met de letter A. In geval van meerdere woorden worden deze onderscheiden door een hoofdletter. 1 template <typename AType > / / A T y p e i s h e t t e m p l a t e a r g u m e n t 2 c l a s s FunctorTrait { 3... 4 }; 2.6.4 Enumeraties Enumeraties beginnen steeds met de letter E en in geval van meerdere woorden worden deze onderscheiden door een hoofdletter. enum EFreezeLevels {kfrozen=1, kthawn, knone} 2.6.5 Klassen Een basisklasse representeert fundamentele functionele objecten en begint steeds met een hoofdletter. Een virtuele basisklasse begint steeds met een V. Een pure virtuele klasse of interface begint steeds met de letter I. Een klasse die sommige, maar niet alle, functionaliteit van een virtuele basisklasse implementeerd, wordt een mixin class genoemd. Deze klassen beginnen met de letter M. Exceptionklassen beginnen steeds met een hoofdletter en eindigen op het woord Exception. Klassen die design patterns implementeren beginnen steeds met een hoofdletter en eindigen met de naam van het design pattern. Bijvoorbeeld 1 c l a s s BaseClass { / / B a s i s k l a s s e 2... 3 }; 4

2.6. NAAMGEVING 8 5 c l a s s VBaseClass { / / V i r t u e l e b a s i s k l a s s e 6... 7 }; 8 9 c l a s s IUserInterface { / / I n t e r f a c e 10... 11 }; 12 13 c l a s s MPrintable { / / M i x i n c l a s s 14... 15 }; 16 17 c l a s s StandardException { / / E x c e p t i o n k l a s s e 18... 19 }; 20 21 c l a s s IconFactory { / / F a c t o r y p a t t e r n 22... 23 }; 2.6.6 Procedures, methodes Procedures en methodes beginnen steeds met een kleine letter. In geval van meerdere woorden worden deze onderscheiden door een hoofdletter. Getters en setters beginnen steeds met set..., get... of is... (bij Booleans). 1 int entier (double x) { return (( int ) x );} / / f u n c t i e 2 3 c l a s s Full { 4 bool stop ( long int size ); / / m e t h o d e 5 void setmessage ( std :: string & msg ); / / s e t t e r 6 std :: string & msg getmessage (); / / g e t t e r 7 bool ismessageset (); / / b o o l e a n 8 };

2.7. PREPROCESSING 9 2.6.7 Variabelen Variabelen en parameters beginnen steeds met een kleine letter. Bovendien geldt: globale en static variabelen beginnen met de letter g. constanten beginnen met de letter k. data members beginnen met de letter f. static data members beginnen met de letters fg. 1 int gcount / / g l o b a l e v a r i a b e l e 2 3 void foo () { 4 int counter / / l o k a l e v a r i a b e l e 5 s t a t i c int gcounter / / s t a t i c v a r i a b e l e 6 const int kmaxcount (100) / / c o n s t a n t e v a r i a b e l e 7... 8 } 9 10 c l a s s MyClass { 11 private : 12 std :: string fname / / d a t a m e m b e r 13 s t a t i c Date fgdefaultdate / / s t a t i c d a t a m e m b e r 14... 15 }; 2.7 Preprocessing 2.7.1 Multiple Inclusion Guard De multiple inclusion guard zorgt ervoor dat er geen meervoudige definities kunnen voorkomen door het meermaals includeren van eenzelfde headerfile. Gebruik steeds INC_BESTANDSNAAMINHOOFDLETTERS_EXTENSIE 1 # ifndef INC_ VIDEO_ H 2 # define INC_ VIDEO_ H 3... 4 # endif / / I N C _ V I D E O _ H 2.7.2 Conditionele compilatie Makro s laten toe om te switchen tussen broncode varianten. wanneer ze echt nodig zijn. Gebruik steeds het prefix DEF. Gebruik ze enkel

2.7. PREPROCESSING 10 1 # define DEF_ ARCH X86 2... 3 4 # ifdef DEF_ ARCH == 86 5... 6 e l s e 7... 8 # endif / / D E F _ A R C H