Documente Academic
Documente Profesional
Documente Cultură
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
150
n noul proiect vor fi importate clasele din proiectul shapes
dezvoltate de autorii mediului de programare BlueJ:
Rezultat:
151
Dup recompilarea clasei haurate (Triangle) 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:
152
Ele permit
Latura sa va fi
153
154
Pentru a vedea noul obiect va fi apelat metoda makeVisible():
Inspectnd
155
156
programatorului se reduce la instanierea unor clase i la apelul ctorva
metode care modific valorile unor variabile de stare.
157
Diagrama UML a aplicaiei n noua form este urmtoarea:
158
}
public void translation(int newX, int newY)
{
xPosition = newX;
yPosition = newY;
}
}
Observaie:
159
Interfee
Aplicaiile realizate pn n acest moment nu au prezentat
elemente de interactivitate.
unei
astfel
de
aplicaii
va
necesita
aprofundarea
b.
Exemplu fundamental:
realizeaz
conversia
temperaturilor
exprimate
grade
Celsius
funciile furnizate.
La precizarea
160
import javax.swing.*;
b. Pentru realizarea aplicaiilor Windows limbajul Java pune la
dispoziia programatorilor un set complet de clase.
n aplicaia
javax.swing.
c. O clas creat pentru a realiza o aplicaie Windows trebuie s
creeze
un
obiect
din
clasa
JFrame
apoi
s-i
modifice
De cele mai
O astfel de structur se
n program controalelor
aparinnd
unei
clase
care
implementeaz
interfaa
implementeaz
interfaa
ActionListener.
din
pachetul
161
class numeClasa implements ActionListener { ... }
e. Clasa care implementeaz interfaa ActionListener este de regul
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
// Clasa principal
public class Convert extends JFrame
{
// Variabilele clasei
private JTextField cels;
private JTextField fahr;
162
private JButton conv;
// Constructorul clasei Convert
public Convert()
{
JPanel content = new JPanel();
cels = new JTextField(10);
fahr = new JTextField(10);
conv = new JButton("Converteste");
conv.addActionListener(new SupravegheazaBtn());
content.setLayout(new FlowLayout());
content.add(new JLabel("Temperatura, [C]:"));
content.add(cels);
content.add(conv);
content.add(new JLabel("Temperatura, [F]:"));
content.add(fahr);
// Se impun caracteristicile ferestrei Windows
this.setTitle("Convertor temperaturi");
this.setContentPane(content);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
// Clasa interioar
class SupravegheazaBtn implements ActionListener {
public void actionPerformed(ActionEvent e) {
String tempCels = cels.getText();
double tempCNr = Double.parseDouble(tempCels);
// Convertesc in [F].
double tempFNr = (9./5.)*tempCNr+32.;
//Convertesc in String si afisez
fahr.setText(Double.toString(tempFNr));
}
}
}
Observaie:
aplicaiile
Windows prelucrrile
de date se
163
Valoarea coninut ntr-un control JTextBox este de tip String.
Pentru a o putea folosi la calcule ea trebuie convertit ntr-un tip numeric,
de regul int sau double.
Exemple:
int nrInt;
double unDouble;
String aString;
...
nrInt = Integer.parseInt(unString);
unString = Integer.toString(aInt);
unDouble = Double.parseDouble(unString);
unString = Double.toString(unDouble);
Not:
Folosind n locul
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Convert extends JFrame
{
// instance variables - replace the example below with your own
private JTextField cels;
private JTextField fahr;
private JButton conv;
/**
* Constructor for objects of class Convert
*/
public Convert()
{
JPanel content = new JPanel();
cels = new JTextField(10);
fahr = new JTextField(10);
conv = new JButton("Converteste");
conv.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String tempCels = cels.getText();
double tempCNr = Double.parseDouble(tempCels);
// Convertesc in [F].
double tempFNr = (9./5.)*tempCNr+32.;
164
//Convertesc in String si afisez
fahr.setText(Double.toString(tempFNr));
}
}
);
content.setLayout(new FlowLayout());
content.add(new JLabel("Temperatura, [C]:"));
content.add(cels);
content.add(conv);
content.add(new JLabel("Temperatura, [F]:"));
content.add(fahr);
// Se impun caracteristicile ferestrei Windows
this.setTitle("Convertor temperaturi");
this.setContentPane(content);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Expresia
fiind
secven
care
creeaz
un
obiect
unei
clase
anonime
care
de
tip
ActionListener
Ea creeaz un obiect
implementeaz
interfaa
ActionListener.
Metode statice
Aplicaia Convert are n mare caracteristicile unei aplicaii Windows
obinuite, cu excepia uneia: nu poate fi lansat n execuie dect din
BlueJ. Pe de alt parte, pentru a vedea pe ecran interfaa Windows creat
am apelat n mod explicit constructorul clasei, deci practic nu am lansat
nimic n execuie. Nu am fcut altceva dect s crem o instan a clasei
Convert.
Pentru a deveni o aplicaie executabil, o clas trebuie s conin o
metod suplimentar purtnd numele main().
execuie, acestei metode i se d controlul.
n momentul lansrii n
165
crea o instan a clasei. Practic ea realizeaz acelai lucru care se realiza
n mediul BlueJ.
public static void main(String [] args)
{
Convert cnv = new Convert();
}
Metoda main() este declarat folosind declaraia static. O metod
declarat astfel poate fi lansat n execuie fr a fi necesar crearea n
prealabil a unui obiect din respectiva clas. Apelul unei metode statice se
realizeaz scriind nume_clas.metod(). Exemple:
val = a * Math.sin(om * t);
Funcia sin() este o metod static a clasei Math i a fost apelat
fr a crea n prealabil un obiect din clasa Math ci s-a folosit numele
clasei.
metodele statice ale unei clase pot opera numai asupra valorilor trimise ca
argument, ca n cadrul funciei sin().
Metoda main() adugat trebuie s fie i ea static deoarece nu
poate fi vorba de crearea n prealabil a vreunui obiect. O aplicaie Java
poate fi compus din mai multe clase dar numai una poate conine
metoda main(), devenind astfel clas principal. De obicei numele clasei
principale coincide cu numele proiectului, ca n exemplul dat.
Odat adugat metoda main(), la selactarea cu butonul drept al
mouse-ului a clasei Convert metoda main() apare ca apelabil, ceea ce
este normal, main() fiind o metod static. Apelul ei realizeaz crearea
obiectului cnv din clasa Convert i implicit, afiarea ferestrei Windows
create n constructor.
166
167
168