Sunteți pe pagina 1din 21

Structuri de date compozite (abstracte, definite de

utilizator)
structuri de date compozite reprezint cu mai mult
acuratee datele din lumea real.
Ex: datele despre studenti:
matricol, nume, dataNasterii, note

Tablou:
T(0) =el01 matricol
T(1) =Eva nume
T(2)=10/ datanasterii
T(3)=8
nota1
T(4)=9
nota2
.

Indexul elementului are o anumita


semnificatie din perspectiva
prelucrarilor ce trebuie efectuate

Structura abstracta (DataType)

Student: s
s.matricol = el01
s.nume = Eva
s.dataNasterii = 10/
s.nota1=9
s.nota2=8
sau
s.note() ={9,8,6}

Atributele structurii abstracte au o


anumita semnificatie din perspectiva
prelucrarilor ce trebuie efectuate

Structuri de date abstracte-definire in VB


[Public] SRTUCTURE denumireTip
<atribut_1> AS <tipAtribut_1>
<atribut_2> AS <tipAtribut_2>

<atribut_N> AS <tipAtribut_1>
END STRUCTURE
Public STRUCTURE Student
DIM Matricol As String
DIM Nume As String
DIM DataNasterii As Date
DIM Note() As Double
End STRUCTURE

Manipularea datelor prin structuri abstracte

Materializarea unei structuri abstracte la run-time =


instanierea tipului
Instanele se manipuleaza prin intermediul variabilelor de
tip pointer, utiliznd notaia cu punct :
Dim stud_1 As Student
Dim stud_2 As Student
stud_1.Nume = Adam
stud_2.Nume = Eva
stud_1.Note(2) = 8
stud_2.Note(2) = 10
Matricol=
Nume =Adam
dataNasterii =
Note ={ 0,0 ,8,0 ,0}

Matricol=
Nume = Eva
dataNasterii =
Note ={ 0,0 ,10,0 ,0}

#00f00x

#00f01h

stud_1 =

Pointeri

stud_2=

Operaia de atribuire in cazul varibilelor ce


manipuleaz instane ale tipurilor abstracte !
Matricol=
Matricol=
Nume =Eva
dataNasterii = Nume =Adam
dataNasterii
=
Note ={ 0,0 ,10,0
,0}
Note ={ 0,0 ,8,0 ,0}

Matricol=
Nume = Eva
dataNasterii =
Note ={ 0,0 ,10,0 ,0}

#00f01h

#00f00x
stud_1
stud_1=stud_2

stud_2

Transferul valorii

Debug.print(stud_1.nume)

Eva

stud_1.nume=Popescu
Debug.print(stud_1.nume)

popescu

Debug.print(stud_2.nume)

Eva

Manipularea structurilor de date abstracte


-continuare

Structurile nou definite pot fi folosite:

pentru a defini tipul parametrilor unor subrutine

Function calculMedia(stud As Student)


Function calculMedia(ByVal stud As Student)
Transmiterea parametrilor declarai de tipuri compozite se
realizeaz doar prin referin

Pentru a construi tablouri cu elemente de acel tip


Dim vectorStudenti(1 To 4) As Student
vectorStudenti(1).Nume = Costel
vectorStudenti(1).Matricol = "EL101"
vectorStudenti(1).DataNasterii = #10/31/1982#
vectorStudenti(1).Note(1)=7

Compunerea Tipurilor

Atributele pot fi declarate de tipuri compozite sau, tablouri de


tipuri compozite
STRUCTURE Adresa
strada As String
nr As String
localitate As String
End STRUCTURE

Public STRUCTURE Student


matricol As String
nume As String
dataNasterii As Date
domiciliu as Adresa
note() As Double
End STRUCTURE

Dim s as Student
s.matricol=EL721
s.nume=ADAM
s.domiciliu.strada=Aleaa .
s.domiciliu.nr=21B

STRUCTURE Grupa
idGrupa As Long
studenti() As
Student
End STRUCTURE

Compunerea tipurilor - continuare


