Sunteți pe pagina 1din 82

Programare orientat pe obiecte

1. Despre curs
2. Concepte i paradigme n POO

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

Despre curs

Cine:

Andrei.Vatavu@cs.utcluj.ro prelegeri
Anca.Ciurte@cs.utcluj.ro prelegeri

- J2SE SDK: Java SDK Oracle


- Eclipse

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

Obiectivele cursului

S v ofere cunotine operaionale n dezvoltarea


software folosind orientarea pe obiecte, cu accent
pe conceptele, paradigmele i atitudinile necesare
scrierii de cod orientat pe obiecte de calitate
S v permit s v dezvoltai ndemnarea n
programare i inginerie software, s nvai s
utilizai efectiv un limbaj de programare orientat
pe obiecte relevant din punctul de vedere al
industriei software
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

Rezultatele cursului (1)

Privitoare la cunotine/nelegere

Fundamentele POO
Elementele principale n proiectarea,
programarea, testarea i documentarea
soluiilor OO
Metode de proiectare pentru programe Java de
complexitate relativ redus
Elemente de baz ale UML
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

Rezultatele cursului (2)

Abiliti intelectuale

S nelegei specificaia unei probleme i s o


rezolvai printr-un program pentru calculator n
paradigma programrii orientate pe obiecte.
S luai o specificaie parial i s luai deciziile
corespunztoare asupra funcionalitii
sistemului propus.
S dezvoltai o specificaie n UML dintr-o
descriere n limbaj natural
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

Rezultatele cursului (3)

Abiliti practice

S folosii eficient conceptele de programare OO


n Java
S dezvoltai programe de complexitate relativ
redus n Java
S depanai, testai i documentai soluii
folosind orientarea pe obiecte
S dezvoltai applet-uri i componente GUI
relativ simple
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

Subiecte abordate

Concepte i paradigme n
programarea orientat pe obiecte
Abstraciuni i tipuri de date
abstracte
Caracteristicile limbajului Java
Tipurile de date primitive i
structurile de control n Java
Clase i obiecte
Interfee Java
Excepii i tratarea lor
Principalele API-uri i clase
predefinite n Java

Reprezentarea n UML a claselor,


obiectelor i asociaiilor; diagrame
de clase i obiecte
Programarea bazat pe clase i
obiecte
Motenirea i polimorfismul
Programarea orientat pe obiecte
Scurt introducere n
programarea condus de
evenimente
Scurt introducere n
programarea applet-urilor i a
componentelor GUI

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

Evaluare. Referine
Evaluare

Evaluarea activitii de la laborator (L), evaluarea unui mini-proiect


(P).
Nota final = 0.6E + 0.4(L+P)/2

Referine

Bruce Eckel, Thinking in Java, 4th edition, Prentice Hall,


2006
David J. Barnes & Michael Klling, Objects First with Java.
A Practical Introduction using BlueJ, 5th Edition, Prentice
Hall / Pearson Education, 2012
Paul & Harvey Deitel, Java. How to Program, ed. IX,
Prentice Hall, 2012
Documentaia Java de la Oracle
Tutoriale Java de la Oracle
Tutoriale UML introductive
Documentaia BlueJ i Netbeans/Eclipse
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

Evaluare. Referine
Referinte:

www.udacity.com Introduction into Java Programming


https://docs.oracle.com/javase/tutorial/
http://www.tutorialspoint.com/java/

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

Concepte i paradigme n POO

Temele de astzi

Paradigme de programare (programarea


imperativ i programarea structurat)
Abstractizarea datelor

Tipuri de date abstracte

Paradigma POO
Concepte POO

Obiecte i clase
ncapsulare i motenire
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

10

Paradigme de programare

Paradigm (dict.): Un set de supoziii, concepte,


valori i practici care constituie o viziune a realitii
pentru comunitatea care le adopt, n special ntro disciplin intelectual.
Paradigm de programare

Un model care descrie esena i structura computaiei


