Sunteți pe pagina 1din 60

MODELAREA PROBLEMELOR.

TIPURI DE DATE. TIPURI DE


DATE CONCRETE, ABSTRACTE,
GENERICE.

CURS 2 PROGRAMARE II
CURS ANTERIOR
Tehnici de programare
Programarea nestructurat
Programarea procedural
Programarea modular
Abstractizarea datelor
Programarea orientat obiect
Programarea generic

Programarea orientat obiect


Abstractizare
Motenirea
Polimorfism la execuie

Istoric C++
TEST CURS ANTERIOR
Propunei o abstractizare pentru noiunea de Facultate

Rezolvare
Atribute
Nume facultate (ex. Facultatea de Matematic i Informatic)
Lista de specializri (ex. Informatic, Informatic Englez,
Matematic, Matematic - Informatic)
Numr locuri fr tax
Numr locuri cu tax

Comportament
Situaia studenilor dup sesiunea de iarn
Adugarea / Modificarea / tergerea unui student

CUPRINS
Modelarea problemelor

Tipuri de date

mbuntiri aduse de C++

Clase
ABSTRACTIZAREA
Abstractizare
Problem Model

Model
Date
Operaii

Definiie
Abstractizarea presupune structurarea unei probleme din realitate n
entiti bine definite de ctre date i operaii

n contextul OO presupune existena unui mecanism a unui limbaj


care ofer posibilitatea de a defini structuri conceptuale care
reprezint aspectele computaionale interesante pentru entitatea
modelat
MODEL
O simplificare cu un scop a unei probleme

Utilizeaz notaii pentru a descrie problema

Este util?
Pentru a nelege i controla lumea nconjurtoare

Exemple
Modelul matematic al sistemului solar
Modelul matematic de previziune a vremii
Modele tehnice pentru proiectarea circuite
MODEL
Simplificare
Modelul unui sistem este mai puin complex dect codul =>
mai accesibil
Modelul permite revizuirea din punct de vedere al calitii,
claritii i consistenei

Perspective (vederi) diferite


Un model poate fi descris din perspective diferite
O vedere care prezint cum interacioneaz prile majore ale
unui sistem
O vedere care prezint detaliile unui subsistem
O vedere care prezint sistemul din perspectiva utilizatorului

Notaie comuna
Permite dezvoltatorilor s se focuseze pe soluie
NOTAIE COMUN
Unified Modeling Language - UML
Un limbaj conceput pentru a specifica, vizualiza, construi i
documenta sisteme software

Standard creat pentru a elimina confuziile ntre notaii

Vom utiliza pentru a exemplifica conceptele POO


Abstractizare
ncapsulare
Obiecte
Clase
Relaii ntre obiecte
ABSTRACTIZAREA
Abstractizare
Reprezint simplificare sau un model a unui concept
complex, proces sau obiect din lumea real

Permite simplificm nelegerea lucrurilor astfel nct s fie


util fr a deveni copleitoare i ajut o persoan s
neleag ceva la un nivel

Exemplu
Cum este vzut un calculator?
Copil un aparat la care se poate juca jocuri
Electronist un ansamblu de circuite i tranzistori
Programatorii un mediu de dezvoltare de aplicaii
ABSTRACTIZARE
EXEMPLU
Modelarea noiunii de UNIVERSITATE

Care ar fi proprietile (atributele) pentru o universitate?


ABSTRACTIZARE
EXEMPLU
Modelarea noiunii de UNIVERSITATE

Care ar fi proprietile (atributele) pentru o universitate?


Nume
Adres
Culoare cldire
Lista de faculti
CUI
etc
ABSTRACTIZARE
EXEMPLU
Modelarea noiunii de UNIVERSITATE

Care ar fi proprietile (atributele) pentru o universitate?


Nume
Adres
Culoare cldire
Lista de faculti
CUI
etc
EXEMPLU
Modelarea noiunii de UNIVERSITATE

