Sunteți pe pagina 1din 111

Programare Orientata spre Obiecte (Object-Oriented Programming)

Titular curs: Cornelia Muntean

Structura cursului
Modul de evaluare
100% proiect cu predare n ultima sptmn sau 50% aplicaie practic la examenul final
50% examen final (scris) - gril

+ bonusuri (de pn la + 1 punct la nota final) prezen/activitate laborator mini-proiecte complexe, etc. Bibliografie Cursuri i laboratoare postate pe grup Robin A. Reynolds-Haertle, POO cu MS Visual Basic.NET i MS Visual C#.NET, Ed. Teora

Structura cursului
Continut curs Programare Orientata spre Obiecte (in C++) 1. Introducere in abordarea orientata spre obiecte (OO)

1.1. Evolutia catre abordarea OO


1.2. Caracteristicile si principiile abordarii OO 1.3. Scurta recapitulare a programarii procedurale/structurate 2. Orientarea spre obiecte in limbajul C++ 2.1. Obiecte si clase. Metode (operatii) si campuri (atribute) 2.2. Particularitati C++. Clase de biblioteca C++ (de uz general) 2.3. Clase si relatii intre clase. Asociere, delegare, agregare, compunere

2.4. Generalizare, specializare si mostenire


2.5. Clase abstracte si interfete C++ 2.6. Polimorfismul metodelor 2.7. Clase pentru interfete grafice (GUI) din biblioteca C++
3

Structura cursului

1. Introducere in abordarea orientata spre obiecte (OO)

1.1. Evolutia catre abordarea OO

1.1. Evolutia catre abordarea OO


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
[s < 0] s = v1 + v2 else

daca [suma este negativa]


negarea sumei
s = -s

Diagrama UML de activitati (diagrama de flux al programului) echivalenta

Cum ar putea arata o portiune de program scris in limbajul de nivel inalt C care sa realizeze sarcina specificata?

1.1. Evolutia catre abordarea OO


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

s = v1 + v2;
if (s<0) s = -s;

[s < 0]

else

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?
6

1.1. Evolutia catre abordarea OO


Limbajele de nivel inalt (pre-OO)
Posibil program C++ complet pentru calculul modulului sumei a doua valori
#include iostream using namespace std; int v1 = 3; // variabile globale int v2 = 5; int main() { // functie principala, punct intrare progam int s; s = v1 + v2; if (s<0) s = -s; cout<<modulul sumei <<v1<< cu <<v2<< este <<s<<endl; return 0; } // variabila locala

Cum ar putea arata o portiune de program scris in limbajul de asamblare care sa realizeze sarcina specificata?
7

1.1. Evolutia catre abordarea OO


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 ADD AX, v2 ; copiere din memorie in registru ; adunare la valoarea din registru

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


NEG AX eticheta1: MOV s, AX ; negare aritmetica (schimbare semn) ; copiere din registru in memorie

Cat de usor sunt de inteles intuitiv mnemonicele instructiunilor?

1.1. Evolutia catre abordarea OO

Orientarea spre Obiecte (OO)


Evolutia catre OO Modelare si abstractizare (I) 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

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
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 nsuirile tipice ale unei categorii, destinat pentru a fi reprodus
10

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
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

acces indirect

Model (esenta)

Simplificare si analogie

Proces / Sistem complex

11

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Modelul
Un model expandeaza o portiune

a realitatii
in detrimentul celorlalte

12

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
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

De ce constructia unui model este ilustrata ca abstractizare?

13

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Abstractizarea (abstracia)
operaie a gndirii prin care se desprind i se rein unele elemente (caracteristici i relaii) considerate eseniale (fundamentale, generale) ale unei entitati analizate sau comune unei multimi de entitati

Esenial
(elemente importante, pastrate)
Detalii considerate nesemnificative (ignorate)

si se ignora (vremelnic) elementele considerate neeseniale


elementele considerate esentiale diferentiaza entitatea sau multimea analizata de alte entitati sau multimi de entitati

14

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Exemplu de abstractizare Entitate modelata

Teritoriul
Cum ar putea fi abstractizat teritoriul Portiune din realitate, imposibil de atins in totalitate, de cuprins

