Sunteți pe pagina 1din 43

Programare orientată pe obiecte

Curs 1
Curs 1 - Programare orientată pe obiecte

Curs
Ș.l.dr.ing. Mihaela CRIȘAN-VIDA

mihaela.vida@upt.ro

Sala B019

Laborator
Ș.l.dr.ing. Mihaela CRIȘAN-VIDA
As.drd.inf. Oana Chirila
Curs 1 - Programare orientată pe obiecte

Curs
Marți 12 – 14 sala A115 (sapt 2 – 14)
Vineri 12 - 14 sala A117 (sapt 2 – 6)

Laboratoarele: OBLIGATORII!
Promovare (exemplu din 2015 – 2016)
Prez 1 Final Note de 10
48/81 72/81 9 (din care 1 după mărire)
Curs 1 - Programare orientată pe obiecte

Colectiv
Prof.dr.ing. Lăcrămioara STOICU-TIVADAR
Prof.dr.ing. Vasile STOICU-TIVADAR
Ș.l.dr.ing. Mihaela CRIȘAN-VIDA
Ș.l.dr.ing. Dorin BERIAN
As.dr.ing. Norbert GAL-NĂDĂȘAN
As.drd.inf. Oana Chirila
Drd.inf. Ioan VIRAG
Drd.ing. Nicola STELIAN
Curs 1 - Programare orientată pe obiecte

Aplicații medicale

 Master Sisteme Informatice în Îngrijirea Sănătății


http://siis.aut.upt.ro
http://www.facebook.com/MasterSIIS


Curs 1 - Programare orientată pe obiecte
Curs 1 - Programare orientată pe obiecte

European Federation of Medical Informatics


Curs 1 - Programare orientată pe obiecte

Open Multiscale System Medicine, CA COST Action CA15120


http://www.cost.eu/COST_Actions/ca/CA15120

Training School in Ljubljana:


Gearing up for machine learning
in Systems Medicine.
Curs 1 - Programare orientată pe obiecte

Direcții de dezvoltare (Didactice)

• Visual Studio.NET
• Baze de date ORACLE (lucru cu Oracle Developer)
• Aplicaţii mobile -> dinamică mare, cerere în viitor
• Programarea sistemelor încorporate (embedded)
(ex. la Continental, Hella)
• UML
• ECLIPSE (IBM) – JAVA
• programare INTERNET (aplicații WEB, SOA, cloud,
JAVASCRIPT/HTML5 etc.)
Curs 1 - Programare orientată pe obiecte

Locuri de muncă
(majoritatea foarte bine plătite)
NOKIA, CONTINENTAL, IBM, HELLA, OCE, SAGUARO,
ENEL, Eta2u, Visma, Berg Computers, Lasting etc
Curs 1 - Programare orientată pe obiecte

Obiective ale cursului

q Să furnizeze cunoştinţe şi deprinderi practice pentru


Programarea Orientată pe Obiecte (cu accent pe C++)
pentru a putea ulterior aborda la nivel profesional
programarea folosind medii profesionale (ex. Visual C+
+ etc.)
q Să furnizeze cunoştinţe elementare despre Proiectarea
Orientată pe Obiecte, inclusiv elemente de UML si
sabloane de proiectare
Curs 1 - Programare orientată pe obiecte

Laboratoare

q Sala: B019
q Prezența: Obligatorie
q Scopul:
§ Dobândire de deprinderi practice în C++ la nivel
mediu-avansat
§ Antrenarea capacității de a analiza și rezolva
probleme concrete
Curs 1 - Programare orientată pe obiecte

Condiții de evaluare

Ø Activitatea pe parcurs (teste, interes, calitatea activităţii)


– pentru fiecare laborator
Ø Test grilă cu întrebări (“teorie” – dar cu accente practice –
vor fi şi fragmente de cod)
Ø Probe practice
Probleme C++ (1 h 30 min)

Ø Nota finală = (nota activitate parcurs + 2 * Nota


examen) / 3
Ø Nota examen = 0,5* nota test grilă + 0,5 * nota C++

Condiţiile şi cerinţele pentru fiecare probă vor fi


făcute publice cu 2 săptămâni înainte pe Google
Curs 1 - Programare orientată pe obiecte
Curs 1 - Programare orientată pe obiecte

Capitolul 1. Paradigma programării orientate pe obiecte

Drumul spre tehnologiile OO