UNIVERSITATE
Date
Nume
Adres
Lista de faculti
CUI
Operaii
Modificarea datelor existente (nume, adresa, CUI)
Adugarea unei noi facultii
Accesarea datelor (nume, adres, etc)
Statistici (rata de promovabilitate, lucrri tinifice)
ABSTARCTIZAREA
Utilitate
O abstractizare bun scoate n eviden caracteristicile i
comportamentul relevant pentru un lucru care este prea
greu de neles n toat complexitatea sa

Nevoile i interesele persoanei care are nevoie de


abstractizare determin nivelul de detaliere al conceptelor

Ajut s nelegem cum prile unui sistem interacioneaz

n POO prile care interacioneaz ntr-un sistem se


numesc obiecte
ABSTRACTIZAREA
Abstractizarea datelor
Subliniaz operaiile care pot fi ataate datelor (ce aciuni
se pot face asupra unei mulimi de date), nu pe
implementarea operaiilor (cum se realizeaz)

Dezvoltarea fiecrei structuri de date ct se poate de


independent fa de soluie

Abstractizarea metodelor
Separarea scopului unui modul de implementarea sa
Ex: servicii WEB, servicii REST
NCAPSULAREA
n terminologia POO presupune ascunderea datelor i
comportamentului obiectelor

Abstractizarea scoate n eviden aspectele importante ale


unui obiect

ncapsularea ascunde detaliile interne ale obiectului

ncapsularea reduce necesarul de cunotine pe care trebuie


s le avem pentru a folosi o clas
n multe cazuri un pe un programator nu l intereseaz cum
funcioneaz un obiect atta timp ct ofer funcionalitatea
dorit
NCAPSULAREA
Avantaje
Previne apariia erorilor prin limitarea accesului la date
Asigur portabilitatea programelor
Faciliteaz utilizarea excepiilor

class FarncapsulareSauAscundereaInformaiei {

public const int STATUS_ACTIVE = 0;

public const int STATUS_HALTED = 1;

public int status = STATUS_ACTIVE;


};
NCAPSULAREA
class ncapsulareFarAscundereaInformaiei
{
public const int STATUS_ACTIVE = 0;
public const int STATUS_HALTED = 1;
private int status = STATUS_ACTIVE;
public int getStatus() {
return status;
}
};

class ncapsulareiAscundereaInformaiei {
private const int STATUS_ACTIVE = 0;
private const int STATUS_HALTED = 1;
private int status = STATUS_ACTIVE;
private int getStatus() {
return status;
}
public boolean isActive() {
return getStatus() == STATUS_ACTIVE;
}
};
OBIECT
Este un element finit i particular al uni model
Un obiect poate fi
Un lucru concret (ex. main)
Poate fi invizibil (ex. un bancar ntr-un sistem bancar)
Poate avea o durat de via scurt (ex. o tranzacie ntr-
un sistem bancar)
Noiune Descriere Exemplu
Abstractizare Obiecte similare din Mainile din inventarul unui
sistem o partajeaz dealer de maini pot include
model, fabricant, an, culoare
Obiect Un lucru concret Sandero, Dacia, 2010, alb
OBIECT
Au
Stare
Descrie caracteristicile i condiia curent
Comportament
Aciunile pe care un obiect le poate face

Fiecare obiect trebuie s fie unic identificat n sistem

Reprezentare UML
Un dreptunghi cu numele subliniat

masinaMea;
CLASE
Clasa este un grup de obiecte care au caracteristici
comune
O clas descrie o abstractizare i ofer un template pentru
crearea obiectelor
Toate obiectele unei clase sunt identice n urmtorul mod
Tipul datelor coninute
Culoarea, modelul unei maini pot fi stocate ca iruri de
caractere
Tipul i numrul de obiecte despre care tie
La o main se poate cunoate proprietarul curent dar i
lista de proprietari anteriori
Logica pentru comportamentul obiectului
Valorile actuale ale datelor aparin obiectelor
CLASE
Notaia UML
Un dreptunghi care conine numele clasei n prima parte,
datele n urmtoarea parte i comportamentul n ultima
parte

ContBancar

