Programarea orientata pe obiecte este notiunea de baza a limbajului C# si reprezinta o metodologie puternica de abordare a programarii, pornind de la programarea nestructurata, programarea procedurala si programarea modulara.
Programele orientate spre obiect sunt organizate in jurul datelor (ceea ce este afectat de executia programului). Programele contin datele cat si metodele asociate crearii, prelucrarii si distrugerii datelor.
Caracteristicile comune limbajelor care implementeaza programarea pe obiecte sunt: incapsularea, polimorfism, mostenirea. Despre ultimele doua notiuni, vom discuta in urmatoarele doua articole.
Incapsularea e un mecanism care combina codul si datele mentinandu-le integritatea in timpul utilizarii. Din aceasta combinatie, se creeaza obiectul. Tot la nivelul incapsularii se defineste nivelul de acces la datele unui obiect.
In cadrul unui obiect, codul si datele pot fi private sau public. Cand sunt private, ele sunt vizibile si accesibile doar in interiorul obiectului. In cazul public, celelalte parti ale programului le pot utiliza.
Forma unui obiect este definata de clasa. Datele care constituie o clasa sunt denumite variabile membri. Codul care opereaza asupra datelor este numit metoda .
Metoda implementeaza o actiune, poate admite parametri si returna valori de tip predefinit, de tip obiect sau tipul void (nimic). Un parametru sau argument este o valoare transmisa unei metode, cu valabilitate in corpul functiei.
Exemplu :
public class Student { //declararea variabilelor membru public double nota; private int varsta; //declarea unei metode //care va returna true/false public bool Admis() { // } }
Datorita modificatorului de acces public, clasa Student va fi vizibila peste tot si cu acces nelimitat. In cazul in care nu adaugam un modificator in declarea clasei, ea ar primit implicit tot acest modificator de acces.
modificator access | Explicatii |
public | access nelimitat |
internal | acces permis doar in clasa sau spatiul de nume in care e cuprinsa |
protected | acces in clasa curenta sau in cele derivate |
private | implicit.Doar pentru clasele interioare |
protected internal | folosit pentru clasele interioare semnificand accesul in clasa care-l contine sau in tipurile derivate din clasa care-l contine |
Atat datele cat si metodele pot avea modificatori de acces:
modificator access | explicatie |
public | membrul accesibil de oriunde |
internal | accesbil doar intr-un bloc functional al unei aplicatii .Net |
protected | accesibil oricarui membru al clasei care-l contine si al claselor derivate |
private | implicit. acces permis doar pentru clasa care contine membrul |
protected internal | accesibil oricarui membru al al clasei care il contine si al claselor derivate, precum si in blocul functional |
Definitia unei clase creeaza un nou tip de data (clasa este un tip de date referinta). Continuand cu exemplu, vom creea un obiect de tipul Student.
//creeaza un obiect Student Student Popescu = new Student();
Dupa executia instructiunii, Popescu va fi o instanta a clasei Student. La crearea unei instante, se va crea un obiect care contine o copie proprie a fiecarei variabile membru din cadrul clasei. Pentru a referi este variabile, se va utiliza operatorul “.” .
Exemplu:
//operatorul punct leaga //numele unui obiect de numele //unui membru al sau Popescu.nota;
Constructorul
Constructorul este o metoda care face parte dintr-o clasa. Constructorul contine instructiuni care se executa la crearea unui nou obiect al clasei. Daca o clasa nu are definit un constructor, atunci se va atribui automat constructorul fara parametri al clasei de baza.
//constructor implicit public Student() { nota = 0; varsta = 0; }
//constructor cu doi parametri public Student(double nota, int varsta) { this.nota = nota; this.varsta = varsta; }
O clasa poate avea mai multi constructori.
La instantierea clasei, apelam constructorul parametrizat:
Student Ionescu = new Student(8.2, 23);
Console.WriteLine(Ionescu.nota);
Destructorul
Corpul destructorului este format din instructiuni care se executa la distrugerea unui obiect al clasei. Destructorul nu este apelat in mod explicit, pentru ca, in mod normal, la procesul de distrugere este invocat Garbage Collector .
Operatorul new
Operatorul new este folosit pentru crearea obiectelor si invocarea constructorilor (reamintim ca si la tipurile de date se apela constructorul implicit: int variabila = new int ();).
Operatorul new nu poate fi supraincarcat.
Operatorul this
Acest operator se refera la instanta curenta pentru care a fost apelata o metoda, o proprietate.
Operatorul mai este folosit in situatia cand numele unui parametru sau al unei variabile locale coincide cu numele unei variabile membru. In acest caz, numele local “va ascunde” variabila membru. Prin intermediul lui this, se va putea referi la acea variabila membru. (exemplu mai sus, la declararea constructorului cu parametri).
Pentru o aplicare cat mai buna a principiilor POO, sunt importante operatiile de identificare a entitatilor, a datelor si operatiilor, a relatiilor dintre entitati si o posibila ierarhie a claselor.
Pingback/Trackback
Enumerarea si compararea colectiilor | by zeltera