Programare Orientata spre Obiecte -...

128
Programare Orientata spre Obiecte (Object-Oriented Programming) a.k.a. Programare Obiect-Orientata 2011 - 2012 UPB - Facultatea ETTI - Curs POO - an II - seria E Titular curs: Eduard-Cristian Popovici Suport curs: http://discipline.elcom.pub.ro/POO-Java/ UPB - ETTI - Curs POO - an II - seria E 12.10.2011 1

Transcript of Programare Orientata spre Obiecte -...

Page 1: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

Programare Orientata spre Obiecte

(Object-Oriented Programming)

a.k.a. Programare Obiect-Orientata

2011 - 2012

UPB - Facultatea ETTI - Curs POO - an II - seria E

Titular curs: Eduard-Cristian Popovici

Suport curs: http://discipline.elcom.pub.ro/POO-Java/

UPB - ETTI - Curs POO - an II - seria E 12.10.2011 1

Page 2: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

1. Introducere in abordarea orientata spre obiecte (OO)

1.2. Evolutia catre abordarea OO

Structura cursului

UPB - ETTI - Curs POO - an II - seria E 2

Page 3: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 3

Orientarea spre Obiecte (OO)

Evolutia catre OO

Masina programabila si codul masina

– curs CID si AMP (sem II)

1.2. Evolutia catre abordarea OO

– Care sunt subsistemele principale ale unui calculator?

– Ce este codul masina?

– Cui se adreseaza codul masina?

– Cum arata codul masina?

– Ce sarcini sunt tipice pentru codul masina?

– Care este complexitatea programarii in cod masina?

Page 4: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 4

Masina programabila si codul masina

Arhitectura masinilor de calcul

– deriva din cea creata de matematicianul von Neumann (1903 – 1957)

– este un model de proiectare pentru

– masini de calcul digital cu programe stocate in memorie

CPU

PM

I/O

Procesor

Memorie principala

Porturi de intrare/iesire

1.2. Evolutia catre abordarea OO

stocare

prelucrare

intrari/iesiri

Page 5: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 5

Arhitectura masinilor de calcul cuprinde

– procesor – CPU (central processing unit)

– care interpreteaza/executa instructiuni in cod binar (cod masina)

– memorie principala – PM (primary memory) sau MM (main memory)

– structura de stocare separata atat pentru instructiuni cat si pentru date

1.2. Evolutia catre abordarea OO

Masina programabila si codul masina

CPU

PM

I/O

Procesor

Memorie principala

Porturi de intrare/iesire

stocare

calcule

interfatare

control (Controller)

(View)

(Model data)

(Model logic or

Model algorithms)

Page 6: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 6

Programele de calcul

specificatii ale comportamentelor

calculatoarelor

descriu raspunsurile la cereri din

exterior

sub forma de instructiuni intr-un

“limbaj” pe care “il poate intelege”

calculatorul

codul masina binar

direct executabil de catre

masina programabila sau

obtinute eventual prin conversie

din instructiuni scrise intr-un

limbaj pe care il poate intelege

mai bine programatorul

1.2. Evolutia catre abordarea OO

Masina programabila si codul masina

Page 7: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 7

Codul (limbajul) masina

– folosit in masinile programabile pentru a

– specifica pasii (instructiuni, actiuni) realizati de masina de calcul

– este initial stocat in memoria principala (PM)

– este apoi incarcat (fetch), decodat si executat in unitatea de control a

procesorului (CPU), care este un fel de “creier” al intregii masini programabile

– CPU in acest caz este “capul” masinii programabile

– are format numeric digital (binar), in general multiplu de 8 biti (octeti =

Bytes) care face parte din specificatiile tehnice ale procesorului

– distinct pentru fiecare procesor si

– distinct pentru fiecare familie de procesoare

1.2. Evolutia catre abordarea OO

Masina programabila si codul masina

Page 8: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 8

Modul de reprezentare a informatiilor digitale (binare) in masinile programabile

1.2. Evolutia catre abordarea OO

FA200:

Masina programabila si codul masina

Adresa numerica

(echivalenta cu 1111 1010 0010 0000 0000)

1001 1110

Locatie memorie

(spatiu alocat)

00000:

FFFFF:

8b = 1B (octet)

Dimensiunea

spatiului alocat

(4B = 32b)

1011 1010

1101 0110

0101 0010

5 cifre hexazecimal =

5 x 4 cifre binare =

20 biti

Valoare stocata

(continut locatie)

– in acest caz 9E BA D6 52

Toate informatiile

sunt reprezentate

complet numeric! ...

...

PM

Page 9: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 9

Codul (limbajul) masina este in general format din actiuni cum ar fi

– copierea din memorie (PM) in registru intern

= citire din PM

– copierea din registru intern in memorie (PM)

= scriere in PM

– salturi conditionate la eticheta

– cod distinct pentru fiecare conditie

– iteratii la eticheta

– salturi la eticheta cu incrementarea / decrementarea unui contor

– operatii aritmetice sau logice

– realizate de unitatea aritmetica/logica (ALU)

asupra valorilor din registre interne ale CPU si/sau memorie (PM)

1.2. Evolutia catre abordarea OO

Masina programabila si codul masina

Page 10: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 10

Orientarea spre Obiecte (OO)

Evolutia catre OO

Limbajele de asamblare

– curs CID si AMP (sem II)

1.2. Evolutia catre abordarea OO

– Ce este limbajul de asamblare?

– Cui se adreseaza limbajul de asamblare?

– Cum arata limbajul de asamblare?

– Ce sarcini sunt tipice pentru limbajul de asamblare?

– Care este complexitatea programarii in limbaj de asamblare?

– Cum se programeaza in limbaj de asamblare?

Page 11: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 11

Limbajele de asamblare

1.2. Evolutia catre abordarea OO

Limbajul de asamblare

– folosit de programatorii masinilor de

calcul

– are format alfa-numeric

– fiecare instructiune in limbaj de

asamblare

– echivalenta ”unu-la-unu” cu o

instructiune cod masina binara

– ofera modalitati de structurare slaba

a programelor, bazate pe etichete

– salturi catre instructiuni

etichetate

– operatii aritmetice/logice intre

registre CPU si/sau locatii MP

Page 12: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 12

Modul de reprezentare a informatiilor digitale (binare) la nivel de asamblare

1.2. Evolutia catre abordarea OO

v1: Nume variabila 1001 1110

Variabila

(locatie memorie)

00000: 8b = 1B (octet)

Dimensiunea

spatiului alocat

(4B = 32b)

1011 1010

1101 0110

0101 0010

Valoare stocata

(continut variabila) 9E BA D6 52

(in zecimal: 2663044690)

O parte dintre

informatii capata

nume / mnemonici

(abstracte pt. masina)

Limbajele de asamblare

(FA200)

Adresa numerica

corespunzatoare (echivalenta cu 1111 1010 0010 0000 0000)

1111 1010 0000 0000

0000 0010 0000 0000

Reg. DS

Reg. SI

Accesibila, de exemplu, prin perechi

de registre din procesor (I8086):

0000 +

...

...

FA000+

0200

abstractizare

Page 13: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 13

Limbajul de asamblare este in general format din actiuni cum ar fi

– copierea din memorie (PM) in registru intern = citire din PM

instr1: MOV AX, pi ; copierea variabilei pi in registrul AX

– copierea din registru intern in memorie (PM) = scriere in PM

MOV suma, AX ; copierea registrului AX in variabila suma

– operatii realizate de unitatea aritmetica/logica (ALU) asupra valorilor din

registre interne si/sau memorie (PM)

ADD suma, CX ; adunarea la variabila suma a registrului AX

– salturi conditionate (cod distinct pentru fiecare conditie) la eticheta

JNC instr1 ; salt conditionat de CF==0 la eticheta instr1

1.2. Evolutia catre abordarea OO

Limbajele de asamblare

Page 14: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 14

Orientarea spre Obiecte (OO)

Evolutia catre OO

Limbajele de nivel inalt (pre-OO)

– curs PC si SDA (anul 1)

1.2. Evolutia catre abordarea OO

– Ce este limbajul de nivel inalt?

– Cui se adreseaza limbajul de nivel inalt?

– Cum arata limbajul de nivel inalt?

– Ce sarcini sunt tipice pentru limbajul de nivel inalt?

– Care este complexitatea programarii in limbaj de nivel inalt?

– Cum se programeaza in limbaj de nivel inalt?

Curs 1 – sapt.1 /

Curs 2 – sapt.2

Page 15: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 15

Limbajele de nivel inalt (pre-OO)

1.2. Evolutia catre abordarea OO

Limbajul de nivel inalt

– folosit de programatorii masinilor de

calcul

– are format alfa-numeric, iar fiecare

instructiune la nivel inalt

– este in general echivalenta cu o

secventa de instructiuni in limbaj de