- suma: double
- Tip : boolean
- IBAN : string

+ retragere()
+ depunere()
EXEMPLU ASTRACTIZAREA
A NOIUNI DE FA
Cum descriem fa unei persoane?
EXEMPLU ASTRACTIZAREA A
NOIUNI DE FA
Cum descriem fa unei persoane?
Forma feei

Ochi

Nas

Buze

Urechi

Sprncene

Pr
EXEMPLU ASTRACTIZAREA
A NOIUNI DE FA
Cum ar arta un program care ar permite desenarea de
fee?
EXEMPLU ASTRACTIZAREA
A NOIUNI DE FA
Cum ar arta un program care ar permite desenarea de fee?
Forma feei

Ochi

Nas

Buze

Urechi

Sprncene

Pr
EXEMPLU ASTRACTIZAREA A
NOIUNI DE FA
ATRBIBUTE,
Definirea clasei fa DOMENIU DE VALORI ATRIBUTE
COMPORTAMENT
Forma feei

Ochi

Nas

Buze

Urechi

Sprncene

Pr
EXEMPLU ASTRACTIZAREA A
NOIUNI DE FA
OBIECTE

Obiect 2
Vasilescu Vasile

Obiect 3
Marinescu Maria

Obiect 1
Niculescu Nicu
RELAII NTRE
OBIECTE
Sistemele POO conin multe obiecte diferite care coopereaz pentru
a realiza diferite taskuri

Fiecare obiect are definit un rol i trebuie s interacioneze pentru a


ndeplini scopul pentru care au fost create

Pentru a coopera exist definite relaii ntre obiecte


Dependen

Asociere

Agregare

Compoziie

Polimorfism
RELAII NTRE
OBIECTE
Relaia de Dependin
Un obiect depinde de alt obiect dac are o relaie de scurt
durat cu acel obiect

Obiectul dependent poate apela metode sau obine servicii


de la cellalt obiect
RELAII NTRE
OBIECTE
Relaia de asociere
Este o relaie pe termen lung
Un obiecte ine o referin la alt obiect i apeleaz
metodele obiectului cnd are nevoie de ele
RELAII NTRE
OBIECTE
Relaia de agregare
Exprim faptul c un obiect face parte dintr-un ntreg mai
mare
Obiectul coninut poate participa la una sau mai multe
relaii de agregare i poate exista independent de ntreg
RELAII NTRE
OBIECTE
Relaia de compoziie
Exprim faptul c un obiect face parte dintr-un ntreg mai
mare i este deinut de obiect
Obiectul coninut nu poate participa la mai mult de o relaie
de agregare i nu poate exista independent de ntreg
INTERFEE
O interfa descrie diferite comportamente dar nu ofer o
implementare a acestora

O clas realizeaz interfaa prin implementarea fiecrei


metod din interfa
POLIMORFISM
Implementri multiple ale unei singure abstractizrii (clas
sau interfa)
CUPRINS
Modelarea problemelor

Tipuri de date

mbuntiri aduse de C++

Clase
TIPURI DE DATE
Ce sunt tipurile de date?
Este o clasificare care identific diferite tipuri de date care
specific
valorile specifice pentru acele tipuri
operaiile care se pot efectua cu valorile acestor tipuri
sensul datelor
modul n care aceste date pot fi stocate

Exemple
Valori reale, ntregi, boolean
TIPURI DE DATE
Ce sunt tipurile de date?
Sunt o clasificare care identific diferite tipuri de date care
specific
valorile specifice pentru acele tipuri
operaiile care se pot efectua cu valorile acestor tipuri
sensul datelor
modul n care aceste date pot fi stocate

Exemple
Valori reale, ntregi, boolean
TIPURI DE DATE
ABSTRACTE
Tipuri de date abstracte (Abstract Data Types - ADT)
O mulime de date care au aceeai reprezentare pentru care
este definit o mulime de operaii care se pot realiza asupra
datelor
Dac se cunosc specificaiile operaiilor care se pot efectua
supra datelor, operaiile ADT se pot folosi fr a cunoate
implementarea operailor sau modul cum sunt stocate datele

