57
Concepte fundamentale ale limbajelor de programare Limbaje de programare orientate pe obiecte Curs 10 conf. dr. ing. Ciprian-Bogdan Chirila

Concepte fundamentale ale limbajelor de programarestaff.cs.upt.ro/~chirila/teaching/upt/cti22-cflp/lectures/cflp10.pdf · Cuprins programarea orientata pe obiecte mostenire legarea

  • Upload
    others

  • View
    19

  • Download
    0

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.