ouape - mike.tuiasi.romike.tuiasi.ro/pp-03-oopstudenti.pdf · c# sievenimentele •c# are...
TRANSCRIPT
![Page 1: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/1.jpg)
Paradigma Orientata Obiect
ouape
![Page 2: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/2.jpg)
2
Descompunerea functionala se muta la top down/bottom up
• O maniera naturala pentru gestiuneacomplexitatii unei probleme
• Exemplu: Sa se acceseze descrierea unor formeexistenta intr-o baza de date si apoi sa se afisezeaceste forme
• O prima abordare ar fi:1. Identifica lista de forme in baza de date
2. Deschide lista de forme din baza de date
3. Ordoneaza aceasta lista conform cu un set de reguli
4. Afiseaza formele pe monitor
![Page 3: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/3.jpg)
• Detailere la pasul 4
– Identifica tipul formei
– Obtine locatia acesteia
– Apeleaza functia care poate sa afiseze aceastaforma (poilorfism?) furnizandu-I locatia formei
• Se observa ca ideea este sa descompunemproblema pana la elementele functionale / pasii care o compun
![Page 4: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/4.jpg)
specificatiile
• Sunt:– Incomplete
– De multe ori gresite partial sau total
– Inselatoare (din cauza diferentelor de limbaj sireprezentare a unor concepte dintre proiectant sibeneficiar
– Niciodata nu prind toate aspectele implicate
![Page 5: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/5.jpg)
5
Tratarea schimbarilor in descompunereafunctionala
functie : afiseaza formadisplay shape
intrare: tip de forma, descriere de forma
actiune:switch (tipul formei)
case patrat: apeleaza functia care afiseaza un patrat
case cerc:
peleaza functia care afiseaza un cerc
![Page 6: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/6.jpg)
6
Coeziune scazuta si cuplarea stransa• Telul ar fi
– Sa se creeze functii• cu integritate interna (coeziune stransa)
• Care au relatii directe, vizibile, flexibile si directe (nu prinintermediari) (strans cuplate)
• Efecte colaterale– Nedorit
– Dorit:
![Page 7: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/7.jpg)
7
Proiectarea orientata obiect
O metodologie orientata pe rezolvareaproblemei care produce o solutie a problemeiin termeni de entitati incapsulate numiteobiecte
Obiect
O entitate sau un lucru care are sens in contextul problemei
De exemplu un student, o masina, o data si o ora
![Page 8: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/8.jpg)
8
Privire generala
Problemele sunt rezolvate prin
• Izolarea obiectelor implicate
• Determinarea proprietatilor si actiunilor (sauresponsabilitatilor) acestora si
• Descrierea colaborarii intre obiecte cu scopulrezolvaii problemei
![Page 9: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/9.jpg)
9
Exemplu
Tu si cu prietena stabiliti o “intalinire de lucru”Obiecte: tu, prietena, cinaClasa: tu si cu prietena sunteti oameni
Oamenii au nume, culoare ochi etc… Oamenii pot face cumparaturi, gati
Instanta clasei: tu si cu prietena sunteiti instante ale clasei Oameni. Fiecare
aveti propriul nume, culoare a ochilor etc siputeti gati sau face cumparaturi
Voi colaborati la pregatirea mesei
![Page 10: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/10.jpg)
10
Definitii primare
Clasa (sau obiectul clasei)O descriere a unui grup de obiecte similareObiect (instanta unei clase)Un caz concret al modelului definit in clasaClasele contin campuri care reprezinta
proprietati (numele, culoarea ochilor) siComportamente (responsabilitati) (gateste, face
cumparaturi) ale clasei
MetodaUn algoritm care defineste comportamentul (gateste,
face cumparaturi)
![Page 11: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/11.jpg)
11
Proiectarea orientata obiecte
Proiectare Top-Down
descompune problema in task-uri
Proiectare Orientata obiect
descompune problema in obiecte care colaboareaza
![Page 12: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/12.jpg)
12
Top-Down vs proiectare OO
Abordarea Top-down Abordarea Orientat Obiect
![Page 13: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/13.jpg)
13
Proiectarea OO - “oua”
Pasi
– izoleaza
– abstractizeaza
– determina
![Page 14: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/14.jpg)
14
OOP
Data denastere
datacastorie
Data de nasterea catel
Clasa cudate
Obiecte Clase de obiecte
![Page 15: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/15.jpg)
15
Metodologie OO
Exista patru etape in procesul de descompunere
– Brainstorming
– Filtrarea
– Scenarii
– Algoritmi
![Page 16: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/16.jpg)
16
Brainstorming-ul
• Este o tehnica de grup care implica contributiaspontana de idei din partea tuturor membrilordin grup
![Page 17: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/17.jpg)
17
Filtrarea
Determina care sunt clasele de baza folosite in rezolvarea problemei
![Page 18: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/18.jpg)
18
Scenarii
In aceasta etapa se atribuie responsabilitati fiecareiclase
Sunt doua tipuri de responsabilitati- determinarea informatiei despre ea insasi pecare o clasa trebuie sa o cunoasca(responsabilitati de cunoastere)- determinarea a ceea ce poate o clasa sa faca(responsabilitati comportamentale)
Incapsularea
![Page 19: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/19.jpg)
19
Algoritmii
Trebuie scrisi pentru a descrie responsablitatileobiectului:
– Responsabilitatile de cunoastere
– Responsabilitatile de actiune
![Page 20: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/20.jpg)
20
Fisele Class Responsibility Collaboration (CRC)
![Page 21: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/21.jpg)
21
Exemplu
Sa analizam procesul de rezolvarea crearii uneiliste de adrese
Brainstorming si filtrare– Incercuirea subiectelor in propozitie poate fi un
punct bun de plecare
![Page 22: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/22.jpg)
22
Examplu
![Page 23: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/23.jpg)
23
CRC Cards
Propuneti alte responsabilitati
Nume Clasa:
PersoanaSuperclasa: Subclase
Responsabilitati Colaborari
Se autoinitializeaza (nume, adresa, telefon, email
Nume, Adresa, Telefon, Email
Afiseaza Nume, Adresa, Telefon, Email
![Page 24: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/24.jpg)
24
Nume Clasa: Nume Superclasa: Subclase
Responsabilitati Colaborari
Se autoinitializeaza (nume) String
Se auto-afiseaza String
Nume Clasa:
ListaSortata(din bilioteca)
Superclasa: Subclase
Responsabilitati Colaborari
Insert (persoana) Persoana
Print Persoana
Cum difera aceasta clasa de Nume si Persoana ?
![Page 25: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/25.jpg)
25
Algoritm
Clasa Persoana
Initializare
name.initialize()Write “Introduceti numele; apasati enter."Cere si initializeaza numeleWrite “Introduceti adresa de email; apasati enter."Cere si initializeaza adresa
Afisare
name.print() Write “Numar telefon: " + telephoneNumberWrite “Adresa de e-mail: " + emailAddress
Asigura autoinitializarea nume
Asigura autoafisarea nume
![Page 26: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/26.jpg)
26
AlgoritmClasa Nume
Initializare
“Introduceti Prenumele; apasati enter."Read Prenume"Introduceti Numele; apasati enter."Read Numele
Afisare
Print “Prenumele: " + firstNamePrint “Numele: " + lastName
![Page 27: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/27.jpg)
27
Fazele pentru rezolvarea si implementareaproblemei in OO
![Page 28: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/28.jpg)
28
Functionalitati oferite de OOPIncapsularea
Clase
Mostenirea
Polimorfism
![Page 29: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/29.jpg)
Incapsularea datelor si operatiilor
Programatorul poate defini accesul la atributele simetodele clasei
• Privat
• Protected
• Public
![Page 30: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/30.jpg)
Incapsularea datelor si operatiilor
(“friend”)
class Node {
friend class LinkedList;
private:
itemtype key;
Node * next;
}
![Page 31: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/31.jpg)
Cand se poate folosi “friend”
Link si LinkedList sau Link, LinkedList, si ListIterator
class Account {
private:
double balance, credit_limit;
public:
//other operations
void deposit(double amount);
friend void transfer (Account & target, Account & source, double amount);
}
![Page 32: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/32.jpg)
Metode friendclass Node { private: int data; int key; // ...
friend int BinaryTree::find(); // numai metoda find din BinaryTree are access};
Clase friendclass Node { private: int data; int key; // ...
friend class BinaryTree; // clasa BinaryTree poate accesa acum data direct};
![Page 33: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/33.jpg)
Mostenirea
![Page 34: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/34.jpg)
Clase abstracteclass Shape {
protected: //data members needed if used for substitution
int X, Y;
double R1, R2;
public:
Shape (int x, y, double u, v);
virtual double area ( ) = 0;
virtual double perimeter ( ) = 0;
}
Metodele nu au implementare
![Page 35: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/35.jpg)
Mostenirea din clase abstracte
class Circle : public Shape {
public:
Circle (int x, int y, double r) : X(x), Y(y), R1(r ), R2(0) {}
double area ( ) {return M_PI * R1 *R1; }
double perimeter ( ) {return 2 *M_PI * R1; }
//other methods for Circle
}
![Page 36: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/36.jpg)
Utilizarea claselor abstracte
• Clasele abstracte pun la dispozitie un cadrupentru a adauga un comportament specific aplicatiei
• Utilizatorul lor trebuie sa furnizeze detalii de implementare pentru toate metdele nedefinite
![Page 37: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/37.jpg)
37
O forma ierarhica de polimorfism
toString( )equals( Object obj )getClass( )
Shapeextends
extends
Object
Circle
colorborderWidth
Color getColor( )void setBorderWidth( int m )
int computeArea( )
radius
![Page 38: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/38.jpg)
Polimorfism
Abilitatea unui limbaj de a suporta metodecu nume similar intr-o structura ierarhicade clase (functie de limbaj) sau la nivel de operatori si aplicarea metodei/operatorului care este cea/cel mai potrivitpentru obiectul / zona de cod in care esteapelat/aplicat .
![Page 39: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/39.jpg)
Polimorfism prin mostenire
![Page 40: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/40.jpg)
exempluclass Car
{
public virtual boolean start() = 0;
}
class VolkswagenBeetle : Car
{
public boolean start() {// implementare pt Beetle}
}
class SportsCar : Car
{
public boolean start() { implementare pentru Sport}
}
//Si utilizarea
Car cars[] = { new VolkswagenBeetle(), new SportsCar() };
for( i = 0; i < 2; i++)
Cars[i].start();
![Page 41: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/41.jpg)
Imbunatatirea conceptului
Fieinterface Car
{ public boolean start(); }class VolkswagenBeetle implements Car
{ public boolean start() { //cod }}class SportsCar implements Car
{ public boolean start() { // cod }}
atunciclass Jalopy implements Car { …} // va fi polimorfica
![Page 42: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/42.jpg)
Polimorfism# polimorfism sub Python
class VolkswagenBeetle(Car):
def start(): # codul pentru Volkswagen
class SportsCar(Car):
def start(): # Codul pentru SportsCar
# apelul polimorfismului
cars = [ VolkswagenBeetle(), SportsCar() ]
for car in cars:
car.start()
![Page 43: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/43.jpg)
43
O forma ierarhica de polimorfism
toString( )equals( Object obj )getClass( )
Shapeextends
extends
Object
Circle
colorborderWidth
Color getColor( )void setBorderWidth( int m )
int computeArea( )
radius
Shape
Circle
Object
Un obiect Cerc are trei parti
![Page 44: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/44.jpg)
44
Cum sunt create obiecteleCircle c = new Circle( );
![Page 45: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/45.jpg)
45
Cum sunt create obiecteleCircle c = new Circle( );
c
Shape
Circle
Object
1.
Execution Time
![Page 46: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/46.jpg)
46
Cum sunt create obiecteleCircle c = new Circle( );
c
Shape
Circle
Object
c
Shape
Circle
Object
1. 2.
Execution Time
![Page 47: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/47.jpg)
47
Cum sunt create obiecteleCircle c = new Circle( );
c
Shape
Circle
Object
c
Shape
Circle
Object
c
Shape
Circle
Object
1. 2. 3.
Execution Time
![Page 48: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/48.jpg)
48
Utilizari comune ale polimorfismului
1. In tablouri
2. Ca argument pentru metode
3. In cazul valorii (obiect) trimisainapoi de o metoda
![Page 49: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/49.jpg)
49
1) Folosirea polimorfism in tablouri
extends
toString( )equals( Object obj )getClass( )
Shape
Rectangle
extends
extends
Object
Circle Triangleextends
colorborderWidth
Color getColor( )void setBorderWidth( int m )
int computeArea( )
lengthwidth
int computeArea( )
radius baseheight
int computeArea( )
![Page 50: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/50.jpg)
50
1) Folosirea polimorfism in tablouri
[0] [1] [2]
[2]
firstShape
Attributes:length = 17width = 35
Methods:int computeArea( )
secondShape
Attributes:radius = 11
Methods:int computeArea( )
thirdShape
Attributes:base = 15height = 7
Methods:int computeArea( )
samples(an arrayof Shapeobjects)
![Page 51: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/51.jpg)
51
1) Folosirea polimorfism in tablouri
[0] [1] [2]
[2]
firstShape
Attributes:length = 17width = 35
Methods:int computeArea( )
secondShape
Attributes:radius = 11
Methods:int computeArea( )
thirdShape
Attributes:base = 15height = 7
Methods:int computeArea( )
samples(an arrayof Shapeobjects)
![Page 52: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/52.jpg)
52
2) Folosirea polimorfism ca argument al metodelor
public int calculatePaint (Shape myFigure) {
final int PRICE = 5;
int totalCost = PRICE * myFigure.computeArea( );return totalCost;
}
![Page 53: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/53.jpg)
53
2) Folosirea polimorfism ca argument al metodelor
public int calculatePaint (Shape myFigure) {
final int PRICE = 5;
int totalCost = PRICE * myFigure.computeArea( );return totalCost;
}
![Page 54: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/54.jpg)
54
2) Folosirea polimorfism ca argument al metodelor
public Shape createPicture ( ) {
/* Read in choice from user */System.out.println(“1 for rectangle, ” +“2 for circle, 3 for triangle:”);
SimpleInput sp = new SimpleInput(System.in);int i = sp.readInt( );
if ( i == 1 ) return new Rectangle(17, 35);if ( i == 2 ) return new Circle(11);if ( i == 3 ) return new Triangle(15, 7);
}
![Page 55: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/55.jpg)
Generalizarea
• Se bazeaza pe obiecte container ca lists,stacks si queues
• Acestea au comportamente similareindifernet de tipul de obiect pe care ilcontin (de fapt ele jongleaza numai cu referintele catre ele)
• Prima oara apare in Template pus la dispozitie de CPP care de fapt suntimplementari ale conceptului de ADT
![Page 56: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/56.jpg)
TemplateExample
template <class T>
class Stack {
}
Notatie pentru template
private:T * buffer;
int first;
int capacity;
public:
Stack(int cap);
~Stack( );
void push(T item);
void pop( );
T top ( );
boolean empty ( );
#include Stack.cpp Se include fisierul cu implementarea
Utilizatorul trebuie sa precizezedimesiunea stivei implementateca un tablou
![Page 57: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/57.jpg)
Implementare cu template
template <class T> Stack <T> :: Stack (int cap) {
buffer = new T[cap];
first = 0;
capacity = cap;
}
Tablou rezervat dinamic
![Page 58: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/58.jpg)
Implementare cu templates
template <class T> void Stack<T>:::push (T item) {
if (first ==capacity) //va genera o exceptie
error (OVERFLOW);
buffer[first] = item;
first++;
}
template <class T> T Stack<T>:: top( ) {
if (first ==0) //exceptie UNDERFLOW
error (UNDERFLOW);
return buffer[first];
}
function()template <class T> return_type class_name <T> ::
![Page 59: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/59.jpg)
Limitarile Template in cazul generalizarii
• Data elementele continute intr-un container sunt ordonate ele trebuie sa fie capabile sa raspunda operatorilorrelationali cum ar fi: < or ==
• Nu toate clasele au obiecte care suntcomparabile pentru ca operatoriirelationali nu au fost supraincarcati saumai rau obiectele nu pot fi comparabile(nu are sens logic operatia)
![Page 60: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/60.jpg)
Supraincarcare operatori
Restrictii de utilizare
• Se pot supraincarca majoritatea operatorilor in afara de . :: ?: sizeof
• Nu se pot defini noi operatori prin“supraincarcarea ” simbolurilor care nu sunt incaoperatori
•
![Page 61: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/61.jpg)
Supraincarcare operatori
Exemplu – Lista inlantuita
Lista
dim = 2
prim
ultim
![Page 62: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/62.jpg)
Supraincarcare operatori
Lista
dim = 2
prim
ultim
Copiere superficiala folosind operatorul implicit “=“
Lista
dim = 2
prim
ultim
A
B
B = A;
B.dim = A.dim;B.prim = A.prim;B.ultim = A.ultim;
![Page 63: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/63.jpg)
Supraincarcare operatori
Copiere reala:
List & List::operator = (const List & rhs) {
//daca tinta nu este goala o goleste
while (first != NULL) {
link * temp = first;
first = first -> next;
delete temp;
}
link * ptr = rhs.first;
while (ptr) {
insert ( ptr -> key); //se presupune inserarea la sfarsit lista
ptr = ptr -> next;
}
return *this;
}
![Page 64: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/64.jpg)
Supraincarcare operatori
class Complex {
private:
double: re, im;
public:
Complex ( ); //constructor implicit
Complex (double x, double y);
//other member functions
Complex & operator += (const Complex & rhs);friend Complex operator + (const Complex & scr1,
const Complex & scr2);
friend ostream & operator << (ostream & out, Complex & rhs);
}
target of message is lhs
Tinta nu este un membru a clasei Complex
![Page 65: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/65.jpg)
Supraincarcare operatori
Complex & Complex:: operator += (const Complex & rhs) {
re += rhs.re;
im += rhs.im;
return * this;
}
Exemplu: Complex z1(2, 3);
Complex z2 (21, -24) ;
z2 += z1;
Se creaza 2 obiecteComplex
z2 destinatia opratiei +=
Intoarce obiectul curent
![Page 66: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/66.jpg)
Operator Overloading (cont.)
Complex operator + (const Complex & src1, const Complex & src2) {
Complex z;
z,re = src1.re + src2.re;
z,im = src1.im + src2.im;
return z;
}
Complex z1, z2(1, 2), z3(-2, 4);
z1 = z2 + z3;
z2 = z2 + z3;
cout << z2 + z3;
Destinatia poate fi diferita sau identicaca la operatorul original
![Page 67: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/67.jpg)
Operator Overloading (cont.)
ostream & operator << (ostream & out, const Complex & rhs) {
out << ‘(‘ << rhs.re << “, “ << rhs.im << ‘)’;
return out;
}
Complex z1(1.2, -2.1), z2(24, 44);
cout << z1 << “+ “ << z2 “ = “ << z1 + z2 << endl;
![Page 68: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/68.jpg)
Substitutia tipurilor la Runtime
• Cel care substituie trebuie sa fie o subclasa a tipului declarat
• Clasa originala (adica tipul referit) trebuie sa fie refererit de un pointer
• Metodele suprascrise trebuie declaratevirtuale
![Page 69: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/69.jpg)
Substituire
Animal
string name, says;
int x_pos, y_pos;
Animal( ); //default
Animal(const char aname[];
//other non virtual methods
virtual void speak( );
Dog
string name, says;
int x_pos, y_pos;
Dog ( ); //default
Dog(const char aname[]);
//inherited methods
void speak( ); //override
void chase_cats(Cat & acat);
![Page 70: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/70.jpg)
Substituire
Fie un tabel de pointeri catre animale
Animal * theBarn[4];
Acum se creaza niste animale si se pun in hambar
Animal MickeyMouse(“Mickey”);
Cat Sly (“Sylvester”);
Dog Fred;
Dog Spot (“Spot”);
theBarn[0] = &MickeyMouse;
theBarn[1] = &Sly;
theBarn[2] = &Fred;
theBarn[3] = &Spot;
Constructor implicit nici un nume atribuit
![Page 71: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/71.jpg)
Substitutie
Acum I se spune fiecarui animal sa “vorbeasca” evident fiecare pre limba lui
for (int i = 0; i < 4; i++)
theBarn[i] -> speak( );
![Page 72: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/72.jpg)
Substituirea
Ferma
Hambarul
Dog
ruff
Spot
Cat
Felix
meow
Cat
Nonamemeow
Animal
Donald
mute
![Page 73: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/73.jpg)
C# and OOP
• C# este proiectat pentru .NET Framework– Acesta este OOP
• In C#– Se poate accesa SO direct prin obiecte
– FCL (Framework class library) sunt proiectate(cica) pentru extinder si integrare in codulutilizator
![Page 74: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/74.jpg)
Definirea Claselorclass Name:BaseType{
// Members}
Namespace NameName{class Name:BaseType{}
}
class MyType{public static String someTypeState;public Int32 x;public Int32 y;
}
![Page 75: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/75.jpg)
Accesibilitatea• In C#, private este nivelul implicit de access
(protectie anti prost)• Optiunile de accesibilitate (scopingul)
– public – Accesibil la toti– private – Accesibil la clasa care il contine– protected – Accesibil la clasele care il contin dar si la
derivatele lor– internal – Accesibil la nivelul codului in cadrul aceluiasi
assembly– protected internal – inseamna ori protected oriinternal
• Clasele pot fi declarate ca public sau internal– Sunt private implicit– Accesibile numai codului din acelasi modul sursa
![Page 76: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/76.jpg)
Tipuri Membri in C#• Fields
– Starea unui obiect sau tip
• Metode– Constructori– Functiii– Proprietati (campuri inteligente(smart))
• Membrii exista in doua forme de baza– Instanta – pentru datele obiect si metodele
• Default
– Statice – pentru tip data si metode• Use the static keyword
![Page 77: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/77.jpg)
Metode
• Declarare inline cu definirea tipului
•
class MyType{public Int32 SomeMethod(){
return x;}
public static void StaticMethod(){// fa ceva}
}
![Page 78: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/78.jpg)
Proprietati• Metodele care arata ca niste campuri (smart
fields)
•
class Point{Int32 x;Int32 y;public Int32 X{
get{return x;}set{x = value;}
}public Int32 Y{
get{return y;}set{y = value;}
}}
![Page 79: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/79.jpg)
Constructori pentru instante
• Constructorii sunt de obicei folositi sa initializeze campurile• Constructorii pot fi descrisi “mai clar” in cazuri mai complexe
daca se foloseste this
•
class Point{Int32 x;Int32 y;
public Point():this(0, 0){}
public Point(Int32 x, Int32 y){this.x = x;this.y = y;
}}
![Page 80: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/80.jpg)
Constructori de tip (static)
• Sunt folositi pentru initializarea campurilorstatic
• Se admite un singur constructir static per tip– Sunt apelati in Common Language Runtime
– Sunt garantati a fi apelati inainte de orice referintacatre un tip sau o instanta a acestuia
– NU accepta parametri
• Folosirea static indica tipul constructorului
![Page 81: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/81.jpg)
Derivarea si obiectul
• Toate tipurile din sistem sunt derivate din Object
• Se poate totusi specifica alta clasa de baza– Fara aceasta compilatorul va asuma implicit Object
• Referintele la variabile obiect sunt folosite ca referinte generice– Clasele sunt grupate in Framework Class Library
• Objectele implementeaza metode utile de genul– ToString(), GetType()
– ReferenceEquals()
![Page 82: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/82.jpg)
Polimorfism si funcntii virtuale
• O metoda este declarata virtuala cu virtual
• In clasele derivate, metodele suprascrise sunt marcate cu override
• Exemplu– ToString()metoda din Object class
– UN exemplu de clasa care o suprascrie
public virtual string ToString();
class SomeClass:Object{public override String ToString(){
return “Some String Representing State”;}
}
![Page 83: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/83.jpg)
C# si evenimentele
• C# are suport nativ pentru evenimente (suporta siparadigma cu pricina)
• Great for dealing with objects in an event-driven operating system
• Dezvoltare rapida a GUI
• Se pot inregistra diferite tipuri la un eveniment (veziobserver si generice)
• UN tip se poate inregistra la oricate evenimente
![Page 84: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/84.jpg)
Gestiune de eveniment
using System;using System.Windows.Forms;class MyForm:Form{
MyForm(){Button button = new Button();button.Text = "Button";button.Click += new EventHandler(HandleClick);Controls.Add(button);
}void HandleClick(Object sender, EventArgs e){
MessageBox.Show("The Click event fired!");}public static void Main(){
Application.Run(new MyForm());}
}
![Page 85: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/85.jpg)
Definirea unui eveniment• Bazata pe un mecanism standard de tratare “callback” cu delegate
class EventInt{Int32 val; public Int32 Value{
get{return val;}set{
if(Changed != null)Changed(value, val);
val = value; }
}public event Callback Changed;public delegate
void Callback(Int32 newVal, Int32 oldVal);}
![Page 86: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/86.jpg)
Metodele callback (delegati)
using System;delegate void MyDelegate(String message);class App{
public static void Main(){MyDelegate call = new MyDelegate(FirstMethod);call += new MyDelegate(SecondMethod);call("Message A");call("Message B");
}static void FirstMethod(String str){
Console.WriteLine("1st method: "+str);}static void SecondMethod(String str){
Console.WriteLine("2nd method: "+str);}
}
![Page 87: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/87.jpg)
Interfete
• C# suporta interfete
– Tipurile proprii pot implementa interfete
• Dupa cum era de asteptat in lipsa unui adapter suplimenta trebuieimplementat tot ce este in interfata
– Accepta definirea de interfete proprii
• Interfetele pot suporta NUMAI metode NU SI campuri
– Proprietati si evenimente incluse
– Constructorii nu sunt permisi in interfete
• Cuvantul cheie interfaceinterface Name{
// Members}
![Page 88: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/88.jpg)
Supraincarcarea operator si conversia de tip
• C# permite supraincarcarea metodelor
• Sunt apelate cand un tip propriu este folositintr-o expresie cu operatori– Poate supraincarca +, -, *, |, etc.
• Poate crea metode proprii pentru conversia de tip (cast)
• Acestia pot fi apelati implicit sau explicit
![Page 89: ouape - mike.tuiasi.romike.tuiasi.ro/PP-03-OOPStudenti.pdf · C# sievenimentele •C# are suportnativpentruevenimente(suportasi paradigmacu pricina) •Great for dealing with objects](https://reader031.vdocuments.pub/reader031/viewer/2022022014/5b3d398c7f8b9a560a8ddba1/html5/thumbnails/89.jpg)
OOP design results