Ofer (i determin) viziunea pe care o are
programatorul asupra execuiei programului
Exemple:

n POO, programatorii pot concepe programele ca fiind o


colecie de obiecte care interacioneaz
n programarea funcional un program poate fi conceput ca
fiind o secven de evaluri de funcii, fr stri
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

11

Paradigme de programare

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

12

Programarea imperativ

n modelul tradiional von Neumann, un calculator const


dintr-o unitate central de prelucrare i memorie i el
efectueaz secvene de instruciuni atomice care
acceseaz, opereaz asupra valorilor stocate locaii de
memorie adresabile individual i le modific. Aici, o
computaie este o serie de operaii aritmetice i de
efecte laterale, cum sunt atribuirile sau transferurile de
date care modific starea unitii de stocare, intrarea
sau ieirea
Ne referim la acest ca paradigm imperativ sau
procedural.
Este de subliniat importana atribuirilor i a variabilelor pe
post de containere pentru paradigma imperativ
Exemple de limbaje: Fortran, Pascal, C, Ada.
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

13

Programarea structurat

valori de intrare

Bloc
principal

Procedur

valori de intrare

Funcie
valoare/valori de ieire

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

14

Programarea structurat

Abstractizarea operaiilor

Structura unui modul


Interfaa

Date de intrare
Date de ieire
Descrierea funcionalitii

Implementarea

Date locale
Secvene de instruciuni

Sintaxa limbajului

Organizarea codului n blocuri de instruciuni


Definiii de funcii i proceduri
Extinderea limbajului cu noi operaii
Apeluri la proceduri i funcii noi
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

15

Beneficiile programrii structurate

Uureaz dezvoltarea software

Faciliteaz ntreinerea software

Evit repetarea realizrii aceluiai lucru


Munca de programare este descompus n
module independente
Proiectare Top-down: descompunerea n
subprobleme
Codul este mai uor de citit
Independena modulelor

Favorizeaz reutilizarea software


OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

16

Programarea structurat. Exemplu

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

17

Abstractizarea datelor

Abstractizarea datelor: impunerea unei separri


clare ntre proprietile abstracte ale unui tip de
dat i detaliile concrete ale implementrii lui

Proprieti abstracte: acelea care sunt vizibile codului


client care folosete tipul de dat interfaa cu tipul de
dat
Implementarea concret este pstrat in totalitate
privat i ea se poate ntr-adevr schimba, spre exemplu
pentru a incorpora mbuntiri ale performanelor n
timp.
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

18

Tipuri abstracte de date

Abstractizarea datelor + abstractizarea


operaiilor

Un tip de dat abstract:

Structur de date care stocheaz informaii pentru


a reprezenta un anumit concept
Funcionalitate: set de operaii care pot fi aplicate
tipului de dat

Sintaxa limbajului

Modulele sunt asociate tipurilor de date


Sintaxa nu este neaprat nou fa de programarea
modular
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

19

Exemplu de tip de dat abstract n C

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

20

Extensibilitatea tipului de dat abstract

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

21

Beneficiile tipurilor de date abstracte

Conceptele din domeniu sunt reflectate n cod


ncapsulare: complexitatea intern, datele i
detaliile operaiilor sunt ascunse
Utilizarea tipului de dat este independent de
implementarea sa intern
Ofer o mai mare modularitate
Sporete uurina ntreinerii i reutilizrii codului

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

22

Paradigma orientat pe obiecte

Paradigma programrii structurate a avut iniial succes


(1975-85)
Dar a nceput s eueze la produse mai mari (>
50,000 LOC)
PS avea probleme de ntreinere post-livrare (astzi
aceast ntreinere necesit, de la 70 la 80% din efortul
total)
Motivul: Metodele structurate sunt fie
orientate pe operaii (analiza fluxului de date) fie
orientate pe atribute (d.e. dezvoltarea cu metoda
Jackson)
dar nu amndou
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

23

Paradigma orientrii pe obiecte

