Sunteți pe pagina 1din 27

Unitatea de învăţare 4 PROGRAMAREA ÎN VB.

NET
_________________________________________________________________________________________________________________

UNITATEA DE ÎNVĂŢARE 4

PROGRAMAREA ÎN VB.NET
___________________________________________________________________________
Cuprins

Obiectivele unităţii de învăţare 4

4.1. Implementarea claselor în VB.NET

Definirea claselor
Definirea atributelor
Definirea metodelor
Constructori
Destructori
Proprietăţi
Întrebări

4.2. Moştenirea în VB.NET

Construirea ierarhiei de clase


Polimorfismul
Clasa Object
Întrebări

4.3. Lucrul cu obiecte în VB.NET

Definirea obiectelor
Manipularea obiectelor prin referinţe
Structura With … End With
Finalizarea obiectelor
Întrebări

Bibliografie Unitatea de învăţare 4

1
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

OBIECTIVELE UNITĂŢII DE ÎNVĂŢARE 4

 Însuşirea cunoştinţelor necesare pentru a înţelege noţiunile de soluţie, proiect şi


aplicaţie.
 Cunoaşterea caracteristicilor platformei .NET Framework, a provocărilor
induse de globalizarea programării în Internet şi soluţiile de unificare adoptate.
 Definirea conceptului de tip de dată, înţelegerea tipurilor de date, a modului de
comparare şi copiere.
 Însuşirea unităţilor lexicale în VB.NET şi a deprinderilor de utilizare corectă a
lor.
 Însuşirea principalelor instrucţiuni declarative şi de control implementate în
VB.NET.
 Cunoaşterea principalelor categorii de funcţii de sistem (intrinseci) implementate
în VB.NET.
 Definirea şi apelul subprogramelor definite de utilizator.

4.1. Implementarea claselor în VB.NET

 Definirea claselor

Pentru a proiecta (a construi, a genera, a defini) o nouă clasă în VB.NET, pentru aplicaţii
Windows, se procedează astfel:
 Pentru generarea unei clase independente
 se selectează opţiunile de meniu File, New Project…, ;
 se selectează din caseta New Project (Tipul proiectului): Visual Basic, Windows

 se selectează din casete Templates (modele), Class Library;

2
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

 se schimbă Name (nume) din ClassLibrary1 în numele stabilit de noi (exemplu


Persoana);
 se apasă pe butonul OK;
 va fi generată în fereastra de cod structura predefinită a clasei
Public Class Class1

End Class

 unde vom înlocui numele clasei din Class1 în numele dat de noi de (exemplu
Persoana)
Public Class Persoana

End Class

 Pentru generarea unei clase în cadrul clasei Form


 se selectează opţiunile de meniu File, New Project…, ;
 se selectează din caseta New Project (Tipul proiectului): Visual Basic, Windows

3
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

 se selectează din casete Templates (modele), Windows Forms Application;

 se schimbă Name (nume) din WindowsApplication1 în numele stabilit de noi


(exemplu AplicatiaU4);
 se apasă pe butonul OK;
 va fi generată în fereastra de cod structura predefinită a clasei;
Public Class Form1

End Class
 pe care este bine pentru început s-o lăsăm aşa;
 în cadrul clasei Form1 vom construi propriile clase de exemplu, clasa Persoana
Public Class Form1

Public Class Persoana

End Class

End Class

4
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

Tot ceea ce introducem între Class nume clasă şi … End Class reprezintă noua clasă. În
cadrul clasei Form1 putem genera mai multe clase:
Public Class Form1

Public Class Persoan

End Class

Public Class Student

End Class
End Class

Forma generală de definire a unei clase va fi dată de sintaxa:


[acces][MustInherit/NotInheritable][Partial] Class numeClasa
[Inherits numeClasaBaza]
[Implements numeInterfata]
[Instructiuni]
End Class
Unde:
-acces – precizează nivelul de acces (de protecţie) al clasei: Public, Protected, Friend, Private,
ProtectedFriend
- MustInherit [\in-’her-ət, -’he-rət\] – indică o clasă abstractă

- NotInheritable [\in-’her-ə-tə-bəl, -’he-rə-\] – clasa nu poate fi derivabilă


- Partial [\’pär-shəl\] – clasă definită incomplet

