Sunteți pe pagina 1din 18

Programare orientat-obiect (POO)

n Visual Basic .NET















POO n VB.NET



Clas = ablon pentru crearea (instanierea) obiectelor

Obiect = instan a unei clase; toate proprietile i metodele definite la nivelul clasei sunt
preluate de obiectele aferente tipului reprezentat de clas (clasa -> tip de date referin)
Clase & Obiecte
Exemplu
Form
Name
Text
BackColor
WindowState
MaximizeBox
MinimizeBox
Width
Height

Activate ()
Hide ()
Close ()
Show ()




TextBox
Name
Text
Font
ForeColor
Multiline
Width
Height

AppendText (text As String)
Clear ()
Focus ()
SelectAll ()
Hide ()

POO n VB.NET
Clase & Obiecte
- Exemple -



Persoan
Nume
Prenume
DatNatere
Vrst()
Vrst(DatReferin)
AflDat()
SeteazDat(pDat)

Student
Facultate
DatAdmitere

AflDat()
SeteazDat(pDat)

Profesor
GradDidactic
Disciplin
DatDoctorat

AflDat()
SeteazDat(pDat)

POO n VB.NET
Clase & Obiecte
Definie clas: (la nivel de fiier)
[acces] [MustInherit | NotInheritable] [Partial] Class NumeClas
[Inherits NumeClasBaz]
[ instruciuni ]
End Class
acces specificatorul de acces al clasei (Public, Private, Protected, Friend, ProtectedFriend);
n lips se consider a fi Public
MustInherit indic o clas abstract, neinstaniabil direct -> necesit clase derivate pe baza
sa (subclase)
NotInheritable indic o clas nederivabil -> nu poate fi utilizat drept clas de baz ntr-un
arbore de motenire
Partial definiia clasei este incomplet -> mai multe fiiere surs vizeaz aceeai clas
Inherits se folosete n cazul claselor derivate pentru a indica numele clasei de baz
instruciuni definiii ale membrilor clasei (variabile & metode)
POO n VB.NET
Clase & Obiecte
Crearea obiectelor (instaniere): (la nivel de fiier / clas / procedur)
1) Dim numeObj = New NumeClas

2) Dim numeObj As NumeClas
numeObj = New NumeClas

3) Dim numeObj As New NumeClas
fiecare obiect corespunde unui tip de date referin (obiectele sunt stocate n memoria
heap, referinele la obiecte n memoria stack - stiv)
valoarea iniial a unei variabile de tip referin este Nothing (nu este referit nici o
adres din memoria heap)

Public Class Persoana

End Class
POO n VB.NET
Public NotInheritable Class Student
Inherits Persoana

End Class
Public NotInheritable Class Profesor
Inherits Persoana

End Class
Clase & Obiecte
- Exemple -
Private Sub btnTest (...) Handles btnTest.Click
Dim persoana1 = New Persoana
Dim persoana2 As New Persoana
Dim persoana3 As Persoana
persoana3 = New Persoana
persoana2 = persoana3
ambele variabile refera acelasi obiect initial referit de persoana3
obiectul referit iniial de persoana2 nu este inca distrus (rezida in memoria heap)

Dim student1 = New Student
Dim profesor1 = New Profesor

persoana1 = profesor1 conversie implicita cu extinderea domeniului -> intotdeauna acceptata
ambele variabile pointeaza la acelasi obiect (initial referit de profesor1)

student1 = persoana1 conversie implicita cu restrangerea domeniului -> doar pt. Option Strict Off
ambele variabile pointeaza la acelasi obiect (initial referit de persoana1)

End Sub
Persoana.vb
Student.vb
Profesor.vb