Paradigma folosit n limbaje: o simulare a


domeniului unei probleme prin abstractizarea
informaiilor de comportament i stare din obiecte
din lumea real
Conceptele de obiecte, clase, transmitere de
mesaje i motenire sunt cunoscute ca fcnd
parte din paradigma orientrii pe obiecte.
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

24

Paradigma orientrii pe obiecte

POO consider c att atributele ct i


operaiile au importan egal
O viziune simplist a unui obiect poate fi:

Obiect = component software care incorporeaz


att atributele ct i operaiile care se pot efectua
asupra atributelor i care suport motenirea.

Exemplu:

Cont bancar

Date:
soldul contului
Aciuni: depune, retrage, determin soldul
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

25

Comparaie ntre paradigma structurat


i cea obiectual
retrage
depune

solduContului
soldulContului

depune
mesaj

retrage

mesaj

soldulContului

determinaSold

determinaSold

mesaj

Ascunderea informaiei
Proiectarea dirijat de responsabiliti
Impact asupra ntreinerii i dezvoltrii
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

26

Ascunderea informaiei

n versiunea orientat pe obiecte

Linia continu din jurul lui soldulContului arat


c n afara obiectului nu se tie cum este
implementat soldulContului

n versiunea clasic

Toate modulele au detalii privind implementarea


lui soldulContului

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

27

Punctele tari ale paradigmei OO

Ascunderea informaiei => ntreinerea


post-livrare este mai sigur

ansele apariiei erorilor regresive sunt reduse


(n software nu se repet erori cunoscute)

Dezvoltarea este mai uoar

Obiectele au n general corespondente fizice =>


Simplific modelarea (un aspect cheie al
paradigmei OO)

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

28

Punctele tari ale paradigmei OO (2)

Obiectele bine proiectate sunt uniti


independente

Tot ce se refer la obiectul real modelat este n


obiect ncapsulare

Comunicarea se face prin schimb de mesaje

Aceast independen este augmentat prin

proiectarea dirijat de responsabilitate

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

29

Punctele tari ale paradigmei OO (3)

Produs clasic: conceptual o singur unitate


(dei poate fi implementat ca un set de
module)

Paradigma OO reduce complexitatea deoarece


produsul const, n general, din uniti
independente

Paradigma OO promoveaz reutilizarea

Obiectele sunt entiti independente

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

30

Programarea orientat pe obiecte

Ofer

suport sintactic pentru tipurile de date abstracte


faciliti asociate cu ierarhiile de clase

Schimb punctul de vedere: programele


sunt apendice ale datelor
Introduc un concept nou: obiect = tip de
dat abstract cu stare (atribute) i
comportament (operaii)
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

31

Concepte OOP

Abstractizare

Ne ocupm doar de datele care prezint interes


pentru problema noastr.

Abstractizare: proces de filtrare a detaliilor


neimportante ale obiectului astfel nct s
rmn doar caracteristicile importante

Exemplu (urmeaz)

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

32

Abstractizare. Exemplu (1)


istoric genetic

istoric medical
familia

maini
vndute
talente
jurnalul
creditului

procentul
comisionului
numele

Persoana din lumea real


OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

33

Abstractizare. Exemplu (2)

maini vndute

procentul
comisionului

numele
Abstractizarea unui tip
PersoanaVinzator pentru un
Sistem de urmrire a vnzrilor
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

34

Abstractizare

istoric medical
istoric genetic

familia

Abstractizarea unui tip


Pacient dintr-o baze de
date medical
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

35

Ce sunt obiectele software?

Blocurile de construcie a sistemelor software

Program = colecie de obiecte care interacioneaz

Obiectele coopereaz pentru a finaliza o sarcin

pentru aceasta, ele comunic trimindu-si mesaje unul altuia

Obiectele modeleaz lucruri tangibile

Persoan

Biciclet

Cal

Banc etc.
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

36

Ce sunt obiectele software?

