68
Zoltan Hascsi Programare orientată pe obiecte - Java – cursul 1 – O lume de obiecte într-un univers de date

curs_poo_01.pdf

Embed Size (px)

DESCRIPTION

curs poo 01

Citation preview

Page 1: curs_poo_01.pdf

Zoltan Hascsi

Programare orientată pe obiecte - Java

– cursul 1 –

O lume de obiecteîntr-un univers de date

Page 2: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 2Zoltan Hascsi

• Date• Variabile• Tipul primitiv de date• Date de program - literale• Structuri de date• Obiecte şi clase de obiecte• Încapsularea şi ascunderea datelor• Referinţe• O lume de obiecte• Clasa: unitate în diversitate• Reutilizare la pachet

Page 3: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 3Zoltan Hascsi

Date

• Data este o unitate informaţională cu valoare semantică.• Exemple de date: un număr, o valoare de adevăr, un

caracter, un vector de numere , un şir de caractere, un număr complex, un nume de persoană, un titlu de carte, cuprinsul unei cărţi, un arbore genealogic, o carte, un fişier, o moleculă dintr-un program de simulare a reacţiilor chimice, un pixel, un pătrat, avatarul unui user, un meniu, o fereastră de program, un program, un calculator virtual, ...

• Datele pot fi simple (un număr, un caracter) sau complexe (o carte, un avatar, o fereastră de program)

• Datele complexe sunt date agregate, compuse din alte date mai simple.

Page 4: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 4Zoltan Hascsi

Date

• Programele operează cu date şi asupra datelor.• Execuţia unui program implică execuţia unor instrucţiuni

ce citesc (primesc) date, modifică date, generează (calculează) date noi şi scriu (transferă) date.

• Datele sunt simple şiruri de biţi din perspectiva calculatorului, împachetaţi în octeţi sau multipli de octeţi pentru eficientizarea transferului şi prelucrării.

• Valoarea semantică a datelor este la nivelul programatorului. Un şir de biţi (de octeţi) poate reprezenta un pixel într-un anumit program, în timp ce în altul acelaşi şir poate însemna un depozit bancar.

Page 5: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 5Zoltan Hascsi

Tipuri de date

• date simple = valori primitive• date complexe = compuse din date mai simple, primitive

sau la rândul lor (mai puţin) complexe.

• Exemple de date simple:– un număr: 1999– un caracter: â

• Exemple de date complexe:– un titlu de carte: Programarea Orientată pe Obiecte– o culoare: roşu– un pixel: pixelul cu coordonatele 110 şi 70 având culoarea roşu

• În Java toate datele complexe sunt obiecte.

Page 6: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 6Zoltan Hascsi

Tipuri de date

• date simple, sau standard sau de tip primitiv• date complexe, sau agregate sau structuri de date

• În Java, ca în majoritatea limbajelor orientate pe obiecte, toate datele complexe sunt încapsulate în interiorul obiectelor. Încapsularea facilitează tratamentul datelor agregate ca un tot unitar şi respectarea semanticii acestora. Tipul abstract de date merge şi mai departe prin ascunderea datelor în interiorul obiectelor, citirea, prelucrarea şi transferul datelor fiind permisă numai prin intermediul procedurilor (metodelor) specifice fiecărui obiect, fiecărui tip de dată complexă.

Page 7: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 7Zoltan Hascsi

Atomi şi molecule

• O analogie între programare şi chimie:

• Analogia nu este doar teoretică! Se pot implementa şi executa aplicaţii din cele mai variate cu date reprezentate prin combinaţii moleculare (molecular computing, DNA computing, membrane computing, etc).

date de tip primitiv

atomi puţine tipuri

date agregate molecule număr nelimitat de tipuri

Page 8: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 8Zoltan Hascsi

• Date• Variabile• Tipul primitiv de date• Date de program - literale• Structuri de date• Obiecte şi clase de obiecte• Încapsularea şi ascunderea datelor• Referinţe• O lume de obiecte• Clasa: unitate în diversitate• Reutilizare la pachet

Page 9: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 9Zoltan Hascsi

Variabile