CONCRET
15

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Exemplu de abstractizare (teritoriul si harta) Entitate modelata Teritoriul Model abstract O harta detaliata a teritoriului

Cum ar putea fi abstractizata


harta Portiune din realitate, imposibil de atins in totalitate, de cuprins CONCRET (complex) Simplificare, reducere a realitatii (mai usor de gestionat si modificat) ABSTRACT (simplificat)
16

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Exemplu de abstractizare (teritoriul si harta) Entitate modelata Teritoriul Model abstract O harta detaliata a teritoriului Model si mai abstract O harta a teritoriului mai putin detaliata

Portiune din realitate, imposibil de atins in totalitate, de cuprins CONCRET (complex)

Simplificare, reducere a realitatii (mai usor de gestionat si modificat) Ierarhie de abstractizari

Simplificare, reducere suplimentara

ABSTRACT (simplificat)
17

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
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
Problema reala Enunt
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 abstractizata Analiza (conceptualizare) y2 = 1 - x

abstractizare

18

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Abstractizarea este o forma de management

al complexitatii (in crestere!)


avand ca scop concentrarea pe esential si ca efect implicit simplificarea

Abstractizare (simplificare)

Concentrare pe esential

Proces / Sistem complex

19

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
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

20

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Abstractizarea
forma de modelare aplicabila fie unei entitati concentrare pe esential

fie unei multimi de entitati

modalitati diferite de simplificare

concentrare pe ce e comun

Masini (categorie, tip, clasa)

21

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
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!

perspective BMW M5

simplificate
Cod motor: S38B38 Cilindree: 3795 cm Accelerare de la 0 la 100 km/h: 5,9 sec. Viteza maxim: 250 km/h (limitat)

22

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Abstractizarea e relativa depinde de cine decide ce e esential (persoana care abstractizeaza)

Modele mentale diferite

Diferite perspective (puncte de vedere)

aceeasi entitate

23

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
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 esentiale

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
24

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Exemplu de abstractizare (masina de calcul si limbajele)
Entitate abstractizata Masina de calcul condusa de coduri masina + Limbajul masina (limbajul masinii de calcul)

Cum poate fi abstractizata masina de calcul

CONCRET
25

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Exemplu de abstractizare (masina de calcul si limbajele) Entitate abstractizata Model abstract

Masina de calcul condusa de


coduri masina + Limbajul masina (limbajul masinii de calcul)

Masina de calcul programata la nivel


de asamblare + Limbajul de asamblare (echivalent uman al limbajului masinii)

CONCRET
26

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Exemplu de abstractizare (masina de calcul si limbajele) Entitate abstractizata Model abstract Model si mai abstract Masina de calcul programata la nivel inalt + Un limbaj de nivel inalt (forma concentrata a limbajului masinii, apropiata de cea umana)

Masina de calcul condusa de coduri masina + Limbajul masina


(limbajul masinii de calcul)

Masina de calcul programata la nivel de asamblare + Limbajul de asamblare


(echivalent uman al limbajului masinii)

CONCRET

Ierarhie de abstractizari

ABSTRACT
27

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Exemplu de abstractizare (masina de calcul si limbajele)

Entitate abstractizata
Masina de calcul condusa de coduri masina + Limbajul masina (limbajul masinii de calcul)

Model abstract
Masina de calcul programata la nivel de asamblare + Limbajul de asamblare (echivalent uman al limbajului masinii)

Model si mai abstract Masina de calcul programata la nivel inalt + Un limbaj de nivel inalt

Modelul cel mai abstract


Proiectarea programarii masinii de calcul + Pseudocod, etc. (forma intuitiva din punct de vedere uman)

(forma concentrata a limbajului masinii, apropiata de cea umana)

CONCRET

Ierarhie de abstractizari

ABSTRACT
28

NIVEL INALT

Modelare si abstractizare
Abstractizarile formeaza ierarhii Ierarhiile de abstractizari grupeaza abstractizarile in niveluri de abstractizare (complexitate)

(mai putine detalii, mai abstract, simplu)

Ierarhie de abstractizari

NIVEL REDUS (mai multe detalii, mai apropiat de concret, complex)


29

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Exemplu de abstractizare (entitatile lumii reale, programele si limbajele) Entitate abstractizata Entitate din lumea reala

