La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1 POO P rogrammation O rientée O bjet (POO) UNIVERSITE de METZ Olivier HABERT Maître de Conférences Laboratoire d'Automatique des Systèmes Coopératifs.

Présentations similaires


Présentation au sujet: "1 POO P rogrammation O rientée O bjet (POO) UNIVERSITE de METZ Olivier HABERT Maître de Conférences Laboratoire d'Automatique des Systèmes Coopératifs."— Transcription de la présentation:

1 1 POO P rogrammation O rientée O bjet (POO) UNIVERSITE de METZ Olivier HABERT Maître de Conférences Laboratoire d'Automatique des Systèmes Coopératifs (LASC)

2 2 POO P rogrammation O rientée O bjet (POO) OO Qu'est ce quun Programme Orientée Objet ? –Ensemble d'objets autonomes et responsables qui s'entraident pour résoudre un problème final en s'envoyant des messages.

3 3 POO P rogrammation O rientée O bjet Quest ce quun objet –Objet = Données + Méthodes (Fonctions Membres)

4 4 POO P rogrammation O rientée O bjet Exemple dun objet

5 5 POO P rogrammation O rientée O bjet Encapsulation des données –Laccès aux données des objets est réglementé Données privées accès uniquement par les fonctions membres Données publiques accès direct par linstance de lobjet –Conséquences Un objet nest vu que par ses spécifications Une modification interne est sans effet pour le fonctionnement général du programme Meilleure réutilisation de lobjet –Exemple de la résistance Les données R et P ne peuvent être utilisées que par les fonctions membres

6 6 POO P rogrammation O rientée O bjet Polymorphisme (du Grecque plusieurs formes) –Un nom (de fonction, dopérateur) peut être associé à plusieurs mais différentes utilisations –Exemple Si a est un nombre complexe, sqrt( a ) appellera si elle existe la fonction adaptée au type de a. Dans un langage non OO, il aurait fallu connaître le nom de deux fonctions distinctes (selon que a soit complexe ou réel) Cest le système qui choisit selon le type de largument ou de lopérande

7 7 POO P rogrammation O rientée O bjet LHéritage –Permet de définir les bases dun nouvel objet à partir dun objet existant –Le nouvel objet hérite des propriétés de lancêtre et peut recevoir de nouvelles fonctionnalités Avantages –Meilleures réutilisations des réalisations antérieures parfaitement au point

8 8 POO P rogrammation O rientée O bjet Concept de Classe –Type réunissant une description Dune collection de données membres hétérogènes ayant un lien entres elles Dune collection de méthodes (fonctions membres) servant à manipuler les données membres structurerecord OO –Généralisation du type structure ou record des langages non OO (classe = définition de données + définition de méthodes) –Possibilité de fixer la visibilité externe des différents constituants de la classe

9 9 POO P rogrammation O rientée O bjet Instance dune classe –Cest un objet initialisé à partir de la description figée dune classe Fonctions membres publiques –Les constructeurs –Les destructeurs –Les accesseurs –Les modificateurs

10 10 POO P rogrammation O rientée O bjet Les Constructeurs –Permettent dinitialiser lobjets lors de sa création copie des arguments vers les données membres initialisation de variables dynamiques à la création de lobjet –Sont appelés de manière automatique à la création de lobjet –Peuvent être surchargés On peut en définir plusieurs de même nom mais acceptant des arguments différents –Possèdent le même nom que la classe

11 11 POO P rogrammation O rientée O bjet Le Destructeur –Il est unique –Est appelé automatiquement lors de la destruction de lobjet –Sert généralement à éliminer les variables dynamiques de lobjet (créées en général par le constructeur) –Il a pour nom le nom de la classe précédé du symbole ~

12 12 POO P rogrammation O rientée O bjet Les Accesseurs –Catégorie de fonctions membres qui permettent laccès et lutilisation des informations privées contenues dans lobjet Les Modificateurs –Permettent de modifier létat des données internes (publiques ou privées) de lobjet

13 13 POO P rogrammation O rientée O bjet Définition dune Classe en C++ class nom_classe { private: Déclaration des données privées et des fonctions membres privées public: Déclaration des données publiques et des fonctions membres publiques };