• Variabilele sunt entităţi fizice capabile să stocheze date.• Din perspectiva calculatorului o variabila este o entitate

fizică capabilă să stocheze o dată, dar nu orice dată ci numai acea dată care poate fi stocată şi recuperată fără a fi alterată, fără a se pierde semnificaţia ei.

• Din perspectiva programatorului, variabila este un nume simbolic care denotă entitatea ce stochează o dată.

• În Java programatorul nu are acces la variabile decât prin intermediul numelor simbolice†.

† În C++ putem avea acces direct la variabile prin intermediul adreselor. În Java noţiunea de adresă de variabilă nu există.

Page 10: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 10Zoltan Hascsi

Tipuri de variabile

• Variabile ce stochează date de tip primitiv• Variabile ce stochează obiecte

• Variabilele ce stochează obiecte sunt în general variabile agregate, structuri de variabile.

• Exemple de variabile simple ce stochează:– un număr: int 1999– un caracter: char â

• Exemple de variabile complexe ce stochează:– un titlu de carte: Title Programarea în Java– o culoare: Color roşu– un pixel: Pixel 110 70 roşu

Page 11: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 11Zoltan Hascsi

Variabile obiect sau variabile referinţă?

• În Java nu există adrese absolute (pointeri).• În Java nu este posibil accesul direct la obiecte. Nu

există posibilitatea de a da un nume unui obiect şi a folosi apoi acest nume ca înlocuitor al adresei obiectului în codul programului.

• Accesul la obiecte este indirect, prin intermediul unor variabile ajutătoare, variabilele referinţă.

• Variabilele referinţă sunt adresabile direct, prin nume, precum variabilele de tip primitiv. Valoarea acestora (care este o adresă de obiect) nu poate fi folosită decât pentru a accesa obiecte. Variabilele referinţă nu pot fi operanzi pentru operaţii aritmetice, precum pointerii din alte limbaje de programare.

Page 12: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 12Zoltan Hascsi

Tipuri de variabile în Java

• Variabilele ca entităţi adresabile direct din program, care pot fi desemnate prin nume, sunt numai de două feluri:

• variabile primitive • variabile referinţă

• Obiectele nu pot fi accesate decât indirect, prin intermediul variabilelor referinţă.

Page 13: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 13Zoltan Hascsi

• Date• Variabile• Tipul primitiv de date• Date de program - literale• Structuri de date• Obiecte şi clase de obiecte• Încapsularea şi ascunderea datelor• Referinţe• O lume de obiecte• Clasa: unitate în diversitate• Reutilizare la pachet

Page 14: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 14Zoltan Hascsi

Tipul primitiv de variabilă

• Stochează o dată (o valoare) de tip primitiv.• Numele variabilei denotă chiar entitatea care stochează

data respectivă.• int year;

• Atribuirea unei valori (stocarea unei date de tip primitiv).year = 1999;

numele variabilei spaţiu pentrustocarea datei

dată de tip primitiv(valoarea variabilei)

year

1999year 1999

dată de tip primitiv(literal)

atribuire

Page 15: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 15Zoltan Hascsi

Accesul datei de tip primitiv

• Este direct. Data de tip primitiv stocată într-o variabilă este accesibilă prin numele variabilei. Numele variabilei este chiar numele datei respective. Pentru tipul primitiv de date, data se confundă cu variabila. int year;year = 1999;int next_year;next_year = year; 1999 1999new_yearyear

Page 16: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 16Zoltan Hascsi

Operaţii cu date de tip primitiv

• Datele de tip primitiv pot fi operanzi pentru operaţiile predefinite. Operanzii sunt literale sau se află în variabilele ataşate operatorilor ce definesc operaţiile. int year;year = 1999;int next_year;next_year = year + 1;

1999year 2000new_year

1

operator

numele operanzilor

Page 17: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 17Zoltan Hascsi

Limitele şi riscurile tipului primitiv

• Într-un program de gestiune bancară:int contul_meu_curent;int depozitul_meu;contul_meu_curent = 1000;depozitul_meu = 500;contul_meu_curent = contul_meu_curent –

depozitul_meu;

• Nimic nu împiedică însă o atribuire de genul:depozitul_meu = 1000000;