Cum poate fi abstractizata informatic realitatea


calculul modulului sumei a doua valori
30

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Exemplu de abstractizare (entitatile lumii reale, programele si limbajele) Entitate abstractizata Model abstract

Entitate din lumea reala

Specificatie in pseudocod Pseudocod

calculul modulului sumei a doua valori

calculul sumei a 2 valori


daca [suma e negativa] negarea sumei

31

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Exemplu de abstractizare (entitatile lumii reale, programele si limbajele) Entitate abstractizata Model abstract Model si mai abstract Program de nivel inalt Un limbaj de nivel inalt

Entitate din lumea reala

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;

32

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Exemplu de abstractizare (entitatile lumii reale, programele si limbajele) Entitate abstractizata Model abstract Model si mai abstract Program de nivel inalt Un limbaj de nivel inalt Model si mai abstract

Entitate din lumea reala

Specificatie in pseudocod Pseudocod

Program la nivel de asamblare


Limbajul de asamblare
MOV AX, v1

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;

ADD AX, v2 JGE et1 NEG AX et1: MOV s, AX 33

1.1. Evolutia catre abordarea OO


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

Model abstract
Specificatie in pseudocod Pseudocod

Model si mai abstract


Program de nivel inalt Un limbaj de nivel inalt

Model si mai abstract


Program la nivel de asamblare Limbajul de asamblare
MOV AX, v1

Modelul cel mai abstract Cod masina Limbajul masina


01000101 11000010 01000101 01110010 01010001 01010101 01111010 10010111 34

Entitate din lumea reala

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;

ADD AX, v2 JGE et1 NEG AX et1: MOV s, AX

1.1. Evolutia catre abordarea OO


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

Model abstract
Specificatie in pseudocod Pseudocod (forma intuitiva din punct de vedere uman)

Model si mai abstract


Program de nivel inalt Un limbaj de nivel inalt (forma concentrata, apropiata de cea umana, a limbajului masinii)

Model si mai abstract


Program la nivel de asamblare Limbajul de asamblare (echivalent uman al limbajului masinii)

Modelul cel mai abstract Cod masina Limbajul masina

Entitate din lumea reala

(limbajul masinii de calcul)

CONCRET

Ierarhie de abstractizari
35

ABSTRACT

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Recapitulare a exemplelor de abstractizare care reflecta relativitatea conceptului
Limbaj de programare
Format

Controlul executiei Realizat prin

Folositin

Cat de abstract este Pentru masina Pentru om Extrem de mult Foarte mult

cod masina asamblare

numeric Salturi conditionate, binar Iteratii catre etichete Salturi conditionate, alfaIteratii simple catre numeric etichete decizii alfa(simple+multiple), numeric Iteratii complexe (mai multe tipuri) textual, informal decizii (simple+multiple), iteratii

Masina de calcul programarea la nivel de asamblare programarea la nivel inalt

deloc Destul de mult

procedural (nivelinalt)

mult

mult

pseudocod

proiectarea programelor

Foarte mult

Destul de putin

36

1.1. Evolutia catre abordarea OO

Orientarea spre Obiecte (OO)


Evolutia catre OO Incapsulare, modularizare si ascunderea detaliilor 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

37

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
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)

38

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Incapsularea are in teoria programarii doua sensuri Inside the box

regruparea
gruparea unor elemente intre care exista legaturi intr-o singura entitate noua care poate astfel Interfata 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)

39

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Incapsularea ca regrupare si limitare a accesului (ascundere a detaliilor)

Inside the box regruparea

ascunderea detaliilor Inside the box limitarea accesului Interfata

40

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
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 abstractiei Interfata

detaliile necesare interactiunilor externe


care trebuie sa fie publice, accesibile, vizibile de implementarea sa Inside the box

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
41

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Un program / o componenta a unui program ca servicii oferite de un black box

Black Box (abstractizare, incapsulare cu ascunderea detaliilor)

Utilizator (uman / alta componenta)

se vad doar intrarile, iesirile, si efectele colaterale (serviciile furnizate, interfetele oferite si necesare)
42

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Servicii oferite de un black box Interfetele oferite (prin ele se realizeaza interactiunea, serviciile) Black Box (incapsulare, abstractizare, ascundere a detaliilor)

