duminică, 4 decembrie 2011

abstartia datelor in programare

5. ABSTRACŢIA DATELOR
Ce este abstracţia? Abstracţia este o metodă, care presupune folosirea următooarei idei: evedenţierea unor proprietăţi importante ale obiectului analiza şi ignorarea celor neimportante în acest moment.
De fiecare dată, când ne îndereptăm atenţia la anumite proprietăţi ale obiectului şi le ignorăm pe celelalte, noi folosim abstracţia. Abstracţia este o parte importantă a gândirii. De asemenea abstracţia reprezintă o metodă importantă , folosită la dezvoltarea programelor.
Orice product-program poate fi analizat din 2 puncte de vedere:
- făcând abstracţie de la detaliile de realizare, algoritmul corespunde unei anumite probleme din lumea reală;
- din punctual de vedere al realizării algoritmului, el reprezintă o consecutivitate de operaţii, destinată să resolve problema.
O metodă importantă în proiectarea structurilor de date este abstracţia datelor, care reprezintă un şir de metode de programare.
Cea mai simplă metodă de abstracţie a datelor este atribuirea reuşită a identificatoarelor. De exemplu, identificatorul Temp e mai reuşit decât identificatorul X, care nu sugerează, că variabila dată păstrează valoarea unei temperaturi.
Limbajele de programare conţin mai multe posibilităţi de abstracţie a datelor. Vom studia următoarele metode de abstracţie a datelo:
- constante;
- tipuri de date utilizator;
- tipul de date enumerare;
- tipul de date interval.

5.1. Constante
Pentru păstrarea informaţiei în program se folosesc variabilele. Pe parcursul execuţiei programuluivaloarea variabilei se poate modifica de multe ori. Pe lângă variabile în program destul de frecvent se folosesc şi constantele. Spre deosebire de variabile valoarea constantei e cunoscută la scrierea algoritmului şi nu se modifică pe parcursul execuţiei programului. În limbajele de programare constantele la fel ca şi variabilele trebuie să fie declarate. Ele se declară în secţiunea Const. La descriere se indică două elemente: numele constantei şi valoarea ei.
Const
An=2000
Coef_tva=0.2
Pi=3.14
Cm_in_metru=100
Virsta=18
Folosirea constantelor măresc lizibilitatea algoritmului. De exemplu, pentru a calcula suma cumpărăturii se poate folosi operatorul:
Suma := Suma + Suma * Coef_tva, care este mai sugestiv decât operatorul cu effect identic Suma := Suma + Suma * 0.2.
Există diferite nivele de “constanţă” a constantelor. Unele din ele, ca Pi, Cm_in_metru sunt constante după definiţia lor. Dar alte constante nu întotdeauna au aceiaşi valoare. De exemplu, constanta An, Coef_tva, Virsta sunt constante pe parcursul unei execuţii a algoritmului, dar se pot modifica de la execuţie la alta. Dar şi folosirea acestor constante au avantaje. La modificarea valorii constantei, e mai simplu să se modifice o singură dată valoarea ei în secţiunea Const, unde ea este declarată, decât să se caute toate locurile în program unde se foloseşte constanta. Folosirea acestor tipuri de constante simplifică actualizarea periodică a lor.
5.2. Tipuri de date utilizator
În afară de tipurile de date standard, programatorul poate crea noi tipuri de date, numite tipuri de date utilizator. Toate tipurile de date utilizator se descriu în secţiunea Type. Sintaxa descrierii unui tip de date nou este:
< nume_tip_nou> =
Un tip nou de date poate fi construit dintr-un tip de date deja cunoscut (standard sau declarat anterior). În declaraţie se indică metoda de obţinere a noului tip din tipul cunoscut.
În cel mai simplu caz în Type se pot renumi tipurile de date existente. Numele oricărui tip de date standard poate fi înlocuit cu un identificator mai sugestiv ales de programator. De exemplu,
Type
Logic: Boolean
Pozitiv: natural
După ce au fost declarate tipurile noi, ele pot fi folosite la declararea variabilelor în secţiunea Var. De exemplu:
Var
Numar: pozitiv
Exista: logic

