Sunteți pe pagina 1din 50

Programare orientata-obiect

Virginia Niculescu
vniculescu@cs.ubbcluj.ro
www.cs.ubbcluj.ro/~vniculescu

1 POO - Curs 1
Structura cursului

 Programare orientata-obiect – paradigma de programare


 notiuni de baza
 concepte
 principii
 UML

 Java –limbaj de programare OO

 Proiectare orientata-obiect

2 POO - Curs 1
Continut

1. POO – introducere, limbajul Java elemente de limbaj, clase


2. Pachete, Garbage Collection, Mostenire, Metode statice+sablon Singleton, clase
abstracte, Interfete. UML.
3. Polimorfism, Legare dinamica, clase nested/inner, clase anonime/ expresii lambda
4. Tratarea exceptiilor+ Clase generice+ sabloane creationale
5. Java collections + sabloane Iterator, Adapter, Template Method, Decorator, Strategy,
6. Interfete grafice
7. Threads/ Principii POO (SOLID)

3 POO - Curs 1
Câteva Referinţe
1. Eckel, B.,Thinking in Java (34d ed.), New York: Prentice Hall, 2006.
2. Larry O’Brien and Bruce Eckel, Thinking in C#, Ed. Prentice Hall, 2002.
3. Eckel, B.,Thinking in Patterns with Java, MindView Inc, 2004.
4. Gamma, E., Helm, R., Johnson, R., Vlissides, J., Design Patterns - Elements of Reusable
Object-Oriented Software, Massachusets, Addison-Wesley, 1994.
5. Larman, C., Applying UML and Design Patterns: An Introduction to OO Analysis and
Design, Berlin: Prentice Hall, 2000.
6. Fowler, M., Patterns of Enterprise Application Architecture, Addison-Wesley, 2002.
7. I. Lazăr, M. Frenţiu, V. Niculescu, Programare orientata-obiect in Java, Univ. “Petru-
Maior” Târgu-Mureş Press, 1999 (283 pg.), ISBN 973-99054-8-X.
8. UML Tuturials -> http://www.uml.org/
9. Java documentation: http://docs.oracle.com/javase/8/docs/api/index.html
10. Tutoriale Java
http://download.oracle.com/javase/tutorial/
http://msdn.microsoft.com/en-us/library/aa288436%28v=vs.71%29.aspx

4 POO - Curs 1
Evaluare
 Curs
 Examen Scris – nota ES

 Laborator:
 Teme de laborator – nota pentru fiecare L1, L2, …
 Media (ponderata a) lor va fi notata cu LL
 Examen practic EP

 Nota finala = (LL*30+ EP*30 + ES*40) /100

5 POO - Curs 1
Programare orientata obiect
- generalitati-

6 POO - Curs 1
Paradigma POO (1)
Necesitatea:
 Spatiul problemei ↔ Spatiul solutiei
 Modelul problemei ↔ Modelul solutiei

POO ofera instrumente eficiente pentru reprezentare


POO permite rezolvarea problemei in termenii problemei,
nu in termeni specifici modelului calculatorului pe care
se executa solutia.

Obiect = reprezentarea unui element din spatiul problemei


(def. generala) in spatiul solutiei

 Orice obiect are o stare


 Orice obiect are o interfata

7 POO - Curs 1
Paradigma POO(2)
 Concepte:

1. Clasa - implementare a unui TAD


2. Obiect = instanta a unei clase
3. Metoda = implementarea unei operatii din interfata TAD
(mesaj = apel al metodei –> interactiune intre obiecte)

 Caracteristici:

1. Incapsulare (date + operatii)


ascunderea informatiei  protectia informatiei  consistenta datelor

2. Mostenire  reutilizarea codului

3. Polimorfism = capacitatea unei entitati de a reactiona diferit in


functie de starea sa.

8 POO - Curs 1
Vizualizare

9 POO - Curs 1
Avantaje ale POO
 Abstractizare (de nivel inalt)
 Un obiect poate fi utilizat fara a se cunoaste reprezentarea sa interna

 Modularitate & Modificabilitate


 Codul sursa corespunzator unui obiect poate fi scris si intretinut independent de
