HomeDidactic › Concret si abstract

Concret si abstract

Cazuri particulare si generale. De la concret la abstract si invers. Constante si variabile
• Concret si abstract
Un programator trebuie sa gandeasca abstract. Acest lucru este atat de important in programare,
incat orice incercare de a invata sa programezi, fara a avea o gandire abstracta, este sortita esecului.
Cine nu poate intelege abstractiunile matematice din scoala generala sau liceu, de pilda, nu poate sa
ajunga sa programeze (bine). Ca programatori, va trebui sa realizati diferite programe pentru
oameni foarte diferiti ca nivel cultural, pregatire. Veti intra in contact cu economisti, ingineri,
psihologi, sau oameni de litere, medici sau avocati, care va vor solicita sa le faceti un program pe
calculator care sa le rezolve anumite probleme din domeniul lor de activitate. Probabil cu exceptia
inginerilor, veti constata ca majoritatea au un anumit mod de a se exprima si de a va prezenta
problema de rezolvat incompatibil, intr-o oarecare masura, cu modul dumneavoastra de a vorbi si de
a intelege problema. Cel mai bun sfat ar fi acela de a-i lasa sa va explice tot ce vor, fara sa-i
intrerupeti, dupa care sa incercati sa „preluati dumneavoastra carma” si, prin intrebari simple, la
care interlocutorul sa va raspunda doar prin da sau nu, sa intelegeti esenta problemei pe care trebuie
sa o rezolvati.
In general, beneficiarii programului dumneavoastra, vor fi foarte concreti. Ei nu vor prezenta in
linii mari, generale, lucrarea pe care vor sa o informatizeze, generale, ci vor da tot soiul de exemple,
care nu au nici o relevanta pentru problema, din perspectiva dumneavoastra. Va trebui sa
identificati, in explicatiile interlocutorului sau in raspunsurile acestuia, urmatoarele elemente:
– ce se da si ce se cere programului, pentru ca orice program/algoritm prelucreaza anumite date de
intrare pentru a obtine niste informatii, drept rezultate;
– cum se vor da datele de intrare si in ce ordine, ce conditionari exista intre ele, pentru a putea
proiecta interfata cu utilizatorul, pentru introducerea datelor;
– ce informatii se asteapta de la program si in ce forma, in ce ordine, pentru a sti cum sa proiectati
interfata cu utilizatorul, pentru extragerea rezultatelor;
– care sunt formulele de calcul care se folosesc, in ce ordine si ce conditionari exista intre ele.
In privinta interfetei cu utilizatorul, fiti convinsi ca beneficiarul se va razgandi de mai multe ori,
mai ales atunci cand programul capata o forma apropiata de cea finala, de aceea nu trebuie sa
acordati prea multa atentie acestui aspect, pentru inceput. Concentrati-va asupra formulelor de
calcul si e posibil ca aici sa aveti multe dificultati de a le obtine din cauza ca ele nu va vor fi
prezentate, pur si simplu! Cei mai multi prefera sa va dea exemple si dumneavoastra sa deduceti
singur formulele de calcul, decat sa va spuna care este formula din teorie. Deci, va trebui sa gasiti
generalul din cazurile lor particulare si sa abstractizati tot ceea ce va prezinta ei concret.
• Constante si variabile
Sa revenim la problema desenarii pe ecranul calculatorului. Sa presupunem ca dispunem de un
mediu de programare, in care, pentru a desena un cerc de raza r, cu centrul cercului in punctul de
coordonate x,y trebuie sa folosim instructiunea CIRCLE(x,y,r). De obicei, instructiunile sunt
prezentate folosind variabile (precum x, y si r) si nu constante (numere ca 100, 150, 215, 342).
Pentru a desena un cerc avand centrul in punctul de coordonate 200, 300, si cu raza de 10 de unitati
vom scrie, asadar, CIRCLE(200,300,10), pastrand ordinea celor trei parametri ai instructiunii. La
fel, putem particulariza folosirea lui CIRCLE, si pentru cercul de coordonate 200, 300 si de raza 20:
CIRCLE(200,300,20). Evident, cele doua cercuri sunt concentrice, pentru ca au aceleasi coordonate
pentru centru.
Pentru a desena 15 asemenea cercuri concentrice, de raze de 10, 20, 30 etc., ar trebui sa folosim
15 instructiuni CIRCLE, in care cel de-al treilea parametru sa fie schimbat, pe rand, in 10, 20
s.a.m.d.. Acest mod de rezolvare a problemei desenarii celor 15 cercuri concentrice denota o
gandire pur concreta, care se bazeaza pe utilizarea a 15 cazuri particulare de desenare a unor
cercuri. Un programator bun nu va proceda asa, el va cauta sa gaseasca o regula pentru desenarea
mai usoara a celor 15 cercuri, eventual pomenind o singura data de comanda CIRCLE. Astfel, el va
incerca sa inlocuiasca constantele numerice 10, 20, 30, …, 150, cu o singura data, care sa varieze
intre 10 si 150, din 10 in 10. O asemenea data se numeste variabila. Ea isi va schimba valoarea, in
functie de necesitati. Astfel, notand cu R acea variabila, cele cincisprezece cazuri concrete vor
ajunge cazul abstract CIRCLE(200,300,R), unde R variaza intre 10 si 150, cu pasul 10. Limbajele
de programare ofera diferite posibilitati de a-l face pe R sa ia pe rand valorile 10, 20 etc., dar putem
sa ne gandim mai departe la o alta variabila I, care sa varieze intre 1 si 15, si sa scriem
CIRCLE(200,300,10*I), unde I variaza intre 1 si 15, cu pasul 1. Putem continua, considerand un
caz si mai general, deci mai abstract, in care pasul sa nu fie 10, ci un numar oarecare, reprezentat de
variabila P. Atunci vom scrie CIRCLE(200,300,P*I), considerandul-l pe I intre 1 si 15. Dar s-ar
putea ca sa avem nevoie sa desenam nu doar 15 cercuri, ci 20 sau 50, adica un numar N oarecare. Si
poate acestea vor avea centrul intr-un punct de coordonate X, Y, oarecare, iar razele sa inceapa sa
creasca de la valoarea T. Astfel, cel mai abstract caz este: CIRCLE(X,Y,T+P*I), unde I ia valori,
din 1 in 1, intre 0 si N-1. Astfel, X, Y, T, P si N sunt date de intrare in problema, I este o variabila
de lucru, iar rezultatul ar fi cele N cercuri desenate pe ecran.
Procesul de abstractizare este foarte complex si este greu de explicat ce mecanisme intelectuale
si psihice intra in joc, atunci cand abstractizam. Trebuie sa dovedim multa imaginatie si sa incercam
sa ne gandim si la alte situatii decat cele concrete cu care avem de a face la un moment dat. Pentru a
abstractiza cat mai mult o problema si rezolvarea ei, va trebui sa ne punem intrebari de genul „ce-ar
fi daca nu as cunoaste aceasta valoare?” sau „ce-ar fi daca as schimba aceasta valoare cu alta?” si sa
incercam sa raspundem la asemenea intrebari, rescriind algoritmul.