- Inherits – precizează clasa de bază de la care se moştenesc atributele şi metodele


- Implements [\’im-plə-mənt\] – clasa implementează o interfaţă (o clasă abstractă pură, fără
atribute şi cu metodele definite doar prin semnătură (numele metodei şi parametrii), fără
corp)
- Instructiuni – definesc membrii clasei (atributele, câmpurile, constantele, proprietăţile şi
metodele)

 Definirea atributelor

Atributele sau câmpurile se definesc sub forma unor variabile, după sintaxa:

[acces] [Shared][ReadOnly] Dim ListaAtribute

5
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

Unde:
 - acces – precizează nivelul de acces (de protecţie) al atributelor: Public, Protected,
Friend, Private, ProtectedFriend; Pentru a se implementa încapsularea la nivelul
clasei, atributele trebuie să fie invizibile din exterior, deci vor fi declarate cu Private.
Accesarea atributelor protejate se va putea face din exterior doar indirect prin
intermediul metodelor de tip selector (pentru citire) şi a metodelor de tip modificator
(pentru scriere)
 - Shared – indică un atribut de nivel clasă (static) nu instanţă, care este utilizat
(partajat) la nivelul clasei nu la nivelul unui obiect
 - ReadOnly – semnifică un atribut a cărui valoare poate fi setată (modificată) numai la
definirea sa sau în cadrul constructorului clasei (la instanţierea unui obiect)
 -Dim – este echivalent cu Private (dacă utilizăm un calificator de acces nu vom mai
utiliza Dim)
 - ListaAtribute – lista cu atributele definite (denumirea atributelor încapsulate este de
preferat să fie precedate de m_)
Atributele la nivelul clasei sunt referite astfel:
numeClasa.numeAtribut
Dacă atributul apare în partea stângă a unei expresii:
numeClasa.numeAtribut =
atunci i se atribuie o valoare.
Dacă atributul apare în partea dreaptă a unei expresii:
= numeClasa.numeAtribut
atunci i se citeşte valoarea (valoarea atributului va fi atribuită elementului din stânga
semnului egal).

 Definirea metodelor

În VB.NET metodele sunt proceduri sau funcţii încorporate în clase care programează
comportamentul dinamic al obiectelor instanţiate din clasa respectivă; o metodă poate accesa
orice atribut şi poate apela orice altă metodă a clasei indiferent de calificatorul de acces al
acesteia; variabilele şi constantele declarate la nivelul unei metode sunt valabile (accesibile,
vizibile) numai în interiorul acesteia
Metodele se definesc prin sintaxa:

6
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

[acces][modificator][Shared] Sub/Function numeMetoda _


([listaParam]) [Implements MetodeImplementate / Handles
listaEvenimente]

[instrucţiuni1]

[Exit Sub/Function]

[instrucţiuni2]

End Sub/Function
Unde:
 - acces – precizează nivelul de acces (de protecţie) al metodelor: Public, Protected,
Friend, Private, ProtectedFriend

 -modificator descrie o caracteristică a metodei şi poate lua valorile:

 Overloads [\’lōd\] – indică o metodă supraîncărcată (o metodă care are aceeaşi


denumire cu o altă metodă din clasă, dar conţine un număr diferit de parametrii).
Clauza este opţională, deoarece orice metodă în VB.NET poate fi supraîncărcată

 Overrides [\’rīd\]– (într-o clasă derivată) precizează o metodă ce rescrie o metodă cu


aceeaşi denumire din clasa de bază. Deşi este o clauză implicită, deoarece orice
metodă în VB.NET poate fi rescrisă, clauza este bine să fie utilizată

 Overridable [\’rī-də-bəl\ ]– (într-o clasă de bază) indică o metodă ce poate fi rescrisă


în clasele derivate. Dacă se permite rescrierea în clasele derivate atunci clauza este
obligatorie (nu implicită)

 NotOverridable – (într-o clasă de bază) indică o metodă ce NU poate fi rescrisă în


clasele derivate. Clauza este implicită, adică, dacă nu se precizează explicit prin
Overridable că o metodă poate fi rescrisă atunci automat (implicit) ea nu poate fi
rescrisă, chiar dacă nu se precizează în mod expres aceasta prin NotOverridable

 MustOverride - (într-o clasă de bază) defineşte o metodă ce nu este implementată în


