Sunteți pe pagina 1din 12

Limbaje de programare curs 3 - Informatic Economic, an III

Introducere in obiectualitate.
Operatori.
Controlul executiei programelor

Cluj-Napoca - 9 Octombrie
2013

Cuprins

Principiile programarii obiectuale


Notiunea de obiect

Cluj-Napoca - 9 Octombrie
2013

Principii de baz n obiectualitate (II)

Programare obiectual:
Elemente din spaiul problemei precum si reprezentarile
acestora in spatiul solutiei obiecte

Caracteristici ale limbajelor obiectuale


1. Orice element este un obiect
2. Un program este o colecie de obiecte care isi spun
unul altuia ce sa faca prin trimitere de mesaje
3. Fiecare obiect are un spaiu de memorie, posibil
compus din alte obiecte
4. Fiecare obiect are un tip
5. Toate obiectele de acelai tip pot primi acelai
mesaj (atentie: proprietatea de upcast)
Cluj-Napoca - 9 Octombrie
2013

Principii de baz n obiectualitate (III)


Definitia Booch pentru un obiect: un obiect are o stare, un
comportament si o identitate
Clas: set de obiecte cu caracteristici i funcionalitate
identice (termenul de clasa se substituite termenului de tip)
Intefaa: metode (funcionalitate): cererile care pot fi
adresate unui obiect particular dintr-o clasa
Implementarea: mod concret de realizare a funcionalitii
Un obiect poate fi privit ca si furnizor de servicii
Se imbunatateste coeziunea obiectelor (obiectele trebuie sa
se potriveasca bine unele cu altele)
Cluj-Napoca - 9 Octombrie
2013

UML reprezentarea claselor

UML: limbaj standardizat pentru modelarea obiectuala

Nume de tip

Light

->

Interfata
Light ->
lt = new Light();
lt.on();

on()
off()
brighten()
dim()

Cluj-Napoca - 9 Octombrie
2013

Ascunderea implementarii

2 tipuri de programatori:
creatori de clase creaza clase care expun doar functionalitatea
necesara claselor client, restul ramane ascuns
programatori client consumatori de clase, rolul lor este sa fie echipati
cu un set de clase pentru dezvoltarea rapida a aplicatiilor finale

Programatorii creatori de clase trebuie sa poata schimba


implementarea ascunsa fara ca programatorii clienti sa fie
afectati
Speficatori de access:
Private: elementele private pot fi accesate doar de creatorul clasei in
cadrul metodelor acelei clase
Public: elementele publice sunt disponibile oricaror alte clase
Protected: similar cu private, utilizat in mostenire, clasele care
mostenesc pot accesa elementele private din clasele de baza

Cluj-Napoca - 9 Octombrie
2013

Reutilizarea implementarii - compozitie

Managementul complexitii: descompunerea elementelor


problemei n pri componente

2 metode de realizare a complexitii:


Compoziie: o clas nou conine clase existente
Relaie has-a
Se realizeaza prin creare de obiecte membre
Compozitia realizata dinamic se numeste agregare

Cluj-Napoca - 9 Octombrie
2013

Reutilizarea implementarii - mostenire


Datele si functionalitatile se pot impacheta dupa concepte care
reprezinta idei similare din spatiul problemei
Motenire: o clas nou se aseamn (extinde) o clas existent
Relaie is-a sau is-like-a

Clasa de baza contine caracteristicile si comportamentele care


vor fi partajate cu tipurile derivate
Clasa derivata
Clasa derivata va contine
toti membrii clasei de baza (inclusiv cei privati care sunt ascunsi)
Toata interfata clasei de baza, care este duplicata

Clasa derivata este in acelasi timp de tipul clasei de baza

Cluj-Napoca - 9 Octombrie
2013

Mostenire cum se diferentiaza clasa


derivata de clasa de baza

Prin adaugare de noi metode suplimentare


Schimbarea comportamentului unor metode existente in clasa
de baza (overriding)

Relatia is-a: clasa derivata doar override metode din clasa de


baza (principiul substitutiei pure)
Relatia is-like-a: clasa derivata adauga elemente noi interfetei
clasei de baza (metodele noi nu sunt accesibile din clasa de
baza substitutia nu mai este pura)

Cluj-Napoca - 9 Octombrie
2013

Obiecte interschimbabile prin


polimorfism
La ierarhiile de clase dorim sa tratam obiectele unitar,
sub tipul de baza
Astfel, putem scrie cod care nu depinde de un tip
specific si care manipuleaza obiecte generice
Se doreste ca s se execute codul din obiectele claselor
derivate fr ca s stim (la compilare) care vor fi efectiv
aceste obiecte
Compilatoare traditionale (non OOP) early binding
Compilatoare OOP late binding codul apelat este
determinat abia la executie, la compilare se asigura
doar corespondenta tipului argumentelor si a tipului de
return
Java compilator OOP dynamic (late) binding
Cluj-Napoca - 9 Octombrie
Proprietatea de upcast:
tratarea
unui obiect dintr-o clas
2013

Ierarhie cu o singura radacina


In Java (si in orice limbaj obiectual cu exceptia C++) toate
clasele mostenesc o clasa de baza numit Object
Astfel, toate obiectele din limbaj pot fi echipate in mod
garantat cu anumit functionalitate
Se usureaza implementarea garbage collectorului

Cluj-Napoca - 9 Octombrie
2013

Containere
Necesare datorita faptului ca nu stim de la design numarul
de obiecte necesare pentru a rezolva o anumita problema
Containerele sunt siruri de referinte catre alte obiecte
Ele se expandeaza automat pentru a salva noi obiecte,
dupa necesitati
2 tipuri de liste: ArrayList, LinkedList
Containerele in Java sunt create sa pastreze obiecte de
tipul Object. -> ele pot salva orice
Pot aparea exceptii la Downcast la runtime, timp de
executie crescut datorit operaiei de Downcast
Containere parametrizate:
ArrayList<Shape> shape = new ArrayList<Shape>();

Cluj-Napoca - 9 Octombrie
2013

S-ar putea să vă placă și