Sunteți pe pagina 1din 12

109

Realizarea aplicaiilor complexe

O aplicaie scris n Java const dintr-o clas sau un ansamblu de clase. n


cazul n care aplicia cuprinde mai multe clase, una dintre ele va fi clasa principal,
respectiv va conine metoda static main().
Divizarea unei aplicaii n clase creaz premisa lucrului pe secvene de cod de
dimensiuni reduse, uor de realizat i mai ales de depanat. Fiecare clas este
specializat pe prelucrarea variabilelor clasei (membrii date ai clasei). Metodele
clasei sunt module de mici dimensiuni, fiecare avnd un rol funcional elementar.
Practic dezvoltarea unei clase nseamn dou lucruri:
1. identificarea variabilelor de stare ale clasei care vor pstra proprietile
obiectelor care vor fi declarate n continuare i
2. scrierea unui ansamblu complet i coerent de metode care s asigure
crearea i evoluia variabilelor de stare ale clasei.
Pentru a se executa codul dintr-o metod aceasta trebuie apelat. Apelul se
realizeaz de regul din alt metod a aceleiai clase sau a altei clase aparinnd
aplicaiei. La scrierea apelului metodei, numele acesteia este precedat fie de numele
obiectului ale crui date trebuie prelucrate fie de numele clasei creia i aparine
metoda. Al doilea caz se refer la metode care prelucreaz eventual parametrii
transmii n momentul apelului, ca n cazul metodelor care implementeaz funcii
matematice (sin, cos etc.).
Metodele de acest ultim fel sunt declarate folosind declaraia static.
Structura lexical folosit la apelul unei metode poate fi deci fie
obiect.metoda(); fie clas.metoda();
Exemple:
p1.translatez(3, 10); // abscisa si ordonata punctului p1 sunt modificate
y = r * Math.sin(x); // sin() este o metod static a clasei Math
k = Integer.parseInt(args[1]); // parseInt() este o met. static a clasei Integer

Vizibilitatea variabilelor
Vizibilitatea unei variabile se definete ca zona din program n care aceasta
este cunoscut deci poate fi accesat. Regulile privind vizibilitatea variabilelor n
Java pot fi reprezentate grafic.
110