Crearea unei grupe de studenti:
Dim grupa_1 As Grupa
grupa_1.idGrupa = 311
redim grupa_1.studenti(4)
grupa_1.studenti(0).Nume = Costel"
grupa_1.studenti(0).Matricol = "EL101
grupa_1.studenti(0).DataNasterii = #10/31/1982#
grupa_1.studenti(0).domiciliu.strada=bd. Carol
grupa_1.studenti(0).domiciliu.nr=27A
grupa_1.studenti(0).Note(1)=7
grupa_1.studenti(0).Note(2)=10
grupa_1.studenti(1).Nume =

Clase si Obiecte. Programarea orientata-obiect

Tipurilor compozite (abstracte) li se pot asocia operaii,


transformndu-se astfel din structuri de date pasive,
manipulate de algoritmi supervizori, n uniti active ce
definesc un anume comportament ca rspuns la stimuli
externi.
Aceste noi tipuri au fost numite clase , operaiile au fost
numite metode, iar instanele lor (elemente
Clasa Studentdin lumea real
aparinnd acelui tip) au fost numite obiecte.

Metodele - proceduri i/sau


funcii care se asociaz
n mod indivizibil claselor
i prin care programatorul
specific ansamblul de
operaii
ce pot fi realizate de
obiectele
ce provin din acea clas

matricol
nume
Atribute
dataNasterii
note()

calculMedia()
incarcaNoteExamene()
setNota(ByVal nota, index)
getNota(index)
Metode

Paradigma de programare orientata obiect


Algoritmi (module aplicaie)

Stud1

Stud3
Aplicatie

Stud2

Stud1

Stud2

Stud3

Grupa

Grupa

obiecte

Date
Programare Procedural
Aplicaie=Algoritmi+date

Programare orientat
-obiect
Aplicaie= Ansamblu de obiecte ce comunic prin
mesaje

Obiectele sunt caracterizate de stare si comportament

Starea obiectului = setul de valori al atributelor unui obiect


la un moment dat.

Comportamentul este dat de ansamblul


(metodele) pe care le poate efectua un obiect.
Obiect 1 Student

Stare

Obiect 2 Student

Matricol =EL01
Nume = Eva
dataNasterii =
note() = {}

calculMedia()
loadNoteExamene()
setNota(ByVal nota, index)
getNota(index)
Comportament

operaiilor

Matricol = EL59
Nume = Adam
dataNasterii=
note()={}
Stare

calculMedia()
loadNoteExamene()
setNota(ByVal nota, index)
getNota(index)
Comportament

Manipularea obiectelor prin variabile - continuare


SET variabila_pointer = NEW numeClasa

Cuvntul cheie NEW are rolul de a aloca o nou zon de


memorie pentru a stoca valorile atributelor noului obiect.

Ulterior, pentru a adresa atributele obiectului i a citi/scrie


valori, utilizm varibila i notaia cu punct :

Variabila_pointer.atribut=valoare
Aceeai notaie cu punct se utilizeaz i pentru a invoca o
metod a obiectului ( a transmite un mesaj):
Call Variabila_pointer.metoda()

Manipularea obiectelor prin variabile - continuare


Dim stud_1 As Student, stud_2 As Student
SET stud_1 = new Student
SET stud_2 = new Student
stud_1.Nume = Adam
stud_2.Nume = Eva
stud_1.Note(2) = 8
stud_2.Note(2) = 10

Matricol=
Nume =Adam
dataNasterii =
Note ={ 0,0 ,8,0 ,0}

Matricol=
Nume = Eva
dataNasterii =
Note ={ 0,0 ,10,0 ,0}

#00f00x

#00f01h

stud_1 =

Pointeri

stud_2=

Operaia de atribuire in cazul pointerilor catre obiecte!

Matricol=
Nume =Adam
dataNasterii =
Note ={ 0,0 ,8,0 ,0}

Matricol=
Nume = Eva
dataNasterii =
Note ={ 0,0 ,10,0 ,0}

#00f01h

#00f00x
stud_1
stud_1=stud_2
stud_1.nume=Popescu
Debug.print(stud_1.nume)
Debug.print(stud_2.nume)

stud_2

Transferul referinei

Popescu
Popescu

Sturcturi dinamice Colecii

Collection class (index=1..n):

Add (item [ , key] [, before] [, after] )


Item (index/key)
Remove(index/key)
Count()
Contains(item)

ArrayList class (index=0..n):

