Introduction à la programmation orientée objet Module 1:Position du problème Michel Poriaux HEPH Condorcet.

Slides:



Advertisements
Présentations similaires
POO par Jenny Benois-Pineau 25/03/2017.
Advertisements

Formation C débutant. Notion de compilation source.c executable Phase de compilation Fichier de texte brut, inexploitable directement par la machine Fichier.
1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif.
TRAITEMENT DE STRUCTURES
Programmation Initiation Aux Langages C et C++ (3) Bruno Permanne 2006.
Structures de données IFT Abder Alikacem Espace de nommage Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000 Abder Alikacem Espace de nommage Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Conteneurs STL.
1 PROTOTYPE PGC++ Vecteur_3D DÉFINITION. 2 class Vecteur_3D { private : float vx, vy, vz, vw; // Représentation en coordonnées homogènes. public : Vecteur_3D();
Introduction au C++ héritage / polymorphisme
Héritage Lhéritage permet de spécialiser une classe en définissant une relation de type « est une sorte de ». #include comptebancaire.h class CompteEpargne.
Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 4 Polymorphisme II.
Une introduction à Java
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Introduction Semaine 1 Département d’informatique et de génie logiciel Édition Septembre 2009.
Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 3 Polymorphisme I.
Faculté Polytechnique de Mons
La notion de type revisitée en POO
et quelques rappels sur certains éléments du langage C
Héritage multiple En langage C++, il est possible d’utiliser l’héritage multiple. Il permet de créer des classes dérivées à partir de plusieurs classes.
7ième Classe (Mardi, 24 novembre) CSI2572. Devoir 3 ?
Argc et argv Utilisation des paramètres de la ligne de commande.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Les types composés Les enregistrements.
Les surcharges d'opérateurs
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
Exception Handling "Unfortunately, it's almost accepted practice to ignore error conditions, as if we're in a state of denial about errors." Bruce Eckel.
Cours de Langage C Les structures
C++ Les fonctions. Présentation Utilité : Dès qu'un programme dépasse la centaine de lignes de code, il est pratique de pouvoir le décomposer en plusieurs.
1 Programmation en C++ Fonctions ● Déclaration et définition de fonctions ● Arguments ● Surcharge ● Arguments optionnels ● Fonctions constantes ● Fonctions.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
1 Programmation en C++ IO en C++/SL ● Standard Library ● Types, objets pour IO ● L'entrée de clavier ● Sortie à l'écran ● Fichiers.
1. 2 Boite à outils Qt ● Boite à outils C++ pour le développement multi-plateforme d'application en environnement graphique (GUI) – des fonctions GUI.
JAVA.
Communication client-serveur
Codage d’un jeu de plateforme avec SDL 2.0
Environnement de développement des BD
Cours de programmation en langage C (Norme ANSI)
Environnement du développement de BD ORACLE REPORTS 10g
Langage C Structure d'un programme Types Lire Ecrire Tester
Pas de variable globale
Les notions de classe et d'objet
Pointeurs et langage C.
Programmation en C++ IO en C++/SL
Synthèse Tableau Le tapis de course.
Principes de programmation (suite)
Algorithmique Langage C
Séances de soutien Projet informatique 2A
Semaine 11 Les pointeurs (suite)
Les fonctions.
GOBO Ne pas partir de zéro
Session 1 31 mai 2017 Plateforme ICONICS Justine Guégan
Arguments de la ligne de commande
6. Les types utilisateurs et les structures de données
Les flux en C++ Les flux d’entrées sorties Les flux standards.
Programmation en C++ C++ de base
Programmation Android GUI (widgets) et ressources
Les classes et les objets
Considérations de programmation
I-D-L Interface Definition Language Elaboré par Elaboré par : Mohamed Moncef SAAFI Sofien SAGHROUNI Mondher MOULAHI Marwen BALLOUMI LFSi-3.
I-D-L Interface Definition Language Elaboré par Elaboré par : Mohamed Moncef SAAFI Sofien SAGHROUNI Mondher MOULAHI Marwen BALLOUMI LFSi-3.
Support de formation Administrateur Menu Paie
Outils numérique pour la chimie Logiciel ChemSketch Réalisé par : Abdillahi Robleh Mohamed Martin Julien.
Le langage C# : Partie 1.
EXPOSE D’UML Licence 2 SI/GL/IM Réalisé par :Demandé par : AYITCHEME Auréane D r HOUNDJI TCHEGNON AlbertRatheil YAYA Hanane ZINSE Bienvenu.
Android Avancé Module I Graphisme dynamique 1 Michel Poriaux - HEPH Condorcet.
Transcription de la présentation:

Introduction à la programmation orientée objet Module 1:Position du problème Michel Poriaux HEPH Condorcet

Objectifs  Position du problème : un jeu basé sur la saga « Star Wars »  Une ébauche de résolution en C  Les limites de la programmation procédurale  Les promesses de la programmation orientée objet Michel Poriaux HEPH Condorcet

Un jeu basé sur la saga « Star Wars » x y distance Point b.(xb,yb) Point a.(xa,ya) Dark Vador Han Solo f=10 / distance Michel Poriaux HEPH Condorcet

Une ébauche de programme C typedef struct { char nom[20]; int x,y; int etat; } Personnage; float distance(Personnage pa,Personnage pb) { float d = sqrt(pow(pa.x-pb.x,2)+pow(pa.y-pb.y,2)); return d; } int main(int argc, char** argv) { Personnage p1,p2; float d,f; strcpy(p1.nom,"Solo"); p1.x=7; p1.y=15; p1.etat=30; //p1.etat=-10 //code accepté !, un coup bas de l'empire ???? strcpy(p2.nom,"Vador"); p2.x=5; p2.y=10; p2.etat=100; d=distance(p1,p2); printf("distance = %.1f m\n",d); f=10/d; p1.etat=p1.etat-(int)f; p2.etat=p2.etat-(int)f; printf("etat de %s est de %d\n",p1.nom,p1.etat); printf("etat de %s est de %d\n",p2.nom,p2.etat); return 0; } Notre code n’est pas protégé, on peut donner aux champs des structures des valeurs incohérentes. Michel Poriaux HEPH Condorcet

Partage du code //fichier starwars.h v1 typedef struct { char nom[20]; int x,y; int etat; } Personnage; #include "starwars.h" float distance(Personnage pa,Personnage pb) { float d = sqrt(pow(pa.x-pb.x,2)+pow(pa.y-pb.y,2)); return d; } int main(int argc, char** argv) { Personnage p1,p2; float d,f; strcpy(p1.nom,"Solo"); p1.x=10; p1.y=20; //p1.etat=30; //on doit changer son code ! p1.sante=30; strcpy(p2.nom,"Vador"); p2.x=5; p2.y=10; //p2.etat=100; //idem p2.sante=100; d=distance(p1,p2); printf("distance = %.1f m\n",d); … } //fichier starwars.h v2 typedef struct { char nom[20]; int x,y; int sante; } Personnage; Notre code est très sensible aux modifications de code provenant des autres éléments de l’application Michel Poriaux HEPH Condorcet

Extension du problème : l’espace x y z distance Michel Poriaux HEPH Condorcet

Un programme C « étendu » //fichier math.h typedef struct { char nom[20]; int x,y; int sante; } Personnage; typedef struct { char nom[20]; int x,y,z; int sante; } Vaisseau; #include "starwars.h" float distance(Personnage pa,Personnage pb) { float d = sqrt(pow(pa.x-pb.x,2)+pow(pa.y-pb.y,2)); return d; } //même nom de fonction interdit en c, seulement accepté en C++ float distanceV(Vaisseau va,Vaisseau vb){ float d = sqrt(pow(va.x-vb.x,2)+ pow(va.y-vb.y,2)+ pow(va.z-vb.z,2)); return d; } int main(int argc, char** argv) { Personnage p1,p2; Vaisseau v1,v2; float d; strcpy(p1.nom,"Solo"); p1.x=10; p1.y=20; p1.sante=30; strcpy(p2.nom,"Vador"); p2.x=5; p2.y=10; p2.sante=100; strcpy(v1.nom,"Millenium"); v1.x=1000; v1.y=2000; v1.z=1000; v1.sante=100; strcpy(v2.nom,"Croiseur"); v2.x=1500; v2.y=2500; v2.z=2000; v2.sante=1000; d=distance(p1,p2); printf("la distance entre %s et %s est de %.1f m\n",p1.nom,p2.nom,d); // d=distance(v1,v2)); //code refusé d=distanceV(v1,v2); printf("la distance entre %s et %s est de %.1f m",v1.nom,v2.nom,d); return 0; } Notre code n’est pas réutilisable pour des éléments plus complexes mais de même nature Michel Poriaux HEPH Condorcet

Pour aller plus loin … #include "starwars.h" float distance(Personnage *pa,Personnage *pb) { float d = sqrt(pow(pa->x-pb->x,2)+pow(pa->y-pb->y,2)); return d; } float distanceV(Vaisseau *va,Vaisseau *vb) { //même nom de fonction interdit en c, seulement accepté en C++ float d = sqrt(pow(va->x-vb->x,2)+pow(va->y-vb->y,2)+pow(va->z- vb->z,2)); return d; } void creationP(Personnage *p,char nom[],int x,int y,int sante){ strcpy(p->nom,nom); p->x=x; p->y=y; p->sante=sante; } void creationV(Vaisseau *v,char nom[],int x,int y,int z,int sante){ strcpy(v->nom,nom); v->x=x; v->y=y; v->z=z; v->sante=sante; } void setSante(Personnage *p, int s){ p->sante=s; } int getSante(Personnage *p){ return p->sante; } int main(int argc, char** argv) { Personnage p1,p2; Vaisseau v1,v2; float f,d; int s1,s2; creationP(&p1,"Solo",7,15,30); creationP(&p2,"Vador",5,10,100); creationV(&v1,"Millenium",1000,2000,1000,100); creationV(&v2,"Croiseur",1500,2500,2000,1000); d=distance(&p1,&p2); printf("la distance entre %s et %s est de %.1f m\n",p1.nom,p2.nom,d); f=10/d; s1=getSante(&p1)-(int)f; setSante(&p1,s1); s2=getSante(&p2)-(int)f; setSante(&p2,s2); printf("la santé de %s est de %d\n",p1.nom,getSante(&p1)); printf("la force de %s est de %d\n",p2.nom,getSante(&p2)); d=distanceV(&v1,&v2); printf("la distance entre %s et %s est de %.1f m", v1.nom,v2.nom,d); return 0; } Michel Poriaux HEPH Condorcet

Vers l’infini et au-delà … //fichier personnage.h typedef struct { char nom[20]; int x,y; int sante; } Personnage; void creationP(Personnage *p,char nom[],int x,int y,int sante){ strcpy(p->nom,nom); p->x=x; p->y=y; p->sante=sante; } void setSante(Personnage *p, int s){ p->sante=s; } int getSante(Personnage *p){ return p->sante; } //fichier vaisseau.h typedef struct { char nom[20]; int x,y,z; int sante; } Vaisseau; void creationV(Vaisseau *v,char nom[],int x,int y,int z,int sante){ strcpy(v->nom,nom); v->x=x; v->y=y; v->z=z; v->sante=sante; } void setSanteV(Vaisseau *v, int s){ v->sante=s; } int getSanteV(Vaisseau *v){ return v->sante; } Michel Poriaux HEPH Condorcet

Vers l’infini et au-delà … #include "personnage.h" #include "vaisseau.h" using namespace std; float distance(Personnage *pa,Personnage *pb) { float d = sqrt(pow(pa->x-pb->x,2)+pow(pa->y-pb->y,2)); return d; } float distanceV(Vaisseau *va,Vaisseau *vb) { //même nom de fonction interdit en c, seulement accepté en C++ float d = sqrt(pow(va->x-vb->x,2)+pow(va->y-vb- >y,2)+pow(va->z-vb->z,2)); return d; } int main(int argc, char** argv) { Personnage p1,p2; Vaisseau v1,v2; float f,d; int s1,s2; creationP(&p1,"Solo",7,15,30); creationP(&p2,"Vador",5,10,100); creationV(&v1,"Millenium",1000,2000,1000,100); creationV(&v2,"Croiseur",1500,2500,2000,1000); d=distance(&p1,&p2); printf("la distance entre %s et %s est de %.1f m\n",p1.nom,p2.nom,d); f=10/d; s1=getSante(&p1)-(int)f; setSante(&p1,s1); s2=getSante(&p2)-(int)f; setSante(&p2,s2); printf("la santé de %s est de %d\n",p1.nom,getSante(&p1)); printf("la force de %s est de %d\n",p2.nom,getSante(&p2)); d=distanceV(&v1,&v2); printf("la distance entre %s et %s est de %.1f m",v1.nom,v2.nom,d); return 0; } Michel Poriaux HEPH Condorcet

En conclusion  La programmation procédurale est limitée par les éléments suivants :  Impossibilité de contrôler les informations enregistrées lors d’un usage des structures de données par l’application principale.  Sensibilité du code aux modifications des ressources utilisées(extérieures ou intérieures).  Impossibilité de réutiliser le code produit pour des structures plus complexes.  Impossibilité d’écrire des fonctions générales valables pour différentes structures de données.  Solution  La programmation orientée objet :  Contrôle des données et masquage du détail de leur implémentation par le mécanisme de l’encapsulation.  Réutilisation des structures existantes par le mécanisme de l’héritage.  Utilisation de fonctions générales valables pour différents types de structure par le mécanisme du polymorphisme. Michel Poriaux HEPH Condorcet