Sunteți pe pagina 1din 22

Sedinta 4

CLASE & OBIECTE


- partea a doua -

Ciprian MUNTEANU
Constructori
 folositi pentru a crea obiecte; sunt initializate campurile si
proprietatile clasei
 metode speciale: nume = numele clasei
 nu au tip returnat (nici macar void)
 o clasa poate avea unul sau mai multi constructori cu
(expliciti) sau fara parametri (impliciti)
 nu pot exista 2 constructori cu parametri de acelasi tip
 daca nu definim niciun constructor, C# creaza unul
default fara parametri; el va instantia obiectul si va seta
campurile si proprietatile clasei cu valorile default
specifice tipurilor lor
2
Constructori - Exemple

 fara parametri:

 cu parametri:

3
Constructori - Exercitiu
 creati o clasa Persoana cu 3 proprietati public
auto-implementate:
 Nume de tip string
 Prenume de tip string
 Varsta de tip int

 adaugati un constructor care contine 3 parametri:


nume, prenume si varsta; in cadrul constructorului
initializati proprietatile Nume, Prenume si Varsta cu
valorile primite;
 in metoda Main din clasa Program creati un obiect
pers1 folosind constructorul nou creat:
nume=“NumeA”, prenume=“PrenumeA”, varsta = 21
4
Destructori
 destructori = finalizatori
 folositi pentru a distruge instantele claselor
 o clasa poate avea un singur destructor
 nu pot fi apelati; sunt invocati automat;
 nu au modificatori de acces sau parametri
 metode speciale ce nu au tip returnat; nume = numele
clasei
 inaintea numelui adaugam caracterul ~

5
Exercitiu recapitulativ
 creati o clasa publica numita Money; clasa are:
 2 proprietati publice auto-implementate: Amount de tip decimal si Currency de tip string
 1 constructor implicit care intializeaza Amount cu 0 si Currency cu “RON”
 1 constructor explicit cu 2 parametri amount si currency (parametrul currency este
optional, valoare default = “EUR”) cu care sunt initializate proprietatile clasei
 o metoda publica GetAmountWithCurrency care returneaza un string = <amount>
<currency>
 o metoda publica MultiplyAmount care nu returneaza nimic; primeste ca parametru
factorul de multiplicare si inmulteste amountul cu factorul primit
 destructor care printeaza pe ecran mesajul: “Destructorul clasei a fost apelat in mod
automat”
 in metoda Main din clasa Program:
 creati un obiect (numit salariuA) de tip Money folosind constructorul implicit al
clasei; folosind proprietatile clasei setati amountul la 10 si moneda USD
 creati un obiect (numit salariuB) de tip Money folosind constructorul explicit al
clasei pasand ca parametri 25.5 RON; apelati metoda MultiplyAmount transmitand
valoarea 1.25 ca parametru
 pentru fiecare obiect afisati pe ecran valorea cu moneda folosind metoda
GetAmountWithCurrency
6
Membri Statici

 sunt construiti prin cuvantul cheie static (intre


modificatorul de acces si tip):
 campuri
 proprietati
 metode
 constructor static:
• un singur constructor static
• nu are parametri
• nu are modificator de acces
• este apelat cand clasa este folosita (cand accesam un membru
static sau cand cream un obiect)
 accesarea membrilor statici se face prin numele
clasei, nu printr-o instanta (obiect)
7
Membri Statici – Exemplu

8
Clase statice

 cuvantul cheie static intre modificatorul de acces si


numele clasei

 toti membri sunt statici

 nu poate fi instantiata (nu putem crea obiecte)

 exemplu: clasa System.Console, System.Math

9
Clase statice - Exercitiu
 creati o clasa statica numita ConvertorTemperatura
 creati 3 metode publice statice:
 ConvertCelsiusToKelvin care primeste ca parametru o temperatura
exprimata in grade celsius si o returneaza exprimata in grade kelvin
(kelvin = celsius + 273)
 ConvertCelsiusToFahrenheit care primeste ca parametru o
temperatura exprimata in grade celsius si o returneaza exprimata
in grade fahrenheit (fahrenheit = celsius * 18 / 10 + 32)
 ConvertKelvinToCelsius care primeste ca parametru o temperatura
exprimata in grade kelvin si o returneaza exprimata in grade celsius

 modificati metodele ConvertCelsiusToKelvin si