clasa curentă şi care trebuie rescrisă în clasele derivate pentru a putea fi utilizată.
Clasa ce conţine cel puţin o metodă de acest tip (adică o metodă neimplementată –
fără corp) se numeşte clasă abstractă

 Shared – defineşte o metodă care se aplică (se utilizează) la nivel de clasă nu de


instanţă

 listăParametrii – conţine dacă este cazul, lista parametrilor de care metoda are nevoie
pentru execuţie. Dacă un parametru va fi precedat de cuvântul rezervat Optional
atunci acesta este opţional şi când nu este precizat la apel se va folosi o valoare
implicită definită pentru el

7
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

 metodeImplementate – descrie toate metodele altei clase implementate de metodă


(interfaţă sau clasă abstractă pură)

 listăEvenimente – conţine un set de evenimente, la a căror apariţie metoda este


executată automat

 Constructori

În VB.NET un constructor este o procedură cu numele New() care este invocat şi utilizat la
instanţierea unei clase (la crearea unui obiect). O clasă VB.NET poate avea zero sau mai
mulţi constructori. Dacă programatorul nu defineşte nici un constructor atunci compilatorul
va genera unul implicit.
Constructorii se definesc prin sintaxa:
[Public Sub New ([listaParam])

[instrucţiuni]

End Sub]
În momentul în care este instanţiat un obiect dintr-o clasă, prima metodă care se execută este
constructorul New(). Astfel există posibilitatea ca unui obiect să-i fie stabilită o stare iniţială
în momentul în care este instanţiat, prin supraîncărcarea constructorului New(), definind mai
mulţi constructori care diferă prin numărul parametrilor utilizaţi.
Supraîncărcarea constructorilor are avantajul că oferă utilizatorului mai multe interfeţe
distincte din punct de vedere al funcţionalităţii, putând instanţia obiecte în funcţie de valorile
cu care dorim să le iniţializăm şi în funcţie de datele pe care le avem la dispoziţie.
Constructorii când se execută se comportă ca orice altă procedură (subrutină):
 - poate apela instrucţiuni predefinite;

 - poate apela alte proceduri la care are acces;

 - poate apela chiar şi un alt constructor din lista constructorilor definiţi în cadrul
clasei.

O clasă VB.NET poate avea zero sau mai mulţi constructori. Dacă programatorul nu defineşte
nici un constructor atunci compilatorul va genera unul implicit. O instanţiere a clasei derivate
(copil) trebuie să conţină o instanţiere a clasei de bază (părinte) de aceea prima linie din
constructorul clasei derivate, trebuie să fie: MyBase.New ([listăParametrii]) care va instanţia
clasa de bază (MyBase – referă clasa de bază; Me – referă obiectul curent (inţanţa curentă)).

 Destructori

8
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

Destructorii sunt metode pentru ştergerea (eliminarea) obiectelor din memorie. În VB.NET,
eliberarea memoriei alocate unui obiect iniţializat cu New() se face automat din momentul în
care nu mai există nici o referinţă la obiectul respectiv. O referinţă la un obiect este anulată
dacă i se atribuie valoarea Nothing:
variabilaReferinta= Nothing

Deşi operaţia de eliberare efectivă a memoriei nu se face sub controlul programului, ci se


realizează exclusiv din iniţiativa Colectorului de gunoaie (Garbage Collection - GC), ea poate
fi grăbită prin utilizarea metodei Collect() din clasa GC, care are rolul de a determina
începerea procesului de scanare a memoriei în vederea identificării obiectelor nefolositoare
(fără referinţe active).

 Proprietăţi

Selectorii şi modificatorii reprezintă metodele specifice unei clase destinate redării (citirii)
valorilor unor atribute protejate – selectorii şi actualizării (scrierii/setării) valorilor unor
atribute protejate – modificatorii. Selectorii şi modificatorii asigură accesul controlat asupra
datelor stocate în atributele protejate şi permite oferirea posibilităţii definirii unor reguli
(condiţii) de validare a datelor la scriere. Selectorii şi modificatorii în VB.NET sunt
implementaţi prin structura Proprietate (Property) cu două secţiuni: Get pentru selector
(citire); Set pentru modificator (scriere).
Structura Property are sintaxa:
[acces][ReadOnly/WriteOnly] Property nume ([Lista parametrii]) [As
tipRezultat]