Obiectele modeleaz lucruri conceptuale

Obiectele modeleaz procese

ntlnire
dat calendaristic
aflarea drumului printr-un labirint
sortarea unui pachet de cri de joc

Obiectele au

capabiliti: ce pot face, cum se comport


proprieti: trsturi (caracteristici) care descriu
obiectele

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

37

Capabilitile obiectelor: aciuni

Obiectele au capabiliti (comportamente) care le


permit s efectueze aciuni specifice

obiectele sunt detepte ele tiu cum s fac anumite


lucruri
un obiect face ceva doar dac un alt obiect i spune s-i
foloseasc una dintre capabiliti

Capabilitile

pot fi:

constructori: stabilesc starea iniial a proprietilor

obiectului
comenzi: modific proprietile obiectului
interogri: furnizeaz rspunsuri bazate pe proprietile
obiectului
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

38

Capabilitile obiectelor: aciuni

Exemple: borcanele cu gem sunt capabile s


efectueze aciuni specifice

constructor: s fie creat


comenzi: adaug gem, golete-te
interogri: rspunde dac este nchis
sau deschis capacul, dac borcanul este
plin sau gol

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

39

Proprietile obiectului: starea

Proprietile : determin cum acioneaz un obiect

Pot fi constante (nu se schimb) sau variabile


Pot fi ele nsele obiecte pot primi mesaje
Ex. Capacul borcanului cu gem i gemul n sine sunt
obiecte

Proprietile pot fi:

atribute: lucruri care ajut la descrierea unui obiect


componente: lucruri care sunt parte a unui obiect
asocieri: lucruri despre care tie un obiect, dar care nu
sunt parte a acelui obiect
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

40

Proprietile obiectului: starea

Stare: colecie a tuturor proprietilor

obiectului; se schimb dac o proprietate se


schimb

unele nu se schimb, d.e. volanul unei maini


altele se schimb, d.e. culoarea mainii

Exemplu: proprietile borcanelor cu gem

atribute: culoare, material, miros


componente: capac, container, etichet
asocieri: un borcan cu gem poate fi asociat cu
ncperea n care se afl
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

41

Clase i instane

Concepia noastr curent: fiecare obiect corespunde direct


unui anumit obiect din realitate, d.e., un atom sau un
automobil anume
Dezavantaj: mult prea nepractic s lucrm cu obiecte n
acest fel deoarece

ele pot fi infinit de multe


nu dorim s descriem fiecare individ separat, deoarece indivizii au
multe lucruri n comun

Clasificarea obiectelor scoate n eviden ce este comun


ntre mulimi de obiecte similare

mai nti s descriem ce este comun


apoi s tampilm oricte copii
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

42

Clase ale obiectelor

Clasa unui obiect


categoria obiectului
definete capabilitile i proprietile comune
unei mulimi de obiecte individuale

toate borcanele cu gem se pot deschide, nchide i goli

definete un ablon pentru crearea de instane

de obiect

unele borcane cu gem pot fi din plastic, pot fi colorate,


de o anumit mrime etc.

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

43

Clase ale obiectelor

Clasele implementeaz capabilitile ca

metode

secvene de instruciuni n Java


obiectele coopereaz trimind mesaje altor
obiecte
fiecare mesaj invoc o metod

Clasele implementeaz proprietile ca

variabile instan

locaie de memorie alocat obiectului, care


poate pstra o valoare care se poate schimba
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

44

Instane de obiect

Instanele obiectelor sunt obiecte individuale


realizate din ablonul clasei
o clas poate reprezenta un numr nedefinit de
instane de obiect
realizarea unei instane de obiect constituie
instanierea obiectului respectiv

Prescurtare:
clas: clasa obiectului
instan: instana obiectului (a nu se confunda cu
variabilele instan)

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

45

Instane de obiect

Instane diferite ale, d.e., clasei BorcanCuGem pot


avea:

Astfel c, variabilele instan ale lor au valori


diferite