• Atribuirea ar trebui condiţionată.• Accesul la variabilă ar trebui restricţionat.

contul_meu_curent

depozitul_meu

douăvariabile

independente

Page 18: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 18Zoltan Hascsi

• Date• Variabile• Tipul primitiv de date• Date de program - literale• Structuri de date• Obiecte şi clase de obiecte• Încapsularea şi ascunderea datelor• Referinţe• O lume de obiecte• Clasa: unitate în diversitate• Reutilizare la pachet

Page 19: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 19Zoltan Hascsi

Date de program

• Datele programului sunt fie generate de acesta, fie primite din afara programului, fie livrate direct de instrucţiunile programului.

• Acestea din urmă sunt constante reprezentate explicit în program prin valoarea lor.

• Ele nu au nume (precum variabilele) ci sunt reprezentate prin chiar valoarea lor scrisă cu caractere alfanumerice, de unde denumirea de literale.

year = 1999;

variabilă detip primitiv

literală

Page 20: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 20Zoltan Hascsi

Literale

• Literalele sunt numai de tip primitiv sau de tip String.• Literalele sunt scrise conform unor convenţii de notare,

specifice fiecărui tip primitiv.• La compilarea sau interpretarea programului un literal

este convertit în valoarea efectivă corespunzătoare, valoare ce este inserată printre instrucţiunile compilate şi/sau livrată ca atare programului în timpul execuţiei lui†.

• Literalul este ca o constantă de tip primitiv, dar fără nume, fiind utilizată doar în instrucţiunea care o foloseşte.

† Singura excepţie o reprezintă literalele şiruri de caractere (String). Dacă acelaşi literal String apare în mai multe locuri din program, compilatorul prepară un singur obiect String inserând mai multe referinţe la acesta.

Page 21: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 21Zoltan Hascsi

• Date• Variabile• Tipul primitiv de date• Date de program - literale• Structuri de date• Obiecte şi clase de obiecte• Încapsularea şi ascunderea datelor• Referinţe• O lume de obiecte• Clasa: unitate în diversitate• Reutilizare la pachet

Page 22: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 22Zoltan Hascsi

Agregarea datelor

• Depozitul este ataşat contului. Gestiunea depozitului este în strânsă corelaţie cu gestiunea contului. Are sens tratarea perechii formate din contul_meu_curent şi depozitul_meu ca un tot unitar.

• Un prim pas: structurile de date din limbajele procedurale, precum în Pascal (type) sau C(struct).

• Structura de date este un nou tip de date, format prin agregarea unor date de tip primitiv, dar şi date la rândul lor agregate.

Page 23: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 23Zoltan Hascsi

Structuri de date

• Exemplu (într-un program de gestiune bancară în C):• Se defineşte un nou tip de date (agregate):

struct Cont {int cont_curent;int depozit;

};

• Programul operează cu date de tip agregat:Cont contul_meu; contul_meu.cont_curent = 1000;contul_meu.depozit = 500;contul_meu.cont_curent = contul_meu.cont_curent –

contul_meu.depozit;

cont_curent

depozitcontul_meu

două variabileagregate

într-o structurăde tip Cont

Page 24: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 24Zoltan Hascsi

Limitele şi riscurile structurilor de date

• Dar, deşi agregarea facilitează tratarea unitară a datelor, ea nu reduce riscurile menţionate. Nimic nu împiedică o atribuire de genul:contul_meu.depozit = 1000000;

• Atribuirea ar trebui condiţionată.• Accesul la variabilă ar trebui restricţionat.

Page 25: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 25Zoltan Hascsi

• Date• Variabile• Tipul primitiv de date• Date de program - literale• Structuri de date• Obiecte şi clase de obiecte• Încapsularea şi ascunderea datelor• Referinţe• O lume de obiecte• Clasa: unitate în diversitate• Reutilizare la pachet

Page 26: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 26Zoltan Hascsi

Date încapsulate

• În limbajele orientate pe obiecte datele agregate (structurile de date) sunt încapsulate în obiecte.

• Tipul obiectului care încapsulează o structură de date defineşte procedurile prin care se pot face atribuiri şi modificări ale datelor, precum şi condiţiile şi rerstricţiile ce trebuiesc aplicate.