proiectarea structurată - abordare top-down, structuri de control fundamentale (blocul


de instrucţiuni, decizia, bucla (PASCAL) - accent pe analiza funcţională
versus proiectarea orientată pe obiecte
DE CE apar probleme cu proiectarea structurată ? :
• crearea unui program nou ia mult timp şi deci este costisitoare; prin
schimbări minore în cerinţele utilizatorului, fragmente mari de program
trebuie rescrise
• din pricina timpului îndelungat pentru dezvoltare, un program nou apare pe
piaţă poate prea tîrziu, după ce au apărut programe mai performante
• programele noi conţin erori (bugs) care se manifestă în funcţionare
• s-ar putea ca programul nou să nu corespundă cerinţelor utilizatorului
întrucît acesta şi proiectantul au avut puncte de vedere diferite şi nu au
înţeles acelaşi lucru prin specificaţiile stabilite de comun acord
Curs 1 - Programare orientată pe obiecte

Capitolul 1. Paradigma programării orientate pe obiecte


Curs 1 - Programare orientată pe obiecte

Tendința actuală

 împingere a efortului de proiectare super-calificată cît mai departe de utilizatori (în


medie 80% dintr-o aplicaţie (chiar peste 90% cîteodată) constă din elemente de
interfaţă ale căror specificaţii sunt identice cu cele ale altor aplicaţii)
 a apărut metodologia orientată spre obiecte (Object-Oriented - OO ) :
 “inversează” metodologiile funcţionale, fragile mai ales la reutilizare (la mici
schimbări ale cerinţelor trebuie restructurat masiv întreg sistemul).
 se focalizează pe obiectele din domeniul aplicaţiei, adică entităţile
independente care modelează realitatea; la aceste obiecte se stabilesc
ulterior proceduri de acces.
 termenul “orientat spre obiecte” înseamnă organizarea programului ca o
colecţie de obiecte, fiecare înglobînd structuri de date şi avînd asociat un
anumit comportament.
Curs 1 - Programare orientată pe obiecte

Abordarea Orientată pe Obiecte (AOO)

A. obiect - entitate care încorporează atît structuri de date


(atribute) cît şi comportament (operaţii) Exemple:
Caracteristici
identitate : obiectul are o identitate discretă, căciula studentului
care se distinge dintre alte entităţi. o fereastră deschisă pe un calculator
un triunghi desenat pe hîrtie

clasificare: obiectele cu aceleaşi atribute şi căciulă


operaţii se grupează în clase. Fiecare obiect fereastră
poate fi considerat ca o instanţă a unei clase. triunghi
polimorfism: aceeaşi operaţie (cu acelaşi
nume) poate să aibă comportament diferit în a muta: o căciulă, o fereastră, un
clase diferite triunghi

Implementarea concretă a unei operaţii


într-o anumită clasă se numeşte metodă
(method) triunghi isoscel, triunghi echilateral
moştenire: atributele şi operaţiile se transmit
Curs 1 - Programare orientată pe obiecte

Obiect
Curs 1 - Programare orientată pe obiecte

Identitate, clasificare
Curs 1 - Programare orientată pe obiecte
Curs 1 - Programare orientată pe obiecte

Clasa
Curs 1 - Programare orientată pe obiecte

Polimorfism
Curs 1 - Programare orientată pe obiecte

Moștenire
Curs 1 - Programare orientată pe obiecte

Concepte de bază

 abstractizarea: focalizarea pe aspectele esenţiale ale unei entităţi. Accentul,


pentru un obiect, se pune pe ce este acesta şi pe ce trebuie să facă,
înainte de a stabili concret detaliile de implementare. De aceea, etapa
esenţială în crearea unei aplicaţii orientate spre obiecte este analiza şi nu
implementarea, care trebuie să devină aproape mecanică.
 încapsularea (ascunderea) informaţiei :separarea aspectelor externe ale
unui obiect, care sunt accesibile altor obiecte, de aspectele de
implementare internă, care sunt ascunse celorlalte obiecte. Utilizatorul
poate accesa doar anumite atribute şi operaţii ale obiectului (publice),
alte operaţii îi rămîn inaccesibile (private).
Curs 1 - Programare orientată pe obiecte

Concepte de bază

 “împachetarea” datelor şi a comportamentului în acelaşi obiect : un obiect


conţine atît structuri de date cît şi operaţii şi este utilă întrucît vom şti
totdeauna cărei clase aparţine o metodă, chiar dacă există mai multe operaţii
cu aceaşi denumire, în clase diferite
 partajarea (sharing): transmiterea aceloraşi structuri de date şi respectiv
operaţii, de-a lungul unor clase dintr-o ierarhie de clase, şi aceasta are un efect
benefic asupra economisirii de spaţiu
 accentul pe structura de obiect, nu pe cea de procedură: în tehnicile orientate
spre obiecte, accentul cade pe înţelegerea sistemului din punctul de vedere al
descompunerii acestuia în entităţi (obiecte) şi al stabilirii relaţilor dintre
acestea, deci pe ce este un obiect
Curs 1 - Programare orientată pe obiecte

Abstractizarea
Curs 1 - Programare orientată pe obiecte

Încapsularea
Curs 1 - Programare orientată pe obiecte
Curs 1 - Programare orientată pe obiecte

Metoda OO versus metode clasice

 dimensiuni tradiţionale (comportamentale) ale programelor: corectitudine, tratarea


erorilor şi excepţiilor, eficienţa, portabilitatea şi independenţa de periferice.
 dimensiuni non-comportamentale:
 mentenabilitatea : proprietatea unui program de a fi uşor de schimbat pentru
a fi eliminate defecte)
 extensibilitatea : proprietatea ca un program să poată fi modificat pentru a
