Académique Documents
Professionnel Documents
Culture Documents
Programmation Orientée Objet (POO)
Programmation Orientée Objet (POO)
Olivier HABERT Matre de Confrences Laboratoire d'Automatique des Systmes Coopratifs (LASC)
http://www.lasc.univ-metz.fr/article.php3?id_article=67
Objet 3 Objet 2
Fonction 6
DONNEES
Fonction 3
Fonction 5
Fonction 4
GetRmin
GetValueR
GetRmax
GetValueP
Consquences
Un objet nest vu que par ses spcifications Une modification interne est sans effet pour le fonctionnement gnral du programme Meilleure rutilisation de lobjet
Exemple de la rsistance
Les donnes R et P ne peuvent tre utilises que par les fonctions membres
Avantages
Meilleures rutilisations des ralisations antrieures parfaitement au point
Gnralisation du type structure ou record des langages non OO (classe = dfinition de donnes + dfinition de mthodes) Possibilit de fixer la visibilit externe des diffrents constituants de la classe
10
Sont appels de manire automatique la cration de lobjet Peuvent tre surchargsOn peut en dfinir plusieurs de mme nom mais acceptant des arguments diffrents Possdent le mme nom que la classe
11
12
Les Modificateurs
Permettent de modifier ltat des donnes internes (publiques ou prives) de lobjet
13
14
15
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
17
Mabouteille.GetContenance();
pMabouteilleGetContenance();
18
25
19
25 c'est fini !!
20
21
Exemple
On dsire crer une classe BouteilleVin partir de BouteilleBiere
class BouteilleVin : public BouteilleBierre {}
22
protected
public
23
Drivation publique:
Les membres gardent le mme statut sauf les membres private qui deviennent inaccessibles
Drivation protge:
Tous les membres non privs deviennent de type protected, les membres privs deviennent inaccessibles
24
25
C'est au constructeur de l'objet driv en dernier de passer les arguments dont a besoin son anctre. (voir exemple prcdent)
26
Cherchez l'erreur ?
27
Cherchez l'erreur ?
28
29
Affichage Ecran
30
Affichage Ecran
construction de la classe de base construction de la classe drive 10 destruction de la classe drive destruction de la classe de base
31
Affichage Ecran
32
Affichage Ecran
construction de la classe de base construction de la classe drive 20 10 destruction de la classe drive destruction de la classe de base
33
34
35
36
37
38
Cration de la Fentre
HWND hwnd=CreateWindow(pClassName, "Generic Windows 95 application", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 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; }
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; }
40
Excution du programme
41
42
}; int OwlMain(int /*argc*/, char* /*argv*/ []) { TDrawApp MaFenetre; MaFenetre().Run(); return 1; }
43
44
45
46