![Page 1: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/1.jpg)
Concepte
fundamentale ale
limbajelor de
programareLimbaje de programare orientate pe obiecte
Curs 10
conf. dr. ing. Ciprian-Bogdan Chirila
![Page 2: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/2.jpg)
Cuprins
programarea orientata pe obiecte
mostenire
legarea dinamica
programarea orientata-obiect in Java
aspect generale
example
programarea orientata-obiect in C#
programarea orientata-obiect in Lisp
definirea obiectelor si accesarea componentelor
mostenirea de sloturi
mostenirea de metode si transmiterea mesajelor
![Page 3: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/3.jpg)
Introducere in POO
obiecte
orientare-obiect
atasata la fiecare faza de dezvoltare software
proiectare
dezvoltare
testare
componente de medii software
baze de date
sisteme de operare
IDEs
![Page 4: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/4.jpg)
Introducere in POO
dezvoltarea software incepe de la identificarea de
obiecte din lumea reala
rezolvarea problemei inseamna crearea unui model a
acelei realitati
modelul va contine obiecte ce interactineaza intre
ele
obiectele sunt modele ale obiectelor din lumea reala
si a operatiunilor prin care interactioneaza
![Page 5: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/5.jpg)
Introducere in POO
descrierea obiectelor este facuta prin tipuri de date
abstracte
programarea orientata pe obiecte
programul este organizat pe o multime de obiecte
descries prin tipuri abstracte de date
limbaje de programare bazate pe obiecte
Ada, Simula 67, Modula 2
![Page 6: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/6.jpg)
Programare orientata pe
obiecte
conceptul central este obiectul
obiectul are
stare proprie – multime de campuri / atribute
comportament – multime de metode
prin aplicarea metodelor starea obiectului se schimba
starea obiectului este definita prin variabilele sale
in mod implicit ele sunr inaccesibile din exterior
intermediul metodelor accesibile din exterior
obiectele interactioneaza unul cu celalalt
![Page 7: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/7.jpg)
Obiectul
este o instantiere a unei clase
clasa este un constructor de tip ce descrie variabilele
si metodele obiectelor instantiate prin acea clasa
programarea claselor este un concept fundamental
in programarea bazata pe obiecte
programarea orientata pe obiecte are doua trasaturi
in plus
mostenirea
legarea dinamica
![Page 8: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/8.jpg)
Mostenirea
este trasatura ce permite definirea de clase noi ce iau
variabilele de stare
functiile ce dau comportamentul
clasa noua este numita subclasa a celei originale
clasa veche este numita superclasa pentru clasa nou
definita
![Page 9: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/9.jpg)
Mostenirea
permite definirea unei clase fara a o scrie de la zero
aceasta facilitate este valida daca exista deja inca o
clasa cu caracteristici comune
este posibil pentru o superclasa sa aibe
atribute noi
metode noi
attribute redefinite
metode redefinite
conceptul este numite specializare
![Page 10: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/10.jpg)
Exemplu
o stiva ce implementeaza operatia de adaugare
pentru o pereche de elemente
clasa noua va fi implementata ca o extensie a clasei
stiva definita in cursul anterior
![Page 11: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/11.jpg)
Exemplu stack_spec
type stack_spec(nr_max:integer) extends stack=class
operations push_2;
procedure push_2(x,y:integer);
begin
push(x);
push(y);
end;
begin
end;
![Page 12: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/12.jpg)
Exemplu stack_spec
var
st : stack_spec;
------------------------------------------
st := new stack_spec(150);
------------------------------------------
st.push(15);
st.push_2(155,25);
![Page 13: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/13.jpg)
Exemplu stack_spec
type stack_spec_spec(nr_max:integer) extends stack_spec=class
operations under_top,top,pop;
function top():integer;
begin
if not empty() then
return tab_st[ind-1];
else
return –1;
end if;
end;
![Page 14: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/14.jpg)
Exemplu stack_spec
function pop():integer;
begin
if not empty() then
ind:=ind-1;
return tab_st[ind];
else
return –1;
end if;
end;
![Page 15: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/15.jpg)
Exemplu stack_spec
function under_top():integer;
begin
if not empty_spec() then
return tab_st[ind-2];
else return –1;
end if;
end;
![Page 16: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/16.jpg)
Exemplu stack_spec
function empty_spec():boolean;
begin
return ind <= 2;
end;
![Page 17: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/17.jpg)
Exemplu stack_spec
var
st1 : stack = new stack(100);
st2 : stack_spec = new stack_spec(50);
st3 : stack_spec_spec = new stack_spec_spec(80);
i: integer;
i := st1.under_top(); --ilegal
i := st2.under_top(); --ilegal
i := st3.under_top();
![Page 18: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/18.jpg)
Exemplu stack_spec
st1.push_2(150,12); --ilegal
st2.push_2(11,110);
st3.push_2(5,17);
i := st1.top(); --if the stack is empty, an exception is
generated
i := st2.top(); --if the stack is empty, an exception is
generated
i := st3.top(); --if the stack is empty, -1 is returned
![Page 19: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/19.jpg)
Legarea dinamica
st : stack;
i : integer;
with_exception : boolean;
------------------------
if with_exception then
st:=new stack(100);
else
st:=new stack_spec_spec(100);
end if;
------------------------
i:=st.top();
![Page 20: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/20.jpg)
Programarea orientata-
obiect in Java
proiectul a fost lansat la compania Sun in 1990
un limbaj de programare pentru dispositive
electronice domestice
scopul a fost acela de a face programele sa traiasca
pe diferite arhitecturi hardware
din 1993 incepand cu dezvoltarea aplicatiilor web
Java a fost proiectat astfel incat
aplicatiile sa fie executate pe orice calculator
conectat la Internet indifferent de arhitectura sa
![Page 21: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/21.jpg)
Limbajul de programare
Java
a preluat multa sintaxa de la C si de la C++
unele trasaturi au fost eliminate din motive de
securitate
au fost eliminati pointerii
a fost eliminata dealocarea explicita a memoriei
a fost eliminata mostenirea multipla
portabilitatea este bazata pe
compilatorul de Java ce genereaza byte code
codul binary ce poate fi executat pe orice masina
avand o masina virtuala ruland peste ea
![Page 22: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/22.jpg)
Comparatii cu alte limbaje
de programare
inspirat
mai mult din SmallTalk si Eiffel
mai putin din C++
SmallTalk este un limbaj de programare orientat
obiect extrem
opereaza numai cu obiecte chiar si pentru tipurile de
baza
un intreg este un obiect
operatiile intre obiecte sunt transmise ca mesaje
![Page 23: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/23.jpg)
Comparatii cu alte limbaje
de programare
C++ este un limbaj de programare
orientat spre structuri de date
echipat ulterior cu trasaturi orientate-obiect
in Java
toate entitatile sunt obiecte
exceptand tipurile primitive (integer, real, character, boolean)
datele pot fi accesate direct prin nume
obiectele
pot fi accesate indirect prin referinte
must be created explicitly by new operations
trebuie sa fie create explicit prin operatii new
![Page 24: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/24.jpg)
Bibliotecile Java
multime bogata de clase predefinite
dezvoltare rapida a aplicatiilor
set de instrumente de ferestre
ferestre
ferestre dialog
grafica animate: AWT, Swing, JavaFX
conexiuni de retea
evenimente tratate de ascutatorii de mouse
mostenirea si refefinirea permit adaptarea caselor
spre necesitati specifice
![Page 25: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/25.jpg)
Exemplu Java
un program Java este un set de clase
una din ele trebuie sa contina metoda main
necesara ca punct de pornire al programului
pentru applet-uri nu exista metoda main
nevoie de o instanta a clasei java.applet.Applet
la applet
subclasa trebuie sa contina metodele init() si paint()
trebuie sa fie inclusa intr-o pagina web
ruleaza intr-un browser
![Page 26: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/26.jpg)
Exemplu Java
public class Circle
{
protected double x, y, r;
public static int num_circles = 0;
public Circle(double x, double y, double r)
{
this.x=x; this.y=y; this.r=r;
num_circles++;
}
![Page 27: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/27.jpg)
Exemplu Java
public Circle(double r)
{
this(0.0, 0.0, r);
}
public Circle(Circle c)
{
this(c.x, c.y, c.r);
}
![Page 28: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/28.jpg)
Exemplu Java
public Circle()
{
this(0.0, 0.0, 1.0);
}
![Page 29: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/29.jpg)
Exemplu Java
public double circumference()
{
return 2*3.14159*r;
}
public double area()
{
return 3.14159*r*r;
}
![Page 30: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/30.jpg)
Exemplu Java
import java.awt.*;
public class GraphicCircle extends Circle
{
protected Color outline, fill;
public GraphicCircle(double x, double y, double r, Color outline, Color fill)
{
super(x, y, r);
this.outline=outline;
this.fill=fill;
}
![Page 31: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/31.jpg)
Exemplu Java
public GraphicCircle(Color outline, Color fill)
{
this.outline=outline;
this.fill=fill;
}
public void draw(DrawWindow dw)
{
dw.drawCircle(x,y,r,outline,fill);
}
}
![Page 32: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/32.jpg)
Exemplu Java
import java.awt.*;
public class GraphicCircleSmart extends GraphicCircle
{
public GraphicCircleSmart(double x, double y, double r,Color outline, Color fill)
{
super(x, y, r,outline,fill);
}
public GraphicCircleSmart(Color outline, Color fill)
{
super(outline,fill);
}
![Page 33: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/33.jpg)
Exemplu Java
public void draw(DrawWindow dw)
{
super.draw(dw);
dw.drawLine(x-r, y, x+r, y, outline);
dw.drawLine(x, y+r, x, y-r, outline);
}
![Page 34: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/34.jpg)
Exemplu Java
public void put_outline(Color outline)
{
this.outline=outline;
}
public void put_fill(Color fill)
{
this.fill=fill;
}
}
![Page 35: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/35.jpg)
Exemplu Java
--------------------------------------------------
public class DrawWindow
{
------------------------------------
public void drawCircle(double x, double y, double r,Coloroutline, Color fill)
{
---------------------
}
public void drawLine(double x1, double y1, double x2,double y2, Color outline)
{
---------------------
}
}
![Page 36: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/36.jpg)
Exemplu Java
import java.awt.*
public class the_main
{
public static void main (String args[])
{
Color forOutline=new Color( -------);
Color forFill=new Color( -------);
DrawWindow theFirstWd=new DrawWindow(-------);
DrawWindow theSecondWd=new
DrawWindow(-------);
![Page 37: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/37.jpg)
Exemplu Java
Color cl;
double total_area=0;
GraphicCircle tabCircle[]=new GraphicCircle[4];
DrawWindow tabWindow[]=new DrawWindow[4];
tabCircle[0]=new GraphicCircle(1.0, 1.0, 1.0,
forOutline, forFill);
tabWindow[0]=theFirstWd;
![Page 38: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/38.jpg)
Exemplu Java
tabCircle[1]=new
GraphicCircleSmart(forOutline,forFill);
tabWindow[1]=theSecondWd;
tabCircle[2]=new GraphicCircle(forOutline,forFill);
tabWindow[2]=theFirstWd;
![Page 39: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/39.jpg)
Exemplu Java
tabCircle[3]=
new GraphicCircleSmart(5.0, 7.0, 3.0, forOutline,forFill);
tabWindow[3]=theSecondtWd;
![Page 40: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/40.jpg)
Exemplu Java
for(init I=0; I<tabCircle.length; I++)
{
total_area+=tabCircle[i].area();
tabCircle[i].draw(tabWindow[i]);
}
![Page 41: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/41.jpg)
Exemplu Java
cl=new Color (--------);
tabCircle[1].put_outline(cl); //illegal
((GraphicCircleSmart)tabCircle[1]).put_online(cl);
tabCircle[1].draw(theFirstWd);
![Page 42: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/42.jpg)
Comentarii la exemplul Java
exemplul este o aplicatie Java
clasa Circle implementeaza
atributele cercului
metodele
circumferinta
arie
![Page 43: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/43.jpg)
Constructori
3 constructori
metode avand acelasi nume cu clasa
se executa cand este creat un obiect
activarea unuia dintre ei se face pe baza de semnatura
daca nu este definit niciunul atunci exista unul implicit
fara parametri
cu corp vid
are rol de alocare de memorie
![Page 44: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/44.jpg)
Variabile si metode
modificatorii se aplica la membrii claselor
variabile si metode
modificatorul private
vizibil doar in clasa
modificatorul public
vizibil de oriunde
![Page 45: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/45.jpg)
Variabile si metode
atribute ne-statice (dinamice)
asociate cu obiectele
metodele sunt la fel pentru toate obiectele, dar datele
nu sunt
membrii statici
asociati claselor
nu sunt asociati obiectelor !!!
num_circles numara instantierile claselor
![Page 46: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/46.jpg)
Mostenirea
clasa GraphicCircle este subclasa a clasei Circle
extinde metoda draw()
metoda deseneaza un cerc intr-o fereastra data ca
parametru
fereastra este modelata de clasa DrawWindow
culorile sunt modelate de java.awt.Color
awt – Abstract Windowing Toolkit
Swing, SWT - Standard Widget Toolkit, JavaFX
![Page 47: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/47.jpg)
Mostenirea
clasa GraphicCircleSmart este subclasa a clasei
GraphicCircle
extinde clasa cu put_outline si put_fill
redefineste metoda drawing de desenare
clasa “the_main” contine metoda “main”
cele doua tablouri prezente sunt tratate ca si obiecte
dimensiunea tabloului este accesata prin campul
numit “length”
la crearea tabloului fiecare element este null
tabloul tine doar referinte la obiecte
![Page 48: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/48.jpg)
Programarea orientata-
obiect in C#
creat de compania Microsoft pentru platforma .NET
ca si Java este derivat din C si C++
conceptul de portabilitate este luat de la Java
bazat pe limbajul MSIL – Microsoft intermediate language
cadrul de lucru .NET este masina virtuala
programarea se face in mai multe limbaje de
programare
fiecare partea a programului poate fi scrisa in cel mai
expresiv limbaj de programare
integrarea completa cu platforma Windows
![Page 49: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/49.jpg)
Programarea orientata-
obiect in C#
programele C# incep cu functia Main
sistemele C# contin clase
clasele sunt organizate in ierarhii pe baza de
mostenire
legat de mostenire
superclasa sau clasa de baza
subclasa sau clasa derivata
mostenirea multipla nu este permisa
o clasa nu poate avea mai multe superclase
![Page 50: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/50.jpg)
Exemplu de cod C#
using System;
// A class representing bi-dimensional objects.
class Shape2D
{
public double width;
public double height;
public void showDim()
{
Console.WriteLine("Width and height are " + width +" and " + height);
}
}
![Page 51: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/51.jpg)
Exemplu de cod C#
// class Triangle derives from class Shape2D.
class Triangle : Shape2D
{
public string typeOfTriangle;
public double area()
{
return width * height / 2;
}
public void showType ()
{
Console.WriteLine("Triangle is " + typeOfTriangle);
}
}
![Page 52: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/52.jpg)
Exemplu de cod C#
class Shapes
{
public static void Main()
{
Triangle t1 = new Triangle();
t1.width = 4.0;
t1.height = 4.0;
t1.typeOfTriangle = "isosceles";
![Page 53: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/53.jpg)
Exemplu de cod C#
Triangle t2 = new Triangle();
t2.width = 8.0;
t2.height = 12.0;
t2.typeOfTriangle = "rectangular";
![Page 54: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/54.jpg)
Exemplu de cod C#
ConsoleWriteln("Information about t1: ");
t1.showType();
t1.showDim() ;
![Page 55: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/55.jpg)
Exemplu de cod C#
ConsoleWriteLine("Triangle area is " + t1.aria());
ConsoleWriteLine();
ConsoleWriteln("Information about t2: ");
t2.showType();
t2.showDim() ;
ConsoleWriteLine("Triangle area is " + t2.aria());
}
}
![Page 56: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/56.jpg)
Comentarii
Clasa Shape2D
defineste atributele unei forme generice
Square
Rectangle
Triangle
Clasa Triangle
este derivata din Shape2D
un atribut a fost adaugat: typeOfTriangle
doua metode au fost adaugate: area(), showType()
este capabila de a referi atributele de tip Shape2D ca fiind proprii
![Page 57: Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea](https://reader030.vdocuments.site/reader030/viewer/2022040101/5e0cbddf366adc464e729617/html5/thumbnails/57.jpg)
Bibliografie
Horia Ciocarlie – The programming language universe,
second edition, Timisoara, 2013
Carlo Ghezzi, Mehdi Jarayeri – Programming
Languages, John Wiley, 1987.
Ellis Horrowitz – Fundamentals of programming
languages, Computer Science Press, 1984.
Donald Knuth – The art of computer programming,
2002.