se vad doar intrarile, iesirile, si efectele colaterale (serviciile furnizate, interfetele oferite si necesare)

43

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Beneficiile incapsularii black box
Inlocuirea

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)

interiorului in spatele scenei

Inlocuirea cutiei in spatele scenei

44

1.1. 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)
45

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
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
46

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
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

47

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
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?
48

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Incapsularea informatiilor (datelor) in C
numarCont:

int numarCont; char *prenume; char *nume; float sold;

(int)
prenume:

...
(char) (char) (char) ... (char) (char) (char)

...
nume:

(char *)

...

... Primele 4 linii de cod (cele 4 elemente de incapsulat)


sold:

(char *) ...

... (float)

49

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Incapsularea informatiilor (datelor) in C
numarCont:

int numarCont; char *prenume; char *nume; float sold;

14378
prenume:

(int)

...
'I' 'C' 's'

... numarCont = 14378; prenume = "Ics"; nume = "Igrec"; sold = 3300.00;


nume:

(char *)

(char) (char) (char)

...
...
sold:

(char *)

'I' 'g' 'r' 'e' 'c'

(char) (char) (char) (char) (char)

Toate cele 8 linii de cod

3300.00 (float)

...

50

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Posibila incapsulare a informatiilor (datelor) in C struct Cont { int numarCont; // tip de date NOU cu nume (Cont) // camp de tip int (intreg)

char *prenume;
char *nume; float sold; }; struct Cont cn;

// camp de tip pointer la caractere


// camp de tip pointer la caractere // camp de tip float (real)

// declaratia (tipului) variabilei cn

Incapsularea in acest caz este FARA ascundere a detaliilor (informatiilor, datelor)!

Doar regrupare!
51

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Posibila incapsulare a informatiilor (datelor) in C struct Cont { int numarCont; char *prenume; // tip de date NOU cu nume (Cont) // camp de tip int (intreg) // camp de tip pointer la caractere

char *nume;
float sold; }; struct Cont cn; struct Cont cn1;

// camp de tip pointer la caractere


// camp de tip float (real)

// declaratia (tipului) variabilei cn // reutilizarea numelui tipului de date

Incapsularea permite insa reutilizarea tipului nou de date


52

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Posibila incapsulare a informatiilor (datelor) in C
cn = cn.numarCont: (echivalente ale aceleiasi adrese) prenume:

(int)

... (char) (char)


(char)

struct Cont { int numarCont; char *prenume; char *nume; float sold; }; struct Cont cn;

...
nume:

(char *)

...

... ... (char *)

sold:

(Cont)
(float)

... ...

(char) (char) (char)

Primele 4 linii de cod

INCAPSULARE A INFORMATIILOR
53

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Posibila incapsulare a informatiilor (datelor) in C Programul rescris (refactored)
cn = cn.numarCont:

14378
prenume:

(int)

...
'I' 'C' 's'

struct Cont { int numarCont; char *prenume; char *nume; float sold; }; struct Cont cn;

...
nume:

(char *)

(char) (char) (char)

...
...
sold:

(char *)

(Cont)

'I' 'g' 'r' 'e' 'c'

(char) (char) (char) (char) (char)

cn.numarCont = 14378; cn.prenume = "Ics"; cn.nume = "Igrec"; cn.sold = 3300.00;

3300.00 (float)

...

54

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Posibila simplificare a utilizarii incapsularii informatiilor (datelor) in C typedef struct { // tip de date NOU

int numarCont;
char *prenume; char *nume;

// camp de tip int (intreg)


// camp de tip pointer la caractere // camp de tip pointer la caractere

float sold;
} Cont;

// camp de tip float (real)


// nume dat tipului de date NOU

Cont cn;

// declaratia tipului variabilei cn // intr-o forma simplificata

55

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Ascunderea detaliilor poate avea 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
56

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Incapsularea comportamentului in C

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


s = v1 + v2; // suma if (s<0) s = -s; // structura decizie // modul
s = -s [s < 0] s = v1 + v2 else

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

57

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Posibila incapsulare a codului pentru calculul modulului sumei a doua valori
// declaratie functie incapsulare comportament int modululSumei() { int s;

s = v1 + v2; if (s<0) s = -s; return s;


}

