Sunteți pe pagina 1din 15

OOP-Recap - M. Joldo - T.U.

Cluj 1
Programare orientat pe obiecte
1. Recapitulare
2. Informaii despre examen
OOP-Recap - M. Joldo - T.U. Cluj 2
Ce este o clas?
O clas este n primul rnd o descriere a
obiectelor (instanelor), clasei respective
Clasa conine unul sau mai muli constructori
pentru a crea obiecte
O clas este un tip
Un tip definete un set de valori posibile i operaiile
peste acele valori
Tipul unui obiect este clasa din care a fost creat
OOP-Recap - M. Joldo - T.U. Cluj 3
Ce este o clas?
Dar o clas poate conine informaii despre sine
Orice este declarat static aparine clasei n sine
Variabilele statice conin informaii despre clas, nu
despre instanele sale
Metodele statice sunt executate de ctre clas, nu de
instanele clasei
Orice care nu este declarat static nu este parte a clasei
i nu poate fi folosit direct de ctre clas
Cu toate acestea, o metod static poate crea (sau ei i se pot
transmite) obiecte i poate trimite mesaje obiectelor
OOP-Recap - M. Joldo - T.U. Cluj 4
Clase
class MyClass extends ThatClass implements
SomeInterface, SomeOtherInterface {...}
La o clas de nivel sus se poate avea acces public sau
n pachet (implicit)
O clas poate fi final, aceasta nsemnnd c nu poate fi
subclasat
O clas subclaseaz exact o singur alt clas (implicit:
clasa Object)
O clas poate implementa oricte interfee
OOP-Recap - M. Joldo - T.U. Cluj 5
Clase
abstract class MyClass extends ThatClass
implements SomeInterface, SomeOtherInterface
{...}
Aceleai reguli ca mai nainte, cu excepia faptului c o
clas abstract nu poate fi final
O clas trebuie declarat abstract dac:
Conine metode abstracte
Implementeaz o interfa, dar nu definete toate metodele din
interfaa respectiv
Orice clas poate fi declarat abstract
O clas abstract poate avea (i are) constructori
Nu se poate instania o clas abstract
OOP-Recap - M. Joldo - T.U. Cluj 6
De ce motenire?
Java furnizeaz o bibliotec imens de clase ante-
scrise
Cteodat aceste clas sunt exact ceea ce este necesar
Alteori sunt aproape ce e nevoie
Este uor s se subclaseze o clas i s se suprascrie
metodele al cror comportament dorim s fie diferit
Motenirea este o modalitate de a furniza un
comportament similar diferitelor feluri de obiecte,
fr a duplica codul
OOP-Recap - M. Joldo - T.U. Cluj 7
De ce motenire?
O clas ar trebui extins (i s se moteneasc din
ea) numai dac:
Noua clas este cu adevrat un fel mai specific de
superclas i
Dorim ca noua clas s aib majoritatea sau ntreaga
funcionalitate a clasei pe care o extinde i
E nevoie s adugm sau s modificm capabilitile
superclasei
NU ar trebui extins o clas doar pentru a folosi
doar unele dintre caracteristicile sale
n acest caz compoziia este o soluie mai bun
OOP-Recap - M. Joldo - T.U. Cluj 8
La ce folosesc clasele abstracte?
Clasele abstracte sunt potrivite atunci cnd n mod
rezonabil se poate implementa o parte, dar nu tot,
din comportamentul subclaselor
Exemplu: Avem un joc cu o tabl pe care se pot
mica diferite feluri de animale
Toate animalele pot move(), eat(), drink(), hide() etc.
Cum aceste sunt identice sau asemntoare are sens s
avem o metod implicit move(), o metod implicit
drink() etc.
OOP-Recap - M. Joldo - T.U. Cluj 9
La ce folosesc clasele abstracte?
Exemplu (continuare)
Dac avem o metod draw() implicit, ce ar
trebui ea s deseneze?
Cum probabil nu dorim s avem un obiect
Animal, ci doar anumite animale (Dog, Cat,
Mouse etc.), nu e nevoie s putem instania
clasa Animal
Facem Animal abstract i cu o metod abstract
void draw()
OOP-Recap - M. Joldo - T.U. Cluj 10
Interfee
interface MyInterface extends SomeOtherInterface {...}
O interfa poate avea acces public sau n pachet
O interfaa nu poate fi declarat final
O clas poate implementa oricte interfee
O interfa poate declara (nu poate defini ) metode
Toate metodele declarate sunt implicit public i abstract
O interfa poate defini cmpuri, clase i interfee
Cmpurile sunt implicit static, final i public
Clasele sunt implicit static i public
O interfa nu poate declara constructori
Este OK (dar nu e necesar) s se specifice explicit
atributele implicite
OOP-Recap - M. Joldo - T.U. Cluj 11
Declaraii i atribuiri
Presupunem c class Cat extends Animal implements Pet {...} i
c class Persian extends Cat {...} i c Cat puff = new Cat();
Atunci ceea ce urmeaz este adevrat:
puff instanceof Cat, puff instanceof Animal, puff instanceof Pet
Urmtoarea nu este adevrat: puff instanceof Persian
Pentru a forma un test negativ, scriem !(puff instanceof Persian)
Urmtoarele declaraii i atribuiri sunt legale:
Animal thatAnimal = puff;
Animal thatAnimal = (Animal)puff; // ca mai sus, dar cu
specificare de tip explicita
Pet myPet = puff; // o variabila poate fi de un tip interfa
Persian myFancyCat = (Persian)puff; // face verificarea la
execuie
Urmtoarea este i ea legal:
void feed(Pet p, Food f) {...} // tip interfa ca parametru
OOP-Recap - M. Joldo - T.U. Cluj 12
La ce folosesc interfeele?
Motenirea ne permite s garantm c obiectele
subclasei au aceleai metode ca obiectele
superclasei sale
Interfeele ne permit s garantm c obiecte
nenrudite au aceleai metode
Problem: o GUI are o zon n care are nevoie s
deseneze un anumit obiect, dar nu tim nc ce fel de
obiect va fi acela
OOP-Recap - M. Joldo - T.U. Cluj 13
La ce folosesc interfeele?
Soluie:
Definim o interfa Drawable, carea s aib o metod draw()
Facem ca tabelele, grafurile, desenele etc. s implementeze
Drawable
n GUI, apelm metoda draw() a obiectului (lucru legal pentru
orice obiect Drawable)
Dac nu am fi avut interfee, iat ce ar fi trebuit s
facem:
if (obj instanceof Table) ((Table)obj).draw();
else if (obj instanceof Graph) ((Graph)obj).draw();
else if (obj instanceof LineDrawing) ((LineDrawing)obj).draw();
// etc.
Mai ru, pentru a aduga un nou tip de obiect ar trebui s
schimbm o mulime de cod
OOP-Recap - M. Joldo - T.U. Cluj 14
Clase interne
Clasele interne sunt clase declarate nuntrul altor
clase
O clas membru este definit imediat n interiorul
altei clase
O clas membru poate fi static
O clas membru poate fi abstract sau final (dar nu
amndou)
O clas membru poate fi public, protected, n pachet,
sau private
OOP-Recap - M. Joldo - T.U. Cluj 15
Clase interne
O clas local se declar ntr-un constructor,
o metod, sau ntr-un bloc de iniializare
O clas local poate fi abstract sau final (dar nu
amndou)
O clas local poate accesa doar variabilele final
din clasa care o conine
O clas anonim este un caz particular de clas
local
OOP-Recap - M. Joldo - T.U. Cluj 16
Clase interne
O clas intern anonim este un fel de clas local
O clas intern anonim are una dintre urmtoarele
forme:
new NumeleSuperClasei(parametri) { corpul clasei }
new NumeleInterfetei () {corpul clasei}
Clasele interne anonime nu pot avea constructori
explicii
O clas membru static este coninut ntr-o alt clas,
dar nu este de fapt o clas intern
O clas membru static nu are acces special la numele
din clasa care o conine
Pentru a referi o clas intern static, folosim sintaxa
NumeleClaseiExterioare.NumeleClaseiInterne
O clas membru static poate conine cmpuri i
metode statice
OOP-Recap - M. Joldo - T.U. Cluj 17
La ce folosesc clasele interne?
Uneori o clas este necesar unei singure alte
clase
Exemplu: o clas pentru tratarea unui eveniment, cum
este apsarea unui buton, este probabil necesar doar
n clasa GUI
A avea disponibil o asemenea clas la nivelul de sus,
unde nu este nevoie de ea, doar adaug confuzie
E cel mai bine s ascundem asemenea clase de altele
pe care nu le intereseaz
OOP-Recap - M. Joldo - T.U. Cluj 18
La ce folosesc clasele interne?
Uneori o clas are nevoie de acces la multe dintre
variabilele i metodele altei clase
Iari, tratarea evenimentelor constituie un bun
exemplu
Fcnd tratarea o clas intern i oferim accesul complet
Uneori o clas este necesar o singur dat,
pentru un obiect, ntr-un loc anume
Majoritatea handler-elor de evenimente sunt astfel
O clas intern anonim este foarte convenabil n acest
scop
OOP-Recap - M. Joldo - T.U. Cluj 19
Enumerri
O enumerare, sau enum, este pur i simplu un
set de constante pentru reprezentarea diferitelor
valori
Iat modalitatea veche pentru aceasta
public final int SPRING = 0;
public final int SUMMER = 1;
public final int FALL = 2;
public final int WINTER = 3;
Acest mod este neconvenabil i susceptibil la erori
Iat cum se face:
enum Season { WINTER, SPRING, SUMMER, FALL }
OOP-Recap - M. Joldo - T.U. Cluj 20
enums sunt clase
O enum este de fapt un tip nou de clas
Ea se poate declara ca fiind clas intern sau
exterioar
Putem declara variabile de tip enum i s
obinem sigurana tipurilor i verificarea la
compilare
Fiecare valoare declarat este o instan a clasei
enum
Enums sunt implicit public, static i final
enums pot fi comparate fie cu equals fie cu ==
OOP-Recap - M. Joldo - T.U. Cluj 21
enums sunt clase
enums extind java.lang.Enum i implementeaz
java.lang.Comparable
De aceea, enums pot fi sortate
Enums suprascriu toString() i furnizeaz
valueOf()
Exemplu:
Season season = Season.WINTER;
System.out.println(season ); // tipareste WINTER
season = Season.valueOf("SPRING"); // seteaza
variabila season la valoarea Season.SPRING
OOP-Recap - M. Joldo - T.U. Cluj 22
Enums sunt cu adevrat clase
public enum Coin {
// enums pot avea variabile instan
private final int value;
// O enum poate avea constructor,
//dar acesta nu este public
Coin(int value) { this.value = value; }
// Fiecare valoare din enum apeleaz de fapt un
// constructor
PENNY(1), NICKEL(5), DIME(10), QUARTER(25);
// si, desigur, clasele au metode
public int value() { return value; }
}
OOP-Recap - M. Joldo - T.U. Cluj 23
Alte caracteristici ale enums
values() returnez un tablou de valori enum
Season[] seasonValues = Season.values();
Instruciunile switch pot lucra cu enums
switch (thisSeason) { case SUMMER: ...; default: ...}
Trebuie scris case SUMMER:, nu case Season.SUMMER:
Este o idee bun s includem un caz implicit (default)
E posibil s definim corpuri de clas dependente
de valoare, astfel c fiecare valoare are propriile
metode
Sintaxa este destul de ciudat, aa c nu o tratm
OOP-Recap - M. Joldo - T.U. Cluj 24
Clase generice
public class Box<T> {
private List<T> contents;
public Box() {
contents = new ArrayList<T>();
}
public void add(T thing) { contents.add(thing); }
public T grab() {
if (contents.size() > 0) return contents.remove(0);
else return null;
}
Recomandarea celor de la Sun este s se foloseasc o
singur liter mare (cum este T) pentru tipuri
Muli ignor aceast recomandare
OOP-Recap - M. Joldo - T.U. Cluj 25
Accesul
Exist patru tipuri de acces:
public nseamn accesibil de oriunde
Un cmp fcut public poate fi schimbat de oriunde,
fr nici o protecie
Metodele ar trebui s fie public numai dac este de
dorit s poat fi apelate din afara clasei
protected nseamn accesibil din toate clasele
din acelai director i accesibil din toate
subclasele de oriunde
OOP-Recap - M. Joldo - T.U. Cluj 26
Accesul
n pachet (implicit; fr cuvnt cheie) nseamn accesibil
din toate clasele din acest acelai director
private nseamn accesibil doar din aceast clas
Not: un cmp fcut private nu este ascuns fa de obiectele de
aceeai clas!
n general, cel mai bine este s facem toate variabilele ct
mai private cu putin i s facem metodele destul de
publice pentru a fi folosite unde este nevoie
OOP-Recap - M. Joldo - T.U. Cluj 27
Folosirea corespunztoare a cmpurilor
Un obiect poate avea cmpuri i metode
La crearea unui obiect,
Acesta este creat cu toate cmpurile ne-static definite n
clas
O dat creat, el poate executa toate metodele de instan
definite de clasa sa
nuntrul unei metode de instan, cuvntul cheie this se
refer la obiectul care execut metoda
Cmpurile unui obiect trebuie s descrie starea
obiectului
Toate cmpurile trebuie s spun ceva semnificativ despre
obiect
Variabilele care nu descriu obiectul trebuie s fie variabile
locale; ele pot fi transmise ca parametri unei alte metode
OOP-Recap - M. Joldo - T.U. Cluj 28
Folosirea corespunztoare a cmpurilor
Cmpurile unui obiect ar trebui s fie imposibil
de modificat din exterior
Aceasta localizeaz erorile ntr-un obiect fa de
greelile de programare din clasa sa
De aceea, cmpurile trebuie s fie ct mai private cu
putin
Toate cmpurile public trebuie documentate cu
Javadoc
Se pot folosi metode "getter" i "setter" pentru a
verifica validitatea oricror schimbri
Dac o clas este menit a fi subclasat, cmpurile la
care subclasa necesit acces sunt n mod tipic
marcate protected
OOP-Recap - M. Joldo - T.U. Cluj 29
Compoziia i motenirea
Compoziia are loc atunci cnd un obiect dintr-o clas folosete
un obiect dintr-o alt clas
class MyClass {
String s; ... }
MyClass are controlul complet asupra metodelor sale
Motenirea are loc atunci cnd o clas extinde o alt clas
class MyClass extends Superclass { ... }
MyClass primete toate variabilele statice, variabilele instan,
metodele statice i metodele de instan ale Superclass, fie c
dorete fie c nu
Constructorii nu se motenesc
Motenirea trebuie folosit doar atunci cnd putem spune cinstit
c un obiect MyClass este un obiect Superclass
Bine: class Secretar extends Angajat
Ru: class Secretar extends SystemContabil
OOP-Recap - M. Joldo - T.U. Cluj 30
Constructori
Constructorul este singura modalitate pentru a
crea instane ale unei clase
Iat ce face un constructor:
Mai nti, apeleaz constructorul superclasei sale:
public MyClass() { super(); ... } // apel implicit
(invisible)
Observai c apeleaz constructorul fr argumente
Dar putem apela un constructor al superclasei diferit:
public MyClass(int size) { super(size); ... } // apel explicit
Sau putem apela un constructor diferit al acestei clase:
public MyClass() { this(0); ... } // apel explicit
OOP-Recap - M. Joldo - T.U. Cluj 31
Constructori
Apoi, acesta adaug cmpurile instan
declarate n aceast clas (i eventual le
iniializeaz)
class MyClass { int x; double y = 3.5; ... } // n
clas, nu n constructor
Apoi, execut codul din constructor:
public MyClass() { super(); next = 0; doThis();
doThat(); ... }
n sfrit, returneaz obiectul rezultat
Putem scrie return; dar nu putem spune ce s se
returneze
OOP-Recap - M. Joldo - T.U. Cluj 32
nlnuirea constructorilor
Fiecare clas are ntotdeauna un constructor
Dac nu-l scriem, Java furnizeaz un constructor
implicit fr argumente
Dac scriem un constructor, Java nu mai furnizeaz un
constructor implicit
Primul lucru pe care l face orice constructor (cu
excepia constructorului pentru Object) este s
apeleze constructorul pentru superclasa sa
Aceasta creeaz un lan de apeluri de constructori n
sus pe ierarhie pn la Object
Constructorul implicit apeleaz constructorul implicit al
superclasei sale
OOP-Recap - M. Joldo - T.U. Cluj 33
nlnuirea constructorilor
De aceea, dac scriem o clas cu constructor
explicit cu argumente i apoi scriem subclase ale
clasei respective,
Fiecare constructor de subclas, n mod implicit, va
apela constructorul fr argumente al superclasei (care
poate s nu mai existe)
Soluii: Fie
Furnizm un constructor fr argumente n superclas,
fie
Apelm explicit un anumit constructor al superclasei
folosind super(args)
OOP-Recap - M. Joldo - T.U. Cluj 34
Folosirea corespunztoare a
constructorilor
Un constructor ar trebui ntotdeauna s creeze
obiectele ntr-o stare valid
Constructorii nu trebuie s fac nimic altceva dect s
creeze obiecte
Dac un constructor nu poate garanta c obiectul
construit este valid, atunci ar trebui s fie private i
accesat prin intermediul unei metode de fabricare
Not: n general, termenul de metod de fabricare este
folosit pentru a se referi la orice metod al crei scop
principal este crearea de obiecte
OOP-Recap - M. Joldo - T.U. Cluj 35
Folosirea corespunztoare a
constructorilor
O metod de fabricare (factory method) este o metod
static care apeleaz un constructor
Constructorul este de obicei private
Metoda de fabricare poate determina dac s invoce sau nu
constructorul
Metoda de fabricare poate arunca o excepie, sau poate face
altceva potrivit n cazul n care i se dau argumente ilegale sau
nu poate crea un obiect valid
public Person create(int age) { //exemplu: metod de fabricare
if (age < 0) throw new IllegalArgumentException("Too
young!");
else return new Person(n);
}
OOP-Recap - M. Joldo - T.U. Cluj 36
Referinele
La declararea unei variabile de un tip primitiv,
acesteia i se i aloc spaiu pentru a pstra
valoarea
int x; double y; boolean b;
Dac este declarat ca fiind cmp al unei clase, atunci
valoarea ei este iniial zero (false)
Dac este declarat ca variabil local, poate avea o
valoare rezidual
La asignarea acestei valori la alt variabil, se copiaz
valoarea
OOP-Recap - M. Joldo - T.U. Cluj 37
Referinele
La declararea unui obiect, acestuia i se aloc
spaiu pentru pstrarea unei referine la un obiect
String s; int[ ] counts; Person p;
Dac este declarat ca fiind cmp, valoarea sa este
iniial null
Dac este declarat ca variabil local, ea poate avea o
valoare rezidual (ce s-a nimerit s fie acolo)
La asignarea acestei valori unei alte variabile i se
copiaz valoarea
...dar, n acest caz, valoarea este doar o referin la un obiect
Definim variabila asignndu-i un obiect real (creat cu
new)
OOP-Recap - M. Joldo - T.U. Cluj 38
Metodele
O metod poate:
fi public, protected, n pachet, sau private
fi static sau de instan
metodele static nu se pot referi la obiectul care le execut
(this), deoarece ele sunt executate de clasa nsi, nu de ctre
obiect
fi final sau nefinale
returna o valoare sau s fie void
arunca excepii
Semntura unei metode const din numele i
numrul i tipurile (n ordine) parametrilor si
formali
OOP-Recap - M. Joldo - T.U. Cluj 39
Metodele
Suprancrcm o metod scriind o alt metod cu
acelai nume, dar cu semntur diferit
Suprascriem o metod motenit prin scrierea unei
alte metode cu aceeai semntur
La suprascrierea unei metode:
Nu o putem face mai puin public (public > protected >
package > private)
Nu putem arunca excepii suplimentare (dar putem arunca mai
puine)
Tipurile returnate trebuie s fie compatibile
OOP-Recap - M. Joldo - T.U. Cluj 40
Metodele
O metod declara parametri formali i este
apelat cu parametri actuali
void feed(int amount) { hunger -= amount; } // amount
este formal
myPet.feed(5); // 5 este actual
Dar nu apelm o metod, ci trimitem un mesaj
unui obiect
S-ar putea s nu tim ce fel de obiect este myPet
D.e. un cine poate mnca diferit de un papagal
OOP-Recap - M. Joldo - T.U. Cluj 41
Metodele
La trimiterea unui mesaj, valorile parametrilor
actuali nlocuiesc parametrii formali
Dac parametrii sunt tipuri de obiecte, valorile lor sunt
referine
Metoda poate accesa obiectul real i, eventual, l poate
modifica
La revenirea dintr-o metod, parametrii formali nu
sunt recopiai
Totui, modificrile fcute asupra obiectelor referite vor
persista
OOP-Recap - M. Joldo - T.U. Cluj 42
Metodele
Parametrii sunt transmii prin atribuire i, de aici:
Dac un parametru formal este double, putem apela cu
un int
...cu excepia cazului n care metoda este suprancrcat de o
alta care are un parametru intr
Dac un parametru formal este un tip clas, putem face
apelul cu un tip subclas a clasei respective
n cadrul unei metode de instan , cuvntul cheie
this acioneaz ca parametru suplimentar
(specific obiectul care execut metoda)
OOP-Recap - M. Joldo - T.U. Cluj 43
Metodele
Variabilele locale nu sunt neaprat
iniializate la zero (sau false sau null)
Compilatorul ncearc s v fereasc de
folosirea variabilelor neiniializate
Variabilele locale, inclusiv parametrii, sunt
eliminate la revenirea dintr-o metod
Oricare metod, indiferent de tipul su de
retur, poate fi folosit ca instruciune
OOP-Recap - M. Joldo - T.U. Cluj 44
Metode generice
Metod care ia o List de Strings:
private void printListOfStrings(List<String> list) {
for (Iterator<String> i = list.iterator(); i.hasNext(); ) {
System.out.println(i.next());
}
}
Acelai lucru, dar cu caractere de nume global
(wildcard):
private void printListOfStrings(List<?> list) {
for (Iterator<?> i = list.iterator(); i.hasNext(); ) {
System.out.println(i.next());
}
}
OOP-Recap - M. Joldo - T.U. Cluj 45
Folosirea corespunztoare a metodelor
Metodele menite a fi folosite de alte feluri de obiecte
trebuie s fie public
Toate metodele public trebuie documentate folosind Javadoc
Metodele public care pot eua sau afecta obiectul dac sunt
invocate incorect, trebuie s arunce o excepie corespunztoare
Exception
Metodele destinate folosirii interne trebuie fcute private
Metodele private pot folosi instruciuni assert n loc s arunce
Exceptions
Metodele pentru uzul intern a unei clase sau al subclaselor
sale, trebuie s fie protected
Metodele care nu folosesc nici o variabil instan sau
metode de instan trebuie s fie static
De ce s ceri un obiect cnd nu ai nevoie de el?
OOP-Recap - M. Joldo - T.U. Cluj 46
Folosirea corespunztoare a metodelor
Ideal, o metod ar trebui s fac un singur lucru
Trebuie s descriem ce face ntr-o propoziie simpl
Numele metodei trebuie s sugereze intenia fundamental
Trebuie s fie verb
Propoziia ar trebui s menioneze fiecare surs de intrare
(parametri, cmpuri etc.) i fiecare rezultat
Nu exist noiunea de metod prea mic
Metodele nu ar trebui de obicei s efectueze I/E
Cu excepia, desigur, a cazului n care acesta este scopul principal
al metodei
Excepie: instruciuni print temporare pentru depanare
Metodele ar trebui s fac verificri de validitate asupra
intrrilor lor
Metodele disponibile public ar trebui s arunce excepii pentru
intrrile invalide
OOP-Recap - M. Joldo - T.U. Cluj 47
Folosirea corespunztoare a
polimorfismului
Metode cu acelai nume ar trebui s fac acelai
lucru
Suprancrcarea ar trebui folosit doar atunci cnd
metodele suprancrcate fac acelai lucru (cu parametri
diferii)
Clasele care implementeaz o interfa ar trebui s
implementeze metodele corespunztoare s fac acelai
lucru
Suprascrierea ar trebui fcut pentru a schimba detaliile
a ceea ce face o metod, fr a schimba ideea de baz
OOP-Recap - M. Joldo - T.U. Cluj 48
Folosirea corespunztoare a
polimorfismului
Metodele trebuie s nu duplice codul din
alte metode
O metod suprancrcat are acelai nume, dar
ali parametri
O metod dintr-o subclas poate apela o
metod suprascris m(args) din superclas
folosind sintaxa super.m(args)
Tipic, acest apel ar fi fcut din metoda care
suprascrie o alta, pentru a efectua ceea ce se fcea
de obicei, apoi metoda care suprascrie, ar face restul
OOP-Recap - M. Joldo - T.U. Cluj 49
Proiectarea programelor
Un proiect de program bun i dovedete valoarea
atunci cnd se pune problema scrierii codului
Proiectarea bun a programelor este mai degrab
o art dect o tiin
n general, dorim:
Cel mai simplu proiect care ar putea funciona
Clase care sunt de sine stttoare i au sens luate izolat
Metode denumite corespunztor care fac un singur lucru
i l fac bine
Clase i metode care pot fi testate (cu JUnit)
OOP-Recap - M. Joldo - T.U. Cluj 50
Ce se ntmpl la aruncarea unei
excepii
Se creeaz un obiect excepie (pe heap)
Contextul curent este stopat/abortat
Execuia ncepe ntr-o zon de cod pentru tratarea
excepiilor
Poate fi n metoda curent
Poate fi extern metodei curente
Codul de tratare a excepiilor are acces la obiectul
excepie, care poate fi folosit la
Accesarea mesajului String coninut n excepie
Determinarea tipului de excepie aruncat
Tiprirea unei trase de stiv (stack trace)
Altele (re-aruncarea excepiei, incrementarea unui
contor etc.)
OOP-Recap - M. Joldo - T.U. Cluj 51
Vectori
Vector este o clas care furnizeaz o colecie dinamic,
asemntoare unei liste nlnuite, unei cozi etc.
Trebuie instaniat via new pentru a obine o instan de
Vector.
Elementele vectorului sunt accesate prin intermediul
diferitelor metode utilitare
size( ) returneaz numrul curent de elemente.
elementAt(int index) returneaz o referin la
elementul de la indexul specificat.
insertElementAt( Object obj, int index )
ca inserarea ntr-o list nlnuit
(dar mai lent); nu poate la sfrit.
addElement (Object obj) adaug la sfrit.
Metode folosite
uzual
OOP-Recap - M. Joldo - T.U. Cluj 52
Interfaa utilizator grafic
Componente, Containere, Aranjri (Layouts)
Component
un obiect cu reprezentare grafic care poate fi afiat pe ecran i
care poate interaciona cu utilizatorul.
d.e. Canvas, JButton, JLabel, JRadioButton, JTextField, JSlider,
Container
public class Container extends Component
Un obiect container generic Abstract Window Toolkit(AWT) este o
component care poate conine alte componente AWT.
Componentele adugate unui container sunt pstrate ntr-o list.
d.e. JFrame, JPanel
OOP-Recap - M. Joldo - T.U. Cluj 53
Gestionar de aranjare (LayoutManager)
public interface LayoutManager
Definete interfaa pentru clase care tiu cum s
aranjeze Containers.
d.e. BorderLayout, FlowLayout, GridLayout
OOP-Recap - M. Joldo - T.U. Cluj 54
Tabloul de ansamblu
Container(JFrame)
Container(JPanel)
Container(JPanel)
Container(JPanel)
Gestionar de
aranjare
Componente
Componente
Componente
OOP-Recap - M. Joldo - T.U. Cluj 55
Evenimente GUI
Ce este programarea bazat pe evenimente?
Evenimente i asculttori de eveniment
Cum se scrie un asculttor de eveniment?
Cum se nregistreaz un asculttor de
eveniment?
OOP-Recap - M. Joldo - T.U. Cluj 56
Applet-uri i fire de lucru
Applet-uri fa de aplicaii de sine stttoare
Metode dintr-un applet
Limitrile applet-utilor
Fire de lucru
creare, start, stop/pauz
Animarea applet-urilor folosind fire de lucru
OOP-Recap - M. Joldo - T.U. Cluj 57
I/E cu fiiere
Bazate pe fluxuri (Streams)
Caracter (cunoscut i ca text)
Readers (Intrare) [adic FileReader]
Writers (Ieire)[adic FileWriter]
Byte (binare)
InputStream (Intrare) [adic FileInputStream]
OutputStream (Ieire) [adic FileOutputStream]
Fluxuri de prelucrare
mpacheteaz fluxuri pe Character sau Byte pentru a oferi
funcionalitate suplimentar sau pentru a filtra fluxul
Cele mai comune: Buffered streams care permit prelucrarea
linie cu linie [adic BufferedInputStream, BufferedReader]
OOP-Recap - M. Joldo - T.U. Cluj 58
Info despre examen
Fr calculatoare sau telefoane celulare
Aducei hrtie i ustensile de scris (pix, stilou)
Dou pari:
Din memorie (cca. 40 min)
ntrebri despre OO i concepte Java
S fii capabili s comparai i s exemplificai conceptele
Cu documentaie (cri, note de curs, laborator) (cca.
1 or 40 min)
Una sau dou probleme de mic ntindere de rezolvat pe
hrtie
Putei s aducei ceva documentaie (note de curs, de
laborator, cri) ca s v ajute
OOP-Recap - M. Joldo - T.U. Cluj 59
Success!

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