• Pentru evitarea riscurilor menţionate datele pot fi chiar ascunse în interiorul obiectelor, eliminând astfel posibilitatea atribuirilor sau modificărilor care nu respectă condiţiile impuse.

Page 27: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 27Zoltan Hascsi

Obiectele sunt structuri de date ...

• Exemplu (într-un program de gestiune bancară în Java):• Se defineşte un nou tip de date (agregate):

class Cont {int cont_curent;int depozit;

}

• Până aici nimic nou faţă de structurile de date din limbajele procedurale. Definiţia clasei Cont este deocamdată identică cu definiţia structurii Cont din C.

• Ceea ce aduc în plus obiectele sunt funcţiile, procedurile, operaţiile care sunt specifice unui tip de structură de date.

Page 28: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 28Zoltan Hascsi

... cu o funcţionalitate specifică

• Tipul de date Cont defineşte nu numai structura ci şi oprocedură specifică pentru crearea depozitului.class Cont {

int cont_curent;int depozit;void creare_depozit(int valoare) {

depozit = valoare;cont_curent = cont_curent – depozit;

}};

metodă specificăobiectelor de tip Cont

Page 29: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 29Zoltan Hascsi

Operaţii cu obiecte

• Programul operează cu obiecte:Cont contul_meu; contul_meu.cont_curent = 1000;contul_meu.creare_depozit(500);

• Obiectul încapsulează două variabile numite cont_curent şi depozit.

• Asupra lor se poate interveni direct, folosindu-ne de numele lor, sau indirect, folosindu-ne de funcţiile ataşate tipului de date agregat.

Page 30: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 30Zoltan Hascsi

• Date• Variabile• Tipul primitiv de date• Date de program - literale• Structuri de date• Obiecte şi clase de obiecte• Încapsularea şi ascunderea datelor• Referinţe• O lume de obiecte• Clasa: unitate în diversitate• Reutilizare la pachet

Page 31: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 31Zoltan Hascsi

Clasa unui obiect încapsulează funcţiile lui

• Procedura de creare a depozitului este specificată(implementată) într-un singur loc, în definiţia clasei.class Cont {

int cont_curent;int depozit;void creare_depozit(int valoare) {

depozit = valoare;cont_curent = cont_curent – depozit;

}};

metodă specificăobiectelor de tip Cont

Page 32: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 32Zoltan Hascsi

Obiecte fragile

• Folosirea obiectelor facilitează tratarea unitară a datelor, dar nu reduce implicit riscurile menţionate. Nimic nu împiedică apelul următor al procedurii creare_depozit:contul_meu.creare_depozit(1000000);

• Este nevoie, ca şi în programul procedural de gestiune bancară, de condiţionarea atribuirii.

Page 33: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 33Zoltan Hascsi

Obiecte fragile

• Procedura poate fi îmbunătăţită (reimplementată),fără a afecta utilizatorii procedurii.class Cont {

int cont_curent;int depozit;void creare_depozit(int valoare) {

if(valoare < cont_curent) {depozit = valoare;cont_curent = cont_curent -

depozit;}

}};

condiţie de limitarea procedurii de creare a depozitului

Page 34: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 34Zoltan Hascsi

Obiecte fragile

• Folosirea obiectelor facilitează tratarea unitară a datelor, dar nu reduce implicit riscurile menţionate. Nimic nu împiedică o atribuire directă:contul_meu.depozit = 1000000;

• Riscurile procesării incorecte sau neautorizate a datelor pot fi eliminate prin ascunderea acestora.

• Odată ascunse datele încapsulate, singura posibilitate de atribuire sau modificare a lor este prin intermediul procedurilor, iar acestea verifică condiţiile necesare.

Page 35: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 35Zoltan Hascsi

Obiecte sigure: ascunderea datelor

• Datele pot fi ascunse prin restricţionarea dreptului de acces (prin intermediul modificatorilor de acces).class Cont {

int cont_curent;private int depozit;void creare_depozit(int valoare) {

if(depozit < cont_curent) {depozit = valoare;cont_curent = cont_curent -

depozit;}

}};