// interfata publica (semnatura) // implementare ascunsa // acces la variabilele globale v1 si v2

... {

INCAPSULARE A COMPORTAMENTULUI

// ... s = modululSumei(); // apel functie (delegare functionala) } Cum ar arata intreg programul rescris (refactored) in acest caz?
58

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Posibil program bazat pe incapsularea anterioara
#include iostream using namespace std; int v1 = 3, v2 = 5; int main() { int s; // 2 variabile globale // variabila locala

s = modululSumei();

// fara argumente

cout<<modulul sumei <<v1<< cu <<v2<< este <<s<<endl; return 0;


} int modululSumei() { int s; s = v1 + v2; if (s<0) s = -s; return s; }

// fara parametri
// variabila locala

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


59

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Posibila incapsulare a codului pentru calculul modulului sumei a doua valori

// declaratie functie incapsulare comportament int modululSumei(int a, int b) { // declaratii parametri (variabile) int s; // implementare ascunsa s = a + b; // acces la parametri
if (s<0) s = -s; return s; }

... { // ...
s = modululSumei(v1, v2); // pasare argumente (valori) } Cum ar arata programul rescris (refactored) in acest caz?
60

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Alta posibila incapsulare pentru calculul modulului sumei a doua valori
#include iostream using namespace std; int v1 = 3, v2 = 5; int main() { int s; s = modululSumei(v1, v2); // 2 variabile globale // variabila locala

// 2 argumente

cout<<modulul sumei <<v1<< cu <<v2<< este <<s<<endl; return 0;

}
int modululSumei(int a, int b) { // 2 parametri int s; s = a + b; if (s<0) s = -s; return s; } // variabila locala

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


61

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Cum poate sa apara o problema?
#include iostream using namespace std; int v1 = 3, v2 = 5; int main(void) { int s;

// variabile globale NEASCUNSE


// variabila locala // 2 argumente

s = modululSumei(v1, v2);

v1 = 7;

// inseram o linie in program

cout<<modulul sumei <<v1<< cu <<v2<< este <<s<<endl; return 0; } int modululSumei(int a, int b) { // 2 parametri

int s; s = a + b; if (s<0) s = -s
return s; }

// variabila locala

Variabila s nu creeaza nici o problema! Ce afiseaza insa programul?


62

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Problema apare din cauza accesului neingradit la variabilele globale
#include iostream using namespace std; int v1 = 3, v2 = 5; int main(void) { int s;

// variabile globale NEASCUNSE


// variabila locala // 2 argumente

s = modululSumei(v1, v2);

v1 = 7;

// al doilea acces la v1

cout<<modulul sumei <<v1<< cu <<v2<< este <<s<<endl; return 0; } int modululSumei(int a, int b) { // 2 parametri

int s; s = a + b;
if (s<0) s = -s return s; }

// variabila locala

// primul acces la v1
// Programul afiseaza: // modulul sumei lui 7 cu 5 este 8
63

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
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
64

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Modularizarea proiectare prin descompunerea n module

Separarea in unitati discrete

65

1.1. Evolutia catre abordarea OO

Incapsulare, modularizare si ascunderea detaliilor


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

66

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Functia modululSumei() vazuta ca o componenta black box
valoare returnata (iesire a black box)

{ int
variabila locala ascunsa

int s;
comportament ascuns

modululSumei (int a, int b)


parametri (intrari ale black box)

s = a + b; if (s<0) s = -s; return s;

MODULARIZARE A COMPORTAMENTULUI

}
int modululSumei(int a, int b) { int s; s = a + b; if (s<0) s = -s; return s; }
67

Semnatura (Interfata) publica, vizibila, accesibila

Implementarea privata, ascunsa, inaccesibila

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Functia modululSumei() vazuta ca o componenta black box s modululSumei main
int int s; v1 v2 int s; s = a + b; int a if (s<0) s = -s; int b return s;

cout<<
v1 v2 s

citiri

citiri

v1 v2 Variabile globale publice, vizibile, accesibile oricui