culoare i poziie diferit


diverse tipuri de gem n interior

Not: instanele de obiect conin variabile instan dou


moduri de folosire diferite, dar nrudite, a cuvntului instan

Instanele individuale au identiti individuale

aceasta permite altor obiecte s trimit mesaje unui obiect


dat
fiecare instan este unic, chiar dac are aceleai capabiliti

gndii-v la clasa studenilor de la acest curs


OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

46

Mesaje pentru comunicarea ntre


obiecte
Instanele nu sunt izolate ele trebuie s
comunice cu altele pentru a-i realiza sarcina
proprietile le permit s tie despre alte obiecte
Instanele trimit mesaje una alteia pentru a invoca
o capabilitate (adic, pentru a executa o sarcin)
metoda reprezint codul care implementeaz
mesajul
spunem apeleaz metoda n loc de invoc
capabilitatea

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

47

Mesaje pentru comunicarea ntre


obiecte

Fiecare mesaj necesit:

un emitor (expeditor): obiectul care iniiaz aciunea


un receptor: instana a crei metode este invocat
numele mesajului: numele metodei apelate
opional parametri: informaii suplimentare necesitate de
metod pentru a opera

mai multe mai trziu

Receptorul poate (dar nu este nevoit) sa trimit un


rspuns

vom trata tipurile returnate n detaliu, mai trziu


OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

48

ncapsulare

Un automobil ncapsuleaz mult informaie

chiar literal, prin complexitatea construciei sale

Dar nu este nevoie s tii cum funcioneaz o


main pentru a o conduce
Volanul i schimbarea vitezelor constituie
interfaa
motorul, transmisia, axul cardanic, roile, . . . ,
sunt implementarea (ascuns)

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

49

ncapsulare

Asemntor, nu e nevoie s tim cum funcioneaz


un obiect pentru a-i trimite mesaje
Dar, este nevoie s tim ce mesaje nelege (adic,
care i sunt capabilitile)

clasa instanei determin ce mesaje i pot fi trimise


Implementare

Interfa

Ax cardanic

Transmisie

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

50

ncapsularea

nchiderea datelor ntr-un obiect

Datele nu pot fi accesate direct din afar

Ofer securitatea datelor


API
public

Detalii de
implementare
private

Not. API (Application


Programming Interface)
= interfa pentru
programarea aplicaiilor)
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

51

Vederile unei clase


Obiectele separ interfaa de implementare
obiectul este cutie neagr; ascunde funcionarea i prile

interne
interfaa protejeaz implementarea mpotriva utilizrii
greite

Capabilitate
public
Capabilitate
public

Capabilitate
public

Capabilitate
public

Proprieti
private
Capabilitate
public

Capabilitate
public

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

52

Vederile unei clase

Interfaa: vedere public

permite instanelor s coopereze unele cu altele


fr a ti prea multe detalii
ca un contract: const dintr-o list de
capabiliti i documentaie pentru cum s fie
folosite

Implementarea: vedere privat

proprietile care ajut capabilitile s-i


ndeplineasc sarcinile
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

53

Motenirea

O clas (subclas) poate moteni atribute i


metode dintr-o alt clas (superclas)
Subclasele furnizeaz comportament
Bicicleta
specializat
Ofer reutilizarea codului
Evit duplicarea
datelor
Bicicleta de munte

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

Cursier

Biciclet tandem
54

Polimorfism

Abilitatea de a lua multe forme


Aceeai metod folosit ntr-o superclas
poate fi suprascris n subclase pentru a da o

funcionalitate diferit

D.e. Superclasa Poligon are o metod numit,


aflaSuprafata
aflaSuprafata n subclasa Triunghi a=x*y/2

aflaSuprafata in subclasa Dreptunghi a=x*y


OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

55

Abstractizare

Abstractizare: eliminarea sau


ascunderea deliberat a unor
detalii ale unui proces sau
artefact pentru a releva mai
clar alte aspecte, detalii sau
structura.

