esperanto
français
 

Le classe Quadrato

Le rectangulos de nostre applet, vos lo ha certemente jam remarcate, es quadratos : igitur nos va construer un classe de objectos Quadrato (sin s).

Hereditage

Ecce primo iste nove classe :

import java.awt.*;

class Quadrato extends Rectangle
{
public int abscissa;
public int ordinata;

public Quadrato(int abscissa, int ordinata)
   {
   super(abscissa, ordinata, 10, 10);
   this.abscissa = abscissa;
   this.ordinata = ordinata;
   }

public void paint(Graphics g)
   {
   g.fillRect(abscissa,ordinata,10,10);
   }
}

 

Qualque explicationes

class Quadrato extends Rectangle
Un quadrato es un sorta de rectangulo : ergo nos va emplear le classe Rectangle pro derivar ab illo le classe Quadrato.
super(abscissa, ordinata, 10, 10);
Un objecto Rectangle es construite per quatro parametros : abscissa del angulo superior sinistre (x), ordinata del angulo superior sinistre (y), largor (width) e altitude (height).
Hic, utilisante le parola clave super, nos indica al programma que nos construe le objecto Quadrato secun le mesme modello como un Rectangle, con le particularitate que le parametros width e height es fixate ab le commenciamento, definitivemente, a 10.
Illo es un illustration del principio del hereditage in programmation orientate objecto : un classe derivate ab un altere classe heredita su attributos e methodos.
Alsi, nostre classe Quadrato possede automaticamente le methodo inside(), pois que, nos lo ha viste, le classe Rectangle lo possede.
this.abscissa = abscissa;
Memora le passo precedente ubi no ha scripte :
this.MiAttributo = parametro1;
Nos haberea potite del mesme maniera scriber hic :
public Quadrato(int parametro1, int parametro2)
   {
   super(parametro1, parametro2, 10, 10);
   this.abscissa = parametro1;
   this.ordinata = parametro2;
   }

Le programmatores ha prendite le habitude de utilisar le mesme nomine pro le attributos e le parametros del constructor : alsi, le parametro "abscissa" es directemente plus comprehensibile que "parametro1", etsi un formula como "this.ordinata = ordinata" es un pauc surprendente a prime vista !

Si vos compara iste classe Quadrato con le classe MiObjecto del passo 13, vos vide que il es punctos commun :

  • Le constructor [public Quadrato(int abscissa, int ordinata)] que permittera de instantiar un objecto Quadrato multo simplemente :
    Quadrato x = new Quadrato(18,18);
  • Un methodo paint(Graphics g) que essera appellate in le applet.

Un tabella de objectos Quadrato

Nos va ora utilisar iste nove classe in un applet. Nos va poter profitar de iste structura pro demandar a cata objecto Quadrato de exhibir su abscissa.

import java.applet.*;
import java.awt.*;

public class applet16 extends Applet
{
int abscissa = 0;
int ordinata = 30;
Quadrato [] tabQuadrato = new Quadrato[10];
boolean intra;
String t = new String("");
TextField T = new TextField(t, 5);

public void init()
{
add(T);
for (int i=0; i<10; i++)
   {
   tabQuadrato [i] = new Quadrato(abscissa,ordinata);--- appello del constructor de Quadrato
   abscissa +=12;
   }//for i
}//init

public void paint(Graphics g)
   {
   g.setColor(Color.black);
   for (int j=0;j<10;j++)
      {
      tabQuadrato[j].paint(g);--- appello del methodo paint() de Quadrato
      }//for j
   }//paint

   public boolean mouseDown(Event evt, int x, int y)
   {
   int k;
   for (k=0; k<10;k++)
      {
      intra =(tabQuadrato[k].inside(x,y)) ? true : false;--- methodo inside() de Rectangle que heredite Quadrato
      if (intra)
         {
         t=Integer.toString(tabQuadrato[k].abscissa);--- attributo abscissa del objecto Quadrato
         T.setText(t);
         }
      }//for k
   return true;
   }

   public boolean mouseUp(Event evt, int x, int y)
   {
   intra=false;
   t="";
   T.setText(t);
   return true;
   }
}

 

Ecce le resultato :

Le codice del classe preste al uso
Le codice del applet preste al uso