programmationorientéeobjetenc++ lic .introductionpoo...

Download ProgrammationorientéeobjetenC++ Lic .IntroductionPOO Comparaisonaveclaprogrammationimpérative(C,Pascal,)

Post on 25-Jan-2019

213 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

Programmation oriente objet en C++Licence 3 Informatique

David GenestAnne universitaire 2018-2019

Chapitre 1Introduction

Prsentation du coursDe C C++

Prsentation du cours

Prsentation du coursDe C C++

Programmation oriente objet C++

Objectif du cours

Approfondir les concepts de la programmation oriente objet.(Dj vus en Java dans le cours de POO)

Apprendre le langage C++ (moderne). Utiliser des outils daide au dveloppement.Environnement de dveloppement, dbogueur

Organisation

20h de cours : Concepts de la POO et C++. 44h de TP : Programmation C++ et outils de dveloppement. + Bases de la programmation d interfaces graphiques (Qt).

valuation

13 CC +23 Examen. CC : 2 TP relevs et nots.

1

Introduction POO

Programmation Oriente ObjetParadigme (style) de programmation consistant assembler desbriques logicielles (objets).Un objet reprsente un concept ou une entit du monde.

La plupart des langages de programmation populaires aujourdhuisont bass sur lapproche objets : Java, C#, Swift, Python, PHP,Javascript Mais les objets ne sont pas uniquement utiliss pour laprogrammation

Bases de donnes objets (Oracle) Mthodes de conception objets (UML) HTML+CSS, (accompagn de Javascript, PHP)

Objectif premierFaciliter le dveloppement dune application robuste. 2

Introduction POO

Comparaison avec la programmation imprative (C, Pascal, )

Impratif. Un problme est dcompos en sous-problmes, unefonction est crite pour rsoudre chaque problme. Les fonctionssappellent entre elles en se passant des paramtres.

Objets. On identifie les concepts (ou entits) du problme, ainsique les relations entre ces concepts. Chacun de ces concepts estensuite reprsent par les donnes qu il contient et par lestraitements qu il est capable deffectuer.

Langage classesLa plupart des langages de programmation OO sont des langages classes : une classe dfinit un moule pour un ensemble dobjetsqui ont la mme structure et fournissent les mmes traitements.

3

Introduction C++

C++

Langage normalis par lISO Dfini dans les annes 1980 (mais a volu depuis : C++98, C++03,C++11, C++14, C++17)

Amlioration de C facilite lapprentissage pour quelquunqui connat dj C. Mais faire du C en C++ nest pas programmeren C++ ! Rutilisation facilite de code/bibliothques C

Dot dune bibliothque de classes et algorithmes Portable

Utilis dans Adobe Photoshop, Google Chrome, Microsoft Windows, MSOffice, LibreOffice, Edge, Mozilla Firefox, Opera, KDE, Oracle, MySQL, IDSoftware, Blizzard, EA http://www.lextrait.com/vincent/implementations.html 4

http://www.lextrait.com/vincent/implementations.html

Introduction C++ - Objectifs

Efficacit (mmoire et rapidit)Le langage najoute aucune fonction cache demandant de lammoire ou des traitements Pas de ramasse-miettes (garbage collector)

Dveloppement plus rapideUtilisation de la bibliothque standard, Rutilisation du code

Gestion de la mmoire plus simpleGrer les librations de mmoire (free) plus facilement (voireautomatiquement), Gestion des chanes plus simple

Vrification plus stricte des types Avantages de la POO Programmation gnrique, programmation fonctionnelle

5

De C C++

Prsentation du coursDe C C++

Types et variables

Allocation dynamique

constRfrences

Infrence de type

Conversion de type

Compilation

De C C++

Types et variables

Types de donnes

signed ; unsigned char ; short (short int); int ; long (long int); long

long (long long int)float ; double ; long double

wchar_t (unicode) bool true false

Types entiers de taille fixe int8_t, int16_t, uint16_thttp://en.cppreference.com/w/cpp/types/integer

6

http://en.cppreference.com/w/cpp/types/integer

Types de donnes

Premier exemple (premierexemple.cc)#include

