45
Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 1 Génie Logiciel Génie Logiciel Notions de programmation Notions de programmation orientée objet orientée objet Renaud Marlet LaBRI / INRIA http://www.labri.fr/~marlet màj 19/04/2007

Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Embed Size (px)

Citation preview

Page 1: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 1

Génie LogicielGénie Logiciel

Notions de programmation Notions de programmation orientée objetorientée objet

Renaud Marlet

LaBRI / INRIA

http://www.labri.fr/~marlet

màj 19/04/2007

Page 2: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 2

Les données d'abord (1)Les données d'abord (1)

ImportantImportant résultat de l'expérience :– Le plus souvent, il vaut mieux organiser un système

autour des données qu'autour des fonctions

– Et ce d'autant plus que les données sont complexes– Mais si les données sont simples et les traitements

complexes, OK pour organiser le système autour des fonctions

● ex. bibliothèque de fonctions trigonométriques

Page 3: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 3

Les données d'abord (2)Les données d'abord (2)

ImportantImportant résultat de l'expérience :– Le plus souvent, il vaut mieux organiser un système

autour des données qu'autour des fonctions

→ Importance du lien avec le modèle conceptuel– objets, attributs, opérations pour les manipuler

→ Programmation Orientée Objet (OO)

Page 4: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 4

Notions de programmation objetNotions de programmation objet

● Nécessite un cours complet (!)– principes– méthodologie– langages : Java, C++, Eiffel, ...

→ Juste quelques notions ici– idées les plus importantes– exemples en Java– comment faire de la programmation objet en C

Page 5: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 5

Programmation objet :Programmation objet :classe et instanceclasse et instance

● Classe

= type d'objet (données + opérations pour les manipuler)– ex. : classe « point » dans le plan (c.-à-d. en dim 2)

● données = deux coordonnées cartésiennes (x,y)● opérations = déplacer, calculer la norme (distance à (0,0)), ...

– en général : 1 fichier ~ 1 classe● Instance

= exemplaire de la classe– ex. : un point en (3,5), un en (-2,7), un autre en (3,5) ...

Page 6: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 6

Programmation objet :Programmation objet :champ et méthodechamp et méthode

● Champ

= attribut de l'objet– ex. : coordonnée x, coordonnée y