[acces] Get

[instructiuni]

End Get

[acces] Set (ByVal nouaValoare As tipDate [, listaParametrii])

[instructiuni]

End Set

End Property
Unde:

9
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

 acces – precizează nivelul de acces (de protecţie) al atributelor: Public, Protected,


Friend, Private, ProtectedFriend;

 ReadOnly – proprietatea poate fi numai citită

 WriteOnly – proprietatea poate fi numai scrisă

 nouaValoare – este valoarea care va fi atribuită proprietăţii protejate

 listaParametrii – parametrii necesari la atribuire

 tipRezultat – tipul rezultatului furnizat la citire (este de acelaşi tip cu tipul


parametrului nouaValoare)

 Întrebări

1. Precizaţi cum poate fi generată o clasă în VB.NET (o clasă independentă, în cadrul clasei
Form).
2. Care este forma generală de definire a unei clase în VB.NET?
3. Cum se defineşte o clasă abstractă, dar o clasă închisă, care nu poate fi derivată?
4. Care este prima instrucţiune care trebuie precizată într-o clasă copil (clasă derivată)?
5. Cum trebuie declarat un atribut pentru a se implementa încapsularea VB.NET?
6. Ce se înţelege prin atribut static sau Shared?
7. Cum se realizează atribuirea unei valori a unui atribut dar citirea valorii acestuia?
8. Unde poate fi accesată o metodă Friend dar o metodă Protected?
9. Cum se precizează că o metodă este supraîncărcată?
10. Cum se precizează că o metodă din clasa de bază nu poate fi suprascrisă?
11. Cum se defineşte o metodă abstractă în VB.NET?
12. Ce sunt constructorii?
13. Cum se realizează supraîncărcarea constructorilor în VB.NET?
14. Cum poate fi grăbită eliminarea din memorie a obiectelor care nu mai sunt necesare?
15. Ce sunt proprietăţile şi cum sunt ele implementate în VB.NET?

3.2. Moştenirea în VB.NET

 Construirea ierarhiei de clase

Unul dintre punctele forte ale modelului obiectual, pe lângă încapsularea atributelor şi
metodelor, îl reprezintă conceptul de moştenire, care presupune specializarea claselor într-o
ierarhie bine definită.

10
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

Prin moştenire se înţelege o caracteristică a clasei derivate (secundare/copil) de a moşteni


toate atributele (proprietăţile) şi metodele clasei de bază (supraclasă/părinte). Singurele
elemente care nu se moştenesc sunt constructorii.
În VB.NET se acceptă doar moştenirea simplă (adică o clasă derivată moşteneşte doar
caracteristicile unei singure clasă de bază – clasa copil moşteneşte doar un părinte) şi se
implementează prin comanda: Inherits numeClasăDeBază care trebuie să fie prima linie din
clasa derivată.
Deci în VB.NET se acceptă un arbore ierarhic de tipul:

Dar nu se acceptă un arbore de moştenire de tipul:

Pentru construirea ierarhiei de clase (vezi şi 2.5) se procedează astfel:


 se analizează ce au clasele în comun;
 se abstractizează caracteristicile comune care se extrag şi se pun într-o nouă clasă
(clasă de bază);

11
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

 se leagă clasele analizate (clase derivate) la noua clasă (clasă de bază) printr-o relaţie
de moştenire. Termenul tradiţional pentru a exprima astfel de relaţii între clase de
obiecte este ” IS A” (este o / este un).
Dacă apar cerinţe suplimentare se poate proiecta o nouă clasă (clasa derivată, secundară sau
copil), care derivă din clasa de bază (sau părinte), care va moşteni caracteristicile acesteia,
căreia îi putem adăuga atribute şi metode noi, sau putem să rescriem anumite metode pe care
le moşteneşte conform noilor cerinţe.
Implementarea moştenirii în VB.NET presupune:
 se declară şi se defineşte clasa părinte;
 se declară clasa-copil ca moştenind clasa-părinte (prin folosirea cuvântului-cheie
Inherits);
 se definesc atributele şi metodele specifice clasei-copil.