asamblare (sau de cod masina binar)

– ofera o abstractizare puternica a

detaliilor masinii programabile

– spre deosebire de limbajele de

asamblare (de nivel redus)

– ceea ce le face mai usor de folosit

Page 16: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 16

Modul de reprezentare a informatiilor digitale (binare) la nivel inalt

1.2. Evolutia catre abordarea OO

v1: Nume variabila 1001 1110 Dimensiunea

spatiului alocat

(4B = 32b)

1011 1010

1101 0110

0101 0010

Apar abstractizari

de nivel inalt

cum sunt pointerii

(FA200)

Adresa numerica

corespunzatoare

Accesibila prin

variabile pointer

...

...

0000 0000

1111 1010

...

...

Limbajele de nivel inalt (pre-OO)

p1:

Variabila (locatie)

Valoare (continut)

Variabila pointer (catre variabila v1)

Valoare stocata FA 00, 02 00

asamblare

si nivel inalt

doar

nivel

inalt

Page 17: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 17

Modul de reprezentare a informatiilor digitale (binare) la nivel inalt

Ce inseamna in C: int v1;

v1 = 2663044690;

int *p1;

p1 = &v1; ?

1.2. Evolutia catre abordarea OO

v1: Nume variabila 1001 1110 Dimensiunea

spatiului alocat

(4B = 32b)

1011 1010

1101 0110

0101 0010

(FA200)

Adresa numerica

corespunzatoare

Accesibila prin

variabile pointer

...

...

0000 0000

1111 1010

...

...

Limbajele de nivel inalt (pre-OO)

p1:

Variabila (locatie)

Valoare (continut)

Variabila pointer (catre variabila v1)

Valoare stocata FA 00, 02 00

Page 18: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 18

Modul de reprezentare a informatiilor digitale (binare) la nivel inalt

Tipul de date

– descriere a unei multimi de entitati de date asemanatoare numite variabile

– specifica structura variabilelor (dimensiunea si forma spatiului alocat)

– domeniul de definitie al valorilor lor (gama valorilor, formatul lor literal)

– conversiile catre alte tipuri, operatorii asociati / permisi

1.2. Evolutia catre abordarea OO

v1: Nume variabila

Variabila (locatie)

(FA200)

Adresa numerica

corespunzatoare

...

...

Limbajele de nivel inalt (pre-OO)

int v1; // declara variabila v1 de tip “int”

Dimensiunea

spatiului alocat

(4B = 32b)

Abstractizari

de nivel

inalt noi ca

tipul de date

Page 19: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 19

Modul de reprezentare a informatiilor digitale (binare) la nivel inalt

1.2. Evolutia catre abordarea OO

v1: Nume variabila 1001 1110

Variabila (locatie)

Dimensiunea

spatiului alocat 1011 1010

1101 0110

0101 0010

Valoare (continut)

(FA200)

Adresa numerica

corespunzatoare

...

...

Limbajele de nivel inalt (pre-OO)

int v1; // declara variabila v1 de tip “int”

v1 = 2663044690; // atribuie o valoare variabilei v1

Page 20: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 20

Modul de reprezentare a informatiilor digitale (binare) la nivel inalt

1.2. Evolutia catre abordarea OO

v1: Nume variabila 1001 1110

Variabila (locatie)

Dimensiunea

spatiului alocat 1011 1010

1101 0110

0101 0010

Valoare (continut)

(FA200)

Adresa numerica

corespunzatoare

...

...

...

...

Limbajele de nivel inalt (pre-OO)

p1:

Variabila pointer

catre variabile de

tipul lui v1 int v1;

v1 = 2663044690;

int *p1; // declara p1 de tip “pointer catre”

// variabile de tip “int”

Page 21: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 21

Modul de reprezentare a informatiilor digitale (binare) la nivel inalt

1.2. Evolutia catre abordarea OO

v1: Nume variabila 1001 1110

Variabila (locatie)

Dimensiunea

spatiului alocat 1011 1010

1101 0110

0101 0010

Valoare (continut)

(FA200)

Adresa numerica

corespunzatoare

Accesibila prin

variabile pointer

...

...

0000 0000

1111 1010

...

...

Limbajele de nivel inalt (pre-OO)

int v1;

v1 = 2663044690;

int *p1; // “pointer catre” variabile tip “int”

p1 = &v1; // atribuie variabilei p1 valoarea adresei v1

Variabila pointer (catre variabila v1)

Valoare stocata FA 00, 02 00

p1:

Page 22: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 22

Limbajele de nivel inalt (pre-OO)

Modul de prelucrare a informatiilor digitale (binare) la nivel inalt

Exemplu de specificatie pseudocod pentru “calculul modulului sumei a doua

valori”

calculul sumei a doua valori

daca [suma este negativa]

negarea sumei

Cum ar putea arata o portiune de program scris in limbajul de nivel inalt C care

sa realizeze sarcina specificata?

1.2. Evolutia catre abordarea OO

s = v1 + v2

s = -s

[s < 0] else

Diagrama UML

de activitati

(diagrama

de flux al

programului)

echivalenta

Page 23: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 23

Limbajele de nivel inalt (pre-OO)

Posibila portiune de program C pentru “calculul modulului sumei a doua

valori”

// in C++ sau Java

// codul e identic!

s = v1 + v2;

if (s<0)

s = -s;

Ce sunt s, v1 si v2?

Ce lipseste din program in ceea ce le priveste?

Cum ar putea arata un program C complet?

1.2. Evolutia catre abordarea OO

s = v1 + v2

s = -s

[s < 0] else

Page 24: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 24

Limbajele de nivel inalt (pre-OO)

Posibil program C complet pentru “calculul modulului sumei a doua valori”

#include <stdio.h>

int v1 = 3; // variabile globale

int v2 = 5;