depozitul nu mai poate fi accesatdecât indirect, prin proceduri specifice clasei Cont.

Page 36: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 36Zoltan Hascsi

Încapsularea datelor

• Obiectele sunt ca o capsulă. Structura de date este "înconjurată" de o interfaţă.

proceduri specificeclasei Cont.

un obiectde tipul Cont

cont_curent

depozit

creare_depozit

• Capsula defineşte operaţiile (procedurile, metodele) ce pot fi aplicate obiectului (apelate, activate).

Page 37: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 37Zoltan Hascsi

Ascunderea datelor

• Structura de date poate fi ascunsă complet în interiorul obiectului.

proceduri specificeclasei Cont.

un obiectde tipul Cont

creare_depozit

• Din exteriorul clasei contul este un obiect compact, căruia nu-i ştim structura şi nici nu o putem accesa direct chiar dacă am cunoaşte-o.

• Tot ce ştim sigur despre acest obiect este că putem crea un depozit.

• Dar depozitul nu va fi deschis decât dacă îndeplineşte condiţiile (dacă există în cont suficenţi bani)

?

Page 38: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 38Zoltan Hascsi

• Date• Variabile• Tipul primitiv de date• Date de program - literale• Structuri de date• Obiecte şi clase de obiecte• Încapsularea şi ascunderea datelor• Referinţe• O lume de obiecte• Clasa: unitate în diversitate• Reutilizare la pachet

Page 39: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 39Zoltan Hascsi

Cum prindem un obiect?

• În unele limbaje de programare obiectele pot fi identificate printr-un nume, ca orice variabilă primitivă. Numele obiectului este un înlocuitor simbolic al adresei (şi va fi înlocuit la compilare cu adresa lui).

• Exemplu din C:struct Cont {

int cont_curent;int depozit;

};

Cont contul_meu;

cont_curent

depozitcontul_meu

#7f0c

numele(adresa)obiectului

Page 40: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 40Zoltan Hascsi

Cum prindem un obiect?

• În Java accesul la obiecte este indirect, prin intermediul variabilelor referinţă. Adresa obiectului este o valoare ce poate fi atribuită dinamic unor variabile referinţă (compatibile ca tip).

class Cont {int cont_curent;int depozit;

}

Cont contul_meu;contul_meu = new Cont();

cont_curent

depozit

numelevariabileireferinţă

#7f0c

#7f0ccontul_meu

adresaobiectului

Page 41: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 41Zoltan Hascsi

Variabile referinţă

• Valoarea unei variabile referinţă nu se confundă cu obiectul.

• Declararea unei variabile referinţă este sinonimă cu crearea variabilei referinţă (la fel ca în cazul variabilelor de tip primitiv).

• Declararea unei variabile referinţă nu implică crearea niciunui obiect. O variabila referinţă nou creată nu are adresă validă, nu face referire la niciun obiect. Valoarea ei iniţială este null.

• Variabilele referinţă au un tip, o clasă. Clasa variabilei referinţă denotă clasa obiectelor la care poate face referire (a căror adresă poate fi stocată).

Page 42: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 42Zoltan Hascsi

Variabile referinţă

• Valoarea unei variabile referinţă nu poate fi modificată decât:

1. prin atribuirea valorii returnate la crearea unui nou obiect (adresa obiectului nou creat):contul_meu = new Cont();

sau2. prin atribuirea valorii altei variabile de referinţă de

aceeaşi clasă sau de un tip compatibil (clasă înrudită):contul_meu = contul_tau;

Page 43: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 43Zoltan Hascsi

Variabile în Java

• Variabilele ca entităţi adresabile direct din program, care pot fi desemnate prin nume, sunt de două feluri:

• variabile primitive • variabile referinţă

• Obiectele nu pot fi accesate decât indirect, prin intermediul variabilelor referinţă.

Page 44: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 44Zoltan Hascsi

• Date• Variabile• Tipul primitiv de date• Date de program - literale• Structuri de date• Obiecte şi clase de obiecte• Încapsularea şi ascunderea datelor• Referinţe• O lume de obiecte• Clasa: unitate în diversitate• Reutilizare la pachet