class vizvar {
zona de vizib. a
var. clasei
declaraii variabile membre

zona de vizib. a public void metoda_1( declaratii parametri)


param. metodei

declaraii variabile locale


zona de vizib. a var.
locale catch (param. exceptie) {

zona de vizib. a
param. excepiei

}
Din punct de vedere al locului declarrii, o variabil poate fi membr a clasei
(declarat n afara oricrei metode) sau local (declarat n interiorul unei metode, de
obicei la la nceputul acesteia sau la nceputul unui bloc din interiorul acesteia).
Variabilele locale aparinnd unor blocuri separate sunt diferite, chiar dac
poart acelai nume. Se recomand totui folosirea unor nume de variabile distincte
i mai ales sugestive, care s ajute programatorul n urmrirea logicii programului.
Unei variabile membre a clasei i se aloc spaiu n memorie n momentul
crerii unei instane a clasei (obiect) folosind operatorul new.
Variabilele locale exist pe timpul execuiei blocului n care au fost declarate i
i nceteaz existena n momentul ieirii din acesta.

Reutilizarea claselor
Noiunile de programarea obiectual n Java prezentate ne-au
condus la realizarea ctorva clase care permit generarea unor obiecte care
ar trebui desenate. Din pcate cunotinele legate de desenare nu au fost
prezentate, deci proiectul Figuri nu poate fi finalizat. Situaia aceasta
apare frecvent n programarea obiectual, programatorii realiznd aplicaii
complexe fr a cunoate n detaliu tehnologia informatic ncorporat n
unele dintre clasele pe care le utilizeaz.
111

n continuare va fi reluat proiectul privind realizarea unor figuri


geometrice plane dar de data asta se va prelua o colecie de clase de la o
aplicaie deja realizat. Odat cu instalarea mediului de programare BlueJ
s-a creat subdirectorul examples care conine cteva exemple de aplicaii.
Pentru realizarea proiectului Figuri n noua variant se va creea un nou
proiect (File / New Project) denumit tot figuri.

n noul proiect vor fi importate clasele din proiectul shapes


dezvoltate de autorii mediului de programare BlueJ:
112

Rezultat:
113

Dup recompilarea claselor haurate se pot analiza clasele


importate. Practic fiecare clas are un singur constructor, fr parametri,
deci uor de folosit. Se poate deci crea imediat un ptrat:

Pentru a vedea ce alte metode conine clasa Square se va selecta


cu butonul drept obiectul realizat. Din lista de funcii afiat interesant
este makeVisible(). Apelul ei determin afiarea unei noi ferestre
Windows care va conine un ptrat. Deci se poate desena fr a ti exact
cum se petrec lucrurile.
114

Dar interfaa expus de clasa Square conine i alte metode.


Numele lor sunt fiind sugestive nu vor fi prezentate. Ele permit
repoziionarea, redimensionarea i schimbarea culorii obiectului generat.

Exerciiu: Folosind clasele importate s se realizeze construcia din


figur:

Pentru nceput va fi redimensionat primul obiect. Latura sa va fi


mrit n primul dnd de aproximativ 3 ori. Pentru a determina mrimea
actual se va selecta n meniul contextual Inspect:
115

Va trebui deci modificat proprietatea size de la 30 la 90. Pentru


aceasta va fi apelat metoda changeSize():

Ptratul va fi apoi deplasat n jos. O soluie este apelul repetat al


metodei moveDown().

Apoi va fi generat un al doilea obiect, triunghiul:


116

Pentru a vedea noul obiect va fi apelat metoda makeVisible():

i noul obiect trebuie redimensionat i deplasat. Inspectnd


proprietile sale se vede c are latura orizontal de 40 pixeli i nlimea
de 30 pixeli.

Pentru a-l aduce la dimensiunile corecte (L=120, H=80) se


apeleaz metoda changeSize():
117

Dup aceasta se deplaseaz figura astfel nct s se suprapun cu


ptratul. Pentru aceasta vor fi apelate repetat metodele moveDown(),
slowMoveVertical(), moveRight() i slowMoveHorizontal().

La fel se va proceda i cu cercul. Rezultatul ar putea fi ca i cel din


imagine:

Inspectnd proprietile celor trei obiecte se poate scrie o metod


care ar genera dintr-o dat ntreaga imagine. Pentru aceasta trebuie
declarat o nou clas, denumit de exemplu Figuri, n al crei constructor
se vor crea cele trei obiecte i apoi se vor apela metodele corespunztoare
pentru a ajunge la aceleai valori ale parametrilor lor de stare. Aa cum
s-a mai afirmat, de cele mai multe ori n programarea actual munca
118

programatorului se reduce la instanierea unor clase i la apelul ctorva


metode care modific valorile unor variabile de stare.

public class Figuri


{
// instance variables - replace the example below with your own
private Square s;
private Triangle t;
private Circle c;

/**
* Constructor for objects of class Figuri
*/
public Figuri()
{
s = new Square();
s.changeSize(90);
s.moveVertical(60);
s.makeVisible();
t = new Triangle();
t.changeSize(80, 120);
t.moveHorizontal(55);
t.moveVertical(15);
t.makeVisible();
c = new Circle();
c.changeSize(50);
c.moveVertical(-40);
c.moveHorizontal(160);
c.changeColor("yellow");
c.makeVisible();
}
}
119

Diagrama UML a aplicaiei n noua form este urmtoarea:

Pentru a reface construcia va trebui s se creeze o instan a


clasei Figuri.

n ceea ce privete varianta privind declararea unor clase derivate


menionat se va da exemplul clasei Patrat derivat din Square:

public class Patrat extends Square


{
/**
* Constructor for objects of class Patrat
*/
public Patrat()
{
// initialise instance variables
super();
120

public void translation(int newX, int newY)


{
xPosition = newX;
yPosition = newY;
}
}

Observaie: Pentru a putea modifica n clasa derivat valorile


parametrilor xPosition i yPosition, declaraia acestora din clasa de baz
(Square) trebuie modificat astfel nct regimul de acces s fie schimbat
din private n protected. Dac acest lucru nu este posibil rmne varianta
apelului funciilor publice moveHorizontal() i moveVertical().

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