1.1 Evolutia tehnicilor de programare
- Programarea nestructurata (un program simplu, ce utilizeaza numai variabile
globale); complicatiile apar cand prelucrarea devine mai ampla, iar datele se multiplica
si se diversifica.
- Programarea procedurala (program principal deservit de subprograme cu parametri
formali, variabile locale si apeluri cu parametri efectivi); se obtin avantaje
privind depanarea si reutilizarea codului si se aplica noi tehnici privind transferul
parametrilor si vizibilitatea variabilelor; complicatiile apar atunci cand la program
sunt asignati doi sau mai multi programatori care nu pot lucra simultan pe un acelasi
fisier ce contine codul sursa.
- Programarea modulara (gruparea subprogramelor cu functionalitati similare in
module, implementate si depanate separat); se obtin avantaje privind independenta si
incapsularea (prin separarea zonei de implementare, pastrand vizibilitatea numai asupra
zonei de interfata a modulului) si se aplica tehnici de asociere a procedurilor cu datele
pe care le manevreaza, stabilind si diferite reguli de acces la date si la subprograme.
Se observa ca modulele sunt "centrate" pe proceduri, acestea gestionand si setul
de date pe care le prelucreaza (date+date1 din figura). Daca, de exemplu, dorim sa
avem mai multe seturi diferite de date, toate inzestrate comportamental cu procedurile
din modulul module1, aceasta arhitectura de aplicatie nu este avantajoasa.
- Programarea orientata obiect (programe cu noi tipuri ce integreaza atat datele,
cat si metodele asociate crearii, prelucrarii si distrugerii acestor date); se obtin avantaje
prin abstractizarea programarii (programul nu mai este o succesiune de
prelucrari, ci un ansamblu de obiecte care prind viata, au diverse proprietati, sunt
7
capabile de actiuni specifice si care interactioneaza in cadrul programului); intervin
tehnici noi privind instantierea, derivarea si polimorfismul tipurilor obiectuale.
1. 2 Tipuri de date obiectuale. Incapsulare
Un tip de date abstract (ADT) este o entitate caracterizata printr-o structura de date
si un ansamblu de operatii aplicabile acestor date. Considerand, in rezolvarea unei
probleme de gestiune a accesului utilizatorilor la un anumit site, tipul abstract USER,
vom obseva ca sunt multe date ce caracterizeaza un utilizator Internet. Totusi se va
tine cont doar de datele semnificative pentru problema data. Astfel, "culoarea
ochilor" este irelevanta in acest caz, in timp ce "data nasterii" poate fi importanta. In
aceeasi idee, operatii specifice ca "se inregistreaza", "comanda on-line" pot fi relevante,
in timp ce operatia "mananca" nu este, in cazul nostru. Evident, nici nu se pun
in discutie date sau operatii nespecifice ("numarul de laturi" sau actiunea "zboara").
Operatiile care sunt accesibile din afara entitatii formeaza interfata acesteia. Astfel,
operatii interne cum ar fi conversia datei de nastere la un numar standard calculat de
la 01.01.1900 nu fac parte din interfata tipului de date abstract, in timp ce operatia
"plaseaza o comanda on-line" face parte, deoarece permite interactiunea cu alte
obiecte (SITE, STOC etc.)
O instanta a unui tip de date abstract este o "concretizare" a tipului respectiv, formata
din valori efective ale datelor.
Un tip de date obiectual este un tip de date care implementeaza un tip de date
abstract. Vom numi operatiile implementate in cadrul tipului de date abstract metode.
Spunem ca datele si metodele sunt membrii unui tip de date obiectual. Folosirea unui
astfel de tip presupune: existenta definitiei acestuia, apelul metodelor si accesul la date.
Un exemplu de-acum clasic de tip de date abstract este STIVA. Ea poate avea ca date:
numerele naturale din stiva, capacitatea stivei, varful etc. Iar operatiile specifice pot fi:
introducerea in stiva (push) si extragerea din stiva (pop). La implementarea tipului STIVA,
vom defini o structura de date care sa retina valorile memorate in stiva si campuri de date
simple pentru: capacitate, numar de elemente etc. Vom mai defini metode (subprograme)
capabile sa creeze o stiva vida, care sa introduca o valoare in stiva, sa extraga valoarea
din varful stivei, sa testeze daca stiva este vida sau daca stiva este plina etc.
Crearea unei instante noi a unui tip obiectual, presupune operatii specifice de
"construire" a noului obiect, metoda corespunzatoare purtand numele de
constructor. Analog, la desfiintarea unei instante si eliberarea spatiului de memorie
8
aferent datelor sale, se aplica o metoda specifica numita destructor1.
O aplicatie ce utilizeaza tipul obiectual STIVA, va putea construi doua sau mai
multe stive (de carti de joc, de exemplu), le va umple cu valori distincte, va muta valori
dintr-o stiva in alta dupa o anumita regula desfiintand orice stiva golita, pana ce
ramane o singura stiva. De observat ca toate aceste prelucrari recurg la datele, constructorul,
destructorul si la metodele din interfata tipului STIVA descris mai sus.
Principalul tip obiectual intalnit in majoritatea mediilor de dezvoltare (Viisual
Basic, Delphi, C++, Java, C#) poarta numele de clasa (class). Exista si alte tipuri obiectuale
(struct, object). O instanta a unui tip obiectual poarta numele de obiect.
La implementare, datele si metodele asociate trebuie sa fie complet si corect definite,
astfel incat utilizatorul sa nu fie nevoit sa tina cont de detalii ale acestei implementari.
El va accesa datele, prin intermediul proprietatilor si va efectua operatiile,
prin intermediul metodelor puse la dispozitie de tipul obiectual definit. Spunem ca
tipurile de date obiectuale respecta principiul incapsularii. Astfel, programatorul ce
utilizeaza un tip obiectual CONT (in banca) nu trebuie sa poarte grija modului cum
sunt reprezentate in memorie datele referitoare la un cont sau a algoritmului prin
care se realizeaza actualizarea soldului conform operatiilor de depunere, extragere si
aplicare a dobanzilor. EL va utiliza unul sau mai multe conturi (instante ale tipului
CONT), accesand proprietatile si metodele din interfata, realizatorul tipului obiectual
asumandu-si acele griji in momentul definirii tipului CONT.
Permitand extensia tipurilor de date abstracte, clasele pot avea la implementare:
- date si metode caracterisitice fiecarui obiect din clasa (membri de tip instanta),
- date si metode specifice clasei (membri de tip clasa).
Astfel, clasa STIVA poate beneficia, in plus, si de date ale clasei cum ar fi: numarul
de stive generate, numarul maxim sau numarul minim de componente ale stivelor
existente etc. Modificatorul static plasat la definirea unui membru al clasei face ca
acela sa fie un membru de clasa, nu unul de tip instanta. Daca in cazul membrilor
nestatici, exista cate un exemplar al membrului respectiv pentru fiecare instanta a clasei,
membrii statici sunt unici, fiind accesati in comun de toate instantele clasei. Mai
mult, membrii statici pot fi referiti chiar si fara a crea vreo instanta a clasei respective.
1.3. Supraincarcare
Desi nu este o tehnica specifica programarii orientata obiect, ea creeaza un anumit
context pentru metodele ce formeaza o clasa si modul in care acestea pot fi (ca
orice subprogram) apelate.
Prin supraincarcare se intelege posibilitatea de a defini in acelasi domeniu de
vizibilitate2 mai multe functii cu acelasi nume, dar cu parametri diferiti ca tip si/sau ca
numar. Astfel ansamblul format din numele functiei si lista sa de parametri reprezinta
o modalitate unica de identificare numita semnatura sau amprenta. Supra-
CAPITOLUL 1. Programarea orientata obiect (POO) cu C# 9
1 Datorita tehnicii de supraincarcare C++, Java si C# permit existenta mai multor constructori
2 Notiunile generale legate de vizibilitate se considera cunoscute din programarea procedurala. Aspectele specifice
si modificatorii de acces/vizibilitate pot fi studiati din documentatiile de referinta C#.
incarcarea permite obtinerea unor efecte diferite ale apelului in contexte diferite3.
Apelul unei functii care beneficiaza, prin supraincarcare, de doua sau mai multe
semnaturi se realizeaza prin selectia functiei a carei semnatura se potriveste cel mai
bine cu lista de parametri efectivi (de la apel).
Astfel, poate fi definita metoda "comanda on-line" cu trei semnaturi diferite:
comanda_online(cod_prod) cu un parametru intreg (desemnand comanda unui singur
produs identificat prin cod_prod.
comanda_online(cod_prod,cantitate) cu primul parametru intreg si celalalt real
comanda_online(cod_prod,calitate) cu primul parametru intreg si al-II-lea caracter.
1.4. Mostenire
Pentru tipurile de date obiectuale class este posibila o operatie de extindere sau
specializare a comportamentului unei clase existente prin definirea unei clase noi ce
mosteneste datele si metodele clasei de baza, cu aceasta ocazie putand fi redefiniti
unii membri existenti sau adaugati unii membri noi. Operatia mai poarta numele de
derivare.
Clasa din care se mostenestea se mai numeste clasa de baza sau superclasa. Clasa
care mosteneste se numeste subclasa, clasa derivata sau clasa descendenta.
Ca si in Java, in C# o subclasa poate mosteni de la o singura superclasa, adica avem
de-a face cu mostenire simpla; aceeasi superclasa insa poate fi derivata in mai multe
subclase distincte. O subclasa, la randul ei, poate fi superclasa pentru o alta clasa
derivata. O clasa de baza impreuna cu toate clasele descendente (direct sau indirect)
formeaza o ierarhie de clase. In C#, toate clasele mostenesc de la clasa de baza Object.
In contextul mecanismelor de mostenire trebuie amintiti modificatorii abstract si
sealed aplicati unei clase, modificatori ce obliga la si respectiv se opun procesului de
derivare. Astfel, o clasa abstracta trebuie obligatoriu derivata, deoarece direct din ea
nu se pot obtine obiecte prin operatia de instantiere, in timp ce o clasa sigilata
(sealed) nu mai poate fi derivata (e un fel de terminal in ierarhia claselor). O metoda
abstracta este o metoda pentru care nu este definita o implementare, aceasta urmand
a fi realizata in clasele derivate din clasa curenta4. O metoda sigilata nu mai poate fi
redefinita in clasele derivate din clasa curenta.
Marshall Donis, Programming Microsoft Visual C# 2005: The Language, Microsoft Press 2006,
ISBN:0735621810
- Pelland Patrice, Build a Program NOW, Microsoft Visual C# 2005 Express Edition, Microsoft Press
2006,
- LearnVisualStudio.NET http://www.learnvisualstudio.net resurse educationale gratuite sub forma de
filme
- Harris Andy, Microsoft C# Programming for the Absolute Beginner, Premier Press 2002,
ISBN: 1?931841?16?0
- Wright Peter, Beginning Visual C# 2005 Express Edition: From Novice to Professional, Apress 2006,
ISBN-13 (pbk): 978-1-59059-549-7, ISBN-10 (pbk): 1-59059-549-1
- Liberty Jesse, Programming C#, Second Edition, O'REILLY 2002, ISBN 10: 0-596-00309-9,
ISBN 13:9780596003098
- Solis Daniel, Illustrated C# 2005, Apress 2006, ISBN-13 (pbk): 978-1-59059-723-1,
ISBN-10 (pbk): 1-59059-723-0
- Rasheed Faraz, C# School, Synchron Data 2005-2006,
http://www.programmersheaven.com/2/CSharpBook
- Schneider Robert, Microsoft- SQL Server- 2005 Express Edition For Dummies- , Wiley Publishing
2006, ISBN-13: 978-0-7645-9927-9, ISBN-10: 0-7645-9927-5
- Bradley L. Jones, Sams Teach Yourself the C# Language in 21 Days, SAMS, 2004,
International Standard Book Number: 0-672-32546-2
- Michel de Camplain, Brian G. Patrik, C# 2.0: Practical Guide for Programmers, Elsevier, 2005,
ISBN: 0-12-167451-7
- Christian Nagel, Bill Evjen, Jay Glynn, Karli Watson, Morgan Skinner, Allen Jones,
Professional C# 2005, Wiley Publishing, Inc., 2006, ISBN-13: 978-0-7645-7534-1
ISBN-10: 0-7645-7534-1
- Sharp John, Visual C# 2005, DUNOD 2006
- Iulian Serban, Dragos Brezoi, Tiberiu Radu, Adam Ward, GDI+ Custom Controls with Visual C#
2005, PACKT Publishing 2006, ISBN 1-904811-60-4
- Simpson Alan, Visual Web Developer Server- 2005 Express Edition For Dummies- , Wiley
Publishing 2006, ISBN-13: 978-0-7645-8360-5, ISBN-10: 0-7645-8360-3
- Hoffman Kevin, Microsoft- Visual C# 2005 Unleashed, Sams 2006,
ISBN-10: 0-672-32776-7, ISBN-13: 978-0-672-32776-6
- Popovici, Dorin Mircea si colaboratorii - Proiectare si implementare software,
Editura TEORA, Bucuresti, 1998
- C# Language Specification, Microsoft Corporation, 1999-2003
- C# Version 2.0 Specification May 2004, Microsoft Corporation, 1999-2005
- David Conger, Programarea in C#, editura B.I.C. ALL 2003
- Chris H. Pappas, William H. Murray C# pentru programare
Documentul este oferit gratuit,
trebuie doar să te autentifici in contul tău.