recap final Flashcards

1
Q

Un contrat protège les deux parties

A

Protège le client (dans ce cas ci vous mêmes)
o
Spécifie quelles sont ses obligations
o
En retour, est assuré d’un certain résultat

Protège le fournisseur (sous contractant)
o
Spécifie le minimum requis (de la part du client):

le fournisseur ne peut être tenu responsable
d’avoir manqué à des engagements ne figurant
pas dans le contrat.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

La spécification d’un contrat

A

Spécification d’une interface

peut être vue comme un contrat entre un client (l’utilisateur du
composant/classe) et un fournisseur (le composant/
Le contrat dit ce qui doit être rencontré par le client

pour pouvoir appeler une opération de l’interface :
précondition
Le contrat dit aussi ce qui doit être réalisé par le fournisseur

ce qui est garanti au client

pour rencontrer ce qui est prévu par l’opération
postcondition

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Les assertions : le contrat du logiciel

A

Mécanismes pour exprimer ces conditions :

assertions

préconditions

postconditions :

assertions s’appliquant à des méthodes en particulier,

invariants de classe :

assertions s’appliquant à toutes les méthodes d’une classe en
tout temps.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Une spécification plus complète d’une
opération offerte par un composant
deviendrait:

A

le nom de l’opération
o
le nombre, le type et l’ordre des paramètres
o
les préconditions
o
les postconditions
o
le type de retour.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Invariant de classe

A

Autre type d’assertion
o
représente l’ensemble des conditions logiques devant
être respectées pour assurer un comportement correct
d’une classe.

Immédiatement après la création d’un objet de
cette classe,

l’invariant doit être respecté et préservé tout au
long de la vie de l’objet.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Les MACROs pour le contrat

A

“fonction” définie par un #

Remplacement textuel, fait par le
préprocesseur.

Dans le fichier ContratException.h ,
1.
Définition de ces classes
2.
2.+ définition des MACROs suivantes:

PRECONDITION(test);

POSTCONDITION(test);

ASSERTION(test);

INVARIANT(test);

INVARIANTS();

Regardons ContratException.h

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

mise en oeuvre test unitaire

A

Doit être structuré

Doit être répétable

i.e. on doit pouvoir le faire exécuter le plus
souvent possible.

Doit fournir un rapport d’exécution extrêmement
simple (ok, pas

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

résultat d’une assertion

A


success (test réussi),

nonfatal failure (test

fatal failure (test échoué et arrête la

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Construction et destruction :
Ordre d’appel

A

Construction des objets de la hiérarchie
o
de la classe de base tout en haut jusqu’à la
classe dérivée
Destruction des objets de la hiérarchie
o
de la classe dérivée jusqu’à la classe de base

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Visibilités :

A

o
Privée : Accès interne de la classe.
o
Publique : Accès à tous les utilisateurs
o
Protégée : Accès aux héritiers
Les méthodes d’une classe ont
toujours accès aux attributs de la
classe, peu importe la visibilité

les données privées ne sont manipulables que par les méthodes
de la classe à laquelle les données appartiennent.

L’héritage ne donne pas d’accès privilégié pour la visibilité privée

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Ajout de méthodes

A

Triangle qui est une classe dérivée de Polygone (
o
a immédiatement accès à cette nouvelle fonctionnalité,

Triangle2 qui utilise Polygone (
o
doit être ajoutée manuellement dans la classe Triangle2

Résultat intéressant d’un point de vue de gestion du code.

tout héritier de la classe Polygone a accès à ses méthodes
qu’elles soient écrites maintenant ou dans le futur

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Remplacer, hériter, augmenter …

A

Une classe dérivée D peut décider de
prendre action sur une méthode m() de la
classe de base B:

La classe dérivée remplace la méthode
B::m() par D::m() en implantant un
algorithme différent.

La classe dérivée hérite de B::m() sans
changement.

La classe dérivée augmente la méthode
B::m() par une méthode D::m() qui appelle
d’abord B::m() avant de faire d’autre tâches.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

En C++, trois formes :

A

Polymorphisme ad hoc :

Surcharge de m é thode(d é j à vu)
o
Polymorphisme param é trisable

Les templates
o
Polymorphisme pur

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Le polymorphisme pur

A

Mé thodes virtuelles , alli é es à l’h é ritage:
o
permet de rendre les programmes extensibles par l’h é ritage
de comportements existants

ajout de comportements sp é cifiques au besoin.

Traitement d une famille de classe s une hi é rarchie de
fa ç on g é n é rique .
o
On n’a pas à identifier le type de la classe avec un switch
comme dans les langages non OO.

Traitement g é n é rique à partir de la classe de base
m
é thodes virtuelles .
o
à l’ é chelle d’une hi é rarchie de classes.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Signature des m
é thodes virtuelles

A

Une fonction virtuelle doit avoir la même signature
et même type de retour dans toutes la hi é rarchie.

Une fois qu’une fonction a é t é d é clar é e virtuelle,
elle le demeure dans toute la hi é rarchie à partir de
ce point

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Méthodes virtuelles

A

Seule une fonction membre peut être virtuelle

Un constructeur ne peut être virtuel

Un destructeur peut être virtuel

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Classes abstraites ou concr
è tes

A

En g é n é ral :
o
Cr é ation d une classe => cr é er des instances

Ce n’est pas toujours le cas…

Si cr é ation d une classe abstraite ,

Pas de cr é ation d’instance de cette classe.
Exemple :
on peut se servir d’une telle classe pour regrouper des concepts sous
une classe th é orique .

Bien plus que la th é orie

imposer une interface g é n é rale que toutes les classes h é riti è res
devront r é implanter

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

En C++, ¸ pour cr é er une classe purement abstraite

A

au moins une de ses m é thodes d é clar é es purement virtuelle.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

trois grandes zones de mémoire:

A

Zone de la pile d’appel
*
Zone d’adressage statique
*
Zone d’allocation dynamique sur le monceau

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

*
Zone d’allocation dynamique

A

Les deux premières zones ont leur utilité
o
demeurent insuffisantes pour la plupart des
programmes sérieux.

dans un programme, on ne peut
o
estimer la quantité de mémoire nécessaire
o
prévoir à quel moment celle ci sera nécessaire.
o
réserver une très grande partie de la mémoire
simplement parce qu’on prévoit en avoir besoin.

utiliser l’allocation dynamique pour obtenir
et libérer de la mémoire lorsqu’on en a
vraiment besoin.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

pour allouer de la mémoire dynamiquement,

A

opérateur new

On doit absolument récupérer l’espace alloué par le new

sinon on laisse ce qu’on appelle des déchets ( memory leaks

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

opérateur delete

A

On récupère l’espace occupé par un objet sur le monceau
o
Appel de l’opérateur delete sur le pointeur obtenu à partir d’un
new

23
Q

Fuite de mémoire

A

1 new  1 delete

Qui a la responsabilité de libérer?

Solution : les pointeurs intelligents

unique_ptr

shared_ptr

weak_ptr

24
Q

unique_ptr

A

Un seul emplacement mémoire référencé par un seul
pointeur
o
un unique_ptr est propriétaire de l’emplacement pointé

25
Q

shared_ptr

A

Un même emplacement référencé par plusieurs pointeurs
o
Compteur de référence (Lorsque le dernier shared_ptr est
détruit, l’objet pointe est également détruit.)
o
Pas de notion de propriété

26
Q

weak_ptr

A

un weak pointer permet de pointer
un objet géré par un shared pointer
sans impacter son compteur de
références
(solution aux références circulaires

27
Q

deux sortes de copie:

A

La copie de surface (ou shallow
o
2. La copie en profondeur (ou deep
Si on

28
Q

Si on ne fait rien de particulier,

le langage C++ fait toujours une copie de

A

surface lors de
la copie d’un objet.
Si on désire une copie en
profondeur

il faut l’implanter.

29
Q

Forme canonique de Coplien

A

Pour toute classe qui contient des allocations
dynamique de la mémoire liées à ses attributs
(notion de profondeur)
o
Utiliser des pointeurs intelligents
o
Implanter les méthodes :

constructeur de copie

surcharge de operator

30
Q

Lancer une exception

A

Le mécanisme des exceptions :
o
lancer des exceptions sur le site de l’erreur.
o
transférer le contrôle à une autre partie du code

gérer la situation avec compétence.

31
Q

spécifiés à l’aide de blocs

A

try catch

try
// code pouvant lancer une exception
//avec
throw Type exception
catch (Type exception erreur
// erreur contient de l’information
sur
//
// code de gestion de l’exception

32
Q

Hiérarchie d’exceptions

A

Du côté logic_error i.e. erreur de programmation.
o
Du côté runtime_error par contre, il s’agit d’exception pouvant
toujours se produire.
o
La théorie du contrat : exceptions attachées à cette hiérarchie

33
Q

Si on veut gérer toutes les exceptions de contrat,
o
mentionner

A

catch (ContratException& e)
o
toutes les exceptions de contrat : precondition, postcondition,
invariant et assertion seront attrapées.

34
Q

Si on veut gérer seulement les préconditions,

A

mentionner :
catch (PreconditionException &e)

35
Q

On pourrait gérer toutes les erreurs de programmation en
mentionnant :

A

catch (logic_error& e)

36
Q

Attraper toutes les exceptions et relancer

A

pour faire une action protectrice
pour faire un nettoyage quelconque.
try
{ // code
catch (…)
{ // Gestion de n’importe quelle exception
throw ; // Relance l’exception

37
Q

Framework : définitions

A

pour faciliter le développement d’applications
dans un contexte déterminé.

ensemble de classes qui coopèrent et
permettent des conceptions réutilisables dans
des catégories spécifiques de logiciels.

utilisation  sous classage (héritage et
polymorphisme) de classes abstraites.

38
Q

framework : très proche d’une librairie de classes

A

: très proche d’une librairie de classes

tous les deux des composants réutilisables codés.

bibliothèque de classes = ensemble de composants,
o
classes pouvant être réutilisées

mécanisme d’agrégation et d’héritage.

frameworks = librairies de classes +
o
relations,
o
interactions entre des instances de classes.

39
Q

Mécanisme d’instanciation

A

Processus pour obtenir une classe utilisable à partir d’une template
: instanciation de la template

template ————–> classe —————-> objet

40
Q

Les méthodes : Notes supplémentaires

A

Les méthodes ne sont plus dans un fichier cpp
mais dans le .h après la déclaration de la
classe ou dans un hpp inclut par le .h

41
Q

Classes patron

A

patron de classe utilisé avec de nouveaux
arguments  nouvelle classe patron compilée.

déclaration d’un objet de type
std vector int > et d’un autre de type
std vector <double>

Instanciation de deux classes différentes.

Les objets seront de types différents,

Aucun lien entre les deux (pas même une
conversion).</double>

42
Q

Fonctions patron

A

comportement similaire avec les fonctions
:

chaque appel d’un patron de fonction avec de
nouveaux types d’arguments compile une nouvelle
fonction patron.

43
Q

Composantes principales de STL:

A

Algorithmes : définir des procédures de
traitement.

Conteneurs : gérer un ensemble d’espaces
mémoire selon les structures de données

Itérateurs : procurer à un algorithme une façon
de traverser un conteneur.

44
Q

Comme avec les pointeurs sur un vecteur C++, l’itérateur
peut être incrémenté ou décrémenté pour parcourir le

A

peut être incrémenté ou décrémenté pour parcourir le
conteneur ( iter ou iter

45
Q

Lorsqu’on spécifie un intervalle avec deux itérateurs , iter1
et iter2 , il est nécessaire que iter2 soit accessible à partir
de

A

iter1 , i.e. un nombre fini de ++iter1 pour atteindre
iter2

46
Q

Les propriétés des itérateurs dépendent des conteneurs

A

qui
les fournissent

47
Q

Hiérarchie des itérateurs

A

aléatoire
bidirectionel
unidirectionel avant
entrée(lire)/sortie(écrire)

48
Q

séquence

A

vector deque list

49
Q

association

A

set multiset map multimap

50
Q

adaptaeur

A

stack queue priority queuev

51
Q

Comment accéder les valeurs?

A

Si l’accès aléatoire est important

vector ou deque

Si l’accès séquentiel est suffisant

un des autres conteneurs peut être adapté.

52
Q

Les algorithmes génériques

A

Les algorithmes fournis avec STL sont découplés du
conteneur sur lequel ils agissent
o
utilisation des itérateurs.

Tous les conteneurs dans la même catégorie peuvent
utiliser les mêmes algorithmes.

53
Q

+/-

A

+ librairie majeure, performance, extensible
o
connaître et comprendre les exigences et les limites