codul sursa corespunzator altor obiecte.
 O clasa poate fi usor schimbata fara a se modifica alte clase.
 Biblioteci de clase

 Lizibilitate
 Usor de inteles -> de depanat, intretinut

 Reutilizabilitate

!!! Doar daca programele sunt construite respectand principiile POO!!!

10 POO - Curs 1
Analiza si Proiectare Orientata-Obiect
 “Cine va folosi sistemul?" (pentru a descoperi actorii)
 “Ce pot face acesti actori cu sistemul?"
 “Cum poate sistemul reactiona daca altcineva face acestea?"
(pentru a descoperi variatiile)
 “Ce probleme pot apare in sistem?"
(pentru a descoperi exceptiile)

1. Descoperirea obiectelor
2. Asamblarea obiectelor
3. Constructia sistemului
4. Extensia sistemului
5. Reutilizarea obiectelor

POO - Curs 1 11
Limbaj de programare orientat-obiect
 C++  limbaj de programare orientat-obiect hibrid

Programare OO pura (Alan Kay):


ex. - Smalltalk
 Orice este un obiect!!!
 Un program este o colectie de obiecte care isi trimit mesaje unul altuia.
 Fiecare obiect are propria memorie care contine alte obiecte.
 Orice obiect are un tip.
 Toate obiectele de un tip particular pot primi acelasi set de mesaje. (Substitutie)

Java  ‘aproape’ un LOO pur


C# -> ~ LOO pur

12 POO - Curs 1
Limbajul JAVA

Caracteristici:
− simplu,
− object-oriented,
− distribuit si dinamic,
− interpretat,
− robust,
− sigur,
− independent de arhitectura,
− portabil,
− high-performance,
− multithreaded

13 POO - Curs 1
Java este un limbaj interpretat
 Compilatorul Java genereaza byte-code pentru Java Virtual Machine (JVM -
interpretorul si sistemul run-time), si nu cod masina.

 A executa un program Java = interpretorul Java executa byte-codul


compilat

 Byte-codul Java este independent de platforma  Programele Java


se pot executa pe orice platforma pe care exista JVM.

 Intr-un mediu interpretat, faza standard de "link-edit" nu mai exista.

 Daca e sa consideram ca Java are faza link, atunci aceasta inseamna doar
procesul de incarcare a noilor clase in mediu, proces care este unul
incremental, si apare la run-time (executie).

14 POO - Curs 1
Un exemplu simplu
Hello World!

public class HelloWorld {


public static void main(String[] args) {
System.out.println("Hello World!");
}
}
 > javac HelloWorld.java
 > java HelloWorld

15 POO - Curs 1
Cum se executa un program Java?

bytecode
compilare
MyClass.java MyClass.class

executat pe

Java Virtual Machine


executat pe
> javac MyClass.java
Host Machine
> java MyClass

16 POO - Curs 1
17 POO - Curs 1
Portabilitate si independenta de arhitectura

 O aplicatie Java se poate executa pe orice sistem, cu conditia ca pe


acel sistem sa fie implementata Java Virtual Machine.

 Acest lucru este important pentru aplicatiile distribuite pe Internet


sau pe retele heterogene.

 Formatul Byte-code este important pentru portabilitate.

 Nu exista aspecte “dependente de implementare" ale limbajului.


(De exemplu, Java specifica explicit dimensiunea pentru fiecare tip primitiv de date, si
deasemenea si aritmetica corespunzatoare.
In C tipul int poate fi reprezentat pe 16, 32, or 64 biti in functie de platforma.)

 "Write Once, Run Anywhere."

18 POO - Curs 1
Dinamic si Distribuit
 Java este un limbaj dinamic.
 Orice clasa Java poate fi incarcata de catre interpretorul Java la orice moment.
 Toate aceste clase incarcate dinamic pot fi instantiate dinamic.
 Bibliotecile de cod nativ pot fi incarcate dinamic de asemenea.
 Clasa Class: se pot obtine informatii in mod dinamic despre orice clasa.

 Java este un limbaj pentru programare distribuita =


furnizeaza suport de nivel inalt pentru programare distribuita.
 clasele URL si cele conexe sunt in pachetul java.net,
 Remote Method Invocation (RMI)
 suport pentru operatii in retele traditionale de nivel jos
