Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Programare orientata obiect (OOP)

c


Programare orientata obiect (OOP

OOP este o metoda de implementare in care:



a)       Obiectele sunt elementele de baza,

b)       Orice obiect este o instanta a unei clase,

c)       Clasele sunt legate (asociate) unele cu altele prin mostenire.

Un limbaj este orientat obiect daca:

a)       Utilizeaza obiecte,

b)       Obliga obiectele sa apartina unei clase,

c)       Permite mostenirea.

Limbajul C++ ofera notiunea de clasa, prin care se pot forma ierarhii, deci putem vorbi de o programare orientata obiect (OOP

OOP inseamna realizarea unor programe alcatuite dintr-o multime de obiecte care interactioneaza pentru a rezolva problema propusa, si permite reutilizarea elementelor descrise (a interfetei si a codului).

Un obiect are o stare si un comportament (operatii descrise in interfata obiectului) aceste doua componente fiind definite prin datele membru (variabile de instanta) si respectiv prin functiile membru (metode).

OOP utilizeaza ormatoarele concepte:

clasa

implementarea unui TAD,

obiectul

instanta unei clase,

metoda

mesajul prin care se asigura interfata (operatiile).

OOP are urmatoarele caracteristici (proprietati) de baza:

incapsularea

gruparea datelor si a operatiilor definite pentru acestea, precum si protectia acestor date (ele neputand fi accesate decat prin functiile membru).

mostenirea

pastrarea elementelor (date si functii ale) unei clase (de baza), cu definirea de noi elemente construind o noua clasa (derivata), formand in felul acesta ierarhii de clase. Mostenirea poate fi si multipla daca o clasa mosteneste mai multe clase.

polimorfism

- redefinirea (supraincarcarea) operatiilor (functiilor). Intr-o ierarhie pot fi mai multe functii cu acelasi nume, deci va fi efectuata operatia corespunzatoare obiectului care o apeleaza. Determinarea operatiei se poate face la compilare (legare statica) sau la executie (legare dinamica, prin functii vituale

Definirea Claselor

O clasa se declara ca si o structura, inlocuind cuvantul struct cu class. Protectia datelor se defineste scriind modificatorul dorit (private, protected sau public) urmat de ':'.

Descrierea unei clase contine atat datele membru (variabilele de instanta) cat si functiile membru (metodele), precizand pentru acestea gradul de protectie, astfel:

class Nume_clasa

unde:

Modificator_de_protectie I , private fiind implicit,

private nu permite accesul din afara clasei,   

protected permite accesul din clasele derivate,

public permite accesul din afara clasei;   

Lista_membrii I

Datele de tip private ( ) pot fi accesate doar de functiile membru sau functii prietene (friend). O functie membru a unei clase poate fi functie prietena a altei clase, iar daca toate sunt prietene, atunci se poate declara clasa prietena (friend). Vezi C8

Fiecare obiect al unei clase detine un set de date membru (variabile de instanta).

Functiile membru publice pot fi utilizate din orice functie din program, pe cand cele private doar din functiile membru ale clasei.

Definirea functiilor membru (metodelor) se poate realiza:

a)       imediat (complet, antet plus corp) in definitia clasei (ca functie inline) daca functia nu contine multe instructiuni si nu contine structuri repetitive (apelul nu se face prin salt cu revenire), astfel:

class Nume_clasa antet corp

b)       ulterior (daca a fost declarat in definitia clasei doar prototipul functiei), utilizand operatorul de rezolutie (de scop) astfel:

Tip_functie Nume_clasa Nume_metoda operatorul de rezolutie

// corpul functiei

Exemplu:

// C l a s a P u n c t

----- ----- --------- ----- -----

# include <conio.h>

# include <iostream.h>

class Punct

Punct (float x0, float y0)

Punct (Punct& P)

void CitP (char* Mes);

void TipP (char* Mes);

Punct& SimPb ( );

};

void Punct::CitP (char* Mes)

void Punct::TipP (char* Mes)

Punct& Punct::SimPb( )

void main (void)

Un obiect este o instanta a unei clase (o variabila de tipul clasei). Fiecare obiect apartine unei singure clase (aceasta putand avea mai multe obiecte).

Obiectele unei clase se declara astfel:

Clasa Lista_Obiecte

Exemplu:

// Obiecte P u n c t

----- ----- --------- ----- -----

# include <conio.h>