Page 45: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 45Zoltan Hascsi

Proceduri sau obiecte?

• Programele complexe sunt structurate. Două paradigme majore de programare structurată, în ordine istorică:

• programarea procedurală• programarea orientată pe obiecte

• În programarea procedurală unitatea structurală este procedura (funcţia, rutina, subrutina, etc). Programul este conceput ca o secvenţă de apeluri de proceduri. Datele sunt transmise procedurilor, prelucrate de proceduri şi generate (ca rezultate) de proceduri.

• În programarea obiect-orientată unitatea structurală este clasa. Programul este conceput ca un sistem de obiecte de diferite clase. Obiectele încapsulează datele şi interacţionează prin proceduri specifice fiecărei clase.

Page 46: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 46Zoltan Hascsi

Obiectele lumii reale

• Lumea reală este un ansamblu de obiecte care interacţionează.

• Orice sistem poate fi privit ca un ansamblu de obiecte care interacţionează.

• Un obiect este o entitate ce poate fi descrisă independent de ansamblul din care face parte.

• Obiectele pot fi concrete, fizice, cu existenţă reală independentă de mintea noastră, cele pe care le putem atinge sau percepe direct prin simţurile noastre,

• sau abstracte, virtuale, create doar în imaginaţia noastră.

Page 47: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 47Zoltan Hascsi

Obiectele lumii reale

Obiecte:masa din faţă, scaunul pe care şedem, întrerupătorul de la intrare, calculatorul la care scriu, studentul de lângă mine, omul pe care l-am întâlnit azi în tramvaiul 33 –toate obiecte concrete,

dar şi

lista de note din catalogul disciplinei, disciplina POO, grupa de studenţi 421F de la ETTI, pachetul de biţitransmis la 13:00:15 prin portul de Ethernet al calculatorului meu – obiecte abstracte sau virtuale.

Page 48: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 48Zoltan Hascsi

Gândire orientată pe obiecte

• Gândirea noastră este deseori (se poate spune chiar întotdeauna), şi fără să ne dăm seama, orientată pe obiecte. Este rezultatul firesc al evoluţiei creierului uman confruntat cu percepţia şi apoi înţelegerea unei lumi fizice formate din obiecte.

• De aceea modelele bazate pe obiecte sunt modele intuitive ale lumii reale.

• Naturaleţea şi realismul modelelor bazate pe obiecte au facilitat adoptarea abordării obiect-orientate a celor mai diverse aplicaţii.

Page 49: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 49Zoltan Hascsi

Programul orientat pe obiecte

• Orice program orientat pe obiecte este conceput ca un sistem de obiecte care interacţionează prin intermediul unor proceduri adecvate tipurilor de obiecte, stabilite de însăşi natura obiectelor.

întrebare

Popescu

Ionescu profu

răspuns

răspuns

Page 50: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 50Zoltan Hascsi

Exemplu

• Profesorul şi studenţii sunt obiecte. Profesorul este îndreptăţit să formuleze întrebări. Studentul este capabil să răspundă la întrebări. Procesarea datelor se face "îninteriorul obiectelor", adică prin proceduri specifice obiectelor.

• Profesorul formulează o întrebare şi fiecare student în parte răspunde la această întrebare. Întrebarea este şi ea un obiect.

String intrebare = profu.intreaba();popescu.raspunde(intrebare);ionescu.raspunde(intrebare);

Page 51: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 51Zoltan Hascsi

• Date• Variabile• Tipul primitiv de date• Date de program - literale• Structuri de date• Obiecte şi clase de obiecte• Încapsularea şi ascunderea datelor• Referinţe• O lume de obiecte• Clasa: unitate în diversitate• Reutilizare la pachet

Page 52: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 52Zoltan Hascsi

Diversitatea obiectelor

• Obiectele pot fi la fel sau diferite, mai mult sau mai puţin asemănătoare.

• Obiectele pot fi simple sau complexe.• Obiectele pot fi la rândul lor compuse din obiecte.• Obiectele pot avea un comportament simplu sau foarte

complicat.• Obiectele pot avea o existenţă efemeră sau de durată.

Page 53: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 53Zoltan Hascsi