POO n VB.NET
Definiie clas: Variabile-membru
Declarare variabile - membru: (la nivel de clas)
[acces] [Shared] [ReadOnly] Dim mAtribut1 [, mAtribut2, mAtribut3 ] [As DataType]
access specificator acces (Public, Private, Protected ); dac nu este indicat, implicit
Private; dac este specificat Dim poate fi omis. Potrivit principiului ncapsulrii, atributele
se declar Private i sunt accesate prin metode speciale (selectori & modificatori)
Shared atributul vizeaz clasa, nu instanele ei (atribut static sau partajat)
ReadOnly valoarea atributului este setat la momentul definirii sale i nu poate fi
modificat
DataType tipul de date al atributului, dup caz, referin / valoare; dac nu este
specificat, implicit Object
Din interiorul clasei -> direct, folosind numele variabilelor
Din exteriorul clasei, dac sunt vizibile:
- numeObj.numeAtribut (atribut la nivel de instan)
- numeClasa.numeAtribut (atribut partajat, la nivel de clas)
Accesarea atributelor:
Public Class Persoana
Private mNume As String
Private mPrenume As String
Private mDataNastere As Date
Public Shared NrPersoane As Short

End Class
POO n VB.NET
Public NotInheritable Class Student
Inherits Persoana
Private mFacultate As String
Private mDataAdmitere As Date

End Class
Clase & Obiecte
- Exemple -
Private Sub btnTest (...) Handles btnTest.Click
Dim persoana1 = New Persoana
Persoana.NrPersoane += 1 variabila publica & partajata incrementata cu 1

persoana.mPrenume = Ana Eroare! mPrenume invizibil in afara clasei Persoana.vb



Dim student1 = New Student este creat un nou student + o noua persoana
Persoana.NrPersoane += 1 variabila publica & partajata incrementata cu 1
student1.mPrenume = Ana Eroare! mPrenume invizibil in afara clasei Persoana.vb
MsgBox (Facultate: & student1.mFacultate)
Eroare! mFacultate invizibil in afara clasei Persoana.vb
End Sub
Persoana.vb
Student.vb



POO n VB.NET
Definiie clas: Metode
Definiie metode: (la nivel de clas)
[acces] [modificatori] [Shared] Sub | Function NumeMetod ([ listParametri ]) _
[Handles listEvenimente]
[ instruciuni ]
[ Exit Sub | Function]
[ instruciuni ]
End Sub | Function
access specificator acces (Public, Private, Protected, Friend, ProtectedFriend); dac lipsete,
implicit Public
modificator indic o anumit caracteristic a metodei:
Overloads (implicit) > n cazul metodelor cu acelai nume, dar cu semnturi diferite
(difer numrul/sau tipul parametrilor)
Overridable > ntr-o clas de baz, corespunde metodelor care pot fi suprascrise ntr-o
clas derivat (aceeai semntur, implementri diferite)
NotOverridable (implicit) > ntr-o clas de baz, corespunde metodelor care nu pot fi
suprascrise ntr-o clas derivat
Overrides (implicit) > ntr-o clas derivat, corespunde metodelor care au aceeai
semntur ca n clasa de baz, dar o implementare diferit
MustOverride > ntr-o clas de baz, corespunde metodelor pentru care a fost indicat
doar semntura, nu i implementarea care va fi furnizat de o clas derivat; o clas care
are cel puin o metod cu acest modificator este clas abstract i trebuie declarat
MustInherit



POO n VB.NET
Shared metoda se refer la clas, nu la instanele ei (metod partajat sau static)
listaParametri argumentele necesare execuiei metodei; cele opionale trebuie precedate
de cuvntul Optional
Definiie clas: Metode
Accesarea metodelor:
Definiie metode: (la nivel de clas)
[acces] [modificatori] [Shared] Sub | Function NumeMetod ([ listParametri ]) _
[Handles listEvenimente]
[ instruciuni ]
[ Exit Sub | Function]
[ instruciuni ]
End Sub | Function
Din interiorul clasei -> direct, folosind numele metodelor
Din exteriorul clasei, dac sunt vizibile:
- numeObj.numeMetoda (metod definit la nivel de instan)
- numeClasa.numeMetoda (metod partajat, la nivel de clas)
Public Class Persoana
Private mNume As String inaccesibila din exteriorul clasei Persoana.vb
Protected mDataNastere As Date accesibila si din eventualele clase derivate