int v1 = 3, v2 = 5; int main() { int s; s = modululSumei(v1, v2); cout<<(|<<v1<<+<<v2<<|=<<s; return 0; } int modululSumei(int a, int b) { int s; s = a + b; if (s<0) s = -s; return s; }
68

1.1. Evolutia catre abordarea OO


Incapsulare, modularizare si ascunderea detaliilor
Problemele create de accesul neingradit la variabile globale s modululSumei main
int int s; v1 v2 int s; s = a + b; int a if (s<0) s = -s; int b return s;
int v1 = 3, v2 = 5; int main() { int s; s = modululSumei(v1, v2); v1 = 7; cout<<(|<<v1<<+<<v2<<|=<<s; return 0; } int modululSumei(int a, int b) { int s; s = a + b; if (s<0) s = -s; return s; }
69

cout<<
v1 v2 s
scriere (modificare) citiri

v1

v2

Pierderea consistentei variabilei v1

1.1. Evolutia catre abordarea OO

Orientarea spre Obiecte (OO)


Evolutia catre OO Programarea structurata Ce inseamna programarea structurata? Care sunt modalitatile de structurare a programelor? Ce stiti despre goto <eticheta>?

70

1.1. Evolutia catre abordarea OO


Programarea structurata
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

71

1.1. Evolutia catre abordarea OO


Programarea structurata
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
.. // aici v NU exista

// BEGIN in Pascal
.. // aici v NU exista // declaratie tip

int v;
..

// aici v exista

}
..

// END in Pascal
// aici v NU exista

72

1.1. Evolutia catre abordarea OO


Programarea structurata
Programarea structurata
descurajeaza utilizarea instructiunilor de tip "Go To eticheta"

73

1.1. Evolutia catre abordarea OO


Programarea structurata
Programarea structurata
la cel mai jos nivel se afla structuri de control al programului simple, ierarhice: secventa decizie / selectie

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

74

1.1. Evolutia catre abordarea OO


Programarea structurata
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)

Ce instructiune C corespunde fiecareia dintre structurile date ca exemplu?

75

1.1. Evolutia catre abordarea OO


Programarea structurata
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)

for

do

while

while

76

1.1. Evolutia catre abordarea OO

Orientarea spre Obiecte (OO)


Evolutia catre OO

Programarea procedurala
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?

77

1.1. Evolutia catre abordarea OO


Programarea procedurala
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
78

1.1. Evolutia catre abordarea OO


Programarea procedurala
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
79

1.1. Evolutia catre abordarea OO


Programarea procedurala
Modularizarea comportamentului in C

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


s = v1 + v2; // suma if (s<0) s = -s; // structura decizie // modul
s = -s [s < 0] s = v1 + v2 else

Cum s-ar putea modulariza calculul modulului? Cum ar arata programul rescris (refactored) in acest caz?

80

1.1. Evolutia catre abordarea OO


Programarea procedurala
Posibila modularizare a programului pentru calculul modulului sumei a doua valori // declaratie functie (modul de comportament) // interfata publica (semnatura) int modul(int x) { // implementare ascunsa if (x<0) x = -x; return x; } ... { // ... s = v1 + v2; s = modul(s); } // apel functie (delegare functionala) MODULARIZARE PROCEDURALA

81

1.1. Evolutia catre abordarea OO


Programarea procedurala
Functia modul() vazuta ca modul procedural si componenta black box
valoare returnata (iesire a black box)

{ int
comportament ascuns

modul if (x<0) x = -x; return x;

MODUL PROCEDURAL

(int x)
parametru (intrare a black box)

} Implementarea privata, ascunsa, inaccesibila


int modul(int x) { if (x<0) x = -x; return x; }

Semnatura (interfata) publica, vizibila, accesibila

82

1.1. Evolutia catre abordarea OO


Programarea procedurala
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?
Specificatii Produs

Analiz (funcional / OO)

Descompunere (funcional / OO)

Construcie a componentelor

Compunere (integrare)
83

1.1. Evolutia catre abordarea OO


Programarea procedurala
Procesul de descompunere traditional procedural (non-OO) este dirijat de criteriul procedural (functional): identificarea funciilor, descompunerea funciilor n subfuncii, aplicat n mod recursiv, ducand la elemente simple, atomice, direct implementabile (proceduri, funcii, etc.) main()
Funcie principal

Ierarhie de funcii sqrt()


Sub-funcie A Sub-funcie B