(datagrams si stream-based connections prin sockets)

 Aceste caracteristici permit interpretorului Java sa incarce si sa execute


cod de pe Internet (ex. Java applets)

19 POO - Curs 1
Simplitate

 Java este un limbaj simplu


 poate fi invatat usor
 numarul constructiilor limbajului a fost pastrat relativ mic
 sunt multe similaritati cu C++

 Un numar de elemente din C si C++ au fost eliminate:


 Nu exista goto; exista insa instructiuni etichetate break si continue
mecanisme de tratare a exceptiilor ,
 Java nu foloseste fisiere header si elimina preprocesarea din C,
 Nu exista struct si union ,
 Nu exista supraincarcarea operatorilor si mostenire multipla.

 Java nu foloseste pointeri


 Java face automat referentierea si dereferentierea obiectelor
 Automatic garbage collection

 Java este un limbaj complet si elegant!

20 POO - Curs 1
Robustete

Capacitatea unui sistem/program de a se executa/reactiona

corect/’bine’

nu doar in conditii optime dar si in conditiile unui input care nu


respecta toate conditiile impuse.

21 POO - Curs 1
Robustete
 Java este un limbaj puternic tipizat 
verificare la compilarea compatibilitatii tipurilor.
 Java este mai tipizat decat C++.
 Java cere declararea explicita a metodelor; nu permite stilul C implicit pentru declararatii
C-style  compilatorul poate verifica erorile de apel.
 Nu sunt pointeri  cresterea robustetii programelor Java prin eliminarea unei
intregi clase de erori datorate pointerilor.
 Toate accesarile la tablouri si string-uri sunt verificate pentru a se asigura ca
sunt in interiorul limitelor si astfel se elimina posibilitatea de suprascriere a
memoriei si a distrugerii datelor.

 Operatiile Cast de transformare/adaptare a tipurilor obiectelor (trecere


de la un tip la altul) sunt de asemenea verificate pentru a se asigura ca sunt legale.

 Mecanismul automatic garbage collection previne ‘umplerea’ memoriei si alte


erori datorate alocarii si dealocarii memoriei.

 Mecanism de tratare a exceptiilor puternic.

22 POO - Curs 1
Securitate
Securitatea este foarte importantă pentru aplicaţiile distribuite!

 Java furnizeaza câteva nivele de control:

1. La nivelul cel mai de jos, securitatea are legatura cu robustetea.

1. Interpretorul Java incarca un proces de verificare a byte-codului pentru


orice cod susceptibil .
(Acest pas de verificare asigura ca este un cod bine format— de exemplu, codul nu
va supraincarca stiva si nici nu o va goli si nu contine byte-code ilegal)

3. Modelul "sandbox": codul suspect este plasat in "sandbox," unde se poate


executa in mod sigur, fara a periclita “lumea reala”, sau mediul Java (este executat
cu anumite restrictii.)

3. Prin atasarea de semnaturi digitale codului Java, originea codului respectiv


poate fi stabilita intr-un mod sigur criptografic.

23 POO - Curs 1
High-Performance and Multithreaded

 Java este un limbaj interpretat, deci nu va fi la fel de rapid ca si C/C++.

 Se considera ca un cod C compilat se executa de aprox 10 ori mai repede


decat bytecodul Java interpretat.
 Viteza este insa mai mult decat adecvata pentru aplicatiile interactive( GUI) si
pentru aplicatiile retea, pentru care aplicatia asteapta deseori imput de la
utilizator sau date din retea.

 Multe interpretoare Java includ acum "just in time compilers” care pot
 ajusta/ imbunatatii performanta in timpul executiei, sau
 transforma Java byte-codes in cod-masina pentru un CPU particular.

 Java este un limbaj multithreaded – se permite definirea mai multor fire de


executie simultana/concurenta.

24 POO - Curs 1
Internationalizare - Unicode
 Internationalizare este procesul de proiectare a unei aplicatii astfel incat sa poata
fi adaptata diferitelor limbi si conventii de notare, fara reprogramare.

UNICODE (www.unicode.org)
 Caracterele Java sunt caractere 16-bit Unicode.
 Deoarece majoritatea mediilor nu suporta codificarea Unicode, Java foloseste o faza