14 14 POO P rogrammation O rientée O bjet Exemple class BouteilleBiere { private: char NomBiere[30]; char couleur[30]; float contenance; float TitreAlcool; int NBBPES; public: BouteilleBiere(char *, char *, float,float,int); BouteilleBiere(char *,float); float GetContenance(); int GetNBBPES(); };

15 15 POO P rogrammation O rientée O bjet Ecriture des fonctions membres en C++ Type de largument nom de la classe :: nom de la fonction (arguments) Exemple float BouteilleBiere::GetContenance() { return contenance; } BouteilleBiere::BouteilleBiere(char *name, char *color, float c,float t,int n) { strcpy(NomBierre,name); strcpy(couleur,color); contenance = c; TitreAlcool = t; NBBPES = n; }

16 16 POO P rogrammation O rientée O bjet Création dun objet statique en C++ –nom de la classe nom de lobjet(arguments); –Exemple: BouteilleBiere MaBouteille("1664","blonde",33.0,6.5,20); Création dun objet dynamique en C++ –pointeur vers classe = new nom de la classe(argument) –Exemple: BouteilleBiere* Mabouteille; Mabouteille = new BouteilleBiere("Kro","brune",25.0,5.5,30); delete Mabouteille;

17 17 POO P rogrammation O rientée O bjet Accès aux fonctions membres dun objet en C++ –Si lobjet est représenté par une variable Nom_Variable.Nom fonction; Exemple: –Mabouteille.GetContenance(); –Si lobjet est représenté par un pointeur Nom_pointeur Nom fonction; Exemple: –pMabouteille GetContenance();

18 18 BouteilleBiere::BouteilleBiere(char *name, char *color, float c,float t,int n) { strcpy(NomBierre,name); strcpy(couleur,color); contenance = c; TitreAlcool = t; NBBPES = n; } BouteilleBiere::BouteilleBiere(char *name,float c) { strcpy(NomBierre,name); strcpy(couleur,"BLONDE"); contenance = 33.0; TitreAlcool = c; NBBPES = 20; } main() { BouteilleBiere* Mabouteille; Mabouteille = new BouteilleBiere("Kro","brune",25.0,5.5,30); cout << Mabouteille GetContenance(); delete Mabouteille; } POO P rogrammation O rientée O bjet Programme complet #include class BouteilleBiere { private: char NomBiere[30]; char couleur[30]; float contenance; float TitreAlcool; int NBBPES; public: BouteilleBiere(char *, char *, float,float,int); BouteilleBiere(char *,float); float GetContenance(); int GetNBBPES(); }; float BouteilleBiere::GetContenance() { return contenance; } int BouteilleBiere::GetNBBPES() { return NBBPES; } 25

19 19 BouteilleBiere::BouteilleBiere(char *name, char *color, float c,float t,int n) { strcpy(NomBierre,name); strcpy(couleur,color); contenance = c; TitreAlcool = t; NBBPES = n; } BouteilleBiere::BouteilleBiere(char *name,float c) { strcpy(NomBierre,name); strcpy(couleur,"BLONDE"); contenance = 33.0; TitreAlcool = c; NBBPES = 20; } BouteilleBiere::~BouteilleBiere() { cout <<"c'est fini !!"<<'\n'; } main() { BouteilleBiere* Mabouteille; Mabouteille = new BouteilleBiere("Kro","brune",25.0,5.5,30); cout << Mabouteille GetContenance(); delete Mabouteille; } POO P rogrammation O rientée O bjet Programme complet avec destructeur #include class BouteilleBiere { private: char NomBiere[30]; char couleur[30]; float contenance; float TitreAlcool; int NBBPES; public: BouteilleBiere(char *, char *, float,float,int); BouteilleBiere(char *,float); float GetContenance(); int GetNBBPES(); ~BouteilleBiere(); }; float BouteilleBiere::GetContenance() { return contenance; } int BouteilleBiere::GetNBBPES() { return NBBPES; } 25 c'est fini !!

20 20 POO P rogrammation O rientée O bjet Héritage en C++ –Spécifications Classe Dérivée = Spécifications Classe Ancêtre + Nouvelles Spécifications –Héritage des données et des fonctions membres sauf: Les constructeurs et destructeurs de l'ancêtre protected –Introduction d'un nouveau statut: protected membre ne pouvant être utilisé que par les fonctions membres de la classe et de celles qui en seront dérivées