Sub-funcie A1

Sub-funcie A2

Sub-funcie B1

Sub-funcie B2
84

1.1. Evolutia catre abordarea OO


Programarea procedurala
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)
85

1.1. Evolutia catre abordarea OO


Programarea procedurala
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
86

1.1. Evolutia catre abordarea OO


Programarea procedurala
Problemele create de accesul neingradit la variabile globale s modululSumei main
int int s; v1 v2 int s; s = a + b; int a if (s<0) s = -s; int b return s;
int v1 = 3, v2 = 5; int main() { int s; s = modululSumei(v1, v2); v1 = 7; cout<<|<<v1<<+<<v2<<|=<<s); return 0; } int modululSumei(int a, int b) { int s; s = a + b; if (s<0) s = -s; return s; }
87

cout<<
v1 v2 s
scriere (modificare) citiri

v1

v2

Pierderea consistentei variabilei v1

1.1. Evolutia catre abordarea OO

Orientarea spre Obiecte (OO)


Evolutia catre OO

Tipurile de date abstracte (ADT) curs SD (anul 1I sem. II)


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?

88

1.1. Evolutia catre abordarea OO


Tipurile de date abstracte (ADT)
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

89

1.1. Evolutia catre abordarea OO


Tipurile de date abstracte (ADT)
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.)

3245 0
10 7 -100 Integer

*
> etc.

90

1.1. Evolutia catre abordarea OO


Tipurile de date abstracte (ADT)
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)

push pop
peak etc. structura de stocare a valorilor

Stack

91

1.1. Evolutia catre abordarea OO


Tipurile de date abstracte (ADT)
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
92

1.1. Evolutia catre abordarea OO


Incapsularea duala
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)

93

1.1. Evolutia catre abordarea OO


Incapsularea duala
Incapsularea oferita de ADTuri este o forma de incapsulare duala
Tip de date abstract (ADT) INCAPSULARE DUALA (INFORMATII SI COMPORTAMENT) structuri de date interne ascunse comportament (implementare operatii) asociat structurilor de date interne

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
94

1.1. Evolutia catre abordarea OO

Orientarea spre Obiecte (OO)


Evolutia catre OO Modelare si abstractizare (II)
Prin ce difera abstractizarea entitatilor de abstractizarea multimilor de entitati? Abstractizarea informatica a entitatilor Abstractizarea orientata spre obiecte Abstractizarea informatica a multimilor de entitati

95

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
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

AE

96

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Abstractizarea in general poate fi aplicata
unor entitati (AE) din care sunt obtinute modele esentiale abstracte

care sunt perspective simplificate ale entitatilor

o persoana numita Xulescu Ygrec AE informatii despre persoana numita Xulescu Ygrec AE o poza a lui Xulescu Ygrec

AE (o perspectiva asupra persoanei)


studentul Xulescu Ygrec Perspective simplificate ale persoanei numite Xulescu Ygrec

97

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Abstractizarea informatica (AI)
aplicata unor entitati (AE) produce modele informatice (esentiale, abstracte)

de exemplu
pornind de la perspectiva student a persoanei Xulescu Ygrec studentul Xulescu Ygrec AE AE inregistrari intr-o baza de date despre studentul Xulescu Ygrec

altele

Abstractizari informatice (AI) ale studentului numit Xulescu Ygrec

98

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
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 studentul Xulescu Ygrec AE AE inregistrari intr-o baza de date despre studentul Xulescu Ygrec obiectul software pXY Abstractizari informatice (AI) ale studentului numit Xulescu Ygrec

99

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
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

AM Conceptul, categoria, etc., de Student


100

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
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

obiectul software pXY Abstractizari orientate spre obiecte (AOO) AM Clasa Student pWZ

Perspectiva simplificata

Vedere de ansamblu (descriere a ceea ce este comun)


101

1.1. Evolutia catre abordarea OO


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

AE (perspectiva asupra persoanelor) studentul Xulescu Ygrec studentul Wescu Zet studentul Abstractizare a tuturor persoanelor care sunt studenti (descriere a ceea ce este comun tuturor studentilor)
102

AE

Perspectiva simplificata a persoanelor (din categoria Student)

(vedere de ansamblu asupra studentilor) AM Conceptul, categoria, etc., de Student

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Combinand abstractizarile informatice