de pre-procesare pentru a asigura faptul ca toate caracterele unui program sunt in
Unicode.
 Java defineste secvente escape care permite folosirea tuturor caracterelor
(\uxxxx, unde xxxx este o secventa de patru cifre hexazecimale )
 Unicode defineste codurile de la 0 la 127 in mod consistent cu ASCII.

char newline = '\n', apostrophe = '\", delete = '\377‘;


char aleph='\u05D0‘, a = ‘A’ , aa=\u0103;

25 POO - Curs 1
JAVA
 Elemente de limbaj de baza

26 POO - Curs 1
Comentarii
Constante
Tipuri: valoare & referinte
Transmitere parametrii

Testare identitate.vs. egalitate

27 POO - Curs 1
Comentarii

 Java suporta trei tipuri de comentarii:


 stilul standard C:
/* and continua pana la */
(nu pot fi incuibate)
− stilul C++
// continua pana la sfarsitul liniei.

 stilul "doc comment"


/** and continua pana la */ (nu pot fi incuibate)

Comentariile Doc sunt procesate de catre programul

javadoc

pentru a produce documentatie simpla(html file)din codul sursa Java.

>javadoc Myclass.java

28 POO - Curs 1
Definirea Constantelor
 Orice variabila declarata final in Java reprezinta o constanta
 initializarea trebuie facuta la declarare

Ex. private final int x = 2;


//c, c++
#define PI 3.14159
const double PI = 3.14159;  a static final declarata in interiorul unei clase

//java
public final class Math { ...
public static final double PI = 3.14159.....;
...
}
 Conventia C de folosire a literelor MARI valabila.

 Constantele Java au o ierarhie unica globala a numelor.

 Constantele Java sunt tipizate!

29 POO - Curs 1
Instructiuni de control
if (a==b) {System.out.println(“true”);}
else {System.out.println(“false”);}

while(a>b){a-=b; }

do {a-=b; } while(a>b);

 switch
 byte, char, short, int, or long types as the values of the
case labels, and you may also specify a default label.

30 POO - Curs 1
SwitchDemo
public class SwitchDemo { case 8: monthString = "August";
public static void main(String[] args) { break;
int month = 8; case 9: monthString = "September";
String monthString; break;
switch (month) { case 10: monthString = "October";
case 1: monthString = "January"; break;
break; case 11: monthString = "November";
case 2: monthString = "February"; break;
break; case 12: monthString = "December";
case 3: monthString = "March"; break;
break; default: monthString = "Invalid month";
case 4: monthString = "April"; break;
break; }
case 5: monthString = "May"; System.out.println(monthString);
break; }
case 6: monthString = "June"; }
break;
case 7: monthString = "July";
break;

31 POO - Curs 1
for-statement
int i; String s;
for(i=0, s = "testing"; // Initialize variables.
(i < 10) && (s.length() >= 1); // Test for continuation.
i++, s = s.substring(1)) // Increment variables.
{ System.out.println(s); // Loop body.
}

for(int i = 0; i < my_array.length; i++)


System.out.println("a[" + i + "] = " + my_array[i]);

 Variables declared in this way have the for loop as their scope.

 They are only valid within the body of the for loop and within the
initialization, test, and increment expressions of the loop.

32 POO - Curs 1
Clase
[ abstract][ final][public] class <name>

[extends <superclass_name>]

[implements <interface_name> [, <interface_name>] * ]