Problem

Abstractizare

Model

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

56

Java. Caracteristici

James Gosling i Patrick Naughton


(conductorii echipei care a dezvoltat
limbajul), au definit limbajul Java ca fiind

"Un limbaj simplu, orientat pe obiecte, care


"nelege" reelele de calculatoare,
interpretat, robust, sigur, neutru fa de
arhitecturi, portabil, de nalt performan,
multi-fir, dinamic".
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

57

Mediul Java

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

58

Executarea programelor Java

Java folosete un proces n doi pai


Compileaz programul n bytecodes

bytecode este apropiat de formatul instruciunilor n


limbaj main, dar nu chiar la fel este un "limbaj
main" a generic
nu corespunde nici unui procesor real

Maina virtual (VM) interpreteaz bytecode n


limbaj main nativ i-l ruleaz

exist maini virtuale diferite pentru calculatoare


diferite, deoarece bytecode nu corespunde unei maini
reale
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

59

Executarea programelor Java


Se utilizeaz acelai bytecode Java pe calculatoare
diferite fr a recompila codul surs
fiecare VM interpreteaz acelai bytecode Java
aceasta permite s se execute programe Java prin
simpla obinere a bytecodes din pagini de Web

Aceasta face codul Java s ruleze peste-platforme

marketing-ul spune, Scrie o dat, ruleaz oriunde!


adevrat pentru Java pur, nu pentru variante

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

60

Aplicaii Java

Tipuri de aplicaii Java:

Un aplicaie de-sine-sttoare sau un program


"obinuit" este o clas care are o metod numit
main

aplicaii de-sine-stttoare i applets/servlets

Cnd se lanseaz programul Java respectiv, sistemul de


execuie invoc automat metoda numit main
Toate applicaiile de-sine-stttoare ncep din metoda
main

Deja ai vzut asemenea aplicaii n exemplele


BlueJ
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

61

Applets

Un applet Java (o aplicaie avnd caracteristici


limitate, care necesit resurse de memorie limitate
i portabil ntre sistemele de operare) este un
program Java destinat a fi rulat dintr-un browser
de Web

poate fi rulat dintr-o locaie de pe Internet


poate fi rulat i din vizualizatorul de applet-uri
(appletviewer) pentru depanare
Applet-urile folosesc ntotdeauna o interfa cu ferestre

Aplicaiile de sine stttoare pot folosi fie interfaa


cu ferestre sau I/O consol (adic n modul text)
Deja ai vzut un applet n exemplele BlueJ
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

62

ncrctorul de clase

Programele Java sunt divizate n uniti mai


mici numite clase

Fiecare definiie de clas este n mod normal


ntr-un fiier separat i compilat separat

ncrctorul de clase: un program care

leag bytecod-ul claselor necesare pentru a


rula un program Java

n alte limbaje de programare, corespondentul


su este editorul de legturi (linkeditor)
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

63

Cuvinte cheie Java (cuvinte rezervate)

Cuvinte care nu pot fi folosite la altceva


dect n modul predefinit din limbaj

abstract, assert, boolean, break, byte, case,


catch, char, class, const, continue, default, do,
double, else, extends, final, finally, float, for,
goto, if, implements, import, instanceof, int,
interface, long, native, new, package, private,
protected, public, return, short, static, strictfp,
super, switch, synchronized, this, throw, throws,
transient, try, void, volatile, while
null, true, false predefinite ca literali
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

64

Compilarea unui program sau a unei


clase Java

Fiecare definiie de clas trebuie s se afle ntr-un


fiier al crui nume este numele clasei urmat de
extensia .java

Exemplu: Clasa UnProgram trebuie s se afle n fiierul


numit UnProgram.java

Fiecare clas este compilat folosind comanda


javac urmat de numele fiierului care conine
clasa

javac UnProgram.java
Rezultatul este un program n byte-code cu acelai
nume ca al clasei, urmat de extensia .class
UnProgram.class
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