ADT suport abstractizarea, ncapsularea i ascunderea de


informaii

Exemple
Tipuri de date implicite: boolean,ntreg, real, array
Tipuri de date definite de utilizator: stive, liste, arbori,
EXEMPLE DE ADT
IMPLICITE
Boolean
Valori: true sau false
Operaii: and, or, not, etc

Integer
valori: valorii ntregi ntre limitele MIN i MAX
Operaii: adunare, scdere, nmulire, mprire, etc

Arrays
Valori: elemente heterogene
Operaii: iniializare, stocare, accesare, copiere, etc
TDA DEFINITE DE
UTILIZATOR
Stiva
Valori: elementele stivei (ex. Stiva de tip X)
Operaii: create, push, pop, esteGoala, etc

Coad
Valori: elementele cozii (ex. Coada de tip X)
Operaii:create, estePlina, esteGoala, etc

Arbore
Valori: elementele arborelui (ex. Arborele de tip X)
Operaii: adugare, tergere, cutare, dimensiune,
traversare, etc
TIPURI DE DATE
ABSTRACTE
Introduse de Goguen 1978 i Guttag 1977

Reprezentare
Folosind mecanisme oferite de limbaje (ex. clase din C++
i Java)

Folosind reprezentarea grafic oferit de modelarea


grafic (ex. UML)

Folosind o descriere textual non standard (ex. de mai


sus)
TDA REPREZENTARE
UNIVERSITATE
Date
Nume
Adres
Lista de faculti
CUI
Operaii
creare/distrugerea
Modificarea datelor
existente (nume,
adresa, CUI)
Adugarea unei noi
facultii
Accesarea datelor
(nume, adres, etc)
VERIFICAREA
TIPURILOR
Verificare tipurilor (Type checking)
Definiie
Definete modul n care limbajele de programare clasific
valorile i tipurile expresiilor, cum manipuleaz tipurile i
cum interacioneaz
Procesul de verificare i impunere de condiii definite de
tipurile sistemului

Clasificare
Limbaje statice (static typing): la compilare (ex. C++, Java)
Limbaje dinamice (dynamic typing): la execuie (ex. LISP,
Python, JS)
CUPRINS
Modelarea problemelor

Tipuri de date

mbuntiri aduse de C++

Clase
MBUNTIRI ADUSE
DE LIMBAJUL C++
Variabile referin

Funcii cu parametrii implicii

Suprancrcarea funciilor

Funcii inline

Operatorii new, delete

Operatorul de rezoluie
VARIABILE
REFERIN
Referinele, ca i pointerii, sunt variabile care conin adresa unei zone
de memorie

Semantic, ele reprezint aliasuri ale unor variabile existente

Proprietile cele mai importante ale referinelor sunt:


referinele trebuie sa fie iniializate la declaraie (spre deosebire de pointeri
care pot fi iniializai in orice moment);
dup iniializare, referina nu poate fi modificata pentru a referi o alt zon de
memorie (pointerii pot fi modificai pentru a referi alt zon)
ntr-un program C++ valid nu exist referine nule
void f() { void increment(int& i) {
int i = 1; i++;
int& r = i; // r si I se refera la aceelasi int }
int& r2; // EROARE: ????
int x = r; // x = 1 void f() {
r = 2; // de fapt, i = 2 int a = 5;
int* p = &r; // p pointeaza la i increment(a); // a=6
} }
FUNCII CU
PARAMETRI IMPLICII
La apelarea unor astfel de funcii, se poate omite specificarea
parametrilor efectivi pentru acei parametri formali care au
declarate valori implicite, transferndu-se automat valorile
respective

Exemplu funcia care calculeaz distana dintre dou puncte.


Se consider c folosirea parametrilor implicii permite
calculul distanei dintre un punct i originea sistemului.