# include <iostream.h>

class Punct ;

void main (void)

Alocarea (si initializarea) obiectelor se face cu o functie membru specifica numita constructor (cu numele Clasa) iar dealocarea cu o functie destructor (cu numele ~Clasa).

Exemplu:

Constructori - Destructori

# include <dos.h>

# include <math.h>

# include <conio.h>

# include <graphics.h>

# include <iostream.h>

# define Cale 'c:BorlandCBgi'

class Grafic

Grafic( )

};

class Punct

Punct (float x0, float y0)

Punct (Punct& P)

Punct (int, int, int);

Punct ();

int X0 ()

int Y0 ()

Punct& Transl(Punct&);

};

Punct:: Punct(int x0,int y0,int c)

Punct::~Punct( )

Punct& Punct::Transl(Punct& T)

void main (void)

getche();

Componentele claselor (datele si functiile membru) se refera prin operatorul sau >, ca si in cazul unei structuri. Functiile membru refera direct componentele clasei (fara acesti operatori, utilizand poinetrul this declarat automat ca pointer la obiectul curent).

Exemplu:

Operatorii si >

# include <dos.h>

# include <math.h>

# include <conio.h>

# include <graphics.h>

# include <iostream.h>

# define Cale 'c:BorlandCBgi'

class Grafic

Grafic( )

};

class Punct

Punct (float x0, float y0)

Punct (const Punct& P)

Punct (int, int, int);

~Punct ();

Punct* Init (float x0, float y0)

int X0 ()

int Y0 ()

Punct* Transl(const Punct*);

};

Punct:: Punct(int x0,int y0,int c)

Punct::~Punct( )

Punct* Punct::Transl(const Punct* T)

void main (void)

// Sterge P

delete M; getche();

delete C; getche();

Constructori si Destructori

Un obiect este creat de un constructor al clasei si este sters (distrus) de catre destructor.

Constructorii permit initializarea obiectelor cu (mai multe) functii membru omonime (avand acelasi nume cu clasa si care difera prin lista parametrilor formali), fara a returna o valoare. Constructorul este apelat automat la crearea unui obiect. O clasa trebuie sa contina cel putin doi constructori:

un constructor implicit (fara parametri, care initializeaza obiectele cu o valoare implicita),

un constructor de copiere (care initializeaza cu valoarea unui obiect existent, de acelasi tip).

Exemplu:

Constructori String

# include <Conio.h>

# include <String.h>

# include <Iostream.h>

class String ;

String::String ()   

String::String (const String& S)

String::String (const char* S)

String& String::operator=(const String& S)

return *this;}

String::~String ()

int String::Length ()

void String::Print ()

void main ()

Antetul unui constructor al unei clase ce contine ca date membru obiecte alte altor clase este de forma:

Clasa Lista_par_formali Obiect Lista_par_formali Obiectn Lista_par_formalin

Exemplu:

#include <stdio.h>; #include <conio.h>; #include <iostream.h>;

class P3D

P3D (float x0, float y0, float z0)

void Tip()

};

class Cerc ;

Cerc (float x0, float y0, float z0) : x_y_r(x0,y0,z0)

Cerc (P3D C)

Cerc (const Cerc & C0)

void Tip()

};

void main (void)

Destructorii realizeaza automat dealocarea obiectelor globale la sfarsitul programului, iar a celor locale la sfarsitul functiei. Obiectele alocate dinamic (cu new) se vor dealoca cu operatorul delete. Numele destructorului este compus din caracterul urmat de numele clasei ( Clasa ). Destructorii nu returneaza o valoare.

Exemplu:

#include <iostream.h>;

class Cerc

~Cerc ()

void Tip ()

};

void main (void)

// Rezultatele afisate:

Alocare

C(1,2,3)

Dealocare

  In exemplul urmator se poate urmarii momentul in care actioneaza constructorul si destrucorul:


Obiecte alocate dinamic (operatorul delete)

#include <string.h>;

#include <iostream.h>;

class Natural ;

Natural::Natural(char* Nr)

Natural::~Natural()

void f(Natural x)

Natural x('123');

void main (void)

// Rezultatele afisate:

Constr.Ob. 123

*Start*

Constr.Ob. 456

Constr.Ob. 789

f(x)

Distr.Ob. 789

*Stop*

Distr.Ob. 456

Distr.Ob. 123

 



Document Info


Accesari: 1061
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )