Conceptul de tip de date

Datele sunt piese de informație (numere, caractere tipografice, valori logice, imagini, etc) puse sub o formă convenabilă pentru a putea fi prelucrate pe calculator.
Exemple de date
numere: -173, 2568, 312.75, -128764.12;
caractere: A, a, B, b,  %, +, &, *;
valori logice: true, false (traduse în română prin adevărat, respectiv fals);

Remarcăm că datele în sine nu au semnificație. Ele capată semnificație numai într-un anumit context, în care devin informații. De exemplu, propoziția "Consumul de energie electrică al abonatului Popescu Ion în luna august 2000 a fost de 78.5 kwh" este o informație. În această propoziție, "Popescu Ion", "august", 2000, 78.5 sunt date
În aplicatiile obișnuite, calculatorul nu prelucreaza informații, ci date. Pentru prelucrarea datelor, calculatorul execută un anumit program. Programul nu "înțelege" datele (deci nu le tratează ca informații), ci doar le prelucrează, aplicând asupra lor o succesiune de operații, în conformitate cu un anumit algoritm.

Programul constă în descrierea (declararea) datelor utilizate și a algoritmului folosit pentru prelucrarea lor în vederea realizării unui anumit obiectiv, putând fi astfel încadrat în schema

Program = Date + Algoritm

După forma lor, datele se grupează în tipuri de date. La stabilirea tipurilor de date, se face un compromis între descrierea acestora la nivel abstract (matematic) și implementarea lor pe un anumit tip de calculator.
 
De exemplu, deși din punct de vedere matematic mulțimea numerelor intregi este unica și infinită, în numeroase limbaje de programare, printre care și Java, există mai multe tipuri de date întregi. Aceasta se datorește faptului că, la stabilirea tipului de date, se ia în considerație nu numai mulțimea matematica în care se încadrează datele respective, ci și reprezentarea pe calculator.
Astfel, în cazul tipului byte, reprezentarea internă se face pe un octet (8 biți), astfel că mulțimea de valori a acestui tip cuprinde 28=256 valori, respectiv: 00000000, 00000001, 00000010, ..., 01111111, 10000000, 10000001, 10000010, ..., 11111111. 
Mulțimea de valori corespunzătoare unui tip de date este deci finită, cardinalul ei depinzând de numarul de biți folosiți pentru reprezentarea internă a datelor din tipul respectiv. 
O altă convenție, care se face referitor la tip, este cea privind semnul. Astfel, dacă se face convenția că datele pozitive încep cu cifra 0, iar cele negative cu cifra 1, mulțimea de valori pentru tipul byte este intervalul [-128, 127].

Tipurile de date pot fi primitive sau derivate.

Tipurile de date primitive sunt încorporate în limbaj, deci ele nu trebuie definite de programator, de aceea se mai numesc și tipuri standard, elementare sau predefinite.

Tipurile derivate se definesc de programator, care folosește în acest scop atât tipurile primitive, cât și tipuri derivate definite anterior.

Fiecare limbaj de programare pune la dispoziția programatorului:

La definirea unui tip de date primitive se stabilesc: În limbajele tradiționale de nivel superior, se admite că forma de reprezentare a datelor in memorie și, în consecință, mulțimea de valori pentru fiecare tip depind de platforma hardware pe care se va executa programul. În limbajul Java, forma de reprezentare internă (în memoria mașinii virtuale Java) este unică pentru toate calculatoarele.

Important este că toate aceste convenții privind tipurile de date primitive se stabilesc de autorii limbajului de programare și sunt incorporate în limbaj, deci nu mai pot fi modificate de programatorii de aplicații.

La definirea tipurilor de date derivate, în limbajele tradiționale se punea accentul pe descrierea structurii datelor, adică a modului în care se alcătuesc datele noului tip din tipuri mai simple.
 
Principalele tipuri de date derivate, care se regăsesc în majoritatea limbajelor de programare procedurale, sunt tabloul și înregistrarea. 
 Tabloul (engleza: array) este o colecție indexată  de date de același tip. Exemplele cele mai cunoscute de tablouri sunt vectorii și matricile din matematică. La declararea unui tablou în program se specifică de regulă tipul componentelor, numărul de indici și intervalul de variație pentru fiecare indice.
 Înregistrarea (record in Pascal, struct in C) este o succesiune ordonată de câmpuri, care au fiecare propriul lor nume și pot fi de tipuri diferite. La declararea înregistrării se specifică numele și tipul fiecărui câmp.

În limbajele orientate pe obiecte, se introduce conceptul de clasa, ca o extindere a conceptului de tip de date. Clasa se deosebește de înregistrare prin faptul că, la definirea ei, în afară de structura de date se dau și metodele (funcțiile, procedurile) care se aplică asupra acestor date. Deci, așa cum tipul de date este o mulțime de date asociată cu o mulțime de operații, clasa este o structură de date căreia i se asociază o colecție de metode. În aceste limbaje, clasa este principala, sau chiar unica, formă de tip derivat.

Limbajul Java este un limbaj de programare total orientat pe obiecte, deci singurele tipuri de date derivate sunt clasele.
Prin aceasta, Java se deosebește de limbajele orientate pe obiecte construite peste limbaje procedurale (cum sunt C++ sau Object Pascal), care, în afară de clase, admit si tipurile derivate "tradiționale", cum sunt tabloul și înregistrarea. Vom arăta că în Java tablourile sunt tot obiecte, adică instanțe ale unor clase.



© Copyright 2000 - Severin BUMBARU, Universitatea "Dunărea de Jos" din Galați