Documente Academic
Documente Profesional
Documente Cultură
20 martie 2007
20:57
1. Parcurgerea in cascada (waterflow)
Dezavantaje:
Analiza - Necesitatea reluarii complete in cazul unor defecte majore.
- Poate conduce la cresterea timpului de realizare
Proiectarea - Este un risc foarte mare.
Implementare
Testare
Pentru scaderea riscului s‐au gandit tot felul de alte combinatii pt parcurgerea etapelor de dezvoltare.
2. Parcurgerea in spirala
2. Parcurgerea incrementala (incremental)
‐modelul: RUP ‐> Rational unified process(proces de realizare unficata) (folosind toolsetul Relational Rod)
Iteratii:
‐Fiecare faza poate contine mai multe iteratii(un numar oarecare)
‐Fiecare iteratie contine toate cele 4 etape prezentate mai sus
Faza de initiere
‐definirea scopului proiectului
Faza de elaborare
‐stabileste modul de abordare (obiect orientata sau component orientata)
‐se incearca limitarea(excluderea) zonelor de risc
Faza de constructie
‐proiectarea detaliata si implementarea aplicatiei
Faza de migratie
‐accentul se pune pe trecerea de la produsul in stare de prototip la
inglobarea la utilizator. Accentul se pune pe testare
Modelul obiect constituie o viziune integratoare in proiectarea mai multor sisteme(hardware,
arhitectura, etc). Acest lucru contine o unificare a caracteristicilor.
Caracteristici fundamentale:
1. Abstractizarea
i. Nu este proprie numai modelului obiect dar este obligatorie pt modelul obiect.
ii. Prin abstractizare se definesc clasele ‐ >tipuri de date (tipuri abstracte)
‐>fiecare clasa inglobeaza atributele cele mai relevante
2. Modularitate
i. Abordarea prin care aplicatia se imparte in module
1) Modulele trebuie sa fie "slab cuplate"
ii. In OO modulele contin clase si obiecte
iii. Nu este specifica OO dar (obligatorie) recomandabila
3. Mostenirea
i. Proprietatea prin care se pot definii ierarhii de clase
1) Clase de baza
2) Clase derivate
ii. Se poate face prin 2 procese:
1) Specializare ‐ pornind de la o clasa de baza si definind clase specializate ‐>mostenesc
caractere generale din clasa de baza si au si propriul lor specific
2) Generalizare ‐ pronind de la mai multe clase oarecum corelate(indrudite) se extrag
caracteristicile comune ‐> se folosesc pt a definii o clasa de baza
4. Incapsularea si ascunderea implementarii
i. Asigura ca o clasa sa fie impartita in 2 parti
1) Structura
a) Multimea atributelor (date membre ale clasei)
b) Implementarea metodelor
2) Comportarea ‐ data de ceea ce se numeste interfata clasei‐>asigura legatura cu ext.
Multimea metodelor publice ale clasei ‐ prototipurile
ii. Permite reutilizarea codului
iii. Permite modificari independente in diferitele module
Exmeplu:
Class punct{
Float x; // datele membre sa fie de tip private
Float y;
Public:
Punct(float a, float b); // constructor
Puncg::getx(){
Return x;
}
iv. Fiecare obiect = instanta unei clase reprezinta o colectie de valori ale atributelor clasei
(general)
v. Se comporta in moduri diferite in functie de tipul de abordare al programarii
1) Programare procedurala ‐ dificil de implementat
2) Programarea OO ‐ incapsularea este recomandata si limbajele ofera suport pt aceasta
proprietat (nerespectarea este posibila dar pot sa apara probleme de siguranta a
utilizarii obiectelor).
3) Programarea orientata pe componente ‐ incapsularea este obligatorie
Tehnologiile de componente soft te obliga sa ai separatie completa intre interfata si
implementare
Caracteristici secundare:
1. Tipizarea = regulile prin care se pot combina sau de conversii intre diferite tipuri de date dintr‐un
limbaj
i. Slab tipizate: smaltalk ( C )‐ permit orice fel de combinatii intre obiecte.
ii. Puternic tipizate: Eifel, Java, C#
iii. Mediu tipizat: C++
2. Persistenta = capacitatea de stocare permanenta a datelor create intr‐un program. Exista
posibilitatea ca aceste date sa supravietuiasca programului. Serializare
3. Concurenta = se intelege posibilitatea de executie concomitenta(simultana) a mai multor obiecte
din aceeasi clasa sau clase diferite. Are loc numai daca avem deaface cu un calculator paralel sau
sistem distribuit (reala). (simulata : threaduri).
1. Caracteristici fundamentale Clase:
a. Abstractizarea - Structura: date modul+impl. Modul
b. Modularitatea - Comportarea: interfata = met de protectie, functii public
c. Mostenirea
d. Incapsularea
Fiecare obiect = instanta a clasei ‐ obiecte cu valoare de atribut a clasei??
Principiul incapsularii si al ascunderii implementarii se compolrta in moduri diferite in functie de tipul de
abordare al programarii:
- Pentru programarea procedurala, aceasta proprietate este dificil de implementat
- Pentru programarea OO, incapsularea este recomandata si limbajele OO ofera suport pentru aceasta
proprietate (specificatori diferiti, date separate, etc.)
○ Nerespectarea acestei proprietati este posibila dar pot sa apara probleme de siguranta a utilizarii
obiectielor.
- Progamarea orientata pe componente ‐ incapsularea este obligatorie
○ Tehnologiile de componente software te obliga sa ai separatie completa intre interfata si
implementare
2. Caracteristici secundare ‐ model obiect:
a. Tipizarea ‐ se refera la regulile prin care se pot combina in expresii sau de conversii intre diferite
tipuri de date dintr‐un limbaj ‐ modul de conversie e precizat prin caracteristicile de tipizare
(tipizarea se refera la tipui, tipurile=clase => tipzarea se refera la clase)
i. Limbaje slab tipizate : Smaltalk care permite orice fel de combinatii intre obiecte
(programatorul trebuie sa aiba grija)
ii. Limbaje putrenic tipizate:Eifell, Java, C#
iii. Limbaje mediu tipizate: C++
b. Persistenta = capacitatea de stocare permanenta a datelor creeate intr‐un program ‐ datele
creeate intr‐un program sa supravietuiasca programului;"serializatea datelor"=datele sunt
transformate in secvente de octeti, sunt scrise si raman acolo cand se termina programul. La o
noua executie ele pot fi utilizate.
c. Concurenta relativa la modelul OO = posibilitatea de executie concomitenta a mai multor obiecte
din aceeasi clasa sau clase diferite. Concurenta apare la calcualtoare paralele sau sisteme
distribuite.
Analiza, proiectarea, programarea Obiect Orientata
Aplicarea proprietatiilor si a conceptelor modelului obiect in aceste etape de dezvoltarea software.
1. Analiza OO
a. Analiza cerintelor respecta principiul general de abstractizare:
i. principiul prin care se slecteaza caracteristicile relevante ale realitatii modelate
ii. Identificarea claselor care vor constituii programul
Entitatile ‐> tip de entitate <‐ clasa
O entitate reprezinta orice exista in realitatea modelata
Multimea entitatilor de acelas tip reprezinta multimea obiectelor instante ale clasei
respective;
Avantajele abordarii obiect orientate a dezvoltarii softwareului
1) Reutilizabilitate codului ‐ se folosesc biblioteci de clase
2) Extensibilitatea codului ‐ se folosesc clase derivate din clasele din bilioteci
3) Mentenanta aplicatiilor obiect orientate = intretinerea bunei functionari a aplicatiilor e mai simpla in OO
din 2 motive:
a. Existenta incapsularii ‐ accesarea inmod unitar prin interfata a obiectelor
b. Se impun mecanisme de tratare a exceptiilor mai precise decat in alte limbaje
Limitarile abordarii OO
1. La inceput se credea ca OO va rezolva problema reutilizabilitatii codului. In realitatea avem doar o
reutilizabilitate limitate a codului.
a. S‐a constatat ca totusi clasele sunt prea mici si prea speciale
b. Biblioteci de uz general au functionalitate limitata. MFC (Microsoft Foundation Clases) a
reprezentat baza dezvoltarii programelor Windows in C++.
2. Interoperabilitatea limitata; interoperabilitate = posibilitatea de a opera impreuna a diferitelor clase si
obiecte. Ea este limitata datorita faptului ca bibliotecile sunt cu destinatii limitate la randul lor. Ex:
clasele si pakageurile java comunica greu cu clasele C++.
Tendintele de dezvoltare software
Scop: Eliminarea (micsoararea) limitarilor OO.
- Software orientat pe componente
○ beneficiaza de standarde generale care permit obtinerea
Reutilizabilitatii ‐ ea creste datorita faptului ca componentele sunt mai mari decat clasele
Interoperabilitatii ‐ creste datorita standardelor impuse si datorita faptului ca orice
componenta contine o interfata. Ea poate fii folosita deci mai comod in programare.
Dezvoltarea programelor folosind modelare UML
- Modul de dezvoltare soft; se folosec modele (concepte care sintetizeaza abstractizare din realitate
pentru un anumit scop si o anumita utilizare). Modelele se pot dezvolta in limbaje de modelare
- Anii 1990 ‐ zeci de limbaje diferite, fiecare propunand un anumit mod de reprezentare a programelor.
- Unificarea prin standardizare a proiectarii soft a fost o cerinta inerenta
In anul 1995 3 cercetatori au unificat cele 3 limbaje definite de ei
- Grady Bookh ‐ 1994 Object Oriented Analisys and Design ‐ limbaj G.B
- James Rumbourgh ‐ OMT (Object Modeling Tehnology)
- Ivan Jacobson ‐ OOSE (Object Oriented modeling language)
Caracteristicile limbajului UML
Limbajul uml inseamna UNIFICARE+FLEXIBILITATE
¾ Unificarea in modalitatile de dezvoltare software
○ Integreaza cele mai bune practici.
○ Integrarea continua prin adaugarea la diferitele revizii a uno aspecte noi de proiectare software.
Ex: ulterior s‐au inglobat componentele software.
¾ Foloseste modelul obiect ca baza a abordarii proiectarii software.
○ Poate fi utilizat si in alte abordari deoarece conceptele pe care le defineste au un caracter mai
general decat modelul obiect.
¾ Limbajul foloseste tipuri de date (incluse in elemetele grafice) ‐ independente de limbajele de
programare existenta (Defineste Real sau Integer fara sa faca o precizare stricta a legaturii cu aceste
tipuri din limbajele de programare existente. Admite si tipuri ale limbajelor ‐ FLEXIBILITATE).
Flexibilitatea este si mai puternic relevata de faptul ca limbajul UML oferea o multitudine de vederi ale
sistemului software (views). Aceleasi sistem poate fii privit din mai multe puncte de vedere, aspecte
modelate si apoi dezvoltate.
○ Sistemele software complexe nu pot sa fie reprezentate si necesita:
Specificari; fiecare specificare corespunde unui aspect si fiecare aspect mai multor vederi
Colaborarea mai multor categorii de personal
□ Analisti
□ Proiectanti
- Diagramelor de functionare (use‐case). Acestea au fost preluate din OOSE al lui Jacobson ‐ servesc
managerilor
- Diagramele fizice
Diagrame ale componentelor
Diagrame de deployment ‐ se refera la instalarea diverselor parti (deployment ?=
desfasurare)
- Diagrame de organizare a sistemului software
Diagrame de pachete
Diagrame de subsisteme
Diagrame ale modelelor
Fiecare categorie de personal de dezvoltare foloseste diferite vederi (diagrame) in functie de atributile
fiecaruia
¾ Limbajul UML ofera posibilitatea definirii pe diferite grade de detaliere.
- Acelasi element poate sa fie reprezentat in mai multe moduri de la foarte general pana la foarte
detaliat.
- Limbajul UML poate fi folosit in toate etapene de dezvoltare. In faza de analiza avem elemente
reprezentate simplificat ajungand in fazele de testare si implementare pana la reprezentarea
detaliata a aceluias element
Pentru limbajul UML s‐au dezvoltat numeoase toolseturi in functie de necesitati si specificatii. Important
este ca un toolset nu respecta intru totul specificatiile standard ale limbajului.
Modelarea structurala
Structura se refera la partile componente ale unui sistem; arhitectura unui sisteme se refera la partile
componente si legaturile(interfata) dintre ele.
- Reprezentarea structurala a unui sistem software ‐ partile componente
- Diagrama claselor si diagrama obiectelor.
1) Diagrama claselor este un model structural al unui sistem
i. Este reprezentat printr‐un graf
□ In noduri avem clase
□ Arcele reprezinta legaturile UML
ii. Capteaza informatii statice ale modelului.
2) Diagrama obiectelor:
i. sunt reprezentate obiectele in UML. Obiectele sunt instante ale claselor.
ii. Este o reprezentare la unmoment dat (obiectele au comportare dinamica)
iii. Utilitate restransa
OBS:
1. Se pot combina cele 2 tipuri de diagrame! (clase+obiecte). Reprezentarea se face in functie de
necesitati.
2. Mai exista si alte diagrame structurale: diagrama componenteleor (sotfware)
Elementele structurale ale diagramei claselor
In UML, un clasificator (classifier) este un element structural care reprezinta un concept de modelare
care reuneste elemente de structura, elemente de comportare si elemente semantice.
Exista mai multe categorii de clasificatori:
- Clasa (class)
- Tip de date (type)
- Interfata
O clasa in UML reprezinta o multime de elemente de aceealsi tip care sunt caracterizate prin structura
data de atribute, comportarea data prin metode si pentru care se poate identifica un inteles precis
(caracterul semantic)
UML OO
Class Class
atribut atribut
Principiul incapsulaii transforma clasa in structura cu atribute+implementare si comportare data de
atributele metodelor publice ‐ interfata clasei.
O clasa in def din UML corespunde unei clase din OO. Ea corespunde unui tip de entitate sau unei
multimi de entitiati. Atributul entitatii corespunde atributului din UML.
Desi definitile UML sunt mai generale, in anumite situatii se observa o foarte buna echivalare cu
notiunile cunoscute din programarea OO.
Reprezentarea in UML:
- 3 compartimente ale unui dreptunghi
Numele clasei + alte specificatii (compartiment obligatoriu)
□ Numele clasei (obligatoriu)
□ Un stereotip
- Clasa reprezinta forma implicita a unui clasificator <<type>>
Dimensiune
- Type si interfata necesita stereotipuri de precizare a clasificatorului.
- Interfata este o colectie de metode (3 modalitati de reprezentare)
<<interface>> Itranzaction
Itranzaction +begin():void
+commit():void Itranzaction
+abort():void
<<interface>> Componente
software
O componenta software in UML e o extindere a clasificatorilor
Forma
Pentru clase mai apar si constrangeri {abstract] Clasa abstracta
2. Clase parametrizate (clase template). O clasa template e o clasa care defineste o comportare unica
pentru tipuri diferite de date. Tipul datei este un parametru. In cazul stivei, tipul LIFO reprezinta un
parametru:
E
Tstiva
‐element[n]:E
‐dim:integer
‐poz:integer
+push():void
+pop():E
Clasificatorii cu diversele constrangeri reprezinta elemente de structura din diagrama structurala.
Elemente de legatura (din diagrama claselor)
- Este un element care realizeaza o corespondenta (legatura) intre clasificatori si alte elemente)
- Elementrul se repreznta prin unul sau mai multe segmente de dreapta + diferite marcaje (acestea
depind de tipul legaturii):
○ Linie intrerupta
○ Sageti
○ Diverse texte pe linie sau la capete
- Tipuri de legaturi UML:
○ Generalizarea (generalization)
○ Asocierea (asociation)
○ Depndentele (dependecies)
○ Alte legaturi
- Este legatura dintre 2 clasificatori in care un clasificator numit fiu mosteneste caracteristicile
clasificatorului numit parinte si adauga noi caractere specifice acestuia. Generalizarea este deci legata
de MOSTENIRE.
vehicul
Reprezentarea legaturii:
Sageata continua
Se pot definii ierarhii de clase pe oricate niveluri.
- Se poate definii o ierarhie printr‐un procedeu invers (prin specializare). Specializarea e operatia inversa
prin care se pleaca de la o clasa cu caracter general si se merge spre clase mai specializate (exista suport
in limbajele OO pentru mostenire si deci nu se mai fac specificari in UML)
2. Legatura de asociere
- Prin asociere se realizeaza corespondente(legaturi) intre elementele diferitilor clasificatori.
In UML un obiect este o instanta a unei clase (clasificator). Nu exista suport specific pentru asociere in
limbajele OO. Se folosesc diferite mecanisme care sa asigure asocierea.
Clasificari ale asocierilor:
I. Din punct de vedere al numarului de clase (clasificatori) pusi in corespondenta:
a. 2 clasificatori ‐ asocieri binare
b. >2 clasificatori ‐ asocieri multiple; n‐are ‐> pot fi restranse in asocieri binare
II. Din punct de vedere al raportului de cardinalitate
III. Din punct de vedere semantic (al intelesului). Din punct de vedere semantic exista:
a. Asocieri simple
b. Asocieri de tip parte intreg (intreg parte ??)
II. Clasificarea din punct de vedere al raportului de cardinalitate
1) Asocieri de tip unul la unu 1:1. Ele reprezinta asocierea prin care unui element din prima multime ii
corespunde un singur element din a 2‐a multimea.
2) Asocierea unul la mai multi 1:N. Asocierea prin care unui elem din prima multime ii corespund mai
multe elemente din a 2‐a multime dar nu si invers
3) Asocierea multi la multi
x y
y
y 1:N
x
y
x y
x y M:N
x y
y
Prin cardinalitate sau multiplicitate se intelege numarul de elemente a unei asocieri fata de unul din
clasificatori (sau multime de elemente) este egala cu numarul de elemente din acel clasificator care pot
fii legate la un element din celalalat clasificator
Raportul de multiplicitate ‐ criteriu de clasificare.
- Asocierile multiple se reprezinta prin mai multe rapoarte de cardinalitate sau de multiplicitate.
- Reprezentarea asocierilor: asocierile in uml se reprezinta prin unul sau mai multe segmente contiunue,
intre clasificator (asocieri binare)
Rol numeasoc rol
Marcaje pe asocierile binare UML
a. Numele asocierii (facultativ)
b. Multiplicitatile fata de fiecare clasificator. Se scriu la capatul liniei. Conceptul am avut 1:1, 1:N,
M:N; In UML:
i. min...max
0 1
1 val
c. Rol ‐ rolul clasificatorului in asocierea respectiva (se reprezinta tot la capete)
d. Navigabilitatea ‐ posibilitatea de a ajunge de la un element dintr‐o clasa in cealalata. Ea poate sa
fie unidirectionala si se reprezinta cu o sageata. Ea poate sa fie bidirectionala sau neprecizata.
Exemple de asociere:
a) 1:N (generic)
Intreprindere Angajator angajari angajat Persoana
1...1 1...*
b) M:N
Profesor Student
* *
1...10 1...1000
c) Asocierile multiple. Ele se reprezinta folosind un romb cu linii
Clasificarea din punct de vedere semantic a asocierilor:
1) Asocieri simple = asocieri in care elementele asociate au existenta proprie, independent de asociere si
de elementele din clasificatorul cu care are loc asocierea.
2) Asocierile de tip intreg‐parte sunt asocierile (in general binare) in care exista un clasificator cu rol de
intreg si unul sau mai multi clasificatori cu rol de parte (parti) [general]. Pot exista si 2 sau mai multi
clasificatori intreg fiecare cu 2 sau mai multi clasificatori de tip parte.
a. Asocieri de tip compozitie
b. Asocieri de tip agregare
Legaturi de asociere
- Au abordari mai putin fixe (precizate) (fiecare limbaj are toolset‐uri proprii
- La nivel UML avem asocieri
○ Simple
○ Tip intreg‐parte
Rapoarte de multiplicitate: 1:1; 1:N; M:N;
I ‐ asocieri simple ‐> clasificator e de sine statator; pot exista asocieri; este cea mai slaba in sensul
legaturii care exista intre cei 2 clasificatori
I. Asocierea de tip intreg‐parte
a. Compozitie
b. Agregare
- Legaturi intre clasificatori dintre care un clasificator are rolul de intreg (exprima o entitate complexa) si
una sau mai multe entitati complexe care reprezinta parti ale intregului
- Pot avea unul sau mai multi clasificatori cu rol de intreg
1) Compozitie ‐> are urmatoarele caracteristici:
a. Obiectul de tip intreg este compus din obiecte de tip parte
b. De regula obiectul de tip intreg nu poate exista fara obiectele de tip parte
c. (de regula) un obiect parte apartine unui singur obiect intreg (la un moment dat)
d. Este (in general) heterogena (exista clasificatori diferiti ca parti ce intra in combinatie pentru a
forma intregul)
Reprezentare UML
Masina Club
0...*
1 1 4
0...*
Caroserie Motor Roata Persoana
M:N
Legatura de compozitie este cea mai puternica legatura de asociere din cele existente.
2) Legatura de agregare
- Este legatura care stabileste corespondenta intre grupuri de instante ale clasificatorilor asociati.
- Clasificatori care reprezinta:
○ Grup
○ Membrii ai grupurilor
- Caracteristici:
○ Este de regula de tipul M:N dar poate fii si 1:N (caz particular)
○ O instanta a clasificatorului grup care reprezinta un intreg poate exista si fara membrii sai.
○ O instanta a clasificatorului poate fii asociata mai multor grupuri
○ Legatura este de regula omogena.
0...*
Copac
1:N
Clasificarea unei asocieri ‐‐‐> depinde de interpretarea data de dezvoltator
Legaturile de dependenta
- Dependentele pot sa fie de mai multe feluri. Ea este legatura prin care un clasificator numit client
depinde de un alt clasificator numit target (supplier)
Client Furnizor
uses
Clasa1 Clasa 2
Tipuri de dependenta:
1) Legatura de utilizare (stereotip <<uses>>)
a. Folosim obiecte din clasa furnizor in implementari de metode
b. In argumente ale metodei clasei client
2) Legaturi de coeziune.
a. Clasificatorul template ‐> clasificatorul tipului de date folosit
tip
Cl. Template Cl. Tip <=> Template
3) Legatura de trasare (stereotip <<trace>>)
a. Intre clasificatori care reprezinta acelasi concept pe niveluri de dezvoltare diferite
Preprezinta evolutia soft din punct de vedere al versiunii
4) Legatura rafine (stereotip <<reffine>>)
5) Legatura de realizare. Ea se refera la faptul ca un anumit concept este specificat prin intremediul altui
concept sau instanta.
a. Poate fii legatura intre interfata si clasa
b. Poate fii legatura de instantiere inre clasa si obiectul din acea clasa
Reprezentare aleternativa:
<<Interface>> <<interface>>
Interfata 1 Clasa 1
<<realizare>>
Cl d ifi
<<realizare>>
Clasa de specificare
Clasa de specificare
Obiect 1
Obiecte si diagrame ale obiectelor
Punct
- In UML, un obiect este o instanta a unei clase ‐x:float
- Reprezentare: ‐y:float
‐getx():float
...
P1:Punct
x:float = 1
y:float = 1
Diagrama obiectelor:
- Graf, obiecte la un moment dat
- Legaturile dintre obiecte: instante ale legaturii din clasele instantiate
Diagrama obiectelor este considerata un snapshot. De cele mai multe ori ea este inlocuita cu alte
diagrame.
Ex: Profesor Student
p1 s1
p2 s2
p3 s3
Diagrama obiectelor poate contine si clase!
Exemplu ‐ diagrama claselor. (Ele nu trebuie sa fie detaliate)
Class1 *
-End12 1
1 S1
-End11
Class2 *
-End13
-End14
Implementarea claselor si a legaturilor dintre elemente
- Scrierea programului intr‐un limbaj obiect orientat.
- Detalierea diagramelor UML
I. Scrierea programelor ‐ implementarea aplicatiilor soft in modelul OO pornind de la UML
1) Implementarea claselor:
Class(UML) ‐‐‐> class(OO)
<<interface>> ‐‐‐‐> in functie de limbaj unei interfete ii corespunde tot o clasa sau tipul interface
2) Implementarea legaturilor ditre clase.
a. Legatura de generalizatedevine legatura de mostenire in limbaje OO
Class Culoare{
Int r;
Int g;
Int b;
Public:...};
Class punct{
Float x;
Float y;
Public:....};
Class forma{ //clasa abstracta deoarece contine functii virtuale pure
Culoare culoare;
....
Public:
Virtual float aria()=0;
Virtual float perimetru()=0; //functii virtuale pure
b. Implementarea legaturilor de asociere
i. Asocierile de compozitie ‐ compunerea claselor
1) Variabile de tipul clasei "parte"
a) Obiecte incluse in clasa intreg
b) Pointeri sau referinte la obiecte din clasa parte: in Java sunt numai referinte, in
C# de regula referinte iar in C++ putem avea ambele
Diagrama claselor mai detaliate (in etapa de implementare)
Implementarea claselor (UML) si a legaturilor dintre acestea
Clasa(UML) ‐‐‐‐> clasa in limbaj OO
Legaturile dintre clase:
- Generalizarea (UML) ‐‐‐‐>clase derivate in limbaje OO
- Asocierea (UML)
Compozitia ‐‐‐‐> obiecte ca date membre de clase sau referinte la obiecte
Simpla, de agregare
□ Variabile de asociere
□ Clase de asociere
I. Variabile de asociere
Ex:
Class Student{
Char *nume;
Profesor *lista_profesori[max]; //pot fii si referinte
Int nr_profesori;
//Variabila de asociere care permite directia de navigabilitate student ---->
//profesor
public:
Student(char *n){
nume=new char[strlen(n)+1];
strcopy(nume,n);
nr_profesori=0;
}
//functii de asociere
void add_Profesor(Profesor *p){
if(nr_profesor<max)
lista_profesori[nr_profesori]=p;
nr_profesori++
else{eroare}
}
int main(){
profesor *p1=new Profesor("prof1");
profesor *p2=new Profesor("prof2");
profesor *p3=new Profesor("prof3");
Student *s1=new Student("stud1");
Student *s2=new Student("stud2");
Student *s3=new Student("stud3");
Student *s4=new Student("stud4");
//Obiectele sunt de sine statatoare; Asocierea se face folosind diverse metore ale
//claselor
-End4
s1 : Student
-End3 *
p1 : Profesor -End5
* -End6
* -End10 s2 : Student
* -End7 -End9 *
p2 : Profesor -End11 *
* -End12
* -End14
-End8 s3 : Student
-End13 *
p3 : Profesor -End15 **
* -End16
* s4 : Student
*
Fiecare legatura este creeata de addStudent si addProfesor la fiecare obiect in parte
OBS:
Exemplul de mai sus reprezinta o asociere simpla M:N bidirectionala. Faptul ca e asociere simpla nu
difera de situatia in care am avea o agregare.
Directionalitatea asocierii ‐‐‐‐> daca este bidirectionala avem variabile de asociere in ambele clase. Daca
este unidirectionala, atunci avem nevoie de o variabila de asociere numai in clasa de origine a sagetii de
navigabilitate.
Variabilele de asociere sunt de regula vectori de pointeri la clasa asociata (sau referinte). Putem avea
liste inlantuite sau orice alte structuri.
Din punct e vedere al raportului de multiplicitate:
a) M:N ‐‐‐‐> se folosesc vectori de pointeri in ambele clase (exemplul dat)
b) 1:N ‐‐‐‐> in clasa care are coeficientul de multiplicitate 1 avem un vector de pointeri si in a 2‐a
clasa avem un pointer simplu.
class Sectie;
class Sectie{
char *nume;
Angajati *lista_angajati[max]
int nr_angajati;
....
};
c) 1:1 ‐‐‐‐> variabilele de asociere sunt pointeri
Clase de asociere
- Se folosesc in general pentru M:N
Implementare:
#define max 100
class Profesor{
char *nume;
public:....
}
class Student{
char *nume;
public:....
}
struct PS{
pointer *Profesor;
pointer *Student;
PS(Profesor *p1, Student *s1){
p=p1;
s=s1;
}
};
int main(){
profesor p1=new profesor("prof1");
student s1=new student("stud1");
student s2=new student("stud2");
student s3=new student("stud3");
student s4=new student("stud4");
PS ps11(p1,s1);
asocieri.addPS(ps11);
PS ps12(p1,s2);
Mostenirea asocierilor
Cl Baza1 Cl Baza2
* *
Deriv1 Deriv2
* *
Clasele derivate mostenesc variabilele de asociere, metodele de adaugare a instantelor
Ex:
class Profesor{
//cu var de asocirere
};
class Student{
//cu var de asociere
};
class ProfesorInvitat:public Profesor{
char *univ_de_unde_vine;
public:
ProfesorInvitat (char *nume, char *u):Profesor(nume){
univ_de_unde_vine=new char[strlen(u)+1;
strcopy(univ_de_unde_vine, u);
};
}
class StudentBursier:public Student{
float *bursa;
public:
StudentBursier(char *n, float b):Student(n){bursa=b;);
}
//in clasele derivate nu avem variabile de asociere.
CDocument CView
0..1 0..*
CMyDoc CMyView
0..1 0..*
APOO Curs Page 20
CDocument CView
0..1 0..*
CMyDoc CMyView
0..1 0..*
Este implementata prin variabile si functii de asociere. Asocierea intre CMyDoc si CMyView este
mostenita.
Implementarea legaturilor de dependenta.
1) Legatura de rafinare (<<rafine>>) ‐‐‐‐> nu se implementeaza intr‐un mod specific (no code);
2) Legatura de trasare (<< trace>>) ‐‐‐‐> nu se implementeaza nici ea (no code);
3) Legatura de conectare (<<bind>>) ‐‐‐‐> se implementeaza prin clasele template;
template <classE> class Tvector{.........};
4) Legatura de realizare
a) Instantierea obiectelor ‐‐‐‐>
Class1
Object1
class X{...};
class X obx;
b) Legatura de realizarea a unei interfete de catre o clasa
«interface»
Interfata1
«uses»
ClasaY
Implementare Java:
Interface
clasay implements interfata{....};
C++: pt metoda: clasa abstracta - mostenire :-??
5) Legatura de utilizare
a) un ob dintr‐o clasa este folosit in alta clasa in functie de argument
class Cerc: public Forma{
.
.
.
}
public:
int intersectie(Segment s){
float panta=s.getPanta();
}
};
Punct
1 * * 1
Cerc Segment
1 * * 1
Cerc Segment
Observatie:
Pana acum am studiat diagrame ale claselor si obiectelor. Aceste diagrame sunt statice si reprezinta
structura modelului (la nivel foarte detaliat)
Ulterior vom intalnii si alte diagrame de sctructura pe niveluri mai inalte
- diagrame de componente
- diagrame ale sistemeor si subsistemelor
- diagrame ale pachetelor
- O alta vedere asupra sistemului software
- Ne da informatii despre comportarea elementelor sistemului (prin interactiuni intre elementele unui
sistem)
Modelarea comportarii
• La nivel generic ‐‐‐‐> comportarea intre clase, sisteme, pachete.
• La nivel de instante: intre obiecte, instante ale sistemelor si instante de pachete.
Modelarea comportarii pe diferite niveluri de detaliere ale sistemului:
• Clase (clasificatori)
• Sisteme (si subsisteme)
• Pachete
Mod comportarii: un element trimite un mesaj unui alt element. (interactiunea)
- In UML: un mesaj = un element comportamental care reprezinta o interactiune intre elemente ale
modelului. (interactiunile dau functionarea sistemului)
Un mesaj implica 2 entitati:
• Client ‐‐‐‐> care cere o anumita actiune
• Server ‐‐‐‐> furnizeaza un rezultat (al unei actiuni de regula).
- Agent = element care are atat rol de server cat si de client.
Mesaj
• Ex: mesaj intre 2 obiecte = apelul unei functii a unui obiect de catre alt obiect (dintr‐o
functie a obiectului client mai exact).
• Ex: intre subsisteme: trimiterea unui mesaj pe o retea; web browser trimite unu mesaj catre
un web server
- Pentru trimiterea unu mesaj:
• Existenta unei legaturi intre elementele client si server care comunica. Orice legatura poate
permite trimiterea unui mesaj: de asociere, de utilizare, de generalizare, etc.)
• Conditia de vizibilitate a serverului fata de client. Ex: serverul sa fie vizibil; adica sa fie accesibil, sa
fie in acealas domeniu.
Exemplu:
class Punct{
float x;
public: Punct(float a, float b)
{x=a;y=b};
void move (float m, float n)
{x+=m; y+=n};
};
class Segment{
Punct p1;
Punct p2;
public: Segment (Punct a, Punct b){p1=a; p2=b};
void move (float a, float b){
p1.move(a,b);
p2.move(a,b);
} //clasa segment trimite un mesaj clasei punct - interact la nivel generic
//un obiect din clasa segment trimte un mesaj unui ob din clasa punct -
Reprezentarea in UML a interactiunilor intre elemente ale sistemului se poate face in 2 feluri:
- prin diagrame de colaborare
- prin diagrame de secventa a mesajelor
Diagrame de colaborare:
• la nivel generic
¾ intre clase
¾ intre subsisteme
¾ cazuri de utilizare
• la nivel de instanta
¾ intre obiecte
¾ intre instante de subsisteme
¾ intre cazuri de utilizare, etc.
void main(){
Punct p1(1,2);
Punct p2(4,5);
Segment s1(p1,p2);
s1.move (7,8)
Punct c(100,200);
Cerc c1(c,10);
c1.intersectie(s1);
}
Diagrama de secventa a mesajelor:
Segment Punct
move
move
lifeline
Ordonarea temporara a mesajelor este implicita in diagrama de secventa amesajelor deoarece axa
verticala reprezinta timpul.
Diagramele de secventa a mesajelor sunt mult mai utile si mult mai intuitive.
Cele 2 reprezentari sunt similare
Diagrame de stare
Se refera la starile prin care trec obiectele instante ale unei clase.
- o satare este o colectie bine definita de valori ale atributelor.
- trecerea se face prin tranzitie. O tranzitie are loc intre 2 stari si are loc de regula ca urmare a unei
activitati.
Daca starile prezinta valori cu semnificatii diferite de la o valoare la alta, atunci putem avea nevoie de
astfel de reprezentari. Ex:
motor:
• pornit
• oprit
Cele 2 stari pot fi date de turaitie (comparatie fata de 0)
Tranzitia de la o stare la alta
Ex: Diagrama de stare a unui proces (gestionat de SO): stare
lansare
Aparitia
eveniment
ului
Gata de executie
Asteptare
Executie
eveniment
extern
Diagrama de activitate
b) tranzitii ‐ treceri intre stari de activitate ce au loc in cursul rezolvarii functiunii respective
Activitate
Activitate 2
c) Decizie (branch)
Activitate
Activitate 2
State1 State2
d) Elemente de executie concurenta
State3 State4
Ex: diagrama de activitate "Livrare Produs"
Primirea facturii
Primirea facturii
Inchidere ordin
- Modelarea structurala (clase, obiecte.....) ‐‐‐‐> vedere structurala
- Mocelarea comportamentala (instante.....)
- Modelarea utilisarii sistemelor
use‐case (cazuri de utilizare)
• vedere a sistemului din punct de vedere al utilizarii
• recomandate pentru a stabilii cerintele de dezvolatare ale unui sistem
• Diagrame use‐case
¾ la nivel generic
¾ le nivel de instante
- de structuri
- de componente
a) Actor
- un set de roluri pe care il poate juca un element al ansamblului
- tip "actor" (generic)
- instanta a unui tip
- Un actor poate fii o persoana sau un alt sistem care utilizeaza sistemul dat. Poate reprezenta chiar
un eveniment de timp!
b) Cazul de utilizare (context de utilizare; use‐case)
- un caz de utilizare reprezinta un set de functiuni pe care un element il ofera actorilor. Se
reprezinta printr‐un cerc in care apare denumirea cazului de utilizare
c) Legaturi:
- intre actori
- intre use‐case‐uri
- intre actori si use‐case‐uri
Modelarea utilizarii
- Use‐case
- De regula este foarte utila
○ mai ales in faza de stabilire a cerintelor
○ pentru utilizatori care nu sunt interesati de structura sistemului ci de utilizare.
- Entitati:
○ Actorii (un set de roluri; poate fii o persoana sau un sistem)
○ Contexte de utilizare(seturi de functii sau functionalitati)
- Diagrama de utilizare in care se reprezinta actorii si contextele cu legaturile dintre acestia. Legaturile
sunt mai speciale, ele specificand modul de utilizare (asemanatoare cu leg de asociere)
Alte legaturi posibile in cadrul modelarii utilizarii:
a) Legaturi intre actori:
i. Generalizare
ii. Dependente
1) De utilizare (<<uses>>)
2) De instantiere
b) Intre contexte:
a) Generalizare
b) Dependenta
i. <<include>>
ii. <<extend>>
iii. De instantiere (<<instance of>>)
In cadrul functionalitatilor de modelarea a utilizarii se pot folosii:
- Diagrame use‐case ‐‐‐‐> modelare structurala
- Diagrame de interactiune ‐‐‐‐> modelare comportamentala
Furnizare bani
Client
Introducere card
Cerere Pin
Introducere pin
Cerere suma
Introducere suma
Eliberare card
Ca recomandare, un context de utilizare trebuie sa ofere functionalitati care sa corespunda unui scop al
actorului . Toate actiunile mentionate mai sus alcatuiesc un scop.
Modelarea componentelor.
- Componente software: este o unitate de program (executabil)
- Ofera o anumita functionalitate printr‐o interfata
- Pot fi dezvoltate, achizitionate si utilizate independent
- Pot fi inlocuibile
- Impreuna duc la creearea softului bazat pe componente.
O componenta este o extindere a notiunii de clasificator.
Experienta de programare a dus la necesitatea de a avea componente mai mari, cu mai multe functii. O
componenta=o grupare de:
- La programare OO ‐‐‐‐‐> clase si obiecte
- La programarea non OO ‐‐‐‐> mai multe functii
Diagrame de interactiune
Actor1
Message1
Message2
Message3
Message4
Message5
Message6
Componentele pot fii deployed in noduri de calcul
Organizarea modelelor UML
- Reducerea complexitatii
Grupare de elemente (ale modelului)
□ Package (pachet)
□ Systems (subsisteme)
□ Model
1) Pachete
¾ Un pachet este o grupare de elemente ale modelului. Elementele grupate de un pachet pot fii:
Clasificatori
Alte pachete
Diagrama pachetelor: pachetele + legaturile intre acestea.
Legaturile:
- De generalizare
- De compozitie
- De dependente ‐‐‐‐> de utilizare <<import>> sau <<uses>>
2) Subsisteme (UML):
a) Este un pachet (grupare) de elemente; Organizare unui subsistem se face pre criteriul
functionalitatii.
«subsystem»
SubSystem1
Cel mai inalt nivel
b) Diagrame ale subsistemelor:
Subsisteme + legaturi de date:
¾ Legatura de compozitie (la fel ca la pachete, cu semnul +)
¾ Legaturi de utilizare posibile intre diverse subsisteme.
¾ Legatura de compozitie ‐‐‐‐> duce la ierarhii de subsisteme
«subsystem»
SubSystem1
* 1 -End3
1 *
-End4
-End1
-End2
«subsystem» «subsystem»
SubSystem2 SubSystem3
1 1*
-End5
-End8
-End7
* -End6
«subsystem» «subsystem»
SubSystem5 SubSystem4
Specification elements ‐‐‐‐> options Realization elements
Specification
Model: o grupare (package) de elemente ale modulului
- Pe criteriul vederii (utilizarii) in cadrul proiectului
- Diagrame de modele: leg de compozitie
Putem avea ierarhii de modele sau ierarhii combinate: modele + subsistem
Diagrame de deployment
- Nodurile retelei: calculatoare (host): din punct de vedere al rolului jucat in apl respectiva
- Elemente ale modelului (grupare): subsisteme, componente + leg de date dintre acestea
Diagrame:
- Generice
- Ale instantelor
Ex. de legatura intre elemente ale modelului:
Legatura de dependenta (in exemplul de mai sus)
Concluzii:
Modelare UML
1) Aplicatiile software mari nu pot fii dezvoltate oricum. Ele beneficiaza de o abordare sistematica in care
sunt precizate diversele etapesi operatii care trebuiesc efectuate. Cea mai des folosita abordare exte cu
ajutorul limbajului UML care poate fii folosit in toate etapele.
a. UML e mai intuitiv
b. UML asigura compatibilitatea intre diferiti utilizatori si dezvoltator.
Tehnologii de dezvoltare software (software engineering)
Printr‐o tehnologie software se intelege un ansamblu de limbaje, standarde, biblioteci, interfete,
sisteme de dezvoltare, toolset‐uri, toate avand ca obiectiv dezvoltarea softului, inclusiv implementare
(pana la testarea si executia programului)
Clasificarea unui numar de domenii:
I. Modul de abordare a dezvoltarii software
a. Dezvoltarea "from scratch" ‐ custom mode (se pleaca de la 0). Se folosesc cel mult niste biblioteci
fara diverse alte componente. Se pot dezvolta aplicatii software mici. Avantaje: flexibilitate foarte
mare si adaptare foarte buna la cerintele clientului. Dezavantaje: risc de piata, ce provine dintr‐un
posibili timp de realizare ridicat ‐ eficienta scazuta.
b. Dezvoltarea prin achizitie de produse software gata realizate. Avantaje: risc de piata redus, timp
de realizare mic si deci eficienta mare. Dezavantaje: flexibilitate redusa, adaptabilitatea este
redusa ‐ se adapteaza cerintele la software nu software‐ul la cerinte, dificultate de intretinere,
vulnerabilitate in fata concurentei.
% soft cumparat
eficienta
% soft cumparat
c. Software bazat pe componente ‐ realizarea softului prin asamblare de componente software.
i. O componenta software este o unitate de: productie, achizitie, asamblare (deployment)
independenta de alte unitati.
ii. O componenta software poate fii considerata si ca o unitate executabila.
iii. Au interfete bine precizate care sunt denumite contracte (intre componenta si utilizatorii ei)
iv. Au avut o dezvoltare mai lenta decat alte componente (hardware)
Acest lucru provine din caracterul abstract al produselor software. Chiar definitia este
controversata. Pana la ce nivel se merge cu compartimentarea? In momentul de fata exista
o piata de componente a caror dezvoltare a avut loc mai lent dar ea exista.
v. Componentele software au inceput ca si VBX ‐ visual basic controls ‐ componente folosite
pentru dezvoltarea de interfete.
vi. Dezvoltarea software‐ului bazat pe componente este o solutie intermediara intre cele 2
extreme: Are un grad de flexibilitate mai mare decat soft‐ul cumparat, eficienta
intermediara, etc. Alt avantaj: se pot combina solutii. Se poate cumpara o parte gata facuta
lipita cu un soft propriu care impreuna sa prezinte toate cerintele dorite incluziv un anumit
avantaj fata ce competitori.
In realitate:
- Combinarea componentelor software nu este atat de flexibila deoarece depinde de
producator. [compatibilitate redusa, mai ales intre producatori]
- Exista dezvoltari de componente pe baza catorva tehnologii.
Clasificarea aplicatiilor din punct de vedere al numarului de statii pe care se executa.
1) Aplicatii locale ‐ desktop, nedistribuite;
- 1 proces (unul sau mai multe) cu unul sau mai multe thread‐uri care se executa pe o
singura statie. Nu apar comunicatii pe retea si deci aplicatia se rezolva local.
- Exista diferite toolset‐uri de dezvoltare
MSDEV (bazat pe C++) care se sprijina pe biblioteca MFC ce permite dezvoltarea
usoara ai interfetelor grafice prin intermedul Visual C++. Un framework =
grupare de elemente care permite dezvoltarea unor anumite tipuri de aplicatii.
Arhitectura client slab (pe 2 niveluri): Necesita un server puternic, este simplu
de implementat, ofera o securitate puternica (toate operatiile se rezolva la
server) si intretinerea este simpla. Dezavantaje: poate sa apara congestia
serverului.
Arhitectura client puternic (pe 2 nivele): Avantaje: serverul nu se
congestioneaza. Dezavantaje: intretinere complicata (orice schimbare
presupune schimbari la toti clientii), securitate mai slaba, etc.
- Arhitecturi pe mai multe niveluri:
retea retea
Sisteme de
Client Nivelul “business
gestionare a
logic”
bazelor de date
Nivelurile unei aplicatii multi tier sunt niveluri logice. Ele pot sa fie executate fiecare pe cate un
host sau pot sa fie grupate
III. Tehnologiile de dezvoltare software
a. Tehnologii Microsoft ‐ pornind de la o viziune (Desktop) s‐a ajuns la aplicatii distribuite puternice
(1985).
b. Tehnologia CORBA ‐ Comon Object Request Broker Arhitecture. Arhitectura porneste din
Tehnologii Microsoft
- Dezvoltarea de aplicatii de tip desktop ‐ MSDEV
- Dezvoltarea aplicatilor distribuite:
○ Etapa COM‐DCOM. (Componente Object Model ‐ Distributed COM). Aceasta tehnologie este
inglobata in sistemele de operare. A inceput in 1991 prin tehnologia OLE 1.0 ‐ object linking and
editing 1.0. S‐a incercat legarea de aplicatii de tip desktop. In 1992 standardul introduce notiunea
de componenta. IN1993 ‐ OLE 2; 1996 ‐ ActiveX ‐ tehnologia COM pentru internet; In 2000 ‐ com+
○ IN 2001 ‐ tehnologia .NET ‐ orientata pe aplicatii Internet (distribuita)
In 2002 .NET Framework 1.0; C#. Aplicatiile sunt orientate pe componente software. In .NET
componentele software sunt mai inregimentate. Un ansamblu (o entitate dezvoltata
in .NET) reprezinta o componenta software .NET
Tehnologia Microsoft .NET
- Dezvoltata dupa anul 2003; Este directionata catre aplicatii distribuite; Inlocuim tehnologia COM, DCOM
- Principii .NET:
○ Interoperabilitaea intre diferite aplicatii
○ Integrarea limbajelor (in aplicatii se pot folosii mai multe limbaje diferite)
○ Este limitata la sistemele de operare de tip Windows.
- .NET Framework ‐ cadru de dezvlotare a aplicatiilor care permite dezvoltarea aplicatiilor in
platforma .NET. Mai poarta si numele de platforma .NET
Web Services
Web Form\Windows Forms
Data & XML
Framework Base Clases (FBC)
Windows
Intre biblioteca si sistemul de operare mai apare si CLR ‐ partea executiva a programelor (.NET
Framework).
¾ Este echivalent cu o masina virtuala Java.
¾ Executa (controleaza executia) in limbaj intermediar IL (MSIL: Microsoft Internal Language)
¾ IL se obtin din compilarea resurselor: limbajele .NET:
C# (seamana si cu C++ si cu Java)
VB. NET
J#
Managed C++
Toate programele produc cod in limbaj IL
Sursa C#
Sursa J#
Managed module
IL
Singurul program diferit este Managed C++ care poate genera modul managed sau nu.
Managed module ‐ modul administrabil: IL si poate fii executat sub controlul CLR.
Un unmanaged module ‐ modul neadministrat ‐ poate fii executat direct de SO si este un modul in cod
nativ (limbajul CPU pe care se lucreaza)
- Functionare CLR
incarcare
Managed IL
Verificare cod
Managed IL
Cod nativ
Compilat NU
managed
Garbage col
DA
executie
executie
Controlul executiei CLR
¾ Verificare de runtime
¾ "Garbage colector": obiectele din memoria libera sunt distruse. Executia este sigura pentru ca nu
mai exista operatorul delete care genera probleme in C++
Organizarea progr. NET
¾ Compilator ‐ Modul(managed):
Codul IL
"Metadata": tabele care descriu tipurile definite in modulul respectiv
¾ Unitatea de executie, instalare, versionare si securitate este denumita ansamblu (assembly). Un
ansamblu este unitatea care se poate instala. Un ansamblu poate sa contina 1 sau mai multe
module. El are deci modulele propriu‐zise (care contin cod IL si metadata), diverse resurse si un
manifest (care contine lista datelor). Un ansamblu este o componenta software.
Exemplu HelloWorld:
Compilare csc Hello.cs
In urma acestei comenzi se creeaza Hello.exe (ansamblu continut in windows pe ‐ portable executable)
- Instalare CLR (.NET Framework)
¾ Se modifica loader‐ul SO ai loader‐ul poate deosebii un PE in cod nativ de un PE in cod IL.
In windows librariile poarta denumirea de dll (Dinamib Link Library)
a) C# este mai pur din punct de vedere al OO fata de C++. Nu admite metode si variabile globale. Med main
cu care incepe executia devine o metoda statica a unei clase. Ea poate fii invocata fara instantierea
clasei din care face parte.
b) Spatiile de nume
a. sunt grupari logice de entitati
b. clase in care numele de identificatori sunt unice
c. permit evitarea coliziunilor de nume.
d. spatiile de nume se pot grupa ierarhic
namespace Spatiul1{
Numele unei clase: Spatiul1.Subspatiul1.Clasa1.
La utilizare, directiva using ne permite o utilizare mai simpla a spatiilor. Astfel Syste.Console devine
Console
System
System.Collection
System.IO
System.Data
System.Winows.Forms
System.Web.UI
System.Web.Services
Tipurile de date .NET
- Integrarea limbajelor
○ tipuri comune CTS (Common Type Specifications)
○ tipuri impuse limbajelor numite CLS (Common Language Specifications)
○ fiecare limbaj defineste ca multimea tipurilor sale o multime care este o submultime a CTS si
include CLS
CTS
VB .NET CLS
C++
C#
Clasificarea tipurilor distribuite din .NET
- Dupa modul de creere:
○ tipuri valoare
○ tipuri referinta
- Dupa locul de creeare:
○ tipuri definite in .NET
○ tipuri definite de utilizator.
Limbajul C#
Limbajul oficial al .NET
- Andreas Hejsberg, cott Wiltamuth
- C++, Java
Tipuri de date C#
I. Tipuri valoare
a. Tipuri primitive: int x=1;
i. se creeaza prin declaratie
ii. se creeaza in stiva
iii. nu avem referinte
b. Tipul enumerare ‐ defineste o colectie de valori constante.
using System;
public class Class1{
enum Valori{
mica=1;
potrivita=2;
mare=3;
};
public void static Main(){
Console.Writeln ("Valori {0},{1},{2}",
Valori.mica,Valori.potrivita, Valori.mare);
}
}
Se afiseaza: Valori 1,2,3
c. Structuri:
//Fisier...
struct Locatie{ //implicit derivata din valuetype; nu permite derivarea.
intx;
inty;
public Locatie(int a, int b){
x=a; y=b;}
public override string ToString(){//override se refera la dominare
return "Locatie"+x+" "+y;
}
}
public class Program{
public static void Main(){
Locatie.l1=new Locatie(4,5);//returneaza valoarea - obiectul care se
//creeaza in stiva
Afiseaza: Locatie 4 5
Curs se continua cu laboratoarele .NET (7 si 8)
Exemplu clasa statica:
//Fisier statice.cs
using System;
public class Clasa{
private int x;
private const int c=10;//se poate initializa numai in declaratie o const
private readonly int r=2;//se mai poate initializa si in constructor
public static s;//ca in Java, nu in C++!!!
public Clasa(int a, intb, int c){x=a;r=b;s=c;}
public void inc(){x++;s++}//met nestatice pot accesa date membre statice si
//nestatice
public static void incs(){x++;/*da eroare*/s++;}
public override string toString(){
return "x="+x+"r="+r+"s="+s;
}
public class Program{
punlic static void Main(){
Clasa c1=new Clasa(1,2,3);
Console.writeline(c1);//toString de aici e mostenit din object insa daca
//vrem sa afiseze ceva anume se va face redefinirea. Se poate folosii
//Console.Writeln(c1.toString());
Clasa.s=5;
c1.inc();
Console.Writeline(c1);//afiseaza x=2r=2s=6
c1.incs();//eroare, nu se poate accesa metoda statica folosind un obiect
Clasa.incs();//corect
}
}