Arborele de moştenire poate fi vizualizat în VB.NET cu ajutorul utilitarului Class View
(View, Other Windows, Class View – din meniul principal), care înlocuieşte fereastra
Solution Explorer cu fereastra Class View.

 Polimorfismul

În VB.NET polimorfismul este implementat:


 În cadrul aceleiaşi clase prin supraîncărcarea unei metode
Pentru supraîncărcarea unei metode se procedează astfel:
 Se mai construieşte o metodă (se mai defineşte o funcţie sau o procedură) cu acelaşi
nume cu al altei proceduri, dar în mod obligatoriu aceasta trebuie să aibă o listă de
parametri şi numărul acestora trebuie să difere de al oricărei metode cu acelaşi nume
existent în cadrul respectivei clase;
 Opţional la definirea acestei noi metode putem folosi calificatorul: Overloads
(supraîncărcare), care este implicit;
 Se modifică prelucrarea care se va realiza, ţinându-se cont şi de noii parametri definiţi
în lista de parametri;

 În cadrul clasei derivate (copil) prin rescrierea (suprascrierea) unei metode


In cazul suprascrierii metodele părinte şi copil au acelaşi nume şi aceeaşi listă de parametrii
(număr, ordine şi tip), dar diferă prelucrările (se modifică funcţionalitatea metodei). Pentru
implementarea polimorfismului într-o ierarhie de clase se procedează astfel:

12
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

 Definirea metodei în clasa părinte trebuie să fie precedată de calificatorul:


Overridable – care precizează că metoda poate fi rescrisă în clasele derivate. În cadrul
metodelor abstracte, acestea vor fi precedate calificatorul: MustOverride – prin care se
defineşte o metodă ce nu este implementată în clasa curentă şi care trebuie rescrisă în
clasele derivate pentru a putea fi utilizată ;
 Definirea metodei în clasa copil trebuie să fie opţional precedată de calificatorul:
Overrides – care precizează o metodă ce rescrie o metodă cu aceeaşi denumire din
clasa de bază;

 Clasa Object

Ierarhia de clase în VB.NET are clasa Object la baza tuturor claselor (părintele comun al
tuturor claselor). Clasa Object are implementate următoarele metode:

Aşa cum se constată în imaginea precedentă ne-am folosit de instrumentul Object Browser,
opţiunile: View, Object Browser din meniul principal. În cadrul spaţiului de nume System am
căutat clasa Object, care este selectată în panoul din stânga. Observăm că în panoul din
dreapta sus sunt prezentate metodele clasei, iar în panoul dreapta jos, este descrisă clasa
Object (selecţia curentă). Din descrierea clasei rezultă că aceasta este baza tuturor claselor în
VB.NET şi este singura clasă care nu are părinţi.

13
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

Dacă vom selecta fiecare metodă a clasei, vom avea în panoul din dreapta jos o descriere
destul de practică a acesteia. De exemplu metoda ToString:

Returnează un şir de caractere ce descrie obiectul curent (numele obiectului curent)


La fel metodele:
 Equals: determină dacă două obiecte sunt identice. După cum constatăm metoda
Equals este supraîncărcată. Atunci când are un parametru, metoda este o metodă de
instanţă şi practic se compară obiectul curent cu cel transmis ca parametru. Atunci
când metoda are doi parametri, aceasta este metodă statică (Shared) şi compară dacă
cele două obiecte transmise ca parametru sunt identice;

14
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

 Finalize: metodă protejată, poate fi rescrisă şi se utilizează pentru a îndeplini o ultimă


dorinţă obiectului înainte de a fi şters din memorie. Este ultima metodă invocată de
colectorul de gunoaie GC, înainte de a fi şters. De regulă grupează instrucţiuni de
salvare, ştergere rezultate temporare şi închideri de fişiere;
 GetHashCode: returnează un cod numeric întreg care reprezintă valoarea obiectului
(identificatorul obiectului);
 GetType: returnează o instanţă a clasei System.Type, care este utilizată pentru a obţine
informaţii despre obiecte prin intermediul metadatelor;
 MemberwiseClone: creează o copie superficială a obiectului;
 ReferenceEquals: specifică dacă două obiecte referă acelaşi obiect.

 Definirea claselor utilizator