21 21 POO P rogrammation O rientée O bjet Syntaxe d'héritage class nom_nouvelle_classe : type héritage nom_ancêtre {…}; Exemple –On désire créer une classe BouteilleVin à partir de BouteilleBiere class BouteilleVin : public Bouteille Bierre {…}

22 22 POO P rogrammation O rientée O bjet Type d'héritage –Règles de dérivation de classe mode de dérivation statut du membre dans la classe ancêtrestatut du membre dans la classe dérivée privateprivateprotectedpublicinaccessibleprivateprivate protectedprivateprotectedpublicinaccessibleprotectedprotected publicprivateprotectedpublicinaccessibleprotectedpublic

23 23 POO P rogrammation O rientée O bjet Conséquences des différents type de dérivation –Dérivation privée: ( mode par défaut ) privateLes membres deviennent private ou inaccessible Tous les membres seront inaccessibles à la seconde dérivation –Dérivation publique: privateLes membres gardent le même statut sauf les membres private qui deviennent inaccessibles –Dérivation protégée: protectedTous les membres non privés deviennent de type protected, les membres privés deviennent inaccessibles

24 24 POO P rogrammation O rientée O bjet Ajout de données et de fonctions membres class BouteilleVin : public BouteilleBierre {public: BouteilleVin(char *n, char *coul, float c, float t, int n, int a) : BouteilleBiere(n, coul, c, t, n); BouteilleVin(char * nom, float t) : BouteilleBiere(nom,t) ; int GetAnnee(); private: int annee; };

25 25 POO P rogrammation O rientée O bjet Constructeurs et Destructeur dans les opérations d'héritages –Quand à la fois la classe de base et la classe dérivée ont des constructeurs et des destructeurs: Constructeurs sont exécutés dans l'ordre de la dérivation Destructeurs dans l'ordre inverse de la dérivation –C'est au constructeur de l'objet dérivé en dernier de passer les arguments dont a besoin son ancêtre. (voir exemple précédent)

26 26 POO P rogrammation O rientée O bjet Quelques exemples d'héritages #include class base { int x; public: void setx(int n) {x=n;} void showx() {cout <

27 27 POO P rogrammation O rientée O bjet Quelques exemples d'héritages #include class base { int x; public: void setx(int n) {x=n;} void showx() {cout <

28 28 POO P rogrammation O rientée O bjet Quelques exemples d'héritages #include class base { int x; public: void setx(int n) {x=n;} void showx() {cout <

29 29 POO P rogrammation O rientée O bjet Quelques exemples d'héritages #include class base { public: base(){ cout <<"construction de la classe de base \n;} ~base(){ cout <<"destruction de la classe de base \n;} }; class derive : public base{ public: derive() { cout << "construction de la classe dérivée \n";} ~derive(){cout << "destruction de la classe dérivée \n";} }; main() { derive o; return(0); } construction de la classe de base construction de la classe dérivée destruction de la classe dérivée destruction de la classe de base Affichage Ecran

30 30 POO P rogrammation O rientée O bjet Quelques exemples d'héritages #include class base { public: base(){ cout <<"construction de la classe de base \n;} ~base(){ cout <<"destruction de la classe de base \n;} }; class derive : public base{ int j; public: derive(int n) { j = n; cout << "construction de la classe dérivée \n";} ~derive(){cout << "destruction de la classe dérivée \n";} showj(){ cout <

31 31 POO P rogrammation O rientée O bjet Quelques exemples d'héritages #include class base { int i; public: base(int n){ i=n; cout <<"construction de la classe de base \n;} ~base(){ cout <<"destruction de la classe de base \n;} void showi(){cout <

32 32 POO P rogrammation O rientée O bjet Quelques exemples d'héritages #include class base { int i; public: base(int n){ i=n; cout <<"construction de la classe de base \n;} ~base(){ cout <<"destruction de la classe de base \n;} void showi(){cout <