int f(int a, int b) {int res(1);for (int i=1; i> a;std::cin >> b;std::cout

Porte des variables

Une variable est accessible partir de sa dclaration dans le bloc(accolades) dans lequel elle est dclare.

Une variable globale est dclare lextrieur de tout bloc.Il est toutefois fortement conseill de ne pas utiliser de variablesglobales.

Cas particulier dune dclaration dans un for :La variable est accessible uniquement dans les instructionsrptes par le for.

8

Porte des variables

Porte des variables (porteevariables.cc)#include signed short varglobale;int main() {varglobale=5;unsigned int varlocale=10; // initial isationwhile (varglobale >= 0) {int v(6);varglobale += v;varlocale--;

}std::cout

Dclaration et initialisation des variables

Multiple dclarationsint a, b, c; // quivalent int a; int b; int c;

Attentionint* a, b;

a est un pointeur sur un entier, b est un entier.

Initialisation C / Initialisation C++int a=0; // quivalent int a(0);

Dans les deux cas, il sagit dune initialisation (et non uneaffectation).

Initialisation : donner une valeur initiale une nouvelle variable.Affectation : modifier la valeur dune variable existante. 10

Chanes de caractres

Le type (classe) std::string fournit les oprations courantes sur leschanes de faon bien plus simple que les chanes C.

Dclaration et initialisationstd::string s1;std::string s2a("valinit"), s2b="valinit";std::string s3a(s1), s3b=s1;

Affectation = Comparaison == != > s; Affichage std::cout

Tableaux C

Exempleint t1[4];int t2[4]={1,5,7,9};int t3[]={12,42,23};int t2d[4][2];t2d[2][1] = 12;t2d[4][2] = 23; // Attention !

AttentionUn tableau est pass par pointeur une fonction.Une fonction ne peut pas connatre la taille dun tableau.

int maximum(int tab[], int taille) { ... }std::cout

Tableaux C++ std::array

Le (modle de) type (classe) std::array fournit les oprations debase dun tableau (dlments de mme type) de faon plus simple etfiable quun tableau C.

nest pas converti de faon implicite en pointeur. peut tre pass par valeur Copie. peut tre affect. connat sa taille. peut dtecter un accs un indice invalide.

http://en.cppreference.com/w/cpp/container/array

13

http://en.cppreference.com/w/cpp/container/array

Tableaux C++ std::array

array (array.cc)#include #include int max(std::array t) {int m(t[0]);for (std::size_t i=1; im)m=t[i];

return m;}int main() {std::array tab {3,7,1,2,6};std::cout

Tableaux C++ std::array

L indice dun tableau est de type std::size_t oustd::array::size_type.

[] ne fait aucune vrification, alors que at() lve une exception.terminate called after throwing an instance of'std::out_of_range'what(): array::at: __n (which is 5) >= _Nm(which is 5)

std::max_element calcule le maximum dun conteneur.

15

Boucle for d intervalle

Syntaxe for d intervallefor(typevar nomvar : intervalle)

Un intervalle peut tre un std::initializer_list (un ensemble devaleurs de mme type entre accolades spares par des virgules), unstd::array (ou toute autre classe disposant de mthodes begin etend).

Le type de la variable peut tre une valeur ou une rfrence.

16

Boucle for d intervalle

Boucle for d intervalle (array2.cc)#include #include

void afficher(std::array t) {for (int a : t)std::cout

struct et enum

typedef nest plus utile lors de la dclaration de struct ou enum.

Une struct peut tre initialise sa dclaration en passant entreaccolades {} une valeur pour chacun des champs de la structure(dans lordre de dclaration).

18

struct et enum

Usage du typedef (typedef.cc)#include typedef unsigned int Annee;enum EtatPersonne {MAJEUR,MINEUR

};struct Personne {std::string nom;std::string prenom;EtatPersonne etat;Annee naissance;

};int main() {Personne p; // et non struct Personne pp.nom = "Durand"; p.etat = MINEUR;Personne p2 { "Dupont", "Joe", MAJEUR, 1990 };return 0;

} 19

http://www.info.univ-angers.fr/pub/genest/fichiers/l3_poo/exemples/typedef.cc

using

using peut tre utilis la place de typedef avec une syntaxe plusnaturelle.Exempleusing Annee = unsigned int;using Tableau = std::array;

20

enum

Les types numrs de C (enum) sont utilisables en C++ maisconservent leurs dfauts.enums C (enums1.cc)enum Couleur { Rouge, Vert, Bleu };enum EtatPersonne { Majeur, Mineur };int main() {Couleur c(Rouge);if (c == Majeur) { }; //seulement un avertissementint d(c); // mme pas un avertissementreturn 0;

}

On prfrera les numrations fortement types enum class enum :plus srs, car ne sont pas convertis silencieusement en int.

21

http://www.info.univ-angers.fr/pub/genest/fichiers/l3_poo/exemples/enums1.cc

numrations fortement types : enum class

enum class (enums2.cc)enum class Couleur { Rouge, Vert, Bleu };enum class EtatPersonne { Majeur, Mineur };int main() {Couleur c(Couleur::Rouge);if (c == EtatPersonne::Majeur) { }; // Erreurint d(c); // Erreurreturn 0;

}

De plus les valeurs numres ne polluent pas lespace des noms,et doivent tre prfixes par le nom de lnumration.

22

http://www.info.univ-angers.fr/pub/genest/fichiers/l3_poo/exemples/enums2.cc

Arguments par dfaut

Les derniers arguments dune fonction peuvent avoir une valeur pardfaut lors de la dclaration de la fonction.Si les arguments correspondants ne sont pas passs lors dun appel,la valeur par dfaut est prise en compte.

Exemplevoid f(int a=2, int b=3) {std::cout

De C C++

Allocation dynamique

Alloc

Recommended

View more >