tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a

19
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ării procedurale, 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 Introducere

Upload: minor

Post on 20-Jan-2016

41 views

Category:

Documents


2 download

DESCRIPTION

Introducere. Tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a programelor şi ordinea utilizării acestor metode şi mijloace. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a

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ării procedurale, 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ă.

Introducere

Page 2: Tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a

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:

class nume{lista_elementelor_membru};

Page 3: Tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a

Lista elementelor membru poate conţine:

declaraţii de date;

declaraţii de funcţii;

prototipuri de funcţii;

modificatori de protecţie.

Datele declarate printr-o definiţie de clasă

se numesc date membru

Funcţiile definite sau pentru care este prezent numai prototipul, în definiţia clasei, se numesc funcţii membru sau metode.

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);} };

Page 4: Tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a

Un obiect este o dată de un tip definit printr-o clasă. Se spune că obiectul este o instanţiere a clasei respective.

Formatul declaratiei unui obiect: nume_clasă nume_obiect;

Obiecte

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*33.000000 8.0000000.586207 0.034483

Datele membru se alocă distinct la fiecare instanţiere a clasei.. O excepţie o constituie datele membru care au clasa de memorie static, ea este o parte comună pentru toate instanţierile clasei şi există într-un singur exemplar.

Funcţiile membru sunt î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ă folosind operatorul punct sau săgeată.

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);

Page 5: Tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a

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.

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.

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 clasei dc:

dc d1; // d1: zi=1, luna=1, //an=2003dc d2(15, 9, 2000); // d2: zi=15, luna=9, //an=2000dc d3(15, 9); // d3: zi=15, luna=9, //an=2000dc d4(15, ”septembrie”, 2000); // se //apeleaza constructorul cu parametrul //char *denl dc *pd = new dc(15, 9);

Page 6: Tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a

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*icomplex z1(1); // z1 = 1 + 0*icomplex z2 = 1; // z2 = 1 + 0*icomplex 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 obisnuitaclasa c1 = c;// se apeleaza //constructorul de copiere // c1 este o copie a lui c

Destructorii sunt funcţii, care seapelează la sfîrşitul timpului de viaţă a unui obiect pentru disponibilizarea resurselor ocupate de către acesta. În interiorul clasei nume_clasa el se scrie astfel: ~nume_clasa()În exteriorul clase nume_clasa el se scrie astfel: nume_clasa :: ~nume_clasa()

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.

Funcţie prieten (Friend function)

Destructori

Page 7: Tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a

 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 = b8. Creaţi clasa Date, care să permită:a)      Afişarea datelor în cîteva formate:DD YYYYMM/DD/YYSeptembrie 1, 2002b)      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.

Subiecte pentru autoevaluare

Page 8: Tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a

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 :a) perimetrul şi aria pentru calcularea perimetrului şi a

ariei dreptunghiului;

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.

Testul ITema: Utilizarea claselor.

Page 9: Tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a

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( din fişierul STRING1.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.

Lucrarea de laborator 1

Tema: Utilizarea claselor

Page 10: Tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a

II. Moştenirea 1. Noţiune de moştenire

 

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 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ş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

Page 11: Tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a

  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 cl12.                  class cl2 : private cl1{ … }; //clasa de baza cl1 //are modificatorul private3.                  class cl : cl1, public: cl2 { …}; //clasa derivata cl //are două clase de baza

2. Modificatori de protecţie

Accesul în clasa de bază

Modificatorul de protecţie din lista_clasalor_ de_baza

Accesul în clasa derivată a elementelor moştenite

privateprotectedpublicprivateprotectedpublic

privateprivateprivatepublicpublicpublic

inaccesibilprivateprivateinaccesibilprotectedpublic

1. Noţiune de moştenire

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(…)

3. Constructori şi destructori

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 ajutoruloperatorului cast (tip):

(tip)operand sau tip( expresie )

4. Conversii

Page 12: Tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a

1. 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.

 

Subiecte pentru autoevaluare

Page 13: Tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a

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.

Page 14: Tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a

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ăriunudoi

Clase abstracterepreyintă 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.

Page 15: Tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a

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.

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.

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.

Page 16: Tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a

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.

Subiecte pentru autoevaluare

Page 17: Tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a

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.

IV.              Evaluarea cunoştinţelor studenţilor la elaborarea produselor program

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

Page 18: Tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a

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.

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.

Proiectarea testelor cuprinde 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.

Tipuri de itemi:

I. Itemi obiectivi: a) cu alegere duală; b) cu alegere multiplă; c) de tip pereche;

II. Itemi semiobiectivi: a) întrebări structurate; b) cu răspuns scurt;

III. Itemi cu răspuns deschis: a)rezolvare de probleme (alcătuire de programe); b)eseu structurat; c)eseu nestructurat;

Page 19: Tehnologia program ării reprezintă totalitatea de metode şi mijloace de elaborare a

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