Pentru ierarhia de clase prezentate anterior vom defini la nivelul claselor următorii membrii:
Clasa Animal:
- proprietăţi:
- greutate: privat, real simplă precizie
- culoare: privat, şir de caractere
- metode:
- respira: concret
- dorm: concret
-mananca: abstract
Clasa Feline:
- proprietăţi:
-ghiareCuPernute: privat, sir de caractere
- metode:
- vanează: abstract
- sefuriseaza: concret
Clasa Canine:
- proprietăţi:
-ghiareFaraPernute: privat, sir de caractere
- metode:
- Vanează: abstract
- SeStrangInHaita: concret

15
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

Clasa Hipopotam:
- proprietăţi:
-copita:privat, sir de caractere
- metode:
- mananca: concret
- SeBalaceste: concret

Clasa Pisica:
- proprietăţi:

- metode:
- mananca: concret
- vaneaza: concret
- toarce: concret
Clasa Lup:
- proprietăţi:
- metode:
- vaneaza: concret
- urla: concret
O implementare parţială ar presupune:

'definirea unei clase abstracte de baza

Public MustInherit Class Animal


'definirea atributelor (proprietatilor) locale
Private m_greutate As Single
Private m_culoare As String
'utilizarea selectorilor si modificatorilor
Public Property greutate() As Single
'citire
Get
greutate = m_greutate
End Get
'scriere
Set(ByVal nouaGreutate As Single)
m_greutate = nouaGreutate
End Set
End Property
Public Property culoare() As String
Get
culoare = m_culoare
End Get
Set(ByVal value As String)
m_culoare = value
16
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

End Set

End Property
'definirea metodelor
'metoda concreta
Public Sub Respira()
MsgBox("Inspira si expira")
End Sub
'metoda concreta
Public Sub Doarme()
MsgBox("Puf..., pufff")
End Sub
'metoda abstracta
Public MustOverride Sub Mananca()

'urmeaza

End Class

'definirea unei clase abstracte derivate


Public MustInherit Class Feline
'definirea clasei de baza (parinte)
Inherits Animal
'dfinire atribute
Private m_ghiareCuPernute As String
'definire selectori si modificatori
Public Property ghiareCuPernute() As String
Get
ghiareCuPernute = m_ghiareCuPernute
End Get
Set(ByVal value As String)
m_ghiareCuPernute = value
End Set
End Property
'definirea metodelor
'metoda abstracta
Public MustOverride Sub Vaneaza()
'metoda concreta

Public Sub SeFuriseaza()


MsgBox("Pâş..pâşşşş..")

End Sub

End Class

'Definirea unei clase derivate concrete

Public Class Pisica

'Definirea clasei parinte


Inherits Feline
'Definire meta proprie
Public Sub Toarce()
MsgBox("Sfârr..sfâr")
17
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

End Sub
'Rescrierea metodei clasei Animal
Public Overrides Sub Mananca()
MsgBox("Roanţ..roanţţââ")

End Sub
'Rescrierea metodei clasei Feline
Public Overrides Sub Vaneaza()
MsgBox("Zdup..")
End Sub
End Class

 Întrebări
1. Ce se înţelege prin moştenire?
2. Ce fel de moştenire se acceptă în VB.NET?
3. Precizaţi principalii paşi care trebuie parcurşi pentru construirea unui arbore de moştenire.
4. Cum se implementează polimorfismul în VB.NET?
5. Care sunt principalele metode ale clasei Object şi ce returnează?

3.3. Lucrul cu obiecte în VB.NET

 Definirea obiectelor

Obiectele în VB.NET sunt definite prin instanţierea claselor care presupune:


a) definire
[acces] numeObiect As numeClasa
şi
b) iniţializare
numeObiect = New numeClasa
sau
c) definire cu iniţializare
[acces] numeObiect As New numeClasa
Efectul este că în stivă se va aloca o zonă de memorie de 4 octeţi care are denumirea
numeObiect şi în această zonă de memorie se va înregistra (memora) adresa (referinţa) din
zona de memorie heap (gramadă) de unde începe memoria alocată pentru obiect (spaţiul
alocat memomorării membrilor obiectului). La utilizarea doar a instrucţiunii: [acces]
numeObiect As numeClasa – în zona de referinţă va fi memorat Nothing. Adresa efectivă va
fi memorată doar la utilizarea constructorului New care alocă spaţiul necesar în heap.

