PROGRAMARE ORIENTATĂ OBIECT (C++) 2005- · PDF fileProgramare orientatăobiect (POO): Decide...

Click here to load reader

  • date post

    30-Aug-2019
  • Category

    Documents

  • view

    15
  • download

    0

Embed Size (px)

Transcript of PROGRAMARE ORIENTATĂ OBIECT (C++) 2005- · PDF fileProgramare orientatăobiect (POO): Decide...

  • PROGRAMARE ORIENTAT OBIECT(C++)

    2005-2006

    Prof. univ. dr. G. GRIGORAwww.infoiasi.ro/~grigoras/poo/poo.html

    Exemple utilizate la curs:http://thor.info.uaic.ro/~dlucanu/pc/pcII/html/ex_index.htm

  • POO(C++) 2005-2006 Gh GRIGORAS 2

    BIBLIOGRAFIE

    Liviu Negrescu : Limbajele C si C++ pentru incepatori, vol II, III, Microinformatica, Cluj-Napoca, Ed.Libris 1997 H. Schildt: C++ manual complet, Teora, 2000D. Kaler, M.J. Tobler, J. Valter: C++, Teora, 2000Bjarne Stroustrup: The C++ Programming Language, Adisson-Wesley, 3nd edition, 1997Stanley B. Lippman: C++ Primer, Addison Wesley, 1992K.Jamsa, Succes cu C++, Editura All 1997

    Manuale electronice

    http://www.infoiasi.ro/fcs/biblioteci.phphttp://lib.info.uaic.ro/index.php

    Peter Mller : Introduction to Object-Oriented Programming Using C++ Bruce Eckel : Thinking in C++, 2nd Edition *** : Online C++ tutorial

  • POO(C++) 2005-2006 Gh GRIGORAS 3

    CERINE

    EVALUAREActivitatea la laborator (AL), testele scrise (TS)AL >= 6, TS >= 4AL: fiecare tema de laborator va fi notata cu note de la 1 la 10 TS: 2 teste scrise (15 aprilie, 20 mai), fiecare test coninnd 8 ntrebri gril i 1-2 probleme.formula notei finale: 40% AL + 60% TS

    Rexaminarea const din:1 test scris care contribuie cu 60% din nota final rezultatul obinut la activitatea de laborator

  • POO(C++) 2005-2006 Gh GRIGORAS 4

    Ce este C++

    C++ este o extensie a lui C (Bjarne Stroustrup, AT&T Labs, 1984)

    Programele C scrise bine sunt si programeC++Programele care sunt si programe C siprograme C++ au acelasi inteles(semantica); exceptiile sunt minore.Exist totui cod C care nu este C++:

    void f(); void g(){f(2);} struct S{int x, y;} f();void g(struct S {int x, y;} y);

  • POO(C++) 2005-2006 Gh GRIGORAS 5

    Ce este C++

    Este un C mai bun;Programatorii buni in C au un dezavantaj: au tendina sa scrie cod C++ in stilul C pierznd beneficiileaduse de C++Suport abstractizarea datelorSuport programare orientat obiectSuport programare generic

  • POO(C++) 2005-2006 Gh GRIGORAS 6

    Paradigme de programare

    C++ nu a fost proiectat s impuna un anume stil de programare, el suporta stilurile (paradigmele) tradiionale ipe cele avansate:

    Programare procedural: Decide ce proceduri sunt necesare, si alege cei mai buni algoritmi pentru eleProgramare modular: Decide ce module sunt necesare, mparte programul asa fel incat datele sa fie ascunse n moduleTipuri abstracte de date (Tipuri definite de utilizator): Decide ce tipuri ii sunt de folos si construete cte un set complet de operaii pentru acesteaProgramare orientat obiect (POO): Decide ce clase suntnecesare, proiecteaz cate un set complet de operaii pentruacestea si expliciteaz prile comune ale lor prin relaia de motenire (derivare, generalizare), i folosete polimorfismulProgramare generic: Decide algoritmii ce sunt necesari iparametrizeaz-i pentru a funciona pe o varietate de tipuri i de structuri de date

  • POO(C++) 2005-2006 Gh GRIGORAS 7

    CLASE SI OBIECTE o prim viziune

    Un obiect este caracterizat de:nume un identificatoratribute date de un anume tip

    valorile atributelor la un moment dat definesc o stare a obiectului

    metode (servicii, operaii) funcii ceacceseaz atributele obiectului modificndeventual starea acestuia; ele definesccomportarea obiectului

  • POO(C++) 2005-2006 Gh GRIGORAS 8

    CLASE SI OBIECTE o prim viziune

    O clas descrie unul sau mai multe obiecte cepot fi precizate printr-un set uniform de atribute(date) i metode(funcionalitate).

    Orice obiect are memoria sa proprie unde se pstreaz valorile tuturor atributelor sale

    Orice obiect are un tip; un obiect este o instan a unei clase

    Clasa definete caracteristicile si comportareaobiectelor

  • POO(C++) 2005-2006 Gh GRIGORAS 9

    CLASE SI OBIECTE Reprezentare grafic

    on()off()get_marime()

    marimeculoare

    Bec

    get_val()get_reset_val()increment()decrement()reset()

    valreset_val

    Contormetode

    atribute

    nume clasa

  • POO(C++) 2005-2006 Gh GRIGORAS 10

    Clasa cont

    Specificarea claseiUn cont bancar:

    are un titular, sold, o rat a dobnzii, numar de cont se pot efectua operaii de depunere, extragere, actualizare sold

    Extragerea atributelor:titular, sold, rat a dobnzii, numr de cont

    Extragerea metodelor:depunere, extragere, actualizare sold

    Completare specificaieactualizare sold data ultimei operaii

  • POO(C++) 2005-2006 Gh GRIGORAS 11

    Clase - proiectare

    Definiia unei clase presupune:combinarea datelor cu operaiile ce se aplic acestoraascunderea informaiei

  • POO(C++) 2005-2006 Gh GRIGORAS 12

    Combinarea datelor cu operaiile

    datele si operaiile ce se aplic asupra lor sunt incluse n aceeai unitate sintactic; n acest mod datele i procesele devin legate

    sold

    depuneredepune()

    sold

    Cont

  • POO(C++) 2005-2006 Gh GRIGORAS 13

    ASCUNDERE i NCAPSULARE

    Ascunderea informaiei:Modul de structurare a datelor nu este cunoscut: datele sunt declarate intr-o seciune privat a clasei.Accesul la date, pentru consultare, modificare, etc. se face numai prin intermediul funciilor clasei: acestea sunt declarate intr-o seciune public a clasei interfaa clasei.Pot exista date publice precum si funcii private: decizia este a programatorului.

    ncapsulare = Combinare + AscundereDatele si funciile (operaiile) care pot aciona asupra datelor sunt incluse n aceeai unitate sintacticn C++ acest lucru se realizeaza prin tipul utilizator struct i class

  • POO(C++) 2005-2006 Gh GRIGORAS 14

    AVANTAJE

    Combinarea datelor:definete clar ce structuri de date sunt manevrate i care sunt operaiile legale asupra lor.programul capt modularitate.scade riscul alterrii datelor din exterior.faciliteaz ascunderea informaiei.

    Ascunderea informaiei:programe mai sigure i mai fiabileelibereaz clasele utilizator de grija manevrrii datelor previne apariia erorilor

  • POO(C++) 2005-2006 Gh GRIGORAS 15

    AVANTAJE

    ncapsulare: Combinare + Ascunderea informaiei =

    Protejarea datelor

    previne apariia erorilor prin limitarea accesului la dateasigur portabilitatea programelor faciliteaz utilizarea excepiilor interfaa unei clase = operaiile cu care o clas utilizator poate manevra datele

  • POO(C++) 2005-2006 Gh GRIGORAS 16

    Structurarea nivelului de acces la informaie

    Limitarea accesuluila informaie

    Seciuni private

    Seciunipublice

  • POO(C++) 2005-2006 Gh GRIGORAS 17

    Clasa cont Fiierul cont.hclass Cont{public:

    Cont();~Cont();void depune(double);void extrage(double);void setDob(double);

    private:char *titular;double sold;double rataDob;char *dataUltOp;void actualizeazaSold();void atribuieNrCont();

    };

  • POO(C++) 2005-2006 Gh GRIGORAS 18

    Clasa cont Fiierul cont.cpp

    Cont::Cont(){

    titular = NULL;dataUltOp = NULL;sold = 0;rataDob = 0;atribuieNrCont();

    }

    Cont::~Cont(){

    delete titular;delete dataUltOp;

    }

    void Cont::depune(double suma){

    sold += suma;}

    void Cont::extrage(double suma){

    actualizeazaSold();if(suma > sold)

    throw "Sold insuf.";sold -= suma;

    }

  • POO(C++) 2005-2006 Gh GRIGORAS 19

    Clasa cont Fiierul demo.cpp

    void main(){Cont cont;cont.depune(2000);}

    cont.sold += 2000;

    error C2248: 'sold' : cannot access private member declared in class 'Cont'

  • POO(C++) 2005-2006 Gh GRIGORAS 20

    Clase si Obiecte - Tipuri abstracte de dat

    Clasa, Obiect o alta viziune (definiie):O clasa este o implementare a unui tip de dat abstract. Ea definete:

    atribute care implementeaz structura de dat respectivmetode care implementeaz operaiiletipului de dat abstract.

    Un obiect este o instan a unei clase. El este unic determinat de numele su idefinete o stare reprezentat de valorileatributelor sale la un moment dat

  • POO(C++) 2005-2006 Gh GRIGORAS 21

    Stiva

    tipul de data abstract Stivaentitati de tip dat: liste LIFOoperaii:

    push() pop()top()

    push()pop()top()

    tab[0..MAX-1]virf

    Stiva

  • POO(C++) 2005-2006 Gh GRIGORAS 22

    Stiva

    // Stiva.h#define MAX_STIVA 10class Stiva {public:

    Stiva();~Stiva(){};void push(char);void pop();char top();bool este_vida();

    private:char tab[MAX_STIVA];int virf;

    };

  • POO(C++) 2005-2006 Gh GRIGORAS 23

    Stiva

    // Stiva.cppStiva::Stiva(){ virf = -1;}void Stiva::push(char c){

    if (virf == MAX_STIVA-1) throw "Depasire superioara.";

    tab[++virf] = c;}void Stiva::pop(){

    if (virf < 0) throw "Depasire inferioara.";virf--;

    }char Stiva::top(){

    if (virf < 0) throw "Depasire inferioara.";return tab[virf];

    }

  • POO(C++) 2005-2006 Gh GRIGORAS 24

    Stiva: Stiva_demo.cpp

    void main(void){Stiva S; char c='a';try {

    while (true){S.push(c++); cout

  • POO(C++) 2005-2006 Gh GRIGORAS 25

    Utilizarea de clase

    exist multe bibloteci de clase STLMFCetc

    pentru utilizare, trebuie cunoscut doar interfaa (elementele publice)

    nu intereseaz implementarea

    programul care utlizeaz clasa este independent de implementarea clasei

  • POO(C++) 2005-2006 Gh GRIGORAS 26

    Utilizarea de clase

    Exemplu: stringmy-string.h STL

    // my_string.hclass string{public:

    // Constructori/destructoristring();string(char* new_string);string(const string& new_string);. . .~string();

  • POO(C++) 2005-2006 Gh GRIGORAS 27

    Utilizarea de clase

    // Operatorifriend string operator+ (const string& lhs,

    const string& rhs); string& operator+=