Documente Academic
Documente Profesional
Documente Cultură
Virginia Niculescu
vniculescu@cs.ubbcluj.ro
www.cs.ubbcluj.ro/~vniculescu
1 POO - Curs 1
Structura cursului
Proiectare orientata-obiect
2 POO - Curs 1
Continut
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
5 POO - Curs 1
Programare orientata obiect
- generalitati-
6 POO - Curs 1
Paradigma POO (1)
Necesitatea:
Spatiul problemei ↔ Spatiul solutiei
Modelul problemei ↔ Modelul solutiei
7 POO - Curs 1
Paradigma POO(2)
Concepte:
Caracteristici:
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
Lizibilitate
Usor de inteles -> de depanat, intretinut
Reutilizabilitate
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
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.
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!
15 POO - Curs 1
Cum se executa un program Java?
bytecode
compilare
MyClass.java MyClass.class
executat pe
16 POO - Curs 1
17 POO - Curs 1
Portabilitate si independenta de arhitectura
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.
19 POO - Curs 1
Simplitate
20 POO - Curs 1
Robustete
corect/’bine’
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.
22 POO - Curs 1
Securitate
Securitatea este foarte importantă pentru aplicaţiile distribuite!
23 POO - Curs 1
High-Performance and Multithreaded
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.
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.
25 POO - Curs 1
JAVA
Elemente de limbaj de baza
26 POO - Curs 1
Comentarii
Constante
Tipuri: valoare & referinte
Transmitere parametrii
27 POO - Curs 1
Comentarii
javadoc
>javadoc Myclass.java
28 POO - Curs 1
Definirea Constantelor
Orice variabila declarata final in Java reprezinta o constanta
initializarea trebuie facuta la declarare
//java
public final class Math { ...
public static final double PI = 3.14159.....;
...
}
Conventia C de folosire a literelor MARI valabila.
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.
}
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>]
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; }
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)
40 POO - Curs 1
UML(2)
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
Asociere navigabila
Detine 0..*
Persoana Masina
45 POO - Curs 1
Exemple UML - Asociere
Asociere calificata
Contine 0..*
Canvas FiguraId Figura
1..* 1..*
Persoana Companie
46 POO - Curs 1
Exemple UML - Asociere
Asociere de tip clasa
Casatorie
Barbat Femeie
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
50 POO - Curs 1