18
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

 Manipularea obiectelor prin referinţe

După definirea şi iniţializarea obiectelor, membrii acestora pot fi utilizate prin numele
variabilei de referinţă la obiect:
 NumeObiect.NumeMetota;
sau
 NumeObiect.NumeAtribut;
Exemplu: vom genera obiectul PisicaMea
Public Class Form1
'definirea obiectului PisicaMea
Dim PisicaMea As New Pisica

Private Sub Button1_Click(ByVal sender As Object, ByVal e As


System.EventArgs) Handles Button1.Click
PisicaMea.
End Sub
End Class

Metodele şi proprietăţile disponibile vor fi:

 Structura With … End With

Membrii (atributele şi metodele) unui obiect pot fi accesaţi mai comod prin utilizarea
structurii With … End With care permite în interiorul structurii în loc să folosim:

19
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

numeObiect.numeMetodă sau numeObiect.numeAtribut să folosim .numeMetodă sau


.numeAtribut.
Exemplu:

With numeObiect

.atribut1

.atribut2

.metoda1

.metoda2

End With
Este echivalent cu:

numeObiect.atribut1

numeObiect.atribut2

numeObiect.metoda1

numeObiect.metoda2
Notă
De asemenea pentru o utilizare generică putem utiliza Me (care desemnează obiectul curent) şi
My Base (care desemnează clasa părinte).

 Durata de viaţă a obiectelor

Obiectele vor exista cât timp variabila referinţă din stivă este vizibilă (utilizabilă) sau până
când obiectul va fi distrus.
Pentru a înţelege durata de viaţă a obiectelor vom proceda astfel:
considerăm clasa DoarPrenume cu următoarea structură
Public Class DoarPrenume
Public prenume As String
'Constructor supraincarcat
Public Sub New(ByVal noulPrenume As String)
prenume = noulPrenume
MsgBox("Am initializat obiectul: " & noulPrenume)
End Sub
End Class

-la evenimentul click pe Button4:

20
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

Private Sub Button4_Click(ByVal sender As Object, ByVal e As


System.EventArgs) Handles Button4.Click
'pasul a
'definire obiecte
Dim Prenume1 As DoarPrenume
Dim Prenume2 As DoarPrenume
'initializare obiecte
Prenume1 = New DoarPrenume("Veronica")
Prenume2 = New DoarPrenume("Cristina")
'pasul b
'afisarea continutului obiectelor
MsgBox("Obiectul1 contine: " & Prenume1.prenume)
MsgBox("Obiectul2 contine: " & Prenume2.prenume)
'pasul c
Prenume2 = Prenume1
'afisarea continutului obiectelor
'pasul d
MsgBox("Obiectul1 contine: " & Prenume1.prenume)
MsgBox("Obiectul2 contine: " & Prenume2.prenume)

End Sub

-pasul a): vom crea obiectele: Prenume1 pentru ”Veronica” şi Prenume2


pentru ”Cristina”

-pasul b): vom lista conţinutul obiectelor (ne convingem că ele există)

-pasul c): vom atribui lui Prenume2 adresa memorată în Prenume1


Prenume2 = Prenume1

-pasul d): reafişarea conţinutului obiectelor. Vom constata că atât


obiectul Prenume1 cât şi obiectul Prenume2 vor afişa aceelaşi prenume
”Veronica” (practic obiectul Prenume2 nu mai poate fi referit (accesat))

Obiectul Prenume2 nu mai există logic (nu mai poate fi accesat). El fizic
un timp poate să mai existe (mai ocupă un spaţiu în memorie până când:
garbage collector-ul îl şterge din memorie)
Pentru a înţelege mecanismele duratei de viaţă a obiectelor, vom încerca să dăm răspuns la
următoarele întrebări:

21
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

I1) Ce se întâmplă dacă ştergem invalidăm referinţa de la adresa


obiectului Prenume1?

-dacă invalidăm referinţa de la adresa obiectului Prenume1 cu:


Prenume1 = Nothing

Evident că prin referinţa Prenume1 nu mai avem acces la obiectul nostru