(on dit aussi « variable d'instance »)

● Méthode

= opération pour manipuler les données (~ fonction)– ex. : déplacer(dx,dy), norme()

Page 7: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 7

Exemple en Java : classe PointExemple en Java : classe Point

class Point {

double x, y; // valeur 0 par défaut

double norme() { return Math.sqrt(x*x+y*y); }

void déplacer(double dx, double dy) {

x += dx; y += dy;

}

}

Point pt = new Point();

pt.déplacer(3.0,4.0);

double nm = pt.norme(); //→ 5.0

Page 8: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 8

Exemple en Java : classe PointExemple en Java : classe Pointclasse définition de champs définition de méthodes

fabrication d'une instance

appel de méthodes

class Point {

double x, y; // valeur 0 par défaut

double norme() { return Math.sqrt(x*x+y*y); }

void déplacer(double dx, double dy) {

x += dx; y += dy;

}

}

Point pt = new Point();

pt.déplacer(3.0,4.0);

double nm = pt.norme(); //→ 5.0

Page 9: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 9

Exemple en Java : instancesExemple en Java : instances

class Point {

...

double distance(Point pt) {

double dx = x-pt.x; double dy = y-pt.y;

return Math.sqrt(dx*dx+dy*dy); }

}

Point pt1 = new Point().déplacer(7.0,3.0);

Point pt2 = new Point().déplacer(4.0,-1.0);

double dist = pt1.distance(pt2); //→ 5.0

Page 10: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 10

fabrication d'instances

définition de classe

Exemple en Java : instancesExemple en Java : instancesdéfinition de méthode

appel de méthodes

class Point {

...

double distance(Point pt) {

double dx = x-pt.x; double dy = y-pt.y;

return Math.sqrt(dx*dx+dy*dy); }

}

Point pt1 = new Point().déplacer(7.0,3.0);

Point pt2 = new Point().déplacer(4.0,-1.0);

double dist = pt1.distance(pt2); //→ 5.0

Page 11: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 11

Programmation objet :Programmation objet :constructeurconstructeur

● Constructeur– sorte de méthode– initialise les champs de l'objet lors de sa création– créations/initialisations plus lisibles– permet des initialisations toujours cohérentes

Page 12: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 12

Exemple en Java : constructeurExemple en Java : constructeur

class Point {

double x, y; // initialisés par défaut à 0

Point(double u, double v) {

x = u; y = v;

}

...

}

Point pt1 = new Point(7.0,3.0);

Point pt2 = new Point(4.0,-1.0);

double dist = pt1.distance(pt2); //→ 5.0

Page 13: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 13

instances

Exemple en Java : constructeurExemple en Java : constructeurclasse champsconstructeur

class Point {

double x, y; // initialisés par défaut à 0

Point(double u, double v) {

x = u; y = v;

}

...

}

Point pt1 = new Point(7.0,3.0);

Point pt2 = new Point(4.0,-1.0);

double dist = pt1.distance(pt2); //→ 5.0

Page 14: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 14

Programmation objet :Programmation objet :extension de classe et héritageextension de classe et héritage

● Extension de classe– version spécialisée d'une classe existante– héritage des champs et méthodes de cette classe– champs et méthodes additionnels– vocabulaire :

● sous-classe : la classe étendue● super classe : la classe que l'on étend

Page 15: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 15

Exemple en Java : extensionExemple en Java : extension

class PointColoré extends Point {

Couleur couleur;

PointColoré(double u, double v, Couleur coul){

x = u; y = v; couleur = coul; }

boolean mêmeCouleur(PointColoré pt) {

return couleur.equals(pt.couleur); }

}

Couleur rouge = new Couleur(255,0,0);

PointColoré ptRouge = new PointColoré(3,4,rouge);

double nm = ptRouge.norme(); //→ 5.0

Page 16: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 16

instances

Exemple en Java : extensionExemple en Java : extensionsous-classe champ ajouté méthode ajoutéeconstructeur super classe

méthode héritéechamps hérités

class PointColoré extends Point {

Couleur couleur;

PointColoré(double u, double v, Couleur coul){

x = u; y = v; couleur = coul; }

boolean mêmeCouleur(PointColoré pt) {

return couleur.equals(pt.couleur); }

}

Couleur rouge = new Couleur(255,0,0);

PointColoré ptRouge = new PointColoré(3,4,rouge);

double nm = ptRouge.norme(); //→ 5.0

Page 17: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 17

Programmation objet :Programmation objet :masquage de l'informationmasquage de l'information

● Masquage de l'information– s'applique à : classes, champs et méthodes– visibilité (scope)

● public : visible par toutes les classes● private : visible seulement dans la classe● protected : visible seulement par les classes étendues● (package : visible seulement des classes du même package)

→ Type abstrait– on peut changer le contenu privé de la classe sans

changer ses utilisations publiques

Page 18: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 18

Exemple en Java : visibilitéExemple en Java : visibilité

public class Point {

private double x, y;

public void déplacer(double dx, double dy) {

x += dx; y += dy;

}

}

Point pt = new Point();

pt.x = 3.0; pt.y = 4.0; // Erreur à la compilation

pt.déplacer(3.0,4.0); // OK

Page 19: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 19

Exemple en Java : visibilitéExemple en Java : visibilitéclasse champs invisibles en dehors de Point seul moyen de changer les coordonnées

fabrication d'instance

champs invisibles en dehors de Point

public class Point {

private double x, y;

public void déplacer(double dx, double dy) {

x += dx; y += dy;

}

}

Point pt = new Point();

pt.x = 3.0; pt.y = 4.0; // Erreur à la compilation

pt.déplacer(3.0,4.0); // OK

Page 20: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 20

Programmation objet :Programmation objet :interfaceinterface

● Interface

~ squelette d'une classe, sans implémentation● méthodes d'interface : sans corps (abstraites)● pas de champs d'interface

– plusieurs classes peuvent implémenter une même interface

– une interface peut étendre plusieurs autres interfaces

☛ Type abstrait (... )→– on peut changer la classe sans changer les utilisations

de l'interface

Page 21: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 21

Exemple en Java : interface (1)Exemple en Java : interface (1)

interface Point2D {

double norme();

void déplacer(double dx, double dy);

}

class PointCartésien implements Point2D { ... }

class PointPolaire implements Point2D {

double rayon, angle;

double norme() { return rayon; }

void déplacer(double dx, double dy) { ... }

}

Page 22: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 22

Exemple en Java : interface (1)Exemple en Java : interface (1)implémentations d'interface

définition de classes qui implémentent cette interface

méthodes de classe qui implémentent les méthodes d'interface

interface Point2D {

double norme();

void déplacer(double dx, double dy);

}

class PointCartésien implements Point2D { ... }

class PointPolaire implements Point2D {

double rayon, angle;

double norme() { return rayon; }

void déplacer(double dx, double dy) { ... }

}

méthodes interface

définition d'interface

Page 23: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 23

Exemple en Java : interface (2)Exemple en Java : interface (2)

interface Point2D {

double norme();

void déplacer(double dx, double dy);

}

Point2D pt1 = new PointCartésien(1.0, -2.0);

Point2D pt2 = new PointPolaire(4.0, 0.7854);

pt1.déplacer(2.0, 6.0);

pt2.déplacer(1.0, 1.0);

double nm1 = pt1.norme(); //→ 5.0

double nm2 = pt2.norme(); //~ 5.0

Page 24: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 24

Exemple en Java : interface (2)Exemple en Java : interface (2)

appels des méthodes d'interface

appel de constructeurs spécifiques à chaque classe

interface

méthodes interfaceinterface Point2D {

double norme();

void déplacer(double dx, double dy);

}

Point2D pt1 = new PointCartésien(1.0, -2.0);

Point2D pt2 = new PointPolaire(4.0, 0.7854);

pt1.déplacer(2.0, 6.0);

pt2.déplacer(1.0, 1.0);

double nm1 = pt1.norme(); //→ 5.0

double nm2 = pt2.norme(); //~ 5.0

Page 25: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 25

Et aussi...Et aussi...

● Notion de package (paquetage)– espace de nommage

● Héritage multiple– extension de plusieurs classes

● Classes abstraites

~ classes incomplètes● Variables de classes

~ globales● ...

Page 26: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 26

Programmation objet et langage CProgrammation objet et langage C

● Langage C– programmation impérative (effets de bord)– variables, fonctions, types structurés– pas de notions d'objet (classe, méthode, ...)

● Extensions objet à C– langages : C++, Objective C

● Programmation objet en langage C– style de programmation particulier (→)

Page 27: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 27

Programmation objet en langage C :Programmation objet en langage C :classe, champ, instanceclasse, champ, instance

● Déclaration de classe (type d'objet)– déclaration de structure– déclaration d'un type pointeur vers cette structure

● Champ de classe (attribut)– champ de structure

● Création d'instance (objet) :– définition d'entités du type structure– allocation dynamique et cast vers le type pointeur

Page 28: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 28

Exemple en C : classe et instanceExemple en C : classe et instancedéclaration de structure champs « classe » = pointeur sur la structure

cast en pointeur sur la structure

allocation

struct str_pt {

double x, y;

};

typedef struct str_pt *point;

/* Allocation statique */

struct str_pt orig = { 0.0, 0.0 };

point origine = &orig;

/* Allocation dynamique */

point pt = (point) malloc(sizeof(struct str_pt));

Page 29: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 29

Programmation objet en langage C :Programmation objet en langage C :constructeur, méthodeconstructeur, méthode

● Constructeur (création d'objet)– fonction qui alloue dynamiquement une structure et

retourne un pointeur vers la structure

● Méthode (opération) :– fonction qui prend comme premier argument un

type pointeur vers la structure

Page 30: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 30

Exemple en C : constructeurExemple en C : constructeur

typedef struct str_pt {

double x, y;

} *point ;

point nouveauPoint(double x, double y) {

point pt = (point) malloc(sizeof(struct str_pt));

pt->x = x; pt->y = y;

return pt;

}

point pt1 = nouveauPoint(3.0, 4.0);

point pt2 = nouveauPoint(4.0, -1.0);

Page 31: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 31

Exemple en C : constructeurExemple en C : constructeur« classe » = pointeur vers struct champs « constructeur » = fonction qui alloue une struct

appels du « constructeur »

typedef struct str_pt {

double x, y;

} *point ;

point nouveauPoint(double x, double y) {

point pt = (point) malloc(sizeof(struct str_pt));

pt->x = x; pt->y = y;

return pt;

}

point pt1 = nouveauPoint(3.0, 4.0);

point pt2 = nouveauPoint(4.0, -1.0);

Page 32: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 32

Exemple en C : méthodesExemple en C : méthodes

double norme(point pt){

return sqrt(pt->x * pt->x + pt->y * pt->y);

}

void déplacer(point pt, double dx, double dy){

pt->x += dx; pt->y += dy;

}

double distance(point pt1, point pt2) {

double dx = pt1->x – pt2->x;

double dy = pt1->y – pt2->y;

return sqrt(dx*dx+dy*dy); }

Page 33: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 33

Exemple en C : méthodesExemple en C : méthodes« méthodes » = fonction avec objet comme premier argument

double norme(point pt){

return sqrt(pt->x * pt->x + pt->y * pt->y);

}

void déplacer(point pt, double dx, double dy){

pt->x += dx; pt->y += dy;

}

double distance(point pt1, point pt2) {

double dx = pt1->x – pt2->x;

double dy = pt1->y – pt2->y;

return sqrt(dx*dx+dy*dy); }

Page 34: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 34

Programmation C :Programmation C :déclaration et définitiondéclaration et définition

Déclaration :– suposition d'existence (dans un autre fichier), typage– ex. extern int x;

extern int f(char, struct str);

Définition– lieu d'existence (ce fichier), rappel du typage– ex. int x;

int f(char c, struct str mystr) { ... }

(→ contrôle possible par rapport à des déclarations)

Page 35: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 35

Programmation objet en C :Programmation objet en C :masquage de l'informationmasquage de l'information

● Visibilité des entités (variables, fonctions)– modifieur « extern »

● déclaration d'une entité visible à l'extérieur du fichier

→ variables et fonctions publiques (déclaration)

– modifieur « static »● définition d'une entité locale au fichier (invisible à l'extérieur)

→ variables et fonctions privées

– sans modifieur● définition d'une entité visible à l'extérieur du fichier

(il suffit pour ça qu'on l'y déclare « extern »)

→ variables et fonctions publiques (définition)

Page 36: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 36

Programmation objet en C :Programmation objet en C :interfaceinterface

● Interface– fichier « .h »

● déclarations de type (structure et pointeur sur structure)● déclarations de fonctions (extern)

● Classe qui implémente l'interface– inclusion du fichier « .h » (#include)– définition des fonctions correspondantes

● Classe qui utilise l'interface– inclusion du fichier « .h » (#include)– appel des fonctions déclarées

Page 37: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 37

Exemple en C :Exemple en C :fichier d'interface (point.h)fichier d'interface (point.h)

// Classe

typedef struct str_pt *point;

// Constructeur

extern point nouveauPoint(double x, double y);

// Méthodes

extern double norme(point pt);

extern void déplacer(point pt, double dx, double dy);

extern double distance(point pt1, point pt2);

Page 38: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 38

Exemple en C :Exemple en C :fichier d'interface (point.h)fichier d'interface (point.h)

// Classe

typedef struct str_pt *point;

// Constructeur

extern point nouveauPoint(double x, double y);

// Méthodes

extern double norme(point pt);

extern void déplacer(point pt, double dx, double dy);

extern double distance(point pt1, point pt2);

Page 39: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 39

Exemple en C :Exemple en C :implémentation de l'interface (point.c)implémentation de l'interface (point.c)

// Inclusion de l'interface

#include "point.h"

// Définition du type

typedef struct str_pt { double x, y; } *point;

// Définition des constructeurs et méthodes

static double normeXY(double x, double y) {

return sqrt(x*x+y*y); }

extern double norme(point pt) {

return normeXY(pt->x, pt->y); }

extern double distance(point pt1, point pt2) {

return normeXY(pt1->x - pt2->x, pt1->y – pt2->y); }

Page 40: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 40

Exemple en C :Exemple en C :implémentation de l'interface (point.c)implémentation de l'interface (point.c)

// Inclusion de l'interface

#include "point.h"

// Définition du type

typedef struct str_pt { double x, y; } *point;

// Définition des constructeurs et méthodes

static double normeXY(double x, double y) {

return sqrt(x*x+y*y); }

extern double norme(point pt) {

return normeXY(pt->x, pt->y); }

extern double distance(point pt1, point pt2) {

return normeXY(pt1->x - pt2->x, pt1->y – pt2->y); }

Page 41: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 41

Exemple en C :Exemple en C :utilisation via l'interface (use.c)utilisation via l'interface (use.c)

// Inclusion de l'interface

#include "point.h"

// Utilisation via l'interface

void use() {

point pt1 = nouveauPoint(3.0, 4.0);

point pt2 = nouveauPoint(4.0, -1.0);

printf("norm = %d\n", norme(pt1));

printf("dist = %d\n", distance(pt1,pt2));

int u = pt1->x; /* Erreur à la compilation */

int v = normeXY(3.0,4.0); /* Erreur à la compilation */

}

Page 42: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 42

Exemple en C :Exemple en C :utilisation via l'interface (use.c)utilisation via l'interface (use.c)

// Inclusion de l'interface

#include "point.h"

// Utilisation via l'interface

void use() {

point pt1 = nouveauPoint(3.0, 4.0);

point pt2 = nouveauPoint(4.0, -1.0);

printf("norm = %d\n", norme(pt1));

printf("dist = %d\n", distance(pt1,pt2));

int u = pt1->x; /* Erreur à la compilation */

int v = normeXY(3.0,4.0); /* Erreur à la compilation */

}

Page 43: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 43

Limitations deLimitations dela programmation objet en Cla programmation objet en C

● Interface seulement pour masquer– Pas de multiple implémentation (dans un même binaire)

● Extension plus lourde– structure dans structure

● Héritage plus lourd (explicite)– « cast » de type (de la sous-classe vers la superclasse)

● Moins de contrôles du compilateur– pas de contrôle de la légalité des casts

Page 44: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 44

Programmation objet en CProgrammation objet en C

☛ Suivre l'esprit, pas la lettre (!)(!)– s'adapter au problème : ne pas aveuglément tout

traiter avec des « objets à la C » (pointeurs vers structure et fonctions associées)

– aide à l'organisation des déclarations et définitions

Page 45: Notions de programmation orientée objet - IMAGINEimagine.enpc.fr/~marletr/LaBRI/teaching/GenLog/slides/... · – méthodologie – langages : Java ... – comment faire de la programmation

Génie logiciel – Programmation orientée objet © 2005-2007 Renaud Marlet 45

À retenirÀ retenir

● Organisation du système autour de :– fonctions si pas d'objets ou objets simples (ex.

scalaires)– données si des objets complexes

● Lien avec le modèle conceptuel● Concepts de la programmation objet

– classe, instance, champ, méthode, constructeur, interface, héritage, extension

● Masquage de l'information et types abstraits