Obiectele pot conţine la rândul lor obiecte

• Calculatorul este un ansamblu de componente – procesor, placa de bază, memorie, hard-disk, sursă de alimentare, etc – fiecare componentă fiind un obiect ce poate fi descris separat.

• Facultatea este o uniune de studenţi şi profesori, fiecare fiind un obiect (plin de viaţă!) ce poate fi caracterizat complet în afara facultăţii. Grupa de studenţi poate fi şi ea privită ca un obiect (abstract) căci poate fi descrisă independent de context prin caracterizarea studenţilor care o compun şi a activităţii lor în cadrul grupei.

Page 54: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 54Zoltan Hascsi

Unitate în diversitate

• Gândirea, pentru a fi eficientă, pentru a putea face predicţii, s-a specializat în recunoaşterea obiectelor similare şi inventarea de obiecte abstracte generice care să li se potrivească.

• Obiectul generic care se potriveşte obiectelor asemănătoare defineşte de fapt genul, tipul acelor obiecte.

• Obiectele pot fi grupate (clasificate, ordonate) în genuri, categorii, tipuri sau clase pe baza similitudinilor de structură şi comportament.

• Clasele pot fi la rândul lor grupate în categorii, metacategorii, metaclase, superclase.

Page 55: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 55Zoltan Hascsi

Descrierea obiectelor

• Orice obiect poate fi caracterizat sau descris prin:• poziţie• stare• comportament

• Dacă poziţia şi starea caracterizează obiectul la un moment dat, comportamentul se poate observa doar în timp, pe măsură ce obiectul interacţionează cu sistemul din care face parte.

Page 56: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 56Zoltan Hascsi

Descrierea obiectelor

• Poziţia identifică obiectul în cadrul sistemului din care face parte (scaunul din dreapta, nota a treia din catalog, studentul de lângă geam de pe rândul din spate).

• Starea caracterizează structura obiectului la un moment dat (butonul este apăsat, becul este aprins, studentul este nepregătit pentru examen).

• Comportamentul obiectului descrie răspunsul acestuia la stimulii externi şi modificarea stării, fie ca urmare a acestor stimuli, fie de la sine. Comportamentul obiectului depinde de starea în care se află.

Page 57: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 57Zoltan Hascsi

Clasificarea obiectelor

• Obiectele asemănătoare, indiferent de poziţiile lor, pot fi grupate în aceeaşi categorie sau clasă, ceea ce permite tratarea lor identică.

• Obiectele se aseamănă dacă au structură asemănătoare şi comportament asemănător.

• Poziţia obiectelor nu are, în cele mai multe situaţii, efect asupra clasificării acestora (scaunul este scaun indiferent dacă este în dreptul mesei sau în depozit).

• Obiectul generic care defineşte categoria sau clasa unor obiecte asemănătoare este caracterizat doar prin:

• structură• comportament

Page 58: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 58Zoltan Hascsi

Clasa

• Clasa = categorie = tip• Clasa este aşadar un obiect generic.• Obiectul generic nu este un obiect concret din lumea

reală sau o entitate din lumea imaginară, ce poate fi individualizat prin starea la un moment dat a structurii.

• Obiectul generic defineşte structura ca un set de variabile. Obiectele concrete individualizează aceste variabile prin valori concrete.

• Obiectele sunt concretizări ale obiectului generic, ale clasei.

• Obiectele concrete se numesc instanţe ale clasei.

Page 59: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 59Zoltan Hascsi

Descrierea claselor

• Orice obiect poate fi descris prin:– structură– comportament

• Clasa defineşte structura şi comportamentul obiectelor din acea clasă.

clasa = structură + comportament

Page 60: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 60Zoltan Hascsi

Descrierea clasei şi a instanţei

• Studentul Popescu Ion poate fi văzut ca un obiect de tipul (din categoria) Student, al cărui nume este Popescu Ion care la sfârşitul anului I a acumulat 60 de puncte de credit.

• Orice obiect din categoria (clasa) Student are un nume şi un număr de puncte de credit, nr_credite.

• Dar un anume obiect din categoria (clasa) student are un anumit nume şi o anumită valoare a numărului de puncte de credit la un moment dat.