(nu mai avem adresa de acces la membrii acestuia) şi vom primi un
mesaj de eroare:

I2) Ce se întâmplă cu obiectul Prenume1 în acest caz, mai există


sau nu mai există?

-surprinzător acesta mai există, deoarece mai există o referinţă vizibilă


către acesta şi anume referinţa Prenume2. Pentru a ne convinge în
sursa anterioară vom transforma în comentariu instrucţiunea care a
generat eroarea şi vom avea:
Prenume1 = Nothing
'MsgBox("Obiectul1 contine: " & Prenume1.prenume)
MsgBox("Obiectul2 contine: " & Prenume2.prenume)
Se va afişa:

Practic a avut loc următorul proces:

-la crearea celor două obecte:

22
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

Constatăm că variabilele Prenume1 şi Prenume2 referă (are memorată)


adresa unui obiect şi anume Prenume1 referă Obiectul Prenume1 iar
Prenume2 referă Obiectul Prenume2

-după operaţiunea de atribuire: Prenume2 = Prenume1

Constatăm că variabilele Prenume1 şi Prenume2 referă (are memorată)


adresa aceluiaşi obiect şi anume referă Obiectul Prenume1 iar Obiectul
Prenume2 nu mai poate fi accesat (logic el nu mai există) deşi
constatăm că mai ocupă încă spaţiu în memoria heap.

-după operaţiunea: Prenume1 = Nothing

23
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

Constatăm că variabila Prenume1 nu mai conţine nimic dar variabila


Prenume2 referă (are memorată) în continuare adresa (referă) Obiectul
Prenume1 care mai există şi mai poate fi accesat.

I3) Cine curăţă memoria heap de obiectele care nu mai sunt utile
(nu mai au referinţe vizibile)?

-utilitarul (obiectul) garbage collector (gc). Procesul garbage collector se


declanşează periodic în mod automat şi curăţă memoria de obiectele
nefolositoare.

-procesul se declanşează de regulă când un obiect rămâne fără referinţă


activă sau când memoria heap a devenit insuficientă

-înainte de eliminarea unui obiect garbage collector încearcă să execute


metoda Finalize() a obiectului. Acest amănunt este util deoarece practic
prin metoda Finalize() care poate fi rescrisă pentru fiecare obiect se pot
realiza anumite operaţiuni (deconectarea de la un servăr, închiderea
unei baze de date sau fişier, resetarea unor drepturi de acces, etc.),
înainte de a şterge obiectul. Practic metoda Finalize() nu poate fi apelată
(invocată, activată) decât de garbage collector

-programatorul poate forţa declanşarea procedurii de curăţire prin


apelarea metodei Collect, dar nu poate cunoaşte când va fi şters un
obiect şi care este ordinea de ştergere a acestora

24
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

-programatorul poate să interzică ştergerea unui obiect prin folosirea


metodei Gc.SuppressFinalize(numeObiect). Deprotejarea acestuia se
face prin metoda ReRegisterForFinalize.
 Întrebări

1. Cum putem defini obiectele în VB.NET?


2. Cum pot fi utilizaţi membrii unui obiect?
3. Cum se utilizează structura With End With?
4. Care este durata de viaţă a obiectelor?

 Bibliografie Unitatea de învăţare 1

1. A. COZGAREA – Programarea calculatoarelor, introducere în VB.NET, Editura


ASE Bucureşti, 2008;
2. Gh. POPESCU – Programarea calculatoarelor în limbajul Visual Basic, Editura
Gestiunea Bucureşti, 2007;
3. Octavian DOSPINESCU – Dezvoltarea aplicaţiilor în VB.NET, Editura Polirom
Iaşi, 2004.

25
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

26
Copyright Catedra Informatică de Gestiune, 2010
Unitatea de învăţare 4 PROGRAMAREA ÎN VB.NET
_________________________________________________________________________________________________________________

OBIECTIVELE UNITĂŢII DE ÎNVĂŢARE 1..................................................................................................2

1.1. Necesitatea programării, programe informatice.......................................................................2

1.2. Algoritmi....................................................................................................................................4

1.3. Limbaje de programare..............................................................................................................6

1.4. Metode de programare..............................................................................................................8

27
Copyright Catedra Informatică de Gestiune, 2010

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