Add (item)
Item (index)
Remove(item)
RemoveAt(index)
Count()
Contains(item)
Sort()
Reverse()
BinarySearch(item) doar dupa sort() sortare ascendenta
IndexOf(item) - nu foloseste un algoritm optimizat de cautare

Gestionarea ERORILOR
secvente de cod
Try
secvene de cod care pot genera erori la run-time
Catch ex as Exception
secventa de cod pentru tratarea erorilor
End Try
. alte prelucrri .

Sub oProcedura
Dim e as Exception
e=new Exception(mesaj)
if oConditie then

throw e
end if
. alte prelucrri .
EndSUB

TRATARE

DECLANSARE

Interfete grafice - Componente Grafice

Componentele grafice sunt n fapt clase definite de


productorii limbajului (sau tere persoane), clase pe care le
utilizm n crearea propriilor interfee grafice

Atunci cnd construim un formular, nu facem altceva dect s


construim o nou clas, apelnd la tehnica numit
compunere.
Atributele noii clase vor stoca obiecte aparinnd altor clase
definite de productorii limbajului (Form, TextBox, ListBox,
etc.)

La momentul lansrii n execuie, se instaniaz clasa nou


creata i se obine obiectul complex reprezentat vizual pe
ecran

Categorii de componente grafice

container - poate conine alte obiecte sau containere(un form


este un obiect de tip container).

Toate obiectele din container motenesc valorile setate pentru


unele din proprietile containerului (ex: Enabled, Visible etc);
n Visual Basic .NET, pentru a construi un container dispunem de
controlul Panel

componente atomice sunt utilizate pentru interaciunea


direct cu utilizatorul (butoane, csue de text, liste de
opiuni, butoane de opiune i casete de validare )

Programarea bazata pe evenimente

Programarea procedural tradiional instructiunile se


executa secvential - chiar dac programul este interactiv,
initiaiva privind datele ce trebuie introduse si in ce moment
se introduc acestea aparine programului

Proc 1

Proc 2

Proc 3

Proc 4

Apariia interfeelor grafice iniiativa i revine operatorului


uman programul va executa comenzile acestuia
(Event-Oriented Programming), cunoscuta i sub numele de
programare ghidata de evenimente (Event Driven
Programming )

Proc 1

Proc 2

Proc 3

Proc 4

Programarea bazata pe evenimente

eveniment = pies de informaie ce reflect o modificare care are loc


la nivelul aplicaiei
GUI: -modificari fie in starea dispozitivelor de intrare, fie in cea a
obiectelor grafice de pe ecran:

apasarea sau eliberarea unei taste,


deplasarea mouse-ului,
apasarea sau eliberarea unui buton al mouse-ului,
deschiderea sau inchiderea unei ferestre,
efectuarea unui clic de mouse pe un obiect de control (buton,
caseta de validare, bara de defilare etc. ),
Mutarea controlului tastaturii de la un obiect la altul,
Etc..

Pot exista i alte tipuri de evenimente, fr legtur cu interfaa


grafic - vezi noiunea de declanator (trigger) pentru baze de
date

Intr-o interfa grafic un eveniment este strans legat de un


obiect grafic spunem ca respectivul eveniment se
declanseaza pentru un anumit obiect.

Programarea bazata pe evenimente

Evenimentele pot fi interceptate de proceduri specializate


denumite proceduri de tratare a evenimentelor

Un eveniment se declanseaza ntotdeauna atunci cand


utilizatorul executa o manevra specifica
nu ntotdeauna va exista o procedura care sa-l intercepteze si sa
execute o operatie in consecinta !

n varianta Visual Basic i a produselor similare, o aplicaie


const in:

un ansamblu de subrutine ce implementeaza logica aplicatiei


proceduri-eveniment care trateaz un eveniment individual :
este ataat unui obiect grafic
se execut numai cnd obiectul respectiv intercepteaz
evenimentul pentru care a fost scris

Metode de tratare a evenimentelor

Pentru ca o procedura sa fie o procedura-eveniment trebuie sa


respecte o anumita semnatura:

Sub denumireMetoda(ByVal sender As System.Object,


ByVal e As System.EventArgs)
Handles numeControlGrafic.numeEveniment