int main(void) { // functie principala, punct intrare progam

int s; // variabila locala

s = v1 + v2;

if (s<0)

s = -s;

printf(“modulul sumei %d cu %d este %d\n", v1, v2, s);

return 0;

}

Cum ar putea arata o portiune de program scris in limbajul de asamblare

care sa realizeze sarcina specificata?

1.2. Evolutia catre abordarea OO

Page 25: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 25

Limbajele de nivel inalt (pre-OO)

Posibila portiune de program scris in limbajul de asamblare al procesorului

Intel8086 pentru “calculul modulului sumei a doua valori”

MOV AX, v1 ; copiere din memorie in registru

ADD AX, v2 ; adunare la valoarea din registru

JGE eticheta1 ; salt conditionat de [AX >= 0]

NEG AX ; negare aritmetica (schimbare semn)

eticheta1: MOV s, AX ; copiere din registru in memorie

Cat de usor sunt de inteles intuitiv mnemonicele instructiunilor?

Ce stiti despre salturile la etichete (instructiunile de tip “go to”)?

1.2. Evolutia catre abordarea OO

Page 26: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 26

Orientarea spre Obiecte (OO)

Evolutia catre OO

Modelare si abstractizare (I)

1.2. Evolutia catre abordarea OO

– Ce inseamna model, modelare, abstractizare?

– Unde pot fi intalnite modelele, modelarea, abstractizarea?

– Ce roluri pot avea modelele, modelarea, abstractizarea?

– Abstractizarea unui teritoriu

– Abstractizarea unui calculator

– Abstractizarea informatica a realitatii

Page 27: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 27

Model (definitii)

♦ machetă = obiect cu

dimensiuni reduse care

reprezintă un obiect real

♦ tipar, sablon, tip = obiect

determinat după care se

reproduc obiecte similare

♦ mostră, exemplu = obiect

întrunind însușirile tipice ale

unei categorii, destinat pentru a

fi reprodus

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Page 28: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 28

Model (sensul informatic)

♦ reprezentare simplificată a unui proces sau a unui sistem complex, care

♦ ofera o analogie cu procesul/sistemul complex

♦ cuprinde elementele esentiale ale procesului/sistemului complex

♦ usureaza astfel accesul la esenta (pt. analiza, exploatare, etc.)

♦ printr-o forma de acces indirect la procesul/sistemul complex

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Proces / Sistem complex

Model (esenta)

acces indirect Simplificare

si analogie

Page 29: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 29

Modelul

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Un model expandeaza o portiune

a

realitatii

in detrimentul celorlalte

Page 30: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 30

Modelarea

– construire de modele

– metodă care consta în reproducerea / reprezentarea

simplificată a unui proces / sistem complex

– sub forma unui proces/sistem similar sau analog

– care ofera accesul la esenta procesului/sistemului

– ceea ce insemna accesul indirect la proces/sistem

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

De ce constructia unui model este ilustrata ca “abstractizare”?

Page 31: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 31

Abstractizarea (abstracția)

– operație a gândirii prin care

– se desprind și se rețin unele elemente

(caracteristici și relații) considerate esențiale

(fundamentale, generale)

– ale unei entitati analizate

– sau comune unei multimi de entitati

– si se ignora (vremelnic) elementele considerate

neesențiale

– elementele considerate esentiale

– diferentiaza entitatea sau multimea analizata de

alte entitati sau multimi de entitati

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Esențial (elemente

importante,

pastrate)

Detalii considerate

nesemnificative

(ignorate)

Page 32: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 32

Exemplu de abstractizare

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Entitate modelata

Teritoriul

Portiune din realitate,

imposibil de atins in

totalitate, de cuprins

CONCRET

Cum ar putea fi

abstractizat

teritoriul?

Page 33: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 33

Exemplu de abstractizare (teritoriul si harta)

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Entitate modelata

Teritoriul O harta detaliata a

teritoriului

Portiune din realitate,

imposibil de atins in

totalitate, de cuprins

Model abstract

Simplificare, reducere

a realitatii (mai usor de

gestionat si modificat)

ABSTRACT CONCRET

(complex) (simplificat)

Cum ar putea fi

abstractizata

harta?

Page 34: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 34

Exemplu de abstractizare (teritoriul si harta)

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Entitate modelata

Teritoriul O harta detaliata a

teritoriului

Portiune din realitate,

imposibil de atins in

totalitate, de cuprins

O harta a teritoriului

mai putin detaliata

Model abstract

Simplificare, reducere

a realitatii (mai usor de

gestionat si modificat)

Model si mai abstract

Simplificare, reducere

suplimentara

Ierarhie de abstractizari ABSTRACT CONCRET

(complex) (simplificat)

Page 35: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 35

Abstractizarea (abstractia)

– importanta in rezolvarea problemelor (problem solving) deoarece

– inseamna concentrarea pe detaliile esentiale in rezolvarea problemelor

– in timp ce sunt ignorate celelalte, avand ca efecte

– simplificarea problemei si

– concentrarea atentiei pe aspectele problemei implicate in solutie

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

y2 = 1 - x

Problema abstractizata

Analiza (conceptualizare)

abstractizare

daca patratul unui numar este egal cu diferenta dintre 1 si un al doilea numar, sa se afle cum depinde primul numar de al doilea

Problema reala

Enunt

Page 36: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 36

Abstractizarea

– este o forma de management

– al complexitatii (in crestere!)

– avand ca scop concentrarea pe esential

– si ca efect implicit simplificarea

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Proces / Sistem complex

Abstractizare (simplificare)

Concentrare pe esential

Page 37: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 37

Abstractizarea

– este o forma de management

– al schimbarii (permanent necesara!)

– transforma in element al modelului

– ce e esential si astfel stabil in timp

– si astfel separa – ce e stabil in timp (esentialul)

– de ce e variabil in timp / temporar (alte detalii)

– ceea ce usureaza schimbarea

– care va avea loc asupra detaliilor neesentiale

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Page 38: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 38

Abstractizarea

– forma de modelare aplicabila

– fie unei entitati

– fie unei multimi de entitati

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Masini

(categorie,

tip, clasa)

concentrare pe

esential

concentrare pe

ce e comun

modalitati diferite

de simplificare

Page 39: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 39

Abstractizarea

– “neglijarea unor detalii” inseamna o forma de aproximare a realitatii

– “concentrarea pe esential” face abstractizarea un concept relativ

– deoarece depinde de factorii care pot dicta ceea ce este esential

– contextul abstractizarii si

– interesul celui care abstractizeaza!

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Cod motor: S38B38

Cilindree: 3795 cm³

Accelerare de la 0 la 100 km/h: 5,9 sec.

Viteza maximă: 250 km/h (limitată)

BMW M5

perspective

simplificate

Page 40: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

aceeasi

entitate

Modele

mentale diferite

UPB - ETTI - Curs POO - an II - seria E 40

Abstractizarea e relativa – depinde de cine decide ce e esential (persoana care

abstractizeaza)

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Diferite

perspective

(puncte de

vedere)

Page 41: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 41

Modelare vs Abstractizare

– modelarea insista pe

– usurarea accesului indirect la procesul/sistemul tinta

– prin crearea unui model analog (similar), simplificat si esential

– abstractizarea insista pe

– simplificare prin identificarea si pastrarea elementelor considerate

esential

– si neglijarea detaliilor considerate neesentiale

– conducand la crearea unui model esential si simplificat

Altfel spus

– modelarea insista pe analogie si acces indirect la o forma simplificata

– abstractizarea insista pe esential si simplificare

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Page 42: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 42

Exemplu de abstractizare (masina de calcul si limbajele)

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Entitate

abstractizata

Masina de calcul

condusa de

coduri masina

+

Limbajul

masina

(limbajul masinii

de calcul)

CONCRET

Cum poate fi abstractizata

masina de calcul?

Page 43: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 43

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Entitate

abstractizata

Masina de calcul

condusa de

coduri masina

+

Model

abstract

Limbajul

masina

Limbajul de

asamblare

Masina de calcul

programata la nivel

de asamblare

+

(limbajul masinii

de calcul)

(echivalent uman al

limbajului masinii)

Exemplu de abstractizare (masina de calcul si limbajele)

CONCRET

?

Page 44: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 44

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Entitate

abstractizata

Masina de calcul

condusa de

coduri masina

+

Model

abstract Model si mai

abstract

Limbajul

masina

Limbajul de

asamblare

Masina de calcul

programata la nivel

de asamblare

+

Un limbaj de

nivel inalt

Masina de calcul

programata la nivel

inalt

+

(limbajul masinii

de calcul)

Ierarhie de abstractizari

(echivalent uman al

limbajului masinii)

(forma concentrata a

limbajului masinii,

apropiata de cea umana)

ABSTRACT CONCRET

Exemplu de abstractizare (masina de calcul si limbajele)

?

Page 45: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 45

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Entitate

abstractizata

Masina de calcul

condusa de

coduri masina

+

Model

abstract Model si mai

abstract

Limbajul

masina

Limbajul de

asamblare

Masina de calcul

programata la nivel

de asamblare

+

Un limbaj de

nivel inalt

Masina de calcul

programata la nivel

inalt

+

Modelul cel

mai abstract

(limbajul masinii

de calcul)

Ierarhie de abstractizari

(echivalent uman al

limbajului masinii)

(forma concentrata a

limbajului masinii,

apropiata de cea umana)

(forma intuitiva din

punct de vedere

uman)

ABSTRACT CONCRET

Pseudocod,

etc.

Proiectarea

programarii masinii

de calcul

+

Exemplu de abstractizare (masina de calcul si limbajele)

Page 46: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

46

Abstractizarile

formeaza ierarhii

Ierarhiile de

abstractizari

– grupeaza

abstractizarile in

niveluri de

abstractizare

(complexitate)

Modelare si

abstractizare

NIVEL REDUS

(mai multe detalii,

mai apropiat de

concret,

complex)

NIVEL INALT

(mai putine detalii,

mai abstract,

simplu)

Ierarhie de

abstractizari

Page 47: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 47

Exemplu de abstractizare (entitatile lumii reale, programele si limbajele)

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Entitate

abstractizata

Entitate

din lumea

reala

Cum poate fi abstractizata

informatic realitatea? “calculul

modulului

sumei a

doua

valori”

Page 48: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 48

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Entitate

abstractizata

Entitate

din lumea

reala

Model

abstract

Exemplu de abstractizare (entitatile lumii reale, programele si limbajele)

Specificatie

in

pseudocod

Pseudocod

“calculul

modulului

sumei a

doua

valori”

calculul sumei a 2 valori

daca [suma e negativa]

negarea sumei

?

Page 49: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 49

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Entitate

abstractizata

Entitate

din lumea

reala

Model

abstract

Model si mai

abstract

Specificatie

in

pseudocod

Un limbaj de

nivel inalt

Program de

nivel inalt

Pseudocod

Exemplu de abstractizare (entitatile lumii reale, programele si limbajele)

“calculul

modulului

sumei a

doua

valori”

calculul sumei a 2 valori

daca [suma e negativa]

negarea sumei

s = v1 + v2;

if (s<0)

s = -s;

?

Page 50: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 50

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Entitate

abstractizata

Entitate

din lumea

reala

Model

abstract

Model si mai

abstract

Limbajul de

asamblare

Un limbaj de

nivel inalt

Program de

nivel inalt

Program la

nivel de

asamblare

Model si mai

abstract

Exemplu de abstractizare (entitatile lumii reale, programele si limbajele)

Specificatie

in

pseudocod

Pseudocod

“calculul

modulului

sumei a

doua

valori”

calculul sumei a 2 valori

daca [suma e negativa]

negarea sumei

s = v1 + v2;

if (s<0)

s = -s;

MOV AX, v1

ADD AX, v2

JGE et1

NEG AX

et1: MOV s, AX

?

Page 51: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 51

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Entitate

abstractizata

Entitate

din lumea

reala

Model

abstract

Model si mai

abstract

Limbajul de

asamblare

Un limbaj de

nivel inalt

Program de

nivel inalt

Modelul cel

mai abstract

Program la

nivel de

asamblare

Model si mai

abstract

Limbajul

masina

Cod

masina

Exemplu de abstractizare (entitatile lumii reale, programele si limbajele)

Specificatie

in

pseudocod

Pseudocod

“calculul

modulului

sumei a

doua

valori”

calculul sumei a 2 valori

daca [suma e negativa]

negarea sumei

s = v1 + v2;

if (s<0)

s = -s;

MOV AX, v1

ADD AX, v2

JGE et1

NEG AX

et1: MOV s, AX

01000101

11000010

01000101

01110010

01010001

01010101

01111010

10010111

Page 52: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 52

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Entitate

abstractizata

Entitate

din lumea

reala

(limbajul

masinii de

calcul)

Model

abstract

Model si mai

abstract

Limbajul de

asamblare

(echivalent

uman al

limbajului

masinii)

Un limbaj de

nivel inalt

Program de

nivel inalt

(forma concentrata,

apropiata de cea

umana, a limbajului

masinii)

Modelul cel

mai abstract

Program la

nivel de

asamblare

(forma intuitiva

din punct de

vedere uman)

Model si mai

abstract

Limbajul

masina

Cod

masina

Ierarhie de abstractizari ABSTRACT CONCRET

Exemplu de abstractizare (entitatile lumii reale, programele si limbajele)

Specificatie

in

pseudocod

Pseudocod

Page 53: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 53

Recapitulare a exemplelor de abstractizare care reflecta relativitatea conceptului

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Limbaj de

programare Format

Controlul executiei

realizat prin Folosit in

Cat de abstract este

pentru masina pentru om

cod

masina

numeric

binar

salturi conditionate,

iteratii catre etichete

masina de

calcul deloc

extrem de

mult

asamblare alfa-

numeric

salturi conditionate,

iteratii simplecatre

etichete

programarea

la nivel

asamblare

destul de mult foarte mult

procedural

(nivel inalt)

alfa-

numeric

decizii

(simple+multiple),

iteratii complexe (mai

multe tipuri)

programarea

la nivel inalt mult mult

pseudocod textual,

informal

decizii

(simple+multiple),

iteratii

proiectarea

programelor foarte mult

destul de

putin

Page 54: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 54

Orientarea spre Obiecte (OO)

Evolutia catre OO

Incapsulare, modularizare si ascunderea detaliilor

1.2. Evolutia catre abordarea OO

– Ce inseamna incapsulare, modularizare, ascundere a detaliilor?

– Unde pot fi intalnite incapsularea, modularizarea, ascunderea detaliilor?

– Ce roluri pot avea incapsularea, modularizarea, ascunderea detaliilor?

– Exemple de incapsulare, in lumea reala si de tip informatic

– Exemple de modularizare, in lumea reala si de tip informatic

– Exemple de ascundere a detaliilor, in lumea reala si de tip informatic

Page 55: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

Incapsulare, modularizare si ascunderea detaliilor

UPB - ETTI - Curs POO - an II - seria E 55

1.2. Evolutia catre abordarea OO

Incapsularea are in teoria programarii doua sensuri

– regruparea

– gruparea unor elemente intre care exista legaturi

– intr-o singura entitate noua care poate astfel

sa fie referita printr-un singur nume

– limitarea accesului sau ascunderea detaliilor (details hiding)

– includerea unui lucru intr-un alt lucru

– astfel incat lucrul inclus sa fie privat

(inaccesibil, invizibil)

Page 56: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

Incapsulare, modularizare si ascunderea detaliilor

UPB - ETTI - Curs POO - an II - seria E 56

1.2. Evolutia catre abordarea OO

Incapsularea are in teoria programarii doua sensuri

– regruparea

– gruparea unor elemente intre care exista legaturi

– intr-o singura entitate noua care poate astfel

sa fie referita printr-un singur nume

– limitarea accesului sau ascunderea detaliilor (details hiding)

– includerea unui lucru intr-un alt lucru

– astfel incat lucrul inclus sa fie privat (inaccesibil, invizibil)

Inside the box

Interfata

Page 57: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

Incapsulare, modularizare si ascunderea detaliilor

UPB - ETTI - Curs POO - an II - seria E 57

1.2. Evolutia catre abordarea OO

Incapsularea ca regrupare si limitare a accesului (ascundere a detaliilor)

ascunderea

detaliilor

limitarea

accesului

regruparea

Inside

the box Inside

the box

Interfata

Page 58: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

Incapsulare, modularizare si ascunderea detaliilor

UPB - ETTI - Curs POO - an II - seria E 58

1.2. Evolutia catre abordarea OO

Incapsularea rezultatului unei abstractizari

– este o combinatie a celor doua sensuri ale incapsularii

– este procesul de regrupare a elementelor (detaliilor esentiale) unei

abstractii intr-o entitate noua cu nume propriu, in urma caruia

– se separa interfata contractuala a abstractiei

– detaliile necesare interactiunilor externe

– care trebuie sa fie publice, accesibile, vizibile

– de implementarea sa

– detaliile necesare reprezentarii interne

– care trebuie sa fie private, inaccesibile, ascunse

– rezultatul fiind o entitate de tip black box, concept aplicabil

– modulelor functionale, obiectelor si componentelor software

Inside the box

Interfata

Page 59: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

1.1. Obiectul cursului si relatia cu alte cursuri

UPB - ETTI - Curs POO - an II - seria E 59

Un program / o componenta a unui program ca servicii oferite de un black box

Black Box

(abstractizare, incapsulare cu

ascunderea detaliilor)

“se vad” doar intrarile, iesirile,

si efectele colaterale

(serviciile furnizate, interfetele

oferite si necesare)

Utilizator

(uman / alta

componenta)

Incapsulare, modularizare si ascunderea detaliilor

Page 60: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

1.1. Obiectul cursului si relatia cu alte cursuri

UPB - ETTI - Curs POO - an II - seria E 60

Servicii oferite de un black box

Black Box

(incapsulare,

abstractizare,

ascundere a

detaliilor)

“se vad” doar intrarile, iesirile,

si efectele colaterale

(serviciile furnizate, interfetele

oferite si necesare)

Incapsulare, modularizare si ascunderea detaliilor

Interfetele oferite

(prin ele se realizeaza

interactiunea,

serviciile)

Page 61: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 61

1.2. Evolutia catre abordarea OO

Incapsulare, modularizare si ascunderea detaliilor

Beneficiile incapsularii black box

1. Permite imbunatatirea mecanismelor interne ale

unei componente fara impact asupra lumii exterioare

– interiorul cutiei negre (BB) nefiind cunoscut in

afara, poate fi inlocuit fara a conta pentru lumea

exterioara (cat timp BB se comporta la fel)

2. Permite inlocuirea cutiei cu o alta care ofera

aceeasi interfata publica, fara impact asupra lumii

exterioare

– mai mult, intreaga cutie neagra poate fi

inlocuita fara a conta pentru lumea exterioara

(cat timp noua BB se comporta la fel)

Inlocuirea

interiorului “in

spatele scenei”

Inlocuirea

cutiei “in

spatele

scenei”

Page 62: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 62

1.2. Evolutia catre abordarea OO

Incapsulare, modularizare si ascunderea detaliilor

Beneficiile incapsularii black box

3. Protejeaza integritatea interiorului cutiei

– impiedicand lumea exterioara sa aiba acces la interiorul cutiei, nu ii lasa

pe utilizatori sa duca interiorul cutiei in stari invalide sau inconsistente

4. Reduce complexitatea perceputa de utilizatorii cutiei (programatorii care

apeleaza la cutie doar prin intermediul interfetei)

– utilizatorii (programatorii) sunt eliberati de necesitatea cunoasterii

detaliilor interne cutiei

– protejeaza utilizatorii de continutul cutiei

5. Reduce complexitatea sistemului marind astfel robustetea lui

– limitarea interdependentelor intre lumea exterioara si interior (doar la

interfata) reduce complexitatea potentiala a ansamblului (cutie + exterior)

Page 63: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 63

1.2. Evolutia catre abordarea OO

Incapsularea informatica are 2 aspecte!

1. Incapsularea informatiilor (datelor)

– regruparea elementelor de date in

– structuri /tipuri de date complexe (structuri, enumerari, etc.)

– e implicit FARA ascundere a detaliilor

– informatiile componente sunt accesibile

2. Incapsularea comportamentului

– regruparea elementelor de comportament in

– module de comportament (proceduri, functii, operatii, metode)

– e implicit CU ascundere a detaliilor

– implementarea comportamentului e ascunsa

Incapsulare, modularizare si ascunderea detaliilor

Page 64: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 64

1.2. Evolutia catre abordarea OO

Incapsularea informatiilor (datelor)

– regruparea unor elemente de date simple

– in structuri / tipuri de date complexe

– numele structurii / tipului fiind ”interfata” care permite accesul

– FARA ascundere a detaliilor

– informatiile componente fiind “detaliile interne” accesibile

– rezulta tipuri de date noi din cele fundamentale / elementare / primitive

– fie predefinite in cadrul limbajului (eventual parte a unor biblioteci)

– fie definite de programator

Incapsulare, modularizare si ascunderea detaliilor

Page 65: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 65

Incapsularea informatiilor (datelor) in C

Pornind de la portiunea de program urmatoare

int numarCont;

char *prenume;

char *nume;

float sold;

numarCont = 14378;

prenume = "Ics";

nume = "Igrec";

sold = 3300.00;

Cum s-ar putea incapsula cele 4 elemente de date?

Cum ar arata programul rescris (refactored) in acest caz?

1.2. Evolutia catre abordarea OO

Incapsulare, modularizare si ascunderea detaliilor

Page 66: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 66

Incapsularea informatiilor (datelor) in C

int numarCont;

char *prenume;

char *nume;

float sold;

1.2. Evolutia catre abordarea OO

Incapsulare, modularizare si ascunderea detaliilor

numarCont:

...

prenume:

...

nume:

sold:

(int)

(float)

(char *)

(char *)

(char) (char)

...

(char)

...

(char) (char)

(char)

...

...

...

Primele 4

linii de cod

(cele 4

elemente de

incapsulat)

Page 67: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 67

Incapsularea informatiilor (datelor) in C

int numarCont;

char *prenume;

char *nume;

float sold;

numarCont = 14378;

prenume = "Ics";

nume = "Igrec";

sold = 3300.00;

1.2. Evolutia catre abordarea OO

Incapsulare, modularizare si ascunderea detaliilor

numarCont:

...

prenume:

...

nume:

sold:

(int)

(float)

(char *)

(char *)

(char) (char) (char)

(char) (char)

(char)

...

14378

3300.00

'I'

'C'

's'

(char)

(char)

'I'

'g'

'r'

'e'

'c'

...

...

Toate cele 8

linii de cod

Page 68: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 68

Posibila incapsulare a informatiilor (datelor) in C

struct Cont { // tip de date NOU cu nume (“Cont”)

int numarCont; // camp de tip int (intreg)

char *prenume; // camp de tip pointer la caractere

char *nume; // camp de tip pointer la caractere

float sold; // camp de tip float (real)

};

struct Cont cn; // declaratia (tipului) variabilei cn

1.2. Evolutia catre abordarea OO

Incapsulare, modularizare si ascunderea detaliilor

Incapsularea in acest caz este FARA

ascundere a detaliilor (informatiilor, datelor)! Doar regrupare!

Page 69: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 69

Posibila incapsulare a informatiilor (datelor) in C

struct Cont { // tip de date NOU cu nume (“Cont”)

int numarCont; // camp de tip int (intreg)

char *prenume; // camp de tip pointer la caractere

char *nume; // camp de tip pointer la caractere

float sold; // camp de tip float (real)

};

struct Cont cn; // declaratia (tipului) variabilei cn

struct Cont cn1; // reutilizarea numelui tipului de date

1.2. Evolutia catre abordarea OO

Incapsulare, modularizare si ascunderea detaliilor

Incapsularea permite insa

reutilizarea tipului nou de date

Page 70: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 70

Posibila incapsulare a informatiilor (datelor) in C

struct Cont {

int numarCont;

char *prenume;

char *nume;

float sold;

};

struct Cont cn;

1.2. Evolutia catre abordarea OO

Incapsulare, modularizare si ascunderea detaliilor

cn = cn.numarCont:

(echivalente ale

aceleiasi adrese)

...

prenume:

...

nume:

sold:

(int)

(float)

(char *)

(char *)

(char) (char)

...

(char)

...

(char) (char)

(char)

...

...

...

Primele 4

linii de cod

(Cont)

INCAPSULARE A

INFORMATIILOR

Page 71: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 71

Posibila incapsulare a informatiilor (datelor) in C

struct Cont {

int numarCont;

char *prenume;

char *nume;

float sold;

};

struct Cont cn;

cn.numarCont = 14378;

cn.prenume = "Ics";

cn.nume = "Igrec";

cn.sold = 3300.00;

1.2. Evolutia catre abordarea OO

Incapsulare, modularizare si ascunderea detaliilor

cn = cn.numarCont:

...

prenume:

...

nume:

sold:

(int)

(float)

(char *)

(char *)

14378

3300.00

(char) (char) (char)

(char) (char)

(char)

...

'I'

'C'

's'

(char)

(char)

'I'

'g'

'r'

'e'

'c'

...

...

(Cont)

Programul

rescris

(refactored)

Page 72: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 72

Posibila simplificare a utilizarii incapsularii informatiilor (datelor) in C

typedef struct { // tip de date NOU

int numarCont; // camp de tip int (intreg)

char *prenume; // camp de tip pointer la caractere

char *nume; // camp de tip pointer la caractere

float sold; // camp de tip float (real)

} Cont; // nume dat tipului de date NOU

Cont cn; // declaratia tipului variabilei cn

// intr-o forma simplificata

1.2. Evolutia catre abordarea OO

Incapsulare, modularizare si ascunderea detaliilor

Page 73: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 73

1.2. Evolutia catre abordarea OO

Ascunderea detaliilor poate 2 aspecte!

1. Ascunderea informatiilor (datelor)

– reprezinta ascunderea detaliilor necesare reprezentarii interne a

structurilor de date

– NU se regaseste implicit in incapsularea informatiilor (datelor)

2. Ascunderea implementarii

– reprezinta ascunderea detaliilor necesare reprezentarii interne ale

unei abstractizari

– rezultate in urma separarii interfetei necesara interactiunilor

– care trebuie sa fie publica, accesibila, vizibila

– de implementarea ei

– se regaseste implicit in incapsularea comportamentului in module

Incapsulare, modularizare si ascunderea detaliilor

Page 74: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 74

Incapsularea comportamentului in C

Pornind de la portiunea de program pentru “calculul modulului sumei a doua

valori”

s = v1 + v2; // suma

if (s<0) // structura decizie

s = -s; // modul

Cum s-ar putea incapsula acest comportament (intr-un modul)?

1.2. Evolutia catre abordarea OO

s = v1 + v2

s = -s

[s < 0] else

Incapsulare, modularizare si ascunderea detaliilor

Page 75: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 75

Posibila incapsulare a codului pentru “calculul modulului sumei a doua valori”

// declaratie functie – incapsulare comportament

int modululSumei() { // interfata publica (semnatura)

int s; // implementare ascunsa

s = v1 + v2; // acces la variabilele globale v1 si v2

if (s<0) s = -s;

return s;

}

... {

// ...

s = modululSumei(); // apel functie (delegare functionala)

}

Cum ar arata intreg programul rescris (refactored) in acest caz?

1.2. Evolutia catre abordarea OO

Incapsulare, modularizare si ascunderea detaliilor

INCAPSULARE A

COMPORTAMENTULUI

Page 76: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 76

Posibil program bazat pe incapsularea anterioara

#include <stdio.h>

int v1 = 3, v2 = 5; // 2 variabile globale

int main(void) {

int s; // variabila locala

s = modululSumei(); // fara argumente

printf(“modulul sumei %d cu %d este %d\n", v1, v2, s);

return 0;

}

int modululSumei() { // fara parametri

int s; // variabila locala

s = v1 + v2;

if (s<0) s = -s;

return s;

}

Cum ar putea functia modululSumei() sa fie facuta mai generala?

1.2. Evolutia catre abordarea OO

Incapsulare, modularizare si ascunderea detaliilor

Page 77: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 77

Posibila incapsulare a codului pentru “calculul modulului sumei a doua valori”

// declaratie functie – incapsulare comportament

int modululSumei(int a, int b) { // declaratii parametri

int s; // implementare ascunsa

s = a + b; // acces la parametri

if (s<0) s = -s;

return s;

}

... {

// ...

s = modululSumei(v1, v2); // pasare argumente

}

Cum ar arata programul rescris (refactored) in acest caz?

1.2. Evolutia catre abordarea OO

Incapsulare, modularizare si ascunderea detaliilor

(variabile)

(valori)

Page 78: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 78

Alta posibila incapsulare pentru “calculul modulului sumei a doua valori”

#include <stdio.h>

int v1 = 3, v2 = 5; // 2 variabile globale

int main(void) {

int s; // variabila locala

s = modululSumei(v1, v2); // 2 argumente

printf(“modulul sumei lui %d cu %d este %d\n", v1, v2, s);

return 0;

}

int modululSumei(int a, int b) { // 2 parametri

int s; // variabila locala

s = a + b;

if (s<0) s = -s;

return s;

}

Ce posibila problema vedeti in codul de sus din punctul de vedere al variabilelor?

1.2. Evolutia catre abordarea OO

Incapsulare, modularizare si ascunderea detaliilor

Page 79: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 79

Cum poate sa apara o problema?

#include <stdio.h>

int v1 = 3, v2 = 5; // variabile globale NEASCUNSE

int main(void) {

int s; // variabila locala

s = modululSumei(v1, v2); // 2 argumente

v1 = 7; // inseram o linie in program

printf(“modulul sumei lui %d cu %d este %d\n", v1, v2, s);

return 0;

}

int modululSumei(int a, int b) { // 2 parametri

int s; // variabila locala

s = a + b;

if (s<0) s = -s

return s; – Variabila s nu creeaza nici o problema!

} – Ce afiseaza insa programul?

1.2. Evolutia catre abordarea OO

Incapsulare, modularizare si ascunderea detaliilor

Page 80: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 80

Problema apare din cauza accesului neingradit la variabilele globale

#include <stdio.h>

int v1 = 3, v2 = 5; // variabile globale NEASCUNSE

int main(void) {

int s; // variabila locala

s = modululSumei(v1, v2); // 2 argumente

v1 = 7; // al doilea acces la v1

printf(“modulul sumei lui %d cu %d este %d\n", v1, v2, s);

return 0;

}

int modululSumei(int a, int b) { // 2 parametri

int s; // variabila locala

s = a + b; // primul acces la v1

if (s<0) s = -s

return s; // Programul afiseaza:

} // modulul sumei lui 7 cu 5 este 8

1.2. Evolutia catre abordarea OO

Incapsulare, modularizare si ascunderea detaliilor

Page 81: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 81

1.2. Evolutia catre abordarea OO

Modulul software

– parte separata din program / unitate de cod (functie, obiect, etc.)

– care interactioneaza cu alte module

– doar prin intermediul unor interfete clar definite ca

– intrari si iesiri (valori returnate, liste argumente, semnaturi operatii)

– conceptual reprezinta o separare a preocuparilor (separation of concerns)

– introducerea limitelor logice intre module usurand modificarile

Modularizarea (programarea modulara, 1972 – David Parnas)

– tehnica de proiectare a programelor prin descompunerea lor în module

– este necesara in special in programe mari, complicate

– are ca scop cresterea masurii in care programul este compus din module

Incapsulare, modularizare si ascunderea detaliilor

Page 82: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 82

1.2. Evolutia catre abordarea OO

Modularizarea – proiectare prin descompunerea în module

Incapsulare, modularizare si ascunderea detaliilor

Separarea in

unitati discrete

Page 83: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 83

1.2. Evolutia catre abordarea OO

Incapsulare vs modularizare informatica

– incapsularea insista pe

– regruparea elementelor unei abstractii informatice

– modularizarea insista pe

– descompunerea unui program in unitati de program numite module

Ambele

– folosesc separarea interfetei de implementare

– pentru a introduce limite intre entitatile care rezulta

– si pot astfel genera componente de tip black box

– ca efect al acestei separari

– usureaza managementul complexitatii si al schimbarii

Incapsulare, modularizare si ascunderea detaliilor

Page 84: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 84

1.2. Evolutia catre abordarea OO

Functia modululSumei() vazuta ca o componenta black box

Incapsulare, modularizare si ascunderea detaliilor

variabila locala ascunsa

modululSumei

int modululSumei(int a, int b) {

int s;

s = a + b;

if (s<0) s = -s;

return s;

}

int s;

parametri

(intrari ale

black box)

valoare

returnata

(iesire a

black box)

s = a + b;

if (s<0) s = -s;

return s;

comportament ascuns

int

int b) (int a,

Semnatura (Interfata)

publica, vizibila, accesibila

Implementarea

privata, ascunsa,

inaccesibila

{

}

MODULARIZARE A

COMPORTAMENTULUI

Page 85: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 85

1.2. Evolutia catre abordarea OO

Functia modululSumei() vazuta ca o componenta black box

Incapsulare, modularizare si ascunderea detaliilor

main int s;

s = a + b;

if (s<0) s = -s;

return s; int int b int a

modululSumei

int s;

int v1 = 3, v2 = 5;

int main(void) {

int s;

s = modululSumei(v1, v2);

printf(“|%d+%d|=%d\n",v1,v2,s);

return 0;

}

int modululSumei(int a, int b) {

int s;

s = a + b;

if (s<0) s = -s;

return s;

}

s

v1 v2

printf

v1 v2 s

v1 v2

citiri citiri

Variabile globale publice,

vizibile, accesibile oricui

Page 86: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 86

1.2. Evolutia catre abordarea OO

Problemele create de accesul neingradit la variabile globale

Pierderea consistentei

variabilei v1

Incapsulare, modularizare si ascunderea detaliilor

main int s;

s = a + b;

if (s<0) s = -s;

return s; int int b int a

modululSumei

int s;

int v1 = 3, v2 = 5;

int main(void) {

int s;

s = modululSumei(v1, v2);

v1 = 7;

printf(“|%d+%d|=%d\n",v1,v2,s);

return 0;

}

int modululSumei(int a, int b) {

int s;

s = a + b;

if (s<0) s = -s;

return s;

}

s

v1 v2

printf

v1 v2 s

v1 v2

citiri scriere

(modificare)

Page 87: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 87

Orientarea spre Obiecte (OO)

Evolutia catre OO

Programarea structurata

1.2. Evolutia catre abordarea OO

– Ce inseamna programarea structurata?

– Care sunt modalitatile de structurare a programelor?

– Ce stiti despre “goto <eticheta>”?

Page 88: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 88

Programarea structurata

– este programarea in care logica unui program

– este o structura compusa din sub-structuri similare

– intr-un numar limitat de moduri

– structura logica face programul

– eficient

– usor de inteles

– usor de modificat

1.2. Evolutia catre abordarea OO

Programarea structurata

Page 89: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 89

Programarea structurata

– un exemplu este blocul de instructiuni

– cu rol de incapsulare a unei

secvente de instructiuni

– adica regrupare a secventei de

instructiuni

– fara nume prin care poate fi

referit, si fara intrari si iesiri

– scopul (domeniul de existenta al)

variabilelor locale declarate in

interiorul unui bloc

– este din locul declararii si

pana la finalul blocului

1.2. Evolutia catre abordarea OO

Programarea structurata

.. // aici v NU exista

{ // BEGIN in Pascal

.. // aici v NU exista

int v; // declaratie tip

.. // aici v exista

} // END in Pascal

.. // aici v NU exista

Page 90: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 90

Programarea structurata

– descurajeaza utilizarea instructiunilor de tip "Go To eticheta"

1.2. Evolutia catre abordarea OO

Programarea structurata

Page 91: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 91

Programarea structurata

– la cel mai jos nivel se afla structuri de

control al programului simple, ierarhice:

– secventa

– executia in ordine a instructiunilor

– selectia conditionata

– decizia privind instructiunea care

urmeaza a fi executata dintr-un numar

de instructiuni

– in functie de starea curenta a

programului (if, if..else,

if..then..else..endif, switch, case,

etc.)

1.2. Evolutia catre abordarea OO

Programarea structurata

decizie / selectie

Page 92: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 92

– repetitia conditionata

– o instructiune este executata pana

cand este aplicata tuturor

elementelor dintr-o colectie (for)

– sau cat timp/pana cand programul

atinge o anumita stare (while,

do..until, do..while)

1.2. Evolutia catre abordarea OO

Programarea structurata

Ce instructiune C

corespunde fiecareia

dintre structurile date

ca exemplu?

Page 93: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 93

– repetitia conditionata

– o instructiune este executata pana

cand este aplicata tuturor

elementelor dintr-o colectie (for)

– sau cat timp/pana cand programul

atinge o anumita stare (while,

do..until, do..while)

1.2. Evolutia catre abordarea OO

Programarea structurata

for

while do

while

Page 94: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 94

Orientarea spre Obiecte (OO)

Evolutia catre OO

Programarea procedurala

1.2. Evolutia catre abordarea OO

– Ce inseamna programarea procedurala?

– Ce denumiri alternative ale procedurilor exista?

– Ce semnifica aceste denumiri?

– Cum decurge dezvoltarea programelor in abordarea procedurala?

– Ce probleme poate genera abordarea procedurala?

Page 95: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 95

Programarea procedurala

– este o forma avansata de programare structurata

– care foloseste conceptul structural de (apel de) procedura

Procedura

– forma de incapsulare si modularizare a comportamentului (executiei)

– in jurul unui bloc de cod, care regrupeaza o secventa de instructiuni

– oferind o interfata publica (semnatura) a blocului, formata din

– nume prin care poate fi apelat

– eventual intrari (argumente) si iesiri (valori returnate)

– ascunzand implicit detaliile de implementare ale blocului

– prin scopul limitat la nivelul blocului de cod al variabilele locale

– si neoferind alt acces din exterior la instructiunile regrupate

1.2. Evolutia catre abordarea OO

Programarea procedurala

Page 96: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 96

Denumiri alternative

– procedura – sugereaza ideea de modalitate de executie standard sau

recomandata

– rutina – sugereaza ideea de utilizare repetata, de reutilizare

– subprograme – sugereaza ideea de parte dintr-un program, modul

– subrutine – combina ideea de reutilizare cu ideea de modularizare

– functie – sugereaza ideea de dependenta intre intrari si iesiri si originea

matematica

– metoda – sugereaza ideea de modalitate de realizare/executie

Procedura ofera

– abstractizare, modularizare si incapsulare a comportamentului (executiei)

– facilitand reutilizabilitatea, delegarea, usurinta intelegerii si modificarii,

protectia, etc., aspectelor comportamentale ale programelor

1.2. Evolutia catre abordarea OO

Programarea procedurala

Page 97: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 97

Modularizarea comportamentului in C

Pornind de la portiunea de program pentru “calculul modulului sumei a doua

valori”

s = v1 + v2; // suma

if (s<0) // structura decizie

s = -s; // modul

Cum s-ar putea modulariza calculul modulului?

Cum ar arata programul rescris (refactored) in acest caz?

1.2. Evolutia catre abordarea OO

s = v1 + v2

s = -s

[s < 0] else

Programarea procedurala

Page 98: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 98

Posibila modularizare a programului pentru “calculul modulului sumei a doua

valori”

// declaratie functie (modul de comportament)

int modul(int x) { // interfata publica (semnatura)

if (x<0) // implementare ascunsa

x = -x;

return x;

}

... {

// ...

s = v1 + v2;

s = modul(s); // apel functie (delegare functionala)

}

1.2. Evolutia catre abordarea OO

Programarea procedurala

MODULARIZARE

PROCEDURALA

Page 99: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 99

1.2. Evolutia catre abordarea OO

Functia modul() vazuta ca modul procedural si componenta black box

modul

int modul(int x) {

if (x<0)

x = -x;

return x;

}

parametru

(intrare a

black box)

valoare

returnata

(iesire a

black box)

if (x<0)

x = -x;

return x;

comportament ascuns

int

(int x)

Semnatura (interfata)

publica, vizibila, accesibila

Implementarea

privata, ascunsa,

inaccesibila

{

}

Programarea procedurala

MODUL

PROCEDURAL

Page 100: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 100

Constructia unui program de calcul (sistem software)

– este o secventa de iteratii de tip divizare-reunire, fiind necesare:

– descompunerea (analiza) pentru

– a intelege problema si

– a putea formula o conceptie a solutiei

– compunerea (sinteza) pentru

– a construi solutia (a materializa, a realiza efectiv conceptia)

Cum corespund fazele de mai jos cu exemplul ecuatiei matematice?

1.2. Evolutia catre abordarea OO

Programarea procedurala

Descompunere

(funcţională / OO)

Analiză

(funcţională / OO) Construcţie a

componentelor

Produs

Compunere

(integrare)

Specificatii

Page 101: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 101

Procesul de descompunere traditional procedural (non-OO)

– este dirijat de criteriul procedural (functional):

– identificarea funcţiilor,

– descompunerea funcţiilor în subfuncţii,

aplicat în mod recursiv, ducand la elemente simple, atomice, direct

implementabile (proceduri, funcţii, etc.)

1.2. Evolutia catre abordarea OO

Programarea procedurala

Funcţie principală

Sub-funcţie A Sub-funcţie B

Sub-funcţie A1 Sub-funcţie A2 Sub-funcţie B1 Sub-funcţie B2

sqrt()

main()

Ierarhie de funcţii

Page 102: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 102

Abordarea procedurala

– propune descompunerea bazată pe ceea ce face programul

– considera programul ca fiind un proces imens

– care trebuie descoperit si descompus

– si odata subproblemele rezolvate trebuie combinate solutiile pentru

a construi solutia intregii probleme

Mecanismele de integrare sunt

– apelurile de functii (delegarile functionale) si ierarhizarea lor

Arhitectura programului reflecta DOAR functiile lui (functiile decid structura)

evolutiile comportamentale pot implica modificari structurale puternice

Pentru rezultate bune functiile cerute trebuie sa fie bine identificate si stabile

in timp (ceea ce se intampla foarte rar)

1.2. Evolutia catre abordarea OO

Programarea procedurala

Page 103: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 103

Abordarea descompunerii procedurale se bazeaza pe:

– programare structurata si

– modularizare functionala

Datele globale insa

– nu sunt protejate si pot deveni usor eronate sau incoerente

– modificari in datele globale se propaga in toate functiile care le folosesc

– modificari in functii care utilizeaza date globale se pot propaga in acele

date

1.2. Evolutia catre abordarea OO

Programarea procedurala

Page 104: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 104

1.2. Evolutia catre abordarea OO

Problemele create de accesul neingradit la variabile globale

Pierderea consistentei

variabilei v1

main int s;

s = a + b;

if (s<0) s = -s;

return s; int int b int a

modululSumei

int s;

int v1 = 3, v2 = 5;

int main(void) {

int s;

s = modululSumei(v1, v2);

v1 = 7;

printf(“|%d+%d|=%d\n",v1,v2,s);

return 0;

}

int modululSumei(int a, int b) {

int s;

s = a + b;

if (s<0) s = -s;

return s;

}

s

v1 v2

printf

v1 v2 s

v1 v2

citiri scriere

(modificare)

Programarea procedurala

Page 105: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 105

Orientarea spre Obiecte (OO)

Evolutia catre OO

Tipurile de date abstracte (ADT)

– curs SDA (anul 1)

1.2. Evolutia catre abordarea OO

– Ce sunt tipurile de date abstracte?

– Exemple de tipuri de date abstracte

– In ce sens sunt abstracte tipurile de date abstracte?

– Ce tip de incapsulare ofera tipurile de date abstracte?

Page 106: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 106

Tipul de date abstract (ADT)

– este definit ca un model (abstract)

– creat pentru a captura esenta unui domeniu al problemei

(subdomeniu al realitatii)

– si a fi apoi transformat intr-un element al unui program de calcul

– exemple: coada, lista, stiva, arbore, graf, etc.

– poate fi definit si ca entitate care consta

– dintr-o multime de valori si

– dintr-o colectie de operatii care prelucreaza acele valori

1.2. Evolutia catre abordarea OO

Tipurile de date abstracte (ADT)

Page 107: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 107

Tipul de date abstract (ADT) – exemple

– Integer consta din

– o multime de valori pozitive si negative de numere intregi si 0

– colectie de operatii care prelucreaza acele valori, cum ar fi

– adunare, scadere, inmultire, comparatii (egalitate, inegalitati, etc.)

1.2. Evolutia catre abordarea OO

Tipurile de date abstracte (ADT)

Integer 0

7

-100

10

3245

*

>

+

etc.

Page 108: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 108

Tipul de date abstract (ADT) – exemple

– Stack (stiva) consta din

– structura de stocare a valorilor (cu regula “ultimul adaugat, primul extras”)

– colectie de operatii care prelucreaza acele valori, cum ar fi

– push (adaugare), pop (extragere), peak (ultima valoare adaugata)

1.2. Evolutia catre abordarea OO

Tipurile de date abstracte (ADT)

structura

de stocare

a valorilor

Stack

push

pop

peak

etc.

Page 109: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 109

Tipul de date abstract (ADT)

– odata inteles si documentat un ADT

– serveste ca specificatie pe care programatorii o pot utiliza ca ghid

pentru alegerea reprezentarii datelor si a implementarii operatiilor

– si ca standard pentru asigurarea corectitudinii programelor

– o realizare (implementare, concretizare) a unui ADT

– ofera reprezentari ale valorilor din multimea de valori

– ofera algoritmi pentru operatiile sale

– si este denumita tip de date

1.2. Evolutia catre abordarea OO

Tipurile de date abstracte (ADT)

Page 110: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 110

Incapsularea oferita de ADT-uri este o forma de incapsulare duala

– a informatiilor (datelor)

– regruparea elementelor de date in

– structuri / tipuri de date complexe

(stive, cozi, liste, arbori, etc.)

– ideal CU ascunderea detaliilor (datelor, informatiilor)

– a comportamentului

– regruparea elementelor de comportament in

– sub-module procedurale (operatii)

– implicit CU ascunderea detaliilor (implementarii)

1.2. Evolutia catre abordarea OO

Incapsularea duala

!

Page 111: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 111

Incapsularea oferita de ADTuri este o forma de incapsulare duala

1.2. Evolutia catre abordarea OO

Incapsularea duala

semnaturi

operatii

Interfata (setul de semnaturi

ale operatiilor) – ideal este

publica, vizibila, accesibila

Implementarea (setul de structuri de date interne

si setul de implementari ale operatiilor) – ideal

este privata, ascunsa, inaccesibila

structuri de

date interne

ascunse

comportament

(implementare operatii)

asociat structurilor de

date interne

Tip de date abstract (ADT)

INCAPSULARE DUALA

(INFORMATII SI

COMPORTAMENT)

Page 112: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 112

Orientarea spre Obiecte (OO)

Evolutia catre OO

Modelare si abstractizare (II)

1.2. Evolutia catre abordarea OO

– Prin ce difera abstractizarea entitatilor de abstractizarea multimilor de entitati?

– Abstractizarea informatica a entitatilor

– Abstractizarea orientata spre obiecte

– Abstractizarea informatica a multimilor de entitati

Page 113: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 113

Abstractizarea in general poate fi aplicata

– unor entitati (AE)

– din care sunt obtinute modele esentiale abstracte

– care sunt perspective simplificate ale entitatilor

– de ex. un teritoriu o harta

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

AE

Page 114: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 114

Abstractizarea in general poate fi aplicata

– unor entitati (AE)

– din care sunt obtinute modele esentiale abstracte

– care sunt perspective simplificate ale entitatilor

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

o persoana numita

Xulescu Ygrec

informatii despre

persoana numita

Xulescu Ygrec

AE

o poza a lui

Xulescu Ygrec

AE

Perspective

simplificate ale

persoanei numite

Xulescu Ygrec

“studentul”

Xulescu

Ygrec

AE (o perspectiva asupra persoanei)

Page 115: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 115

Abstractizarea informatica (AI)

– aplicata unor entitati (AE)

– produce modele informatice (esentiale, abstracte)

– de exemplu

– pornind de la perspectiva “student” a persoanei Xulescu Ygrec

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

inregistrari intr-o

baza de date

despre studentul

Xulescu Ygrec

AE

Abstractizari

informatice (AI) ale

studentului numite

Xulescu Ygrec

AE

studentul

Xulescu Ygrec

altele?

Page 116: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 116

Abstractizarea orientata spre obiecte (AOO)

– caz particular de abstractizare informatica (AI)

– aplicata unei entitati (AE)

– produce un element al modelului OO al realitatii

– numit obiect software sau pe scurt obiect

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

inregistrari intr-o

baza de date

despre studentul

Xulescu Ygrec

AE

Abstractizari

informatice (AI) ale

studentului numite

Xulescu Ygrec

obiectul

software pXY

AE

studentul

Xulescu Ygrec

Page 117: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 117

Abstractizarea in general poate fi aplicata

– unor multimi de entitati (AM)

– din care sunt obtinute categorii, tipuri, clase de entitati

– care descriu ceea ce este comun multimii de entitati

– fiind generalizari (vederi de ansamblu) ale multimilor de entitati

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

AM

Conceptul, categoria, etc., de

“Student”

Page 118: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 118

Abstractizarea orientata spre obiecte (AOO)

– caz particular de abstractizare informatica (AI)

– aplicata unei multimi de entitati (AM)

– produce categorii, tipuri ale modelului OO

– numite clase de obiecte software sau pe scurt clase

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Perspectiva

simplificata

obiectul

software pXY

AM

Clasa

Student

Vedere de ansamblu

(descriere a ceea ce este comun)

pWZ Abstractizari orientate

spre obiecte (AOO) …

Page 119: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 119

Combinand abstractizarile generale ale entitatilor (AE) si multimilor (AM)

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Perspectiva

simplificata a

persoanelor (din

categoria “Student”)

studentul

Xulescu

Ygrec

AE (perspectiva asupra persoanelor)

studentul

Wescu Zet studentul

AM

Conceptul,

categoria, etc., de

“Student”

Abstractizare a tuturor

persoanelor care sunt studenti

(descriere a ceea ce este

comun tuturor studentilor)

(vedere de ansamblu asupra studentilor)

AE

Page 120: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 120

Combinand abstractizarile informatice

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

obiectul

software pXY

AM

Clasa

Student

pWZ …

perspectiva

vedere de ansamblu

AE

AE

Page 121: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 121

Mergand mai departe, putem abstractiza multimile de multimi ca superclase

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

obiectul

pXY

AM

Clasa

Student

(AOO)

Clasa

Profesor

AM

(AOO)

Superclasa

Persoana

Element al

unei multimi

Multime de

elemente

Multime de

multimi

AE (AOO)

Page 122: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 122

Paralela intre abstractizarile din lumea reala si abstractizarile informatice OO

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

studentul

Xulescu Ygrec AE

obiectul

pXY

AE

AM

Clasa

Student

informatii despre

Xulescu Ygrec

Conceptul de

Student

AM

(AOO)

(AOO)

AE

(AOO)

Clasa

Profesor

AM

(AOO)

Superclasa

Persoana

Conceptul mai

general de Persoana

AM

Element al

unei multimi

Multime de

elemente

Multime de

multimi

AE

(AOO)

Page 123: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 123

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Entitate

abstractizata

Masina de calcul

condusa de

coduri masina

+

Model

abstract Model si mai

abstract

Limbajul

masina

Limbajul de

asamblare

Masina de calcul

programata la nivel

de asamblare

+

Un limbaj de

nivel inalt

Masina de calcul

programata la nivel

inalt

+

(limbajul masinii

de calcul)

Ierarhie de abstractizari

(echivalent uman al

limbajului masinii)

(forma concentrata a

limbajului masinii,

apropiata de cea umana)

ABSTRACT CONCRET

Revenire asupra exemplului de abstractizare “masina de calcul si limbajele”

Ce putem pune

aici ?

Page 124: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 124

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Entitate

abstractizata

Masina de calcul

condusa de

coduri masina

+

Model

abstract Model si mai

abstract

Limbajul

masina

Limbajul de

asamblare

Masina de calcul

programata la nivel

de asamblare

+

Un limbaj de

nivel inalt

Masina de calcul

programata la nivel

inalt

+

Modelul cel

mai abstract

(limbajul masinii

de calcul)

Ierarhie de abstractizari

(echivalent uman al

limbajului masinii)

(forma concentrata a

limbajului masinii,

apropiata de cea umana)

(forma intuitiva din

punct de vedere

uman)

ABSTRACT CONCRET

Un limbaj orientat

spre obiecte

Masina de calcul

programata orientat

spre obiecte

+

Revenire asupra exemplului de abstractizare “masina de calcul si limbajele”

Page 125: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 125

Revenire asupra exemplului de abstractizare “entitatile lumii reale”

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Entitate

abstractizata

Entitate

din lumea

reala

CONCRET

Cum poate fi abstractizata informatic?

Page 126: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 126

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Entitate

abstractizata

Entitate

din lumea

reala

Model

abstract

Obiect

software

Un limbaj

orientat spre

obiecte

(forma intuitiva

din punct de

vedere uman)

CONCRET

Revenire asupra exemplului de abstractizare “entitatile lumii reale”

Page 127: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 127

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Entitate

abstractizata

Entitate

din lumea

reala

(limbajul

masinii de

calcul)

Model

abstract

Model si mai

abstract

Limbajul de

asamblare

(echivalent

uman al

limbajului

masinii)

Un limbaj de

nivel inalt

Program de

nivel inalt

(forma concentrata,

apropiata de cea

umana, a limbajului

masinii)

Modelul cel

mai abstract

Program la

nivel de

asamblare

(forma intuitiva

din punct de

vedere uman)

Model si mai

abstract

Limbajul

masina

Cod

masina

Ierarhie de abstractizari ABSTRACT CONCRET

Revenire asupra exemplului de abstractizare “entitatile lumii reale”

Obiect

software

Un limbaj

orientat spre

obiecte

Page 128: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_12_print_v01.pdf · UPB - ETTI - Curs POO - an II - seria E 3 Orientarea

UPB - ETTI - Curs POO - an II - seria E 128

1.2. Evolutia catre abordarea OO

Modelare si abstractizare

Limbaj de

programare Format

Controlul executiei

realizat prin Folosit in

Cat de abstract este

pentru masina pentru om

cod

masina

numeric

binar

salturi conditionate,

iteratii catre etichete

masina de

calcul deloc

extrem de

mult

asamblare alfa-

numeric

salturi conditionate,

iteratii simplecatre

etichete

programarea

la nivel

asamblare

destul de mult foarte mult

procedural

(nivel inalt)

alfa-

numeric

decizii

(simple+multiple),

iteratii (mai multe

tipuri)

programarea

la nivel inalt mult mult

orientat

spre

obiecte

(OO)

alfa-

numeric

colaborarea

obiectelor plus decizii

si iteratii

programarea

OO foarte mult

destul de

putin

Recapitulare a exemplelor de abstractizare care reflecta relativitatea conceptului