5.3. Tipul de date enumerare
Adesea programele se ramifică în funcţie de cazurile particulare care trebuie tratate, cazuri a căror exprimare nu este numerică. De exempu, un program de genul agendă de lucru va depinde de ziua din săptămână care se programează. Evident, programul va fi mult mai clar dacă, în loc să codificăm numeric zilele săptămânii, vom folosi denumirile loe uzuale. Sau să presupunem că vrem să lucrăm la un nivel mai abstrac, de exemplu cu semafoare electrice. Cele trei culori ale semaforului pot fi codificate numeric, dar programul ar fi mai clar, dacă vom folosi denumirile colorilor. Sau, dacă într-un program de grafică vom avea de prelucrat diferite figuri, ca de exemplu triunghiuri, dreptunghiuri, pătrate, hexagoane, prelucrarea va fi mai clară dacă vom idendifica fiecare situaţie de prelucrare prin numele figurii respective, decât codificând- o numeric. Pentru evitarea unor asemenea codificări şi pentru sporirea lizibilităţii programelor se foloseşte tipul de date enumerare.
Un tip de date enumerare defineşte o mulţime ordonată de valori prin enumerarea identificatorilor care desemnează valorile. Primul identificator desemnează cea mai mică valoare, ci numărul ordinal 0. Ceilalţi identificatori au, conform succesiunii lor, numerele ordinale următoare. În memorie, valorile acestui tip se reprezintă prin numerele lor de ordine, deci prelucrare se va face rapid. Aceşi identificatori se tratează în program identic cu constantele.
Tipul de date enumerare se defineşte printr-o listă de identificatori abstracţi.
Type
= (id1, id2,… , idn)
Exemple:
Type
Semafor = (rosu,galben,verde)
Saptamina=(luni, marti, miercuri, joi, vineri, sambata, duminica)
Dacă avem declaraţiile de variabile:
Var
S: semafor
Zi: saptamana
Variabila S poate avea una dintre valorile celor trei identificatori, ce numesc cele trei culori ale semaforului, iar variabila zi poate fi una dintre zilele săptămânii.
Un tip enumerare este un tip special, diferit de orice alt tip; de aceea, identificatorii din declaraţia unui tip enumerare nu pot fi utilizaţi în definirea altui tip enumerare. Tipul enumerare fiind ordinal, datelor acestui tip li se pot aplica operatorii relaţionali şi funcţiile ordinale standard ord, succ, pred. Semnificaţia valorilor de tip enumerare nefiind numerică, acestor date nu li se vor putea aplica operatorii aritmetici şi ele nu vor putea apărea în expresii aritmetice.
Datele de tip enumerare nu se pot nici citi şi nici scrie. Ele pot primi valori numai prin atribuire.
Datele de tip enumerare pot fi folosite în programe pentru a face mai suggestive anumite lucruri. De pildă, dacă facem un joc de poker, iar jucătorul va fi, pe rând omul şi calculatorul, atunci alternarea lor se descrie astfel:
Type
Jucator=(om, calculator)
Var
Juc: jucator

if juc = om then

else
if juc= calculator then


5.4. Tipul de date interval
Să presupunem că într-un program prelucrăm valori de unghiuri exprimate în grade. Evident valorile variabilelor care reprezintă unghiuri exprimate în grade trebuie să fie cuprinse în intervalul [0..360]. În acest caz trebuie să declarăm un tip nou de date numit unghi, şi orice variabilă care poate reprezenta un unghi va fi declarată de tipul unghi. Declaraţia de tip va fi de forma:
Type
Unghi= 0 .. 360
Iar declaraţia unei variabile X de tipul unghi se va face sub forma:
Var
X: unghi
Un tip de date obţinut prin restrângerea unui alt tip de date se numeşte tip interval. Se pot defini tipuri de date interval ale tipurilor ordinale. Definirea unui tip interval se face sub forma:
Type
= constanta1 .. constanta2
unde nume_tip este numele noului tip de date, constanta1 şi constanta2 sunt două constante de acelaşi tip ordinal care satisfac condiţia constanta1 <=. constanta2.
Tipul interval se generează dintr-un tip ordinal definit anterior sau standard, numit tip de bază al intervalului. Mulţimea valorilor acestui tip cuprinde un interval de valori ale tipului de bază, ale cărui limite se specifică prin cele două constante din definiţia tipului.
De exemplu se pot declara tipurile de date:
Type
Cifra = ‘0’ .. ‘9’
Adevarat= true .. true
Byte = 0 ..255
Zile=(luni, marti, miercuri, joi, vineri, sambata, duminica)
Zile_lucr= lini ..vineri
Operaţiile posibile cu datele de tip interval sunt cele premise de tipul de bază al acestuia.
Tipul Unghi este declarat ca interval al tipului cardinal. Dacă pentru variabila X încercăm să executăm o instrucţiune:
X:= 361
Compilatorul va semnala o eroare de depăşire a intervalului de valori,

Niciun comentariu:

Trimiteți un comentariu