Public Sub SeteazaNume (pNume As String) pentru editarea atributului mNume
If pNume testeaza valoarea pNume: sa nu contina cifre .

mNume = pNume doar daca pNume OK
End Sub

Public Function AflaNume () As String extrage valoarea atributului mNume
Return UCase(Trim(mNume))
End Function

Public Sub SeteazaDataNastere (pDataNastere As Date) modifica data nasterii
mDataNastere = pDataNastere
End Sub

Public Function AflaDataNastere() As Date returneaza data nasterii
Return mDataNastere
End Function

Public Overridable Function AflaData () As Date de asemenea returneaza data nasterii
Return mDataNastere
End Function

Public Overloads Function Varsta () As Byte returneaza varsta
Return Year (Now()) Year (mDataNastere)
End Function
varsta la o anumita data de referinta:
Public Overloads Function Varsta (pDataRef As Date) As Byte
Return Year (pDataRef) Year (mDataNastere)
End Function
End Class
C
l
a
s
e

&

O
b
i
e
c
t
e

/

E
x
e
m
p
l
e

Persoana.vb
(parial)
Public Class Student
Inherits Persoana Student = clasa derivata; Persoana = clasa de baza
Private mFacultate As String inaccesibil din exteriorul clasei Student.vb
Private mDataAdmitere As Date

Public Sub SeteazaFacultate (pFacultate As String) pentru editarea valorii mFacultate
If pFacultate testeaza valoarea pFacultate; Ex. valori acceptate: CIG, MAN
Exit Sub if pFacultate nu e okse poate afisa un mesaj de eroare

mFacultate = pFacultate doar daca pFacultate ok
End Sub

Public Function AflaFacultate () As String citeste valoarea mFacultate
Return UCase(mFacultate)
End Function

Public Sub SeteazaDataAdmitere (pDataAdmitere As Date) editeaza valoarea mDataAdmitere
If pDataAdmitere <= mDataNastere testeaza daca pDataAdmitere valid
mDataNastere e declarat Protected in clasa de baza,
deci este accesibil din orice clasa derivata din Persoana
If Varsta (pDataAdmitere)<=18 functia Varsta, declarata Public in clasa de baza Persoana
este de asemenea accesibila din clasa derivata Student

mDataAdmitere = pDataAdmitere doar daca pDataAdmitere OK
End Sub

Public Overrides Function AflaData () As Date returneaza data admiterii
Return mDataAdmitere
End Function

End Class
C
l
a
s
e

&

O
b
i
e
c
t
e

/

E
x
e
m
p
l
e

Private Sub btnTest (...) Handles btnTest.Click