33 33 POO P rogrammation O rientée O bjet Surcharge des Fonctions –On peut définir des fonctions de même nom mais se différentiant par le nombre et le type d'arguments – Exemple : float Val_Absolue(float v) {return fabs(v);} int Val_Absolue(int v){return abs(v);} Le système choisira la fonction à appeler selon les arguments.

34 34 POO P rogrammation O rientée O bjet Surcharge des opérateurs en C++ –Même principe que la surcharge des fonctions Le fonctionnement de l'opérateur s'effectue en fonction du nombre et du type des opérandes La surcharge d'un opérateur doit obligatoirement s'associer à une classe

35 35 POO P rogrammation O rientée O bjet Surcharge des opérateurs en C++ – Exemple: #include class point { public: int x,y; point(){x=0;y=0;} point(int i,int j) {x=i;y=j;} point operator+(point p2); }; point point::operator+(point p2) { point temp; temp.x = x + p2.x; temp.y = y + p2.y; return temp; } main() { point p1(10,10),p2(5,3),p3; p3 = p1 + p2; cout << p3.x <<< p3.y <<'\n'; }

36 36 POO P rogrammation O rientée O bjet Passage de paramètres par référence en C++ –Idem dans les spécifications au passage par pointeurs mais évite leurs lourdeurs d'écriture –Exemple: Passage par pointeur: void permutter ( int *a, int *b) {int temp = *a; *a =*b;*b =temp;} main(){ int a=8;int b=7; permutter(&a,&b);} Passage par référence: void permutter (int &a, int &b) {int temp = a;a = b; b = temp;} main() {int a=8;int b=7;permutter(a,b);}

37 37 PG W Programmation Graphique sous Windows Programmation avec les API (Application Programming Interface) –Que sont les API Ensemble d'interfaces pour accéder à la fonctionnalité des services de bas niveau (gestion des périphériques, du système, du réseau,…) Implantées sous forme de librairie (DLL)

38 38 //useful defines #define STRICT #define WIN32_LEAN_AND_MEAN #include #include "resource.h" //entry point for a windows program int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int); //main window callback function LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM); // GLOBAL VARIABLES const char* pClassName="TTWin32Generic"; HINSTANCE hMainInst=0; //instance of the application HWND hMainWnd=0; //handle to main window of the application //various variables used with virtual window HDC memdc=0; HBITMAP hbit=0; HBRUSH hbrush=0; HPEN hpen, hOldPen; RECT rClient; int MaxX=0, MaxY=0; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszArgs, int nWinMode) { //create a window class by filling in a WNDCLASSEX structure WNDCLASSEX WinClass; WinClass.cbSize=sizeof(WNDCLASSEX); //size of the structure WinClass.hInstance=hInstance; //instance of the application hMainInst=hInstance; WinClass.lpszClassName=pClassName; //window class name WinClass.lpfnWndProc=WindowFunc; //callback function WinClass.style=CS_HREDRAW | CS_VREDRAW; //load default application icon //WinClass.hIcon=LoadIcon(NULL, IDI_APPLICATION); //load standard (32 x 32) icon WinClass.hIcon=LoadIcon(hInstance, MAKEINTRESOURCE(IDI_BIG)); //load small (16 x 16) icon //if specified then it is used on the taskbar and in the system menu //otherwise 32 x 32 icon is scaled to 16 x 16 by Windows //WinClass.hIconSm=LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SMALL)); WinClass.hIconSm=0; //load cursor WinClass.hCursor=LoadCursor(NULL, IDC_ARROW); //here we can specify a menu handle WinClass.lpszMenuName=MAKEINTRESOURCE(IDR_MENU); WinClass.cbClsExtra=0; WinClass.cbWndExtra=0; WinClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUS H); //register window class we just created if(!RegisterClassEx(&WinClass)) return 0; //registration failed HWND hwnd=CreateWindow(pClassName, "Generic Windows 95 application", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, HWND_DESKTOP, NULL, hInstance, NULL); if(!hwnd) //window creation failed return 0; hMainWnd=hwnd; //show window ShowWindow(hwnd, nWinMode); //force a repaint UpdateWindow(hwnd); MSG WinMsg; //start message pump while(GetMessage(&WinMsg, NULL, 0, 0)) { TranslateMessage(&WinMsg); DispatchMessage(&WinMsg); } return WinMsg.wParam; } Prototype de Fonctions et Variables Globales Création de la classe de la fenêtre Création de la Fenêtre