double dist (double x1, double y1,


void fct(){
double x2=0, double y2=0) {
dist(3,4, 6,7); //p1(3,4), p2(6,7)
double x = x1-x2;
double y = y1-y2;
dist(5,6); //p1(5,6), p2(0,0)
return sqrt(x*x + y*y);
}
}
SUPRANCRCAREA
FUNCIILOR
Suprancrcarea (redefinire) funciilor
Posibilitatea de a atribui unui simbol mai multe semnificaii
care pot fi distinse n context

Selectarea funciei se face n urma comparrii tipurilor


parametrilor efectivi cu tipurile parametrilor formali din
diferitele declaraii ale funciilor cu acelai nume
double adunare(double x1, double y1) {
return x+y; void fct() {
}
char* adunare(char* s1, char*s2) { cout << adunare (3.5, 8.6);
char * rez = new char[strlen(s1)+strlen(s2)+1];
strcpy(rez,s1); cout << adunare (curs,
strcat(rez,s2); C++);
return rez; }
}
FUNCII INLINE
Cuvntul cheie inline pus n faa unei funcii indic
compilatorului s expandeze acea funcie n momentul
compilrii, astfel nct codul obiect generat nu va conine
un apel de funcie, ci va conine codul obiect
corespunztor acelei funcii.
inline este doar o indicaie, a crei implementare difer
de la compilator la compilator

inline int add(int i, int j) {


return i + j;
}

NU este o mbuntire dar introducem aici ideea deoarece o vom folosi mai trziu.
ALOCAREA DE SPATIU
DE MEMORARE IN C
Care sunt funciile care permit alocarea i dealocarea de
spaiu de memorie n C?
malloc()
free()

Cum se aloc spaiu pentru


Un pointer de tip int?
int *a = malloc(sizeof(int))
Pentru un tablou de 100 de caractere?
int *a_tablou = malloc(sizeof(int)*100)

Cum se dealoc spaiul de memorie alocat?


free(a), free(a_tablou)
OPERATORII NEW I
DELETE
Alocarea dinamic a memoriei n C++ se face utiliznd
operatorii new i delete

Alocare element pointer = new tip(initializare)


Alocare tablou pointer = new tip [nr_elemente]
Dealocare element delete pointer
Dealocare tablou delete [] pointer
OPERATORUL
REZOLUIE
operatorul de rezoluie (::) - operator de acces (deomeniu,
scop)
permite accesul la un identificator cu domeniul fiier dintr-
un bloc n care acesta nu este vizibil datorit unei alte
declaraii.

Efectul apelului funciei fct()


char str[20]= "Sir global";
void fct(){ Sir global
char *str; Sir local
str = "Sir local";
std::cout << ::str << std::endl;
std::cout << str << std::endl;
}
CUPRINS
Modelarea problemelor

Tipuri de date

mbuntiri aduse de C++

Clase
PROGRAM
Programare structurat

Structuri de date + Algoritmi = Program

Programare orientat obiect

Date + Metode = Obiect


CLASE
Definiie
O clasa este o implementare a unui tip de date (concret,
abstract sau generic). Definete atribute i funcii care
descriu structura de date i operaiile care se pot efectua
cu acest tip de date

Exemple:
Universitate
Student
Profesor
Amfiteatru
Sal
etc
CLASE
Clasele n C++ pot fi definite folosind cuvintele cheie struct
sau class

Sintax Exemplu

class X { struct Universitate{


// variabile membru char *nume, *adresa;
// functii membru
}; void init (char *nume, char* adresa);
};
struct X {
// variabile
membru
Accesul la date
// functii membru Structuri public
};
Clase privat
OBIECTE
Obiectele sunt create prin declararea de variabile

Sintax Exemplu

Universitate ubb;
TDA numeVariabila;
Universitate *uvt = new Universitate;
EXERCIIU
BIBLIOTEC

Identificare obiectelor dintr-o bibliotec

Interaciunile dintre ele

Proprietile comune

Ce clase se pot defini?


CURS URMATOR
CLASE

SPECIFICATORI DE ACCES

DATE

FUNCII

CONSTRUCTORI

DESTRUCTORI

CONSTRUCTORI DE COPIERE

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