trata noi clase de intrări).

Paradigma OO este potrivită pentru a ajuta la îmbunătăţirea celor două calităţi non-
comportamentale
Curs 1 - Programare orientată pe obiecte

Structura cursului. Bibliografie

Cursul se referă la standardul


ANSII C++ :
 Aspecte generale C++ - trecere în revistă
 Aspecte specifice C++ - clase şi obiecte, matrice, pointeri, referinţe, supraîncărcarea,
moştenirea, polimorfismul, funcţiile virtuale, operaţii de intrare/ieşire, tratarea
excepțiilor
 Studii de caz
 Proiectarea Orientată pe Obiecte; Tipare, colecţii, UML, şabloane / patterns (fişier pdf)

Cartea de bază : Schildt, H. , “C++ manual complet”, Editura Teora, Bucureşti,


1997

Curs 1 - Programare orientată pe obiecte

De ce C++?

Foloase dacă ştii C++ :

 poţi învăţa uşor Visual C++, dar și alte medii similare;


Visual C++ este foarte folosit
 cea mai bună compatibilitate cu C
 poţi învăţa uşor C#, JAVA; atenţie însă la piaţa forţei de muncă
 înţelegi bine conceptele legate de programarea orientată pe obiecte şi
deci inclusiv programarea în oricare limbaj al platformei .NET
 găseşti deci mai uşor de lucru, în locuri bine plătite
Curs 1 - Programare orientată pe obiecte

Capitolul 2. Limbajul C++. Generalități


 ISTORIC:
o creat de Bjarne Stroustrup în 1980 în laboratoarele Bell din Murray Hill, New Jersey (C cu clase)
o 1983 - numele stabilit la C++
Anul ● C++ Standard ●
Nume
o unele caracteristici din SIMULA67 ●

informa
o Standardul ANSII C++ : 1989, 1994, 1997 l



2011 ● ISO/IEC ●
C+
 14882:2011
Compilatoarele existente pe piaţă trebuie să respecte standardul ANSII C++ (inclusiv Visual C, Borland C,
+11
Watcom C etc.) ●
2007 ● ISO/IEC TR ●
C+
 19768:2007
Caracteristicile POO permit programelor să fie structurate pentru a fi clare, extensibile şi uşor de întreţinut, fără+TR1
pierderea eficienţei (Bjarne Stroustrup) ●
2003 ● ISO/IEC ●
C+
14882:2003 +03

1998 ● ISO/IEC ●
C+
14882:1998 +98
Curs 1 - Programare orientată pe obiecte

Programarea în stilul C++


Programul 1
IOSTREAM este pentru C++ ceea ce este STDIO.H
using namespace std; - toate elementele bibliotecii standard C++ sunt declarate într-un spațiu de nume (namespace) și anume în namespace-ul cu titlul std.
cout << “Iata iesirea.\n”; // un comentariu de o linie
functie de iesire noua
modul de realizare a comentariilor
cin >> i; - functie de intrare noua
 >> - semnificaţie şi de deplasare dreapta (shift) şi de flux de informaţii (stream)
cout << i << “ la patrat este “ << i*i << “\n”; - asocierea mai multor operaţii de intrare/ieşire
return 0; - returnarea valorii zero indică terminarea normală a programului
main() este declarată uzual într- un program în C++ :
nedeclarînd nimic (ceea ce înseamnă că tipul returnat este void) sau returnînd o valoare întreagă.
Nu este obligatoriu ca main() să returneze o valoare.
Curs 1 - Programare orientată pe obiecte

Comparație C – C++
C C++