39 39 LRESULT CALLBACK WindowFunc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) { //device context for drawing HDC hdc=0; switch(Msg) { case WM_CREATE: { //get height and width of the screen MaxX=GetSystemMetrics(SM_CXSCREEN); MaxY=GetSystemMetrics(SM_CYSCREEN); //get device context hdc=GetDC(hwnd); //create compatible device context to memory memdc=CreateCompatibleDC(hdc); hbit=CreateCompatibleBitmap(hdc, MaxX, MaxY); SelectObject(memdc, hbit); hpen=CreatePen(PS_SOLID, 1, RGB(0, 0, 0)); hOldPen=(HPEN)SelectObject(memdc, hpen); //if we did not set window background //while registering window class then //we need following two lines hbrush=(HBRUSH)GetStockObject(WHITE_BRUSH); SelectObject(memdc, hbrush); PatBlt(memdc, 0, 0, MaxX, MaxY, PATCOPY); ReleaseDC(hwnd, hdc); break; } //this message is sent when a window needs to //be repainted case WM_PAINT: { PAINTSTRUCT paintstruct; //get device context for drawing hdc=BeginPaint(hwnd, &paintstruct); //paint the window BitBlt(hdc, 0, 0, MaxX, MaxY, memdc, 0, 0, SRCCOPY); EndPaint(hwnd, &paintstruct); break; } case WM_LBUTTONDOWN: { //if we press left mouse button... //some drawing code... RECT rClient; GetClientRect(hwnd, &rClient); for(int nCnt=0; nCnt < rClient.right; nCnt+=5) { MoveToEx(memdc, nCnt, 0, (POINT*)NULL); LineTo(memdc, rClient.right-nCnt, rClient.bottom); } //invalidate window to force a WM_PAINT message InvalidateRect(hwnd, (const RECT*)NULL, TRUE); break; } //if menu item selected case WM_COMMAND: { WORD wID=LOWORD(wParam); //id of the menu item switch(wID) { case IDM_FOPEN: //File->Open is disabled for now break; case IDM_EXIT: DestroyWindow(hwnd); break; } break; } case WM_DESTROY: //release used resources SelectObject(memdc, hOldPen); DeleteObject(hpen); DeleteObject(hbit); DeleteDC(memdc); PostQuitMessage(0); break; default: //all other messages are handled by default return DefWindowProc(hwnd, Msg, wParam, lParam); } return 0; } Définition de la Procédure de Fenêtre (Réponse aux différents messages)

40 40 PG W Programmation Graphique sous Windows Exécution du programme

41 41 PG W Programmation Graphique sous Windows Programmation avec une bibliothèque d'objets –Exemple: ObjectWindows de Borland ou Microsoft Fundation Classes (MFC) Collection d'objets graphiques que l'on peut dériver et améliorer

42 42 PG W Programmation Graphique sous Windows Exemple de Programme avec ObjectWindows #include class TDrawApp : public TApplication { public: TDrawApp() : TApplication() {} void InitMainWindow() { SetMainWindow(new TFrameWindow(0, "Ma premiere Fenetre avec ObjectWindows")); } }; int OwlMain(int /*argc*/, char* /*argv*/ []) { TDrawApp MaFenetre; MaFenetre().Run(); return 1; }

43 43 PG W Programmation Graphique sous Windows Exécution du Programme

44 44 PG W Programmation Graphique sous Windows Programmation Visuelle –Avec Visual Basic, Delphi, C++ Builder –Interface de haut qui permet de construire graphiquement l'architecture graphique d'une application –Couche logicielle qui gère graphiquement la manipulation des objets

45 45 PG W Programmation Graphique sous Windows Création d'une Application avec C++ Builder

46 46 PG W Programmation Graphique sous Windows Création d'une Application avec Visual Basic


Télécharger ppt "1 POO P rogrammation O rientée O bjet (POO) UNIVERSITE de METZ Olivier HABERT Maître de Conférences Laboratoire d'Automatique des Systèmes Coopératifs."

Présentations similaires


Annonces Google