65

Rularea unui program Java

Un program Java poate fi rulat (java) dup


ce i-au fost compilate toate clasele

Rulai doar clasa care conine o metod main


(sistemul va ncrca i rula celelalte clase
automat, dac mai sunt)
Metoda main ncepe cu linia:

public static void main(String[ ] args)

Comanda de lansare trebuie urmat doar de


numele clasei (fr extensii)
java UnProgram

Vedei Hello.java din exemplele BlueJ


OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

66

Convenii pentru nume

ncepei numele de variabile, metode i obiecte cu


o liter mic, indicai limitele "cuvintelor" cu o
litera mare i pentru celelalte caractere folosii
doar litere i cifre ("camelcase")
vitezaMaxima

rataDobinzii

oraSosirii

ncepei numele de clase cu majuscul i pentru


restul identificatorului aplicai regula de mai sus
UnProgram

OClasa

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

String

67

Declararea variabilelor

Fiecare variabil dintr-un program Java trebuie


declarat nainte de utilizare

Declaraia informeaz compilatorul asupra tipului de


dat care va fi stocat n variabil
Tipul variabilei este urmat de unul sau mai multe nume
separate de virgule i terminat cu punct i virgul
Variabilele se declar de obicei chiar nainte de folosire
sau la nceputul unui bloc (indicat de o acolad deschis
{)
Tipurile simple n Java sunt numite tipuri primitive
int numarulDeCai;
double oLungime, lungimeaTotala;
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

68

Modificatori de acces pentru


variabile/metode

private

variabila/metoda poate fi vzut din toate clasele, subclasele i


celelalte clase din acelai pachet (package).

"Vizibil n familie".

public

"Vizibil doar mie".

protected

variabila/metoda este vizibil local n cadrul clasei.

variabila/metoda poate fi vzut din toate clasele

"Vizibil tuturor".

Modificatorul de acces implicit, nu are cuvnt cheie.

public pentru ceilali membrii din acelai pachet.


private pentru oricine din afara pachetului
numit i acces n pachet.

"Vizibil n vecintate"

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

69

Tipuri Java

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

70

Tipuri primitive
Tip primitiv

Bii

Toate tipurile numerice sunt cu semn.


OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

71

Compatibilitate la asignare

Mai general, o valoare de orice tip din lista urmtoare


poate fi asignat unei variabile de orice alt tip care apare la
dreapta ei
byteshortintlongfloatdouble
char

Gama valorilor de la dreapta este mai larg

Este necesar o conversie de tip explicit (type cast )


pentru a asigna o valoare de un tip la o variabil care apare
la stnga ei n lista de mai sus (d.e., double la int)
Observai c n Java un int nu poate fi asignat la o
variabil de tip boolean, nici un boolean la o variabil de
tip int
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

72

Operatori aritmetici i expresii

Ca n majoritatea limbajelor, i n Java se


pot forma expresii folosind variabile,
constante i operatori aritmetici

Operatori aritmetici; + (adunare), - (scdere), *


(nmulire), / (mprire), % (modulo, rest)
Se poate folosi o expresie oriunde este legal s
se foloseasc o valoare de tipul produs de
expresie

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

73

Operatori aritmetici i expresii

Dac se combin un operator aritmetic cu operanzi


de tipul int, atunci tipul rezultat este int
Dac se combin un operator aritmetic cu unul sau
doi operanzi de tipul double, atunci tipul rezultat
este double
La combinarea de operanzi de tip diferit, tipul
rezultat este cel mai din dreapta din lista de mai
jos care se afl n expresie
byteshortintlongfloatdouble
char
Excepie: Dac tipul rezultat este byte sau short
(potrivit regulii date), atunci tipul produs va fi de fapt un
int
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

74

Reguli de preceden i asociativitate

La determinarea ordinii operaiilor


adiacente, operaia cu preceden mai mare
(i argumentele sale aparente) este grupat
naintea operaiei de preceden mai mic
base + rate * hours se evalueaz ca
base + (rate * hours)

La preceden egal, ordinea operaiilor este


determinat de regulile de asociativitate
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

75

Reguli de preceden i asociativitate

Operatorii unari de precedena egal sunt grupai de la


dreapta la stnga
+-+rate se evalueaz ca +(-(+rate))

Operatorii binari de preceden egal sunt grupai de la


stnga la dreapta
base + rate + hours se evalueaz ca
(base + rate) + hours

Excepie: Un ir de operatori de asignare este grupat de


la dreapta la stnga
n1 = n2 = n3; se evalueaz ca n1 = (n2 = n3);

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

76

Posibil problem: Erorile de rotunjire


la numerele n virgul mobil

Numerele n virgul mobil sunt, n general, doar


valori aproximative

Matematic, numrul n virgul mobil1.0/3.0 este egal


cu 0.3333333 . . .
Un calculator are o cantitate limitat de memorie

Poate stoca 1.0/3.0 ca ceva n genul lui 0.3333333333, puin


mai puin dect o treime

De fapt numerele sunt stocate binar, dar consecinele


sunt aceleai: numerele n virgul mobil pot pierde
precizie

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

77

mprirea ntreag i cea n virgul


mobil

Dac unul sau amndoi operanzii sunt n virgul


mobil, mprirea d un rezultat n virgul mobil
15.0/2 se evalueaz la 7.5

Cum ambii operanzi ntregi, mprirea d


un ntreg

O eventual parte fracionar este ignorat


Nu se fac rotunjiri
15/2 se evalueaz la 7

Avei grij ca cel puin un operand s fie n virgul


mobil dac este nevoie de partea fracionar
OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

78

Conversia de tip explicit

O conversie de tip explicit (type cast) ia o valoare


de un tip i produce o valoare "echivalent" de
cellalt tip

Dac n i m sunt ntregii de mprit i e nevoie de


partea fracionar, atunci cel puin un operand trebuie
s fie n virgul mobil nainte de efectuarea operaiei
double ans = n / (double)m;
La fel ca n C, tipul dorit este pus ntre paranteze
imediat naintea variabilei de convertit
Tipul i valoarea variabilei de convertit nu se schimb

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

79

Conversia de tip explicit

La conversia explicit de la virgul mobil la ntreg,


numrul este trunchiat, nu rotunjit

(int)2.9 se evalueaz la 2, nu 3

La asignarea valorii unui ntreg la o variabil n virgul


mobil, Java realizeaz o conversie explicit de tip
automat numit coerciie de tip
double d = 5;

Nu este legal s se atribuie un double la un int fr o


conversie explicit
int i = 5.5; // Ilegal
int i = (int)5.5 // Corect

OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

80

Operatorii increment i decrement

Cnd oricare dintre operatorii ++ sau precede


o variabil i este o parte a expresiei, expresia este
evaluat folosind valoarea modificat a variabilei

Dac n este 2, atunci 2*(++n) se evalueaz la 6

Cnd oricare dintre operatori urmeaz unei


variabile i este parte a expresiei, expresia este
evaluat folosind valoarea original i abia apoi se
schimb valoarea variabilei

Dac n este 2, atunci 2*(n++) se evalueaz la 4


OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

81

Concepte prezentate

Paradigme n programare

structurat
orientat pe obiecte

Abstractizare

tip de dat abstract

Obiect

constructor
comenzi
interogri

proprieti: stare

capabiliti(comportamente):
aciuni

Comunicarea ntre obiecte:


mesaje
ncapsulare
Clas

atribute
componente
asocieri

Motenire

ablon pentru crearea obiectelor


capabilitile obiectelor:
implementate ca metode
proprietile obiectelor: variabile
instan
interfa vedere public
implementare vedere privat
superclas, subclas

Polimorfism

instan a unei clase


OOP1 - T.U. Cluj - A. Vatavu, M. Joldos

82

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