{

[ [public|private|protected] [static][final][abstract] <method> ]*

[ [public|private|protected] [static][final] <attribute> ]*

33 POO - Curs 1
Definirea obiectelor
// Complex.java
public class Complex{
private double re = 2.5;
private double im;
public Complex ( double re, double im){
this.re = re;
this.im = im;
}
public Complex() {}
public double getReal() { return re; }
public double getImag() { return im; }

public static void main(String [] args){


Complex c1 = new Complex();
Complex c2 = new Complex(5.0, 10.5);
System.out.println(“c1=“+c1.getReal()+”+i”+c1.getImag()+”\n”);
// c1=2.5+i0.0
System.out.println(“c2=“+c2.getReal()+”i+”+c2.getImag()+”\n”);
// c2=5.0+i10.5
}
}
34 POO - Curs 1
Object class
 Ierarhie unica de clase
 Clasa radacina = clasa Object

Object

+ Object()
# Object clone()
+ boolean equals(Object obj)
# protected void finalize()
+ Class getClass()
+ int hashCode()
+ void notify()
+ void notifyAll()
+ String toString()
+ void wait()
+ void wait(long timeout)
+ void wait(long timeout, int nanos)

35 POO - Curs 1
Tipuri de date primitive
Primitive Size Minimum Maximum Wrapper
type type
boolean 1-bit — — Boolean
char 16-bit Unicode 0 Unicode 216- 1 Character
byte 8-bit -128 +127 Byte
short 16-bit -215 +215—1 Short
int 32-bit -231 +231—1 Integer
long 64-bit -263 +263—1 Long
float 32-bit IEEE754 IEEE754 Float
double 64-bit IEEE754 IEEE754 Double
void — — — Void

36 POO - Curs 1
Default values – valori implicite

Primitive Default
type
boolean false
char ‘\u0000’ (null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d

37 POO - Curs 1
operatori Java
Precc. Operator Operand Type(s) Assoc. Operation Performed
1 ++ arithmetic R pre-or-post increment (unary)
-- arithmetic R pre-or-post decrement (unary)
+, - arithmetic R unary plus, unary minus
~ integral R bitwise complement (unary)
! boolean R logical complement (unary)
(type) any R cast
2 *, /, % arithmetic L multiplication, division, remainder
3 +, - arithmetic L addition, subtraction
+ string L string concatenation
4 << integral L left shift
>> integral L right shift with sign extension
>>> integral L right shift with zero extension
5 <, <= arithmetic L less than, less than or equal
>, >= arithmetic L greater than, greater than or equal
instanceof object, type L type comparison
6 == primitive L equal (have identical values)
!= primitive L not equal (have different values)
== object L equal (refer to same object)
!= object L not equal (refer to different objects)
7 & integral L bitwise AND
& boolean L boolean AND
8 ^ integral L bitwise XOR
^ boolean L boolean XOR
9 | integral L bitwise OR
| boolean L boolean OR
10 && boolean L conditional AND
11 || boolean L conditional OR
12 ?: boolean, any, any R conditional (ternary) operator
13 = variable, any R assignment
*=, /=, %=, +=, -=, <<=,
variable, any R assignment with operation
>>=, >>>=, &=, ^=, |=

38 POO - Curs 1
39 POO - Curs 1
UML (Unified Modeling Language)

 UML este un limbaj standard pentru specificarea, vizualizarea,


constructia si documentarea artefactelor sistemelor software.

 UML notatie standard pentru arhitecturile software


 Online UML  Resurse
 Rational Software
-- UML Resource Center (http://www-306.ibm.com/software/rational/uml/),
 The Object Management Group – http://www.uml.org/

40 POO - Curs 1
UML(2)

Tipuri de date: Integer, Real, String, Character, Boolean

41 POO - Curs 1
UML(3)

42 POO - Curs 1
UML(4)

43 POO - Curs 1
UML(5)

44 POO - Curs 1
Exemple UML - Asociere
 Asociere simpla
Foloseste ►
Autor Computer

1..* Detine ► 0..*


Persoana Masina
◄ Este detinut de

 Asociere navigabila
Detine 0..*
Persoana Masina

45 POO - Curs 1
Exemple UML - Asociere
 Asociere calificata
Contine 0..*
Canvas FiguraId Figura

 Asociere -OR 0..*


Contract
de asigurare
Company 0..*
de asigurari
(or)

1..* 1..*
Persoana Companie

46 POO - Curs 1
Exemple UML - Asociere
Asociere de tip clasa

Casatorie

Barbat Femeie

Clasa de tip asociere


este folosita pentru a adauga informatie in plus legaturii.

47 POO - Curs 1
Exemple UML - Agregare
 Agregare simpla

Formata din
Echipa Jucator
1..*

 Agregare compozitie

TitleBar
Window

* Menu

48 POO - Curs 1
Exemple UML – Generalizare/Specializare

Persoana

Student

49 POO - Curs 1
UML Examples -Dependenta

Class A Class B

Clasa A depinde de clasa B.

O modificare a clasei B poate conduce la modificari in clasa


dependenta.

50 POO - Curs 1

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