Documente Academic
Documente Profesional
Documente Cultură
utilizand C++
Gheorghe Grigoras
Dorel Lucanu
Bibliografie
l
l
l
Manuale electronice
l
l
l
Organizare
l
pagina curs:
! se vor face (cel putin) saptamanal schimbari
http://portal.info.uaic.ro/curs/poo/default.aspx
laboratoarele
prima parte - 3 teme individuale
a doua parte 1 proiect individual
examinare
pe parcurs: 1 test (sapt. 16)
50% din nota finala
laborator 2 evaluari a temelor (sapt. 8, 15)
50% din nota finala
conditii de promovabilitate
50% din punctajul total maxim
40% din punctajul maxim la fiecare proba (lab., test)
D. Lucanu
Organizare cursuri
17.02
Introducere in POO (D. Lucanu)
24.02
Clase in C++
03.03
Parametrizare + STL(I)
10.03
Ierarhii in C++
17.03
Polimorfism in C++
24.03
Exceptii in C++
31.03
Principii OO - Modelare (I)
07.04-13.04 Verificare (laboratoare)
14.04
Proiectare (I)
21.04-27.04 Vacanta de Paste
28.04
Proiectare (II)
05.05
Proiectare (III)
12.05
Proiectare (IV)
19.05
STL (II)
26.05
Programare avansata in C++
2.06 7.06 Verificare proiecte
9.06 14.06 Test scris
D. Lucanu
Teme laborator
D. Lucanu
Tema 1
l
l
l
l
l
l
l
l
l
l
l
l
l
Tema 2
l
l
l
l
l
l
l
l
l
l
l
D. Lucanu
Tema 3
l
l
l
l
l
l
l
l
l
D. Lucanu
Curs 1
l
D. Lucanu
abstractizare
pastrarea aspectelor importante (generale) si
ignorarea detaliilor nesemnificative (specifice)
incapsulare
ascunderea implementarii fata de client; clientul
depinde doar interfata
modularizare
impartirea unui sistem complex in parti (module)
manevrabile
ierarhizare
clasificarea pe nivele de abstractizare
polimorfism
aceeasi forma sintactica poate avea diferite intelesuri
in functie de contextul de utilizare
D. Lucanu
POO Principii
10
Concepte POO
obiecte
clase
atribute
metode
mesaje
supraincarcare
suprascriere
legare dinamica
interfata
D. Lucanu
POO Principii
11
Obiecte - informal
l
D. Lucanu
D. Lucanu
l
l
nume
nr. marca
functia
status
D. Lucanu
Ion Ion
2143576
conferentiar
preda POO
atribuie(CS1207)
confirma(CS1207)
D. Lucanu
Clase
l
D. Lucanu
nume
atribute
metode
D. Lucanu
Specificarea clasei
Un cont bancar:
are un titular, sold, o rata a dobinzii, numar de cont si
se pot efectua operatii de depunere, extragere,
actualizare sold
Extragerea atributelor:
titular, sold, rata a dobinzii, numar de cont
Extragerea metodelor
depunere, extragere, actualizare sold
Completarea specificatiei (analiza)
actualizare sold data ultimei operatii
D. Lucanu
Clase (continuare)
l
D. Lucanu
Cont
sold
sold
depune( )
depune( )
D. Lucanu
Ascunderea informatiei
l
l
l
l
cont.sold += suma
cont.depune(suma)
D. Lucanu
OK!
Incapsulare
Incapsulare
D. Lucanu
Combinare + Ascundere
Combinarea: avantaje
l
D. Lucanu
D. Lucanu
D. Lucanu
limitarea
accesului la
informatii
D. Lucanu
sectiuni publice
sectiuni private
Count.h
class Count
private:
constructor
{
string *owner;
destructor
public:
string countNo;
Count(char*);
double sold;
assignCountNo();
~Count();
releaseCountNo();
void
};
deposit(double);
void draw(double);
double balance();
D. Lucanu
Count.cpp
Count::Count(char
*s)
creare obiect nou
{
owner =
new string(s);
sold = 0;
assignCountNo();
}
Count::~Count()
distrugere obiect
{
delete owner;
releaseCountNo();
}
D. Lucanu
void Count::deposit(double
ammount)
{
sold += ammount;
}
double Count::balance()
{
return sold;
}
. . .
Demo.cpp
void main()
{
Count count("Ionescu");
count.deposit(2000);
}
main() joaca rol de client pentru Cont
cont.sold += 5000;
D. Lucanu
Stiva
D. Lucanu
Stack
arr[0..MAX-1]
top_index
push()
pop()
top()
is_empty()
Stiva.h
class Stack
{
public:
Stack();
~Stack();
void push(char);
void pop();
char top();
bool is_empty();
private:
char arr[MAX_STACK];
int top_index;
};
D. Lucanu
Stiva.cpp
void Stack::push(char c)
{
if (top_index == MAX_STACK-1)
throw "Depasire superioara.";
arr[++top_index] = c;
}
char Stack::top()
{
if (top_index < 0)
throw "Depasire inferioara.";
return arr[top_index];
}
D. Lucanu
Stiva_demo
Stack s;
char c = 'a';
try {
while (true) {
s.push(c++);
cout << s.top() << endl;
}
}
catch (char *mes_err) {
cout << mes_err << endl;
}
D. Lucanu
a
b
c
d
e
f
g
h
i
j
Depasire superioara.
Press any key to ...
Utilizarea de clase
l
l
l
D. Lucanu
clasa string
l
string ()
- creeaza sirul vid ("")
string s1;!
string ( other_string )
- creeaza un sir identic cu alt sir
string s2(Curs POO);
string s3(s2);!
D. Lucanu
l
l
l
l
bool empty()
- inraorec true daca sirul este vid, false altfel
D. Lucanu
de
POO.
D. Lucanu
Intrari/iesiri
l
Intrari/iesiri
l
Intrari/iesiri (continuare)
l
Semnificatie
ifstream input file stream
ofstream output file stream
nu-i prea OK
c2cpp10.cpp
c2cpp10.cp1
#include
<iostream.h>
#include <fstream.h>
#include<iostream.h>#include<f
stream.h>intmain(void){//
copiereaunuifisier ...
int main(void) {
// copierea
unui ...
mai fidela
c2cpp10.cpp
c2cpp10.cp2
#include <iostream.h>
#include <fstream.h>
#include <iostream.h>
#include <fstream.h>
int main(void) {
// copierea unui ...
int main(void) {
// copierea unui ...
D. Lucanu
MVC
incapsuleaza starea aplicatiei
raspunde la interogari despre stare
expune functionalitatea modelului
notifica schimbarea starii
View
vizualizeaza modelul
cere actualizari de la model
trimite evenimentele utilizator la
controller
permite controllerului sa schimbe
modul de vizualizare
actiuni utilizator
selectie vizualizare
D. Lucanu
schimbare stare
notif. sch.
interog. stare
Model
Controller
defineste comportarea aplicatiei
mapeaza actiunile utilizator pe
actulizare model
selecteaza vizulizarea
raspunsului
unul pentru fiecare functionalitate
D. Lucanu
View
class View
{
private:
Controller *controller;
Count *model;
public:
View(Controller *newController,
Count *newCount);
void display();
int getUserAction();
};
D. Lucanu
View::display
void View::display()
{
cout << endl << "New window" << endl;
cout << "Balanta: "
<< model->balance() << endl;
cout << "Commands:" << endl;
cout << "1. Depune 50" << endl;
cout << "2. Depune 100" << endl;
cout << "3. Extrage 50" << endl;
cout << "4. Extrage 100" << endl;
cout << "0. Exit" << endl;
}
D. Lucanu
View::getUserAction
int View::getUserAction()
{
int option;
cout << "Option: ";
cin >> option;
return option;
}
D. Lucanu
Controller
class Controller
{
private:
Count *model;
View *view;
public:
Controller(Count *newModel); public:
void setView(View *newView);
void execute();
void finish();
};
D. Lucanu
Controller::execute
void Controller::execute()
{
int option = view->getUserAction();
switch (option)
{
case 0:
finish();
break;
case 1:
model->deposit(50);
break;
...
default: exit(1);
}
}
D. Lucanu
Demo
int main(){
Count *model = new Count("Ionescu");
Controller *controller = new Controller(model);
View *view = new View(controller, model);
controller->setView(view);
try {
while (true) {
view->display();
controller->execute();
}
}
catch (char *mes_err) {
cout << mes_err << endl;
}
return 0;
}
D. Lucanu