Dim objPersoana As New Persoana instantiere clasa Persoana
objPersoana.mNume = Popescu Ana Eroare!
mNume = atribut privat (inaccesibil din exteriorul clasei Persoana.vb)
objPersoana.SeteazaNume (Popescu Ana) OK
objPersoana.SeteazaDataNastere (#5/5/1979#) OK
SeteazaNume, SeteazaDataNastere = proceduri publice (accesibile din afara clasei Persoana.vb)

MsgBox (Nume: & objPersoana.mNume & / & Data nastere: & objPersoana.mDataNastere)
Eroare! mNume, mDataNastere = atribute private
MsgBox ( Nume: & objPersoana.AflaNume () & vbCrLf & _
Data nastere: & objPersoana.AflaDataNastere() & vbCrLf &
Varsta actuala: & objPersoana.Varsta() & vbCrLf &
Varsta la 1 Octombrie 2008: & objPersoana.Varsta (#10/1/2008#) )
OK: AflaNume, AflaDataNastere, Varsta = metode publice

Dim objStudent = New Student
membrii publici ai unei clase se aplica instantelor clasei respective (ex: Persoana)
si instantelor claselor derivate (ex: Student)
objStudent.SeteazaNume (Ionescu Ion)
objStudent.SeteazaDataNastere (#10/3/1982#)
objStudent.SeteazaFacultate (CIG)
objStudent.SeteazaDataAdmitere (#10/1/2007#)
MsgBox (Nume student: & objStudent.AflaNume() & Varsta: & objStudent.Varsta() )

functii definite intr-o clasa de baza si suprascrise de o clasa derivata -> consecinta: polimorfism
Dim msg As String = Persoana & objPersoana.AflaNume() & Data nastere: & _
objPersoana.AflaData()
msg &= vbCrLf
msg &= Student & objStudent.AflaName() & Data admitere: & objStudent.AflaData()
MsgBox (msg)
End Sub
C
l
a
s
e

&

O
b
i
e
c
t
s

/

E
x
e
m
p
l
e

Constructori metode (numite New) utilizate la crearea obiectelor (instaniere); dac lipsesc,
generate automat la compilare
Destructori metode utilizate la distrugerea obiectelor (eliminarea din memorie); metoda
Finalize() este automat apelat pentru obiectele ctre care nu mai exist referine valide prin
componenta GarbageCollector; tergerea unei referine: numeObiect =Nothing
POO n VB.NET
Public Class Persoana
Private mNume As String
Protected mDataNastere As Date
Public Shared NrPersoane As Short

Public Sub New () constructor supraincarcat
mNume =
mDataNastere = Now()
NrPersoane += 1
End Sub

Public Sub New (pNume As String, pDataNastere As Date)
mName =
If pDataNastere testata validitatea pDataNastere
mDataNastere = pDataNastere daca pDataNastere ok
NrPersoane += 1
End Sub

End Class
Private Sub btnTest (...) Handles btnTest.Click
Dim objPersoana1 As New Persoana ()
Dim objPersoana2 As New Persoana (Ionescu Ana, #3/3/1990# )
MsgBox (Numar persoane: & Persoana.NrPersoane) 2 persoane
objPersoana1 = Nothing
eliminata referinta catre objPersoana1 obiectul nu e inca distrus
MsgBox (Nr. persoane: & Persoana.NrPersoane) 2 persoane
End Sub
Definiie clas: Constructori & Destructori
Selectori metode utilizate pentru citirea valorilor variabilelor private, din exteriorul clasei
Modificatori metode utilizate pentru editarea valorilor variabilelor private, din exteriorul clasei
Selectorii & modificatorii fiecrei variabile sunt definii folosind structuri PropertyEnd Property:
POO n VB.NET
[acces] [ReadOnly | WriteOnly] Property NumeProprietate ([ listParameri ]) _
As [tipDateReturnat]
[ [acces] Get
[ instruciuni ]
End Get ]

[ [access] Set (ByVal ValoareNou As DataType [listParamerii])
[ instruciuni ]
End Set ]
End Property
access specificator acces (Public, Private, Protected ); dac lipsete, implicit Public
ReadOnly variabila poate fi doar citit, nu i modificat -> doar componenta Get, nu i Set
WriteOnly variabila poate fi doar modificat, nu i citit -> doar componenta Set, nu i Get
listaParametri - Necesari n cazul operaiilor de editare
ValoareNou nume generic care corespunde parametrului care furnizeaz valoarea ce va fi
utilizat la modificarea variabilei privare ce urmeaz a fi modificat prin componenta Set a
proprietii publice
tipDateReturnat tipul de date al valorii returnate de componenta Get; n mod normal, identic cu
cel al parametrului ValoareNou i cu cel al variabilei private accesat prin Get & Set
Definiie clas: Selectori & Modificatori
Selectorii & Modificatorii permit accesul la atributele private ale obiectelor din exteriorul clasei de
care acestea aparin (n mod normal inaccesibile, datorit ncapsulrii) ntr-o manier controlat i
totodat simplificat -> nu funcii/proceduri standard, ci perechi proprietate-valoare
numeObiect.ProprietatePublic = valoare opereaz Set -> modificarea valorii unui atribut privat
oVariabila = numeObiect.ProprietatePublic opereaz Get -> citirea valorii unui atribut privat
POO n VB.NET
Public Class Persoana
Private mNume As String
Private mDataNastere As Date
Public Sub New (pNume As String, pDataNastere As Date)
If testeaza validitatea pDataNastere & pNume
mNume = pNume doar daca pNume ok
mDataNastere = pDataNastere doar daca pDataNastere ok
End Sub
Public Property Nume () As String
Get
Return mNume
End Get
Set (ByVal Value As String)
If Value testeazaValue (lungime, caractere text)
mNume = Value doar daca Value ok
End Set
End Property
Public ReadOnly Property DataNastere () As Date no exista Set
Get
Return mDataNastere
End Get
End Property
End Class

Private Sub btnTest (...) _
Handles btnTest.Click
Dim s As String = Ionescu Ana
Dim d As Date = #4/6/1980#
Dim objPersoana = New Persoana(s,d)

MsgBox (objPersoana.mName)
Eroare, mNume = membru privat

objPersoana.Nume = Popescu Ana
opereaza Set

objPersoana.DataNastere = #1/1/1981#
Eroare! DataNastere nu poate fi editat

MsgBox (Nume: & _
objPersoana.Nume & _
vbCrLf & _
Data nastere: & _
objPersoana.DataNastere)
opereaza Get; rezultate:
Nume: Popescu Ana
Data nastere: 4/6/1980
End Sub
Definiie clas: Selectori & Modificatori
Form1.vb
Me refer obiectul curent (al crui cod este executat); Ex: n fiierul care conine codul
asociat cu un anumit formular, Me desemneaz instana activ a formularului respectiv.
Proprietile i metodele instanei curente vor fi accesate astfel:
Me.NumeProprietate or Me.NumeMetod ([ listaParametri ])


MyBase refer clasa de baz a obiectului curent -> valabil doar pentru instanele claselor
derivate; se folosete de regul la definirea constructorului clasei derivate. Constructorii nu
sunt motenii de la clasa de baz -> pentru ca la instanierea unei clase derivate s se
execute codul constructorului clasei de baz, constructorul derivatei trebuie s includ
instruciunea: MyBase.New ([ listParametri ])


With numeObiect End With alternativ la scrierea numelui obiectelor pentru
accesarea atributelor i metodelor acestora; n interiorul structurii With End With obiectul
desemnat prin numeObiect se consider a fi implicit, astfel c nu mai este nevoie de indicarea
sa, iar proprietile i metodele aferente pot fi accesate doar prin tastarea caracterului . ->
nu mai e nevoie s se utilizeze numele obiectului ca prefix


POO n VB.NET
Obiecte & Clase / Cuvinte rezervate
Obiecte & Clase
- Exemple -
Private Sub btnTest (...) Handles btnTest.Click
Dim objStudent As Student
Dim sNume As String = Popa Dan
Dim sData As String = #10/1/2006#
objStudent = New Student (sNume, sData, _
CIG,1)
With objStudent
.Nume = Ionescu Dan Eroare! read-only
.Facultate = FABBV transfer facultate
.AnStudiu = 2 promovare an
End With

End Sub
Public Class Persoana
Private mNume As String
Private mDataNastere As Date
Public Sub New (pNume As String, pDataNastere As Date)
If valideaza pDataNastere & pNume
mNume = pNume doar daca pNume ok
mBirthDate = pBirthDate daca pDataNastere ok
End Sub
Public ReadOnly Property Nume As String
Return mNume
End Property
Public ReadOnly Property DataNastere As Date
Return mDataNastere
End Property
End Class
Public NotInheritable Class Student
Inherits Persoana
Private mFacultate As String
Private mAnStudiu As Byte
Public Sub New (pNume As String, pDataNastere As Date, _
pFacultate As String, pAnStudiu As Byte)
controlul executiei e transferat in clasa de baza :
MyBase.New (pNume, pDataNastere)
mFacultate = pFacultate similar: Me.mFacultate = pFacultate
mAnStudiu = pAnStudiu
End Sub
Public Property Facultate As String
Get pentru citire mFacultate & Set pentru editare mFacultate
End Property
Public Property AnStudiu As Byte
Get pentru citire mAnStudiu & Set pentru editare mAnStudiu
End Property
End Class

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