orice obiect al clasei Student un obiect al clasei Student

nume Popescu Ion

nr_credite 60

Page 61: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 61Zoltan Hascsi

Interfaţa unui obiect

• Interfaţa = partea vizibilă sau accesibilă a unui obiect.• Partea vizibilă a unui obiect:

– variabilele de stare vizibile;– posibilităţile de interacţiune cu obiectul;– efectul acţiunii asupra obiectului aşa cum este perceput din

exterior;

• Interfaţa este strictul necesar utilizatorului obiectului;• Documentaţia unei clase se limitează la interfaţă.• Detaliile implementării clasei sunt ascunse şi nu sunt

documentate;• Implementarea clasei poate fi schimbată (optimizată) cu

condiţia păstrării intacte a interfeţei;

Page 62: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 62Zoltan Hascsi

Interfaţa clasei este publică

• Interfaţa se apropie cel mai mult de abstractizare. Ea ar trebui să definească ce se face cu datele, nu cum se face.

interfaţă

implementare

date

Desenul este o adaptare după Bertrand Meyer, Object-Oriented Software Construction.

Page 63: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 63Zoltan Hascsi

Implementarea clasei este privată

• Restul ar trebui ascuns. În felul acesta ne asigurăm că orice schimbare de implementare sau de reprezentare a datelor nu afectează utilizatorii clasei.

interfaţă

Desenul este o adaptare după Bertrand Meyer, Object-Oriented Software Construction.

Page 64: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 64Zoltan Hascsi

• Date• Variabile• Tipul primitiv de date• Date de program - literale• Structuri de date• Obiecte şi clase de obiecte• Încapsularea şi ascunderea datelor• Referinţe• O lume de obiecte• Clasa: unitate în diversitate• Reutilizare la pachet

Page 65: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 65Zoltan Hascsi

Reutilizarea

• Un principiu fundamental al programării structurate este reutilizarea codului.

• Un program orientat pe obiecte nu este aproape niciodată scris de la zero, ci foloseşte clase scrise de alţi programatori.

• Trei posibilităţi de reutilizare:– folosirea unor obiecte de altă clasă pentru a stoca şi

prelucra date.– folosirea unor clase pentru definirea de noi clase

• prin compunere• prin moştenire

Page 66: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 66Zoltan Hascsi

Clase reutilizabile

• Orice clasă face parte dintr-un pachet de clase.• Pachetul de clase reuneşte clase cu utilitate comună.• Clasele publice sunt clase ce pot fi folosite de toată

lumea (care se apucă de programare în Java).• Un pachet poate conţine clase ajutătoare, ce nu sunt

publice. Acestea nu pot fi reutilizate (decât, eventual, prin copiere), dar sunt necesare în compilarea şi execuţia programelor ce folosesc clase publice în implementarea cărora apar aceste clase ajutătoare.

Page 67: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 67Zoltan Hascsi

Pachete de clase

• Bibliotecile de clase uzuale sunt organizate în pachete.• Un pachet (package) conţine clasele uzuale specifice

unui anumit gen de aplicaţii.• Exemple:

– java.lang – pachetul de clase de bază ale Java– java.io – clase pentru transferul datelor din/către exterior– java.net – clase de obiecte specifice conexiunii prin reţea– java.swing – clase de obiecte grafice pentru GUI– java.swing.event – clase de evenimente specifice GUI

• Utilizatorul îşi poate construi propriile pachete de clase.

Page 68: curs_poo_01.pdf

Programare Orientată pe Obiecte cursul 1 68Zoltan Hascsi

Pachete de clase: utilizare

• Pentru a putea utiliza o clasă dintr-un pachet oarecare trebuie să importăm clasa în fişierul în care o utilizăm.

• Directivele de importare sunt la începutul fişierului, înaintea codului claselor din fişier.

• Directiva import este urmată de numele complet al clasei importate:

import java.awt.Button

• sau de numele complet al pachetului din care face parte acea clasă urmat de un asterisc (cu rol de joker):

import java.awt.*

• A doua variantă este mai comodă pentru că se pot importa mai multe clase din acelaşi pachet printr-o singură directivă.