190 likes | 373 Views
Introducere. Tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a programelor şi ordinea utilizării acestor metode şi mijloace.
E N D
Introducere Tehnologia programării reprezintă totalitatea de metode şi mijloace de elaborare a programelor şi ordinea utilizării acestor metode şi mijloace. La etapele iniţiale de dezvoltare a programării, cînd programele se elaborau în formă de consecutivităţi de coduri, nu putea fi vorba de careva tehnologie de programare. Odată cu creşterea în dimensiune a programelor, au început să fie evidenţiate anumite părţi ale lor, şi oformate ca subprograme. O parte din aceste subprograme se uneau în biblioteci, care puteau fi utilizate ulterior pentru elaborarea altor programe. Aceasta a pus începutul programăriiprocedurale, care la rîndul său, a necesitat structurarea programelor, împărţindu-le în proceduri separate. Următorul pas în aprofundarea structurării programelor, a fost aşa numita programare structurată, conform căreea întreg programul, la fel ca şi procedurile, se considerau consecutivităţi de structuri canonice: secvenţe, cicluri şi ramificări. Acest lucru a sporit cu mult eficacitatea lucrului programatorilor. Programarea procedurală şi structurată au vizat în primul rînd procesul de descriere a algoritmilor, ca o secvenţă de paşi, care duc de la datele iniţiale la rezultatul căutat. Pentru rezolvarea problemelor speciale au început să se elaboreze limbaje de programare orientate la o clasă concretă de probleme: sisteme de dirijare cu baze de date, modelare ş.a. Utilizarea programării în diverse domenii ale activităţii umane a necesitat sporirea siguranţei programelor. A apărut ideea creării unor astfel de tipuri, care să interzică accesul neautorizat la date. Aceasta a dus la dezvoltarea sistemelor orientate pe obiecte, bazate pe programarea orientată pe obiecte, care a cunoscut o amploare deosebită în anii 90. Astfel, programarea orientată pe obiecte presupune determinarea şi descrierea claselor obiectelor utilizate în program, apoi crearea exemplarelor de obiecte necesare, şi determinarea interacţiunii între ele. Unul dintre cele mai des utilizate limbaje de programare pentru programarea orientată pe obiecte reprezintă limbajul C++. Toate limbajele de programare orientate pe obiecte sunt în continuă dezvoltare.Ele se extind şi se concretizează permanent. Lucrarea de faţă prezintă tehnici orientate pe obiecte de specificare şi programare în limbajul C++.Lucrarea conţine trei capitole: “Încapsularea.Clase”, “Moştenire”, “Polimorfism” şi “Evaluarea cunoştinţelor studenţilor la elaborarea produselor program”. La sfîrşitul primelor trei capitole sunt propuse subiecte pentru autoevaluare. Anexa conţine teste, lucrări de laborator, teme pentru proiecte şi teme pentru investigaţie, care pot fi utilizate în procesul de predare,învăţare şi evaluare la disciplina dată.
I. Încapsularea. Clase Prin tip abstract de date înţelegem o mulţime de date care au aceeaşi reprezentare şi pentru care este definit setul de operaţii care se pot executa asupra elementelor mulţimii respective. Din definiţia tipului abstract de date rezultă, că acesta are două părţi: o parte care defineşte reprezentarea datelor şi o parte care defineşte operaţiile asupra datelor respective. Exemple de concepte care nu corespund unor tipuri predefinite de date : sir de caractere, număr complex, listă, arbore etc. O clasă defineşte un tip abstract de date. Clasa permite încapsularea, sau ascunderea informaţiei, adică poate interzice accesul din afară la datele şi funcţiile sale. Încapsularea este pusă în practică prin secţiunile clasei care implementează abstracţia:implementarea şi interfaţa. Formatul definiţiei clasei: classnume{lista_elementelor_membru};
Lista elementelor membru poate conţine: Datele declarate printr-o definiţie de clasă se numescdate membru declaraţii de date; Funcţiile definite sau pentru care este prezent numai prototipul, în definiţia clasei, se numescfuncţii membru sau metode. declaraţii de funcţii; prototipuri de funcţii; modificatori de protecţie. Modificatori de protecţie : - private: - protected: - public: Exemplu: class complex { // date membru private float real; float imag; public: // functii membru publice void atribuire(float x=0, float y=0) //functie inline // real + i*imag = x + i*y {real = x; imag=y;} double retreal() //functie inline {return real;} void afiscomplex( char *format) //funcţie inline { printf(format, real, imag);} };
Obiecte Un obiect este o dată de un tip definit printr-o clasă. Se spune că obiectul este o instanţierea clasei respective. Formatul declaratiei unui obiect: nume_clasă nume_obiect; Datele membruse alocă distinct la fiecare instanţiere a clasei.. O excepţie o constituie datelemembru care au clasa de memoriestatic, ea este o parte comună pentru toate instanţierile clasei şi există într-un singur exemplar. Funcţiile membrusunt într-un singur exemplar oricîte instanţieri ar exista.. Legătura dintre funcţii membru şi obiectul pentru care se face apelul se realizează folosindoperatorulpunct sausăgeată. Exemplu de utilizare a clasei complex: main() {char *format = ” %f \t %f \n”; complex a, b, c, d; complex *pz; // utilizarea metodelor clasei complex: a.atribuire(1, 3); b.atribuire(2, 5); cout<< ”a=” << a.retreal() << ”+i*” << a.retimag() << endl; c.adcomplex(&a, &b); c.afiscomplex(format); c.divcomplex(&a, &b); pz = &c; pz->afiscomplex(format); } Se va afişa: a=1+i*3 3.000000 8.000000 0.586207 0.034483 Exemplu de instanţieri pentru clasa complex :complex z; complex *pz; char *format = ”%g \ t%g \n”; Atunci: z.afiscomplex(format); afişează numărul complex z (în cazul de faţă 0 0 ). Acelaşi efect se obţine folosind secvenţa: pz = &z; pz -> afiscomplex(format);
Constructori Obiectele se generează şi se pot iniţializa la instanţiere cu ajutorul constructorilor, care sunt funcţii membru de acelaşi nume cu numele clasei. Exemplu de utilizare a constructorilor: class dc { int zi, luna, an; public dc() // constructor fara //parametri { zi = 1; luna = l; an = 2003;} dc(int z, int l, int a=2002) { zi=z; luna=l; an=a;} dc(int z, char *denl, int a); … }; Exemple de instanţiere ale claseidc: dc d1; // d1: zi=1, luna=1, //an=2003 dc d2(15, 9, 2000); // d2: zi=15, luna=9, //an=2000 dc d3(15, 9);// d3: zi=15, luna=9, //an=2000 dc d4(15, ”septembrie”, 2000); // se //apeleaza constructorul cu parametrul //char *denl dc *pd = new dc(15, 9); Valorile de iniţializare se transferă constructorului şi ele joacă acelaşi rol ca parametrii efectivi de la apelurile funcţiilor obişnuite. nume_clasa nume_obiect(lista); Se pot defini mai mulţi constructori pentru o clasă. În acest caz ei au acelaşi nume, dar diferă prin numărul şi / sau tipurile parametrilor. Dacă există mai mulţi constructori, atunci la iniţializare se utilizează regulile de la apelurile funcţiilor supraîncărcate. Funcţiile constructor nu întorc valori, dar nu sunt precedaţi de cuvîntul void. Dacă clasa nu conţine constructori, compilatorul C++ generează un constructor fără parametri, adică un constructor implicit.El are rolul numai de alocare a obiectelor clasei respective, fără a le iniţializa. Pentru o clasănu se pot defini un constructor implicit şi un constructor cu toţi parametrii impliciţi,deoarece aceasta ar duce la ambiguităţi la instanţierea obiectelor.
Constructori Dacă lista de iniţializare se reduce la un singur parametru, declaraţia obiectului poate fi scrisă astfel: nume_clasa nume_obiect=expresie; Exemplu: class complex { double real; double imag; public: complex(double x = 0, double y = 0) {real = x; imag = y;} … }; Exemple de instanţiere: complex z; // z = 0 + 0*i complex z1(1); // z1 = 1 + 0*i complex z2 = 1; // z2 = 1 + 0*i complex z3(1, 2 ); // z3 = 1 + 2*i Constructorul de copiere: clasa ( const clasa& p) Constructorul de copiere se apelează în felul următor: clasa c(…); // instantierea cu //initializare obisnuita clasa c1 = c;// se apeleaza //constructorul de copiere // c1 este o copie a lui c Funcţie prieten (Friend function) Pentru a admite accesul la elementele protejate şi pentru anumite funcţii care nu sunt membru se pot folosi funcţiile prieten pentru clasa respectivă. Exemplu: class complex {double real; double imag; public: complex(double x=0, double y=0) { real = x; imag = y;} friend double modul(complex *z); … }; funcţia prieten modul se apelează în mod obişnuit: d = modul(&z); O funcţie prieten poate fi o funcţie membru a unei clase. Modificatorii de protecţie nu au nici o influenţă asupra unei funcţii prieten. Destructori Destructorii sunt funcţii, care se apelează la sfîrşitul timpului de viaţă a unui obiect pentru disponibilizarea resurselor ocupate de către acesta. În interiorul clasei nume_clasael se scrie astfel:~nume_clasa() În exteriorul clase nume_clasael se scrie astfel: nume_clasa :: ~nume_clasa()
Subiecte pentru autoevaluare 1. Prin ce se deosebesc clasele de alte structuri de date? 2. Ce diferenţă este între funcţiile membre inline şi cele care nu sunt inline? 3. Poate oare descrierea corectă a clasei Time să conţină ambii constructori de mai jos? De ce? Time(int h = 0, int m = 0, int s = 0); Time(); 4. Ce se va întîmplă, dacă, pentru un constructor sau pentru un destructor, se va indica tipul valorii întoarse, sau void? 5. Explicaţi noţiunea de funcţie prieten în C++ şi părţile negative ale utilizării unor astfel de funcţii. 6. Să se extindă tipul abstract complex, aşa încît să se poată realiza următoarele operaţii asupra obiectelor: adunare, scădere, negativare, înmulţire, împărţire, citirea de la intrarea standard a componentelor unui obiect complex. 7. Utilizînd clasa complex, să se rezolve ecuaţiile: a) a*x*x + b*x + c = 0 b) a * x = b 8. Creaţi clasa Date, care să permită: a) Afişarea datelor în cîteva formate: DD YYYY MM/DD/YY Septembrie 1, 2002 b) Utilizaţi constructori pentru crearea obiectelor Date cu date iniţiale conform formatelor din punctual a). Creaţi un constructor Date, care, utilizînd funcţiile standard din fişierul time.h, citeşte data de sistem şi o transmite elementelor Date.
Testul I Tema: Utilizarea claselor. I. Să se complecteze spaţiile libere din următoarele afirmaţii: 1) Pentru definirea unei clase se utilizează cuvîntul cheie ________ . 2) Elementele membru ale unei clase definite ca __________ sunt accesibile în tot domeniul de vizibilitate al clasei. 3) Elementele membru ale unei clasei sunt accesate cu ajutorul operaţiei _______ ,dacă este instanţiat un obiect al clasei respective şi cu ajutorul operaţiei _______ , în cazul pointerului la un obiect al ei. 4) Accesul implicit la elementele membru ale unei clase este _______ . 5) Funcţiile membru ale unei clase care servesc pentru iniţializarea obiectelor la instanţiere se numesc ________ . II. Găsiţi şi încercuiţi răspunsurile corecte: 1)Care este protecţia datelor membru ale unei clase accesibile numai funcţiilor membru şi funcţiilor prieten ale clasei respective? a) public b) private c) toate d) nu pot fi aşa date membru 2)Care din următoarele afirmaţii sunt adevărate? a) constructorii unei clase se pot deosebi prin nume b) constructorii unei clase se pot deosebi prin numărul de parametri c) constructorii unei clase nu se pot deosebi prin tipul parametrilor d)pot exista constructori fără parametri • III. Găsiţi eroarea (sau erorile) în fiecare din • punctele următoare şi explicaţi cum pot fi corectate aceste erori: • a)Fie definită clasa Time, care conţine următorul prototip: • void ~Time( int ); • b)Următoarea secvenţă reprezintă o porţiune a definiţiei clasei Time. class Time { • public: • // prototipurile functiilor • private: • int hour = 0 ; • int minute = 0; • int second = 0 ; • }; • c) Fie definită clasa Employee. Ea conţine următorul prototip: • int Employee ( const char *, const char *) ; • IV. Definiţi clasa Dreptunghi cu următoarele atribute: • -date membru: • lungime şi lăţime, fiecare avînd valoarea implicită 1; • -funcţiile membru : • perimetrul şi aria pentru calcularea perimetrului şi a arieidreptunghiului; • b) funcţiile de afişare a perimetrului şi ariei; • -un constructor pentru iniţializarea datelor membru cu 1; • -un destructor; • - o funcţie prieten, care va verifica dacă perimetrul şi aria dreptunghiului au valori reale între 0.0 şi 20.0.
Lucrarea de laborator 1 Tema: Utilizarea claselor 1. Să se creeze fişierul STRING1.h, care va conţine definiţia tipului abstract Sir pentru instanţierea şirurilor de caractere. Clasa Sir va conţine: date membru: -un pointer spre zona de memorie în care se păstrează şirul ; -lungimea şirului; metode (numai prototipurile): -constructor pentru iniţializarea obiectului cu pointerul spre şirul de caractere(el se păstrează în memoria heap); -constructor de copiere; -destructor; -funcţia ce returnează lungimea şirului; -funcţia de afişare a şirului de caractere; funcţii prieten(friend): -funcţia ce returnează cel mai lung cuvînt din şir(adică cea mai lungă consecutivitate alcătuită numai din litere); -funcţia care află dacă şirul este palindrom( palindrom - şirul care se citeşte la fel de la dreapta la stînga ca de la stînga la dreapta). 2. Să de scrie definiţiile funcţiilor membru şi a funcţiilor prieten ale clase Sir( dinfişierulSTRING1.h) în fişierul STRING 1.cpp. 3. Să se scrie un program care va utiliza fişierul STRING 1.cpp. şi va realiza următoarele operaţii asupra obiectelor de tip SIR : -iniţializarea obiectelor de tip Sir; -citirea de şiruri de caractere de la tastatură; -copiere de obiecte de tip Şir; -atribuire de obiecte de tip Sir; -afişarea şirurilor de caractere cu menţiunea, dacă sunt sau nu palindroame; -afişarea celui mai lung cuvînt din fiecare şir citit.
II. Moştenirea 1. Noţiune de moştenire Moştenirea reprezintă proprietatea claselor prin care o clasă nou construită poate prelua datele şi metodele clasei mai vechi. Proprietatea de moştenire se realizează cu ajutorul claselor derivate. Clasa derivată se află întotdeauna pe un nivel imediat inferior celui corespunzător clasei de bază. • Moştenire simplă • o ierarhie de clasă în care fiecare clasă derivată are o singură clasă de bază. • Exemplu. • Fie ierarhia de mai jos: • parallelogram • dreptunghi romb • patrat • Clasa dreptunghi este o clasă derivată a clasei paralelogram, iar clasa paralelogram este o clasă de bază a clasei dreptunghi. Clasa romb este o clasă derivată a clasei paralelogram, iar clasa parallelogram este o clasă de bază a clasei romb. Clasa patrat este o clasă derivată a clasei dreptunghi, iar clasa dreptunghi este o clasă de bază a clasei patrat. Astfel, o ierarhie de concepte conduce la o ierarhie între clasele care implementează conceptele ierarhice respective. Moştenirea este multiplă - proprietatea unei clase de a deriva din mai multe clase de bază. Exemplu. Fie ierarhiade mai jos: dreptunghi romb patrat Pătratul se poate defini ca un romb care are un unghi drept. În acest caz, clasa patrat devine o clasă derivată a clasei romb, iar aceasta devine o clasă de bază a clasei patrat. Pătratul se poate defini ca un dreptunghi care are toate laturile egale. În acest caz, clasa patrat devine o clasă derivată a clasei dreptunghi, iar aceasta devine o clasă de bază a clasei patrat. paralelogram
Accesul în clasa de bază Modificatorul de protecţie din lista_clasalor_ de_baza Accesul în clasa derivată a elementelor moştenite private protected public private protected public private private private public public public inaccesibil private private inaccesibil protected public 2. Modificatori de protecţie 1. Noţiune de moştenire Relaţia de derivare între două clase se exprimă la definirea clasei derivate: class nume_clasa_derivata: lista_claselor_de_baza { // elementele specifice clasei derivate}; Exemple: 1. class cl2 : cl1{ … }; //cl2 este o clasă derivata a //clasei cl1 2. class cl2 : private cl1{ … }; //clasa de baza cl1 //are modificatorul private 3. class cl : cl1, public: cl2 { …}; //clasa derivata cl //are două clase de baza 3. Constructori şidestructori 4. Conversii Constructorii şi destructorii sunt funcţii membru care nu se moştenesc. Exemplu: class A {…}; class B {…}; class C: public A, public B {…}; class D: public C {…}; Constructorul clasei D trebuie să conţină suficienţi parametri pentru iniţializarea membrilor claselor superioare lui(superclase). Ordinea de construcţie este: A, B, C, D (conform ordinii din lista de moştenire). Antetul constructorului are forma: D :: D(…) : A(…), B(…), C(…) Compilatorul C++ execută în mod automat o serie de conversii pentru datele de tipuri predefinite: 1. Aplicarea unui operator la operanzi de tipuri diferite. 2. Parametrul efectiv al unei funcţii are un tip diferit de parametrul formal care îi corespunde. 3. Tipul din antetul unei funcţii diferă de cel al expresiei aflate în instrucţiunea return care realizează revenirea funcţiei. Utilizatorul poate, în anumite cazuri, să impună realizarea unor conversii cu ajutorul operatorului cast(tip): (tip)operand sau tip( expresie )
Subiecte pentru autoevaluare • Daţi definiţia termenilor: moştenire, moştenire multiplă, clasă de bază, clasă derivată. • 2. De ce conversia tipului pointerului clasei de bază în tipul pointerului clasei derivate se consideră periculoasă. • 3. Unii programatori preferă să nu utilizeze modificatorul de protecţie protected, considerînd, că, astfel, se încalcă încapsularea clasei de bază. Care sunt priorităţile utilizării modificatorului protected în comparaţie cu utilizarea modificatorului private? • 4. Rescrieţi programul care realizează ierarhia punct, cerc, cilindru, fără a utiliza moştenirea. Apreciaţi priorităţile fiecărei abordări( programarea orientată pe obiecte şi programarea modulară) pentru rezolvarea acestei probleme. • 5. Rescrieţi programul, ce realizează ierarhia punct, cerc, cilindru, pentru a realiza ierarhia punct, pătrat, cub, utilizînd ambele abordări: programarea orientată pe obiecte şi programarea modulară. • 6. Elaboraţi ierarhia patrulatere, cu cît mai multe nivele posibil. Clasa patrulatere se va considera clasă de bază, avînd date membru protejate coordonatele (x,y) ale celor patru vîrfuri. Creaţi obiecte ale fiecărei clase din ierarhie şi afişaţi-le. • 7. Elaboraţi programe-draiveri pentru una din ierarhiile studiate, care să ilustreze rezultatul utilizării constructorilor şi destructorilor ai clasei de bază şi a claselor derivate.
III. Polimorfism 1. Funcţii virtuale Fie o clasă clasa1 care conţine metodele m1 şi m2. Metoda m1 o apeleazăpe m2. Fie clasa clasa2 moşteneşte clasa clasa1. Clasa clasa2 conţine o metodă m2 proprie, dar nu conţine o metodă m1. Declarăm un obiect O2 de tipul clasa2. În acest caz, O2.m1() va apela metoda m2 din clasa1, dar nu m2 din clasa2. O astfel de metodă de selecţie a metodei prin obiectul care o apelează se numeşte selecţia statică. Codul de apel al funcţiei este obţinut la compilare şi rămîne nemodificat pe parcursul execuţiei programului. Pentru ca metoda m1 a obiectului O2 să apeleze metoda m2 din clasa clasa2 vom declara metoda m2 atît din clasa de bază clasa1 cît şi din clasa derivată clasa2 ca virtuale, utilizînd cuvîntul cheie virtual. Astfel, se va realiza o selecţie dinamică sau virtuală. Adică, O2.m1() va apela metoda m2 din clasa2. Dacă o funcţie e declarată virtuală, atunci ea rămîne virtuală pentru orice nivel ierarhic mai jos al structurii ierarhice date. Nu este nevoie ca o funcţie declarată virtuală într-o clasă de bază să fie precedată de cuvîntul cheie virtual în clasele derivate Dacă o funcţie e declarată virtuală, atunci ea rămîne virtuală pentru orice nivel ierarhic mai jos al structurii ierarhice date. Nu este nevoie ca o funcţie declarată virtuală într-o clasă de bază să fie precedată de cuvîntul cheie virtual în clasele derivate.
Exemplu: #include <iostream.h> class clasa1 { public: void m1() {m2();} virtual void m2() {cout<<”unu”<<endl;} }; class clasa2: public clasa1 { virtual void m2() {cout<<”doi”<<endl;} }; clasa1 O1; clasa2 O2; main() { O1.m1(); O2.m1(); } În rezultat se va tipări unu doi Clase abstracte repreyintă clasele, pentru care programatorul nu intenţionează să instanţieze obiecte. Ele se utilizează ca clase de bază in ierarhii, de obicei ele se numesc clase abstracte de bază.Clasele pentru care se pot instanţia obiecte se numesc clase concrete. O clasă devine abstractă, dacă conţine una sau mai multe declaraţii de funcţii virtuale ca funcţie virtuală pură. O funcţie este virtuală pură, dacă corpul ei în declaraţie are valoarea 0(iniţializatorul este egal cu 0). De exemplu: virtual float earnings() const = 0 ; // o functie virtuală pură Dacă, o clasă derivată a unei clase, ce conţine o funcţie virtuală pură, nu conţine descrierea acestei funcţii , atunci clasa derivată este, la fel, o clasă abstractă. 1. Funcţiile virtuale sunt funcţii membru nestatice. 2. Constructorii nu pot fi funcţii virtuale. 3. Destructorii pot fi funcţii virtuale. 4. Funcţiile inline nu pot fi funcţii virtuale.
2. Noţiune de polimorfism Polimorfismul reprezintă posibilitatea pentru obiectele diferitor clase, legate prin moştenire, să reacţioneze în mod diferit la apelul uneia şi aceleaşi funcţii membru. De exemplu, dacă clasa Dreptunghi este derivată de la clasa Patrulater, atunci un obiect al clasei Dreptunghi reprezintă o variantă mai concretă a clasei Patrulater. Operaţia (aşa ca perimetrul, aria), care poate fi efectuată pentru obiectul clasei Patrulater, poate fi efectuată şi pentru obiectul clasei Dreptunghi. Utilizînd funcţii virtuale şi polimorfismul, programatorul poate dirija cu proprietăţile comune ale obiectelor, fără a ţine cont de specificul lor. Polimorfismul contribuie la lărgire: soft-ul, care utilizează polimorfismul, se scrie independent de tipul obiectelor, cărora li se trimit comunicările. Astfel, tipurile noi de obiecte, care trebuie să reacţioneze la comunicările corespunzătoare, pot fi incluse într-un astfel de sistem fără a se modifica bazele lui. Clasa abstractă determină interfaţa pentru diferite tipuri de elemente ale ierarhiei claselor. Deşi nu pot fi create obiecte ale claselor abstracte, pot fi declaraţi pointeri la aceste clase. Aceşti pointeri pot fi utilizaţi pentru operarea polimorfă cu obiectele claselor derivate. Polimorfismul se realizează cu ajutorul funcţiilor virtuale. Dacă apelul unei funcţii virtuale se realizează cu ajutorul pointerului clasei de bază(sau referintă), atunci C++ alege corect funcţia redefinită din clasa derivată corespunzătoare, care este legată cu obiectul dat.
Subiecte pentru autoevaluare 1.Ce este o funcţie virtuală? Daţi exemple cînd utilizarea funcţiilor virtuale este binevenită. 2. Explicaţi noţiunea de polimorfism. De ce polimorfismul reprezintă o alternativă puternică la operatorul switch? Daţi exemple. 3. Care este diferenţa dintre legătura statică şi legătura dinamică. 4. Ce sunt clasele abstracte? Dar clasele concrete? 5. Modificaţi exemplul ” Sistemul de calcul al salariului”, astfel : -adăugaţi datele membru birthDate(obiect de tipul Date) şi DepartmentCode (identificatorul secţiei de tipul int) în clasa Employee; -presupuneţi, că calcularea salariului se efectuiază o dată pe lună; -calculaţi salariul fiecărui angajat(utilizînd polimorfismul), adăugînd un premiu de $100 , dacă în luna respectivă e ziua de naştere a angajatului.
IV. Evaluarea cunoştinţelor studenţilor la elaborarea produselor program Evaluarea este o componentă importantă a spiralei educaţiei: predare, învăţare şi evaluare. Aşa cum este proiectată evaluarea, tot aşa se produc predarea şi învăţarea. De exemplu, dacă vom pune accentul numai pe verificarea volumului de cunoştinţe, atunci studenţii vor învăţa definiţii, reguli, legi sau concepte la nivelul de memorie şi mai puţin la nivelul reflecţiei. Evaluarea este un proces complex de comparare a rezultatelor activităţii educaţionale cu obiectivele planificate(evaluarea calităţii), cu resursele utilizate(evaluarea eficienţei) sau cu rezultatele anterioare(evaluarea progresului). Metode de evaluare a cunoştinţelor Metodele tradiţionale de evaluare(apreciază în special cunoştinţele studenţilor): probe scrise( lucrări scrise, rezolvare de probleme) probe orale(discuţii, victorine etc.) probe practice(lucrări de laborator) Metodele netradiţionale(alternative) de evaluare apreciază mai ales ceea ce pot să facă studenţii, adică priceperile, deprinderile, abilităţile, dar şi domeniul afectiv, atitudinile care sunt mai greu cuantificabile prin metode clasice de evaluare. Observarea sistematică Investigaţia Proiectul Portofoliul Autoevaluarea Testele pedagogice
Testele pedagogice Vom numi test pedagogic un sistem de sarcini(probe, itemi de o formă specială, cu un anumit conţinut, aranjate în ordinea creşterii complexităţii – sistem ce se elaborează cu scopul de a evalua structura şi măsura calitativ nivelul de pregătire al studenţilor. Proiectarea testelorcuprinde cîteva etape: - Determinarea tipului de test - Asigurarea calităţilor/ caracteristicilor testului - Definirea domeniilor de evaluare şi a cunoştinţelor - Elaborarea matricei de specificaţii - Scrierea itemilor - Elaborarea baremelor de notare - Experimentarea itemilor - Administrarea testului - Diseminarea rezultatelor. Vom numi item(sarcină a testului) unitatea minimală componentă a testului, care presupune o anumită reacţie(răspuns) a celui testat(examinat). Caracteristicile testului sunt: validitate, fidelitate, obiectivitate, aplicabilitate. Tipuri de itemi: I. Itemi obiectivi: a) cu alegere duală; b) cu alegere multiplă; c) de tip pereche; III. Itemi cu răspuns deschis: a)rezolvare de probleme (alcătuire de programe); b)eseu structurat; c)eseu nestructurat; II. Itemi semiobiectivi: a) întrebări structurate; b) cu răspuns scurt;
Concluzie Lucrarea de faţăa fost utilizată pentru predarea cursului de programare orientată pe obiecte studenţilor anului III ai colegiului Financiar-Bancar, specialitatea “Cibernetică şi informatică economică”. S-a observat, că pentru înţelegerea noţiunilor teoretice este nevoie de utilizarea a cît mai multor programe ilustrative. O importanţă deosebită pentru însuşirea cursului dat o are lucrul de sinestătător al studenţilor, care se poate realiza rezolvînd subiectele pentru autoevaluare propuse de autor, şi lucrînd asupra temelor pentru investigaţie şi proiecte. Pentru verificarea cunoştinţelor teoretice şi practice studenţilor li s-au propus teste docimologice şi lucrări de laborator. S-a constatat, că majoritatea studenţilor manifestă un interes deosebit pentru programarea orientată pe obiecte, însuşind bine noţiunile şi tehnologiile de bază. Unii studenţi, însă, au avut nevoie de mai mult timp pentru asimilarea materiei teoretice şi mai ales pentru elaborarea programelor. Luînd în consideraţie utilizarea tot mai largă a programării orientate pe obiecte în plan mondial şi interesul sporit al studenţilor pentru această disciplină, consider, că e necesar de a mări importanţa acestui curs în programele de studiu la specialităţile legate de programare din colegii, şi de a introduce studierea noţiunilor de bază în cursul de informatică la profilul real al liceelor.l