AE

perspectiva

AE

obiectul software pXY pWZ

vedere de ansamblu

AM Clasa Student

103

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Mergand mai departe, putem abstractiza multimile de multimi ca superclase AE (AOO)

obiectul pXY AM

Element al unei multimi

(AOO)

Multime de elemente

Clasa Student

Clasa Profesor
AM (AOO)

Multime de multimi

Superclasa Persoana
104

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Paralela intre abstractizarile din lumea reala si abstractizarile informatice OO

studentul Xulescu Ygrec

AE

informatii despre Xulescu Ygrec AE (AOO) obiectul pXY AM

Element al unei multimi

AM

(AOO)

Conceptul de Student AM

AE (AOO) Clasa Student

Multime de elemente

Clasa Profesor
AE AM (AOO)

Multime de multimi

Conceptul mai general de Persoana (AOO)

Superclasa Persoana
105

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Revenire asupra exemplului de abstractizare masina de calcul si limbajele

Entitate abstractizata
Masina de calcul condusa de coduri masina + Limbajul masina (limbajul masinii de calcul)

Model abstract
Masina de calcul programata la nivel de asamblare + Limbajul de asamblare (echivalent uman al limbajului masinii)

Model si mai abstract

Masina de calcul programata la nivel inalt + Un limbaj de nivel inalt


(forma concentrata a limbajului masinii, apropiata de cea umana)

Ce putem pune
aici

CONCRET

Ierarhie de abstractizari

ABSTRACT
106

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Revenire asupra exemplului de abstractizare masina de calcul si limbajele

Entitate abstractizata
Masina de calcul condusa de coduri masina + Limbajul masina (limbajul masinii de calcul)

Model abstract
Masina de calcul programata la nivel de asamblare + Limbajul de asamblare (echivalent uman al limbajului masinii)

Model si mai abstract Masina de calcul programata la nivel inalt + Un limbaj de nivel inalt

Modelul cel mai abstract


Masina de calcul programata orientat spre obiecte + Un limbaj orientat spre obiecte (forma intuitiva din punct de vedere uman)

(forma concentrata a limbajului masinii, apropiata de cea umana)

CONCRET

Ierarhie de abstractizari

ABSTRACT
107

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Revenire asupra exemplului de abstractizare entitatile lumii reale

Entitate abstractizata
Entitate din lumea reala

Cum poate fi abstractizata informatic

CONCRET
108

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Revenire asupra exemplului de abstractizare entitatile lumii reale Entitate abstractizata Model abstract Obiect software Un limbaj orientat spre obiecte (forma intuitiva din punct de vedere uman)

Entitate din lumea reala

CONCRET
109

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Revenire asupra exemplului de abstractizare entitatile lumii reale Entitate abstractizata

Model abstract
Obiect software

Model si mai abstract


Program de nivel inalt Un limbaj de nivel inalt (forma concentrata, apropiata de cea umana, a limbajului masinii)

Model si mai abstract


Program la nivel de asamblare Limbajul de asamblare (echivalent uman al limbajului masinii)

Modelul cel mai abstract Cod masina Limbajul masina

Entitate din lumea reala

Un limbaj orientat spre obiecte (forma intuitiva din punct de vedere uman)

(limbajul masinii de calcul)

CONCRET

Ierarhie de abstractizari
110

ABSTRACT

1.1. Evolutia catre abordarea OO


Modelare si abstractizare
Recapitulare a exemplelor de abstractizare care reflecta relativitatea conceptului
Limbaj de programare Format Controlul executiei realizat prin Folosit in

Cat de abstract este Pentru masina Pentru om

cod masina
asamblare

numeric Salturi conditionate, binar Iteratii catre etichete Salturi conditionate, alfaIteratii simple catre numeric etichete decizii alfa(simple+multiple), numeric Iteratii (mai multe tipuri) colaborarea alfaobiectelor plus decizii numeric si iteratii

Masina de calcul programarea la nivel de asamblare programarea la nivel inalt

deloc Destul de mult

Extrem de mult
Foarte mult

procedural (nivel inalt) orientat spre obiecte (OO)

mult

mult

programarea OO

Foarte mult

Destul de putin

111

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