ConvertKelvinToCelsius astfel incat sa folositi campuri
statice de tip constante
10
Mostenire

 al doilea pilon al POO


 defineste o relatie intre 2 clase
 clasele pot deriva din clase existente
 clasa din care se deriva:
 clasa de baza
 clasa parinte
 super-clasa
 clasa care mosteneste clasa de baza:
 clasa derivata
 clasa copil
 sub-clasa

11
Mostenire
 clasa parinte = o generalizare a claselor copil
Animal

Pisica Caine

Persana Birmaneza Maidanez Pitbull

 clasele copil share-uiest caracteristicele clasei parinte


 creaza relatii de tip “este…un/o”
 clasele copil au acces la toti membri publici, internal si
protected ai clasei parinte
12
Mostenire - declarare
<modif_acces> class <nume_clasa_copil> : <nume_clasa_parinte>

13
Mostenire - exercitiu
 adaugati in clasa Persoana o proprietate protected auto-
implementata de tip string: CNP
 creati o clasa publica Student care sa mosteneasca din clasa
Persoana
 in noua clasa adaugati propietatile publice auto-implementate:
 Facultate de tip string
 Medie de tip float
 adaugati o metoda publica PrinteazaInformatiiComplete – nu
returneaza nimic; nu are parametri; afiseaza pe ecran
informatiile complete ale unui student dupa cum urmeaza:
 Studentul <NUME> <PRENUME>, cnp <CNP>, cu varsta de <VARSTA> ani
este student al facultatii <FACULTATE>, avand media <MEDIE>
 in metoda Main din clasa Program creati un obiect de tip
Student (stud1); setati-i proprietatile si afisati informatiile
complete ale studentului
14
Mostenire - Constructori
 cand cream o instanta dintr-o clasa derivata
constructorul clasei de baza este de asemenea apelat
 intai constructor clasa baza, apoi constructor clasa
derivata
 Caz1: daca clasa de baza are constructor implicit, atunci
default va fi apelat acesta
 Caz2: daca clasa de baza are doar constructori expliciti,
atunci trebuie specificat in constructorii clasei derivate
ce constructor din clasa de baza se apeleaza
 prin cuvantul cheie base alegem ce constructor din clasa
de baza sa se apeleaze

15
Mostenire – Constructori - Exemple

16
Mostenire – Constructori - Exercitiu
 creati o clasa ElevLiceu derivata din clasa Persoana

 noua clasa va avea o proprietate Liceu de tip string si


o proprietate MedieCapacitate de tip float

 clasa va avea un constructor explicit care primeste ca


parametri nume, prenume, varsta, liceu si
medieCapacitate cu care se vor initializa
proprietatileLiceu si MedieCapacitate; ceilalti 3
parametri vor fi folositi pentru a apela constructorul
explicit din clasa de baza Persoana

17
Mostenire - observatii

 in .NET nu este permisa mosternirea multipla = o


clasa nu poate deriva din mai multe clase parinte;

 in .NET fiecare clasa parinte (care nu deriva din alta


clasa) creata mosteneste clasa System.Object

18
Polimorfism
 al treilea pilon al POO

 polimorfism = mai multe forme

 in POO = capacitatea unei clase de a avea mai multe


forme

19
Polimorfism - exercitiu

 creati un obiect p1 de tip Persoana si instantiati-l ca


fiind un nou Student;
 ce proprietati sunt disponibile pentru obiectul p1?

 creati un obiect p2 de tip Student si instantiati-l ca


fiind un nou Student;
 ce proprietati sunt disponibile pentru obiectul p2?

20
Casting
 conversii dintr-un tip de date in alt tip
 2 tipuri:
 implicite: nicio sintaxa de scris;
• ex: din short in int
• ex: dintr-o clasa derivata intr-o clasa de baza
 explicite (cast); sintaxa de scris
• ex: din int in short (se poate pierde din precizie)
• ex: dintr-o clasa de baza intr-o clasa derivata

 prin (<tip_2>) <obiect_tip_1>


 da exceptie la run-time daca castul nu a reusit
 prin cuvantul cheie as:
<obiect_tip_1> as <tip_2>
 returneaza null daca castul nu a reusit
21
Bibliografie
 https://docs.microsoft.com/en-us/dotnet/csharp/

 https://msdn.microsoft.com/en-us/library/67ef8sbd(v=vs.110).aspx

 https://en.wikipedia.org

 https://stackoverflow.com/

22

S-ar putea să vă placă și