Ex. 1
typedef struct CLS { class CLS{
int a,b; int a,b;
} cls; public:
cls oc_c; CLS (int z=0) {
ob_c.a=1; ob_c.b=1; a=b=z;
}
CLS ob_c(1);
Ex. 2
text=malloc(strlen(s)) text=new char [strlen(s)]
free(text) delete text
Curs 1 - Programare orientată pe obiecte

Operatori de intrare/ieșire

 Cînd sînt folosiţi pentru operaţii de intrare/ieşire, operatorii << şi >> sînt capabilli să
manevreze orice tip de date încorporat în C++ (exemplu Programul 2, care cere
introducerea unei variabile float, una double şi un şir, apoi le afişează)

Atenţie ! Operatorul >> lucrează cu şirurile în acelaşi fel în care o face şi


specificatorul %s pentru scanf(), adică încheie citirea intrării cînd întîlneşte primul
caracter de spaţiu.
Curs 1 - Programare orientată pe obiecte

Declararea variabilelor locale


/* incorect în C, permis în C++ */
f()
{
int i,k;
for (i=0; i <10; i++) {
k=i+1;
int j; /* da eroare in C */
j=i*2;
...
}
}
 Se pot declara variabile în C++ în orice punct dintr-un bloc, nu doar la început. Astfel, Programul 1 poate fi modificat pentru a arăta astfel : Programul 3
Curs 1 - Programare orientată pe obiecte

Prezentarea claselor în C++


 Cea mai importantă caracteristică din C++:
- clasele : pentru a crea un obiect în C++ trebuie să îi definiţi mai întîi forma sa generală folosind cuvîntul cheie class. Aceasta este similară sintactic cu
o structură.
Exemplu (pentru o clasă care implementează o stivă) :
# define SIZE 100
// Aici se defineste clasa numita stiva
class stiva {
int stiv[SIZE];
int virf_stiva;
public:
void init();
void pune(int );
int scoate();
Curs 1 - Programare orientată pe obiecte

Clasa
 secţiuni private (particulare), publice
 funcţii membre, variabile membre
 C++ class creează un nou tip de date care pot fi folosite pentru a construi obiecte de acel tip.
 un obiect este o instanţiere (un exemplar) a unei clase exact în acelaşi fel în care altă variabilă
este de exemplu un exemplar al tipului de date int (adică o clasă este o abstractizare logică,
iar un obiect este real, clasa constituie modelul după care se generează obiecte concrete (care
există în memoria calculatorului)

Curs 1 - Programare orientată pe obiecte
Clasa – continuare 1
 Forma generală a declarării unei clase este :
class nume_clasa {
date si functii private
public:
date si functii publice
} lista de obiecte;
 Acolo unde trebuie introdus codul pentru funcţiile membre ale unei clase, trebuie specificată apartenenţa la clasă prin scrierea numelui clasei urmat de :: înainte de numele funcţiei. Exemplu :
void stiva::pune(int i);
{
if(virf_stiva==SIZE) {
cout << “Stiva este plina.”;
return;
}
stiv[virf_stiva]=i;
virf_stiva++;
}
:: este operatorul de specificare a domeniului (operator de rezoluţie)
Curs 1 - Programare orientată pe obiecte

Clasa – continuare 2

 Mai multe clase pot folosi acelaşi nume de funcţie, iar compilatorul ştie care funcţie aparţine fiecărei
clase datorită operatorului de rezoluţie (polimorfism).
 Referirea la un membru al clasei dintr-o secţiune de cod care nu face parte din acea clasă se face prin
numele obiectului cu care facem legătura, urmat de punct, astfel :
stiva stiva1, stiva2;
stiva1.init();

Important ! în exemplul de mai sus stiva1 şi stiva2 sînt obiecte distincte, iar iniţializarea obiectului
stiva1 nu provoacă iniţializarea obiectului stiva2. Singura legătură dintre ele este că ambele sînt obiecte
de acelaşi tip (tipul stiva).

 Ilustrarea completă a clasei stiva : Programul 4.



Curs 1 - Programare orientată pe obiecte

Clasa – continuare 3

Atenţie ! Variabilele private ale unui obiect sînt accesibile doar funcţiilor membre ale
obiectului. În exemplu precedent, nu putem avea în programul principal:
stiva1.virf_stiva=0;
( am încerca să accesăm variabile din domeniul privat şi se generează un
mesaj de eroare)

 Uzual funcţiile membre ale claselor sînt definite înainte de main() iar funcţiile
obişnuite (nemembre) sînt definite după main() - dar nu e obligatoriu. În aplicaţiile
uzuale, se foloseşte includerea claselor asociate unui program în fişiere antet.


Curs 1 - Programare orientată pe obiecte

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