O clasa trebuie sa contina Date Membre (instante - sunt variabile) si Metode Membre (sunt functii si proceduri). Acestea trebuie sa fie precedate de modificatori de acces.
Modificatorii de acces sunt:
- private - nu permite accesul la membrii clasei
- protected - permite accesul la membrii clasei numai din clasele derivate
- public - permite accesul la membrii clasei din afara ei
In randurile urmatoare aveti trei exemple de clase scrise in 3 limbaje de programare: C++, PHP si Python.
C++
In exemplul urmator veti vedea ca nu am specificat un modificator de acces pentru datele membre. Am facut asta pentru ca in C++ faptul ca nu exista un modificator de acces inaintea unui grup de membrii se considera implicit modificatorul private. Astfel, datele membre au modificatorul protected, iar metodele au modificatorul public.
O alta particularitate este faptul ca nici constructorul si nici destructorul nu returneaza un tip.
#include "stdafx.h"
#include <iostream>
using namespace std;
//clasa Eroare folosita pentru exceptie
class Eroare
{
char* mesaj;
public:
//constructorul clasei: pune mesajul mesaj_e
//in data membra mesaj
Eroare(char* mesaj_e):mesaj(mesaj_e){}
char* eroare()
{
return this->mesaj;
}
};
class Produse
{
//datele membre
char* nume;
int cantitate, pret;
//metodele membre
public:
//consructorul clasei
Produse(char* nume_n, int cantitate_n, int pret_n)
{
this->nume = nume_n;
this->cantitate = cantitate_n;
this->pret = pret_n;
}
//metoda Vinde
void Vinde(int cantitate_v)
{
//aruncarea exceptiei daca cantitatea din stoc e prea mica
if(this->cantitate < cantitate_v)
{
throw Eroare("Nu aveti produse suficiente.");
}
this->cantitate = this->cantitate - cantitate_v;
}
};
int main()
{
//initializarea clasei si a numarului de produse pe care le vindem
Produse *instrument;
instrument = new Produse("chitara", 5, 320);
int nrProduseDeVazare = 7;
//pe care l-am aruncat in metoda Vinde() prin intermediul exceptiei
try {
instrument->Vinde(nrProduseDeVazare);
} catch(Eroare& e) {
PHP
In PHP toti membrii trebuie sa aiba inaintea lor un modificator de acces. Dar, dupa cum se vede in exemplu, lucrurile sunt un pic mai simple si mai rapide decat la C++.
//clasa Produse
class Produse
{
//datele membre ale clasei, nu pot fi accesate din afara clasei
protected $nume, $cantitate, $pret;
//metodele clase, pot (public) sau nu pot(protected) fi accesate din afara clasei
//constructorul clasei
public function __construct($nume_n, $cantitate_n, $pret_n)
{
$this->nume = $nume_n;
$this->cantitate = $cantitate_n;
$this->pret = $pret_n;
}
//metoda Vinde
public function vinde($cantitate_v)
{
//aruncarea exceptiei daca cantitatea din stoc este prea mica
if($this->cantitate < $cantitate_v)
{
throw new Exception('Nu aveti produse suficiente.');
}
$this->cantitate = $this->cantitate - $cantitate_v;
}
//destructorul clasei
public function __destruct() {}
}
//partea de test
//initializarea clasei si a numarului de produse pe care dorim sa le vindem
$instrument = new Produse("chitara", 5, 320);
$nr_produse_de_vanzare = 7;
//incercam sa vindem, iar, daca nu reusim, returnam mesajul pe care l-am aruncat in metoda vinde
try {
$instrument->vinde($nr_produse_de_vanzare);
} catch (Exception $e) {
echo 'Eroare: ', $e->getMessage(), "\n";
}
Python
Python prin natura lui e "altfel". Are si el un constructor, __init__, respectiv un destructor, __del__, dar ceea ce ii lipseste sunt modificatorii de acces. In Python toti membrii unei clase sunt public implicit si nu se poate schimba asta. Totusi, o regula intre programatorii Python spune ca in cazul in care un membru apare de forma _nume acesta sa fie considerat protected, chiar daca in realitate e tot public.
#clasa Eroare care va fi o exceptie
class Eroare(Exception):
def __init__(self, mesaj_e):
self.mesaj = mesaj_e
#clasa Produse
class Produse:
#constructorul clasei in cadrul caruia se definesc datele membre
def __init__(self, nume_n, cantitate_n, pret_n):
self.nume = nume_n
self.cantitate = cantitate_n
self.pret = pret_n
#metoda Vinde
def vinde(self, cantitate_v):
#aruncarea exceptiei daca cantitatea din stoc e prea mica
if(self.cantitate < cantitate_v):
raise Eroare('Nu sunt produse suficiente.')
self.cantitate = self.cantitate - cantitate_v
#partea de test
#initializarea clasei si a numarului de produse pe care le vindem
instrument = Produse('chitara', 5, 320)
nrProduseDeVanzare = 7
#incercam sa vindem, iar, daca nu reusim, afisam mesajul pe care l-am
#trimis prin clasa Eroare.
try:
instrument.vinde(nrProduseDeVanzare)
except Eroare as e:
print 'Eroare: ', e.mesaj
raise