français
interlingua
 

La klaso Kvadrato

Vi certe rimarkis, ke la rektanguloj de nia retprogramoj estas kvadratoj : ni do konstruos klason de objektoj Kvadrato (kun majusklo kaj sen pluralo).

Heredo

Jen tiu nova klaso :

import java.awt.*;

class Kvadrato extends Rectangle
{
public int absciso;
public int ordinato;

public Kvadrato(int absciso, int ordinato)
   {
   super(absciso, ordinato, 10, 10);
   this.absciso = absciso;
   this.ordinato = ordinato;
   }

public void paint(Graphics g)
   {
   g.fillRect(absciso,ordinato,10,10);
   }
}

 

Kelkaj klarigoj

class Kvadrato extends Rectangle
Kvadrato estas speco de rektangulo : do ni uzos la klason Rectangle por derivi el ĝi la klason Kvadrato.
super(absciso, ordinato, 10, 10);
Oni konstruas objekton Rectangle per kvar parametroj : absciso de la maldekstra supra angulo (x), ordinato de la maldekstra supra angulo (y), larĝeco (width) kaj alteco (height).
Ĉi tie, per uzo de la ŝlosilvorto super, ni indikas al la programo, ke ni konstruas la objekton Kvadrato laŭ la sama modelo kiel objekton Rectangle, kun tiu aparta detalo, ke la parametroj width kaj height estas jam kaj por ĉiam difinitaj je la valoro 10.
Tio estas ilustraĵo de la principo heredo en objektema programado : klaso derivita el alia klaso heredas ties atributojn kaj metodojn.
Tiel, nia klaso Kvadrato aŭtomate heredas la metodon inside(), ĉar, kiel jam vidite, la klaso Rectangle posedas ĝin.
this.absciso = absciso;
Memoru, ke en la antaŭa paŝo ni skribis la jenon :
this.MiaAtributo = parametro1;
Ni sammaniere povintus ĉi tie skribi :
public Kvadrato(int parametro1, int parametro2)
   {
   super(parametro1, parametro2, 10, 10);
   this.absciso = parametro1;
   this.ordinato = parametro2;
   }

La programistoj kutimas uzi la saman nomon por la atributoj kaj la parametroj de la konstruilo : tiel, la parametro "absciso" estas tuj pli komprenebla ol "parametro1", eĉ se tia formulo, kia "this.ordinato = ordinato" surprizas en la komenco !

Se vi komparas tiun klason Kvadrato kun la klaso MiaObjekto de la paŝo 13, vi vidas, ke estas komunaj punktoj :

  • La konstruilo [public Kvadrato(int absciso, int ordinato)], kiu ebligos tutsimple generi objekton Kvadrato :
    Kvadrato x = new Kvadrato(18,18);
  • Metodo paint(Graphics g), kiun ni vokos en la retprogramo.

Tabelo da objektoj Kvadrato

Ni nun uzos tiun novan klason en retprogramo. Ni profitos tiun strukturon por peti, ke ĉiu objekto Kvadrato afiŝu sian abscison.

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

public class apleto16 extends Applet
{
int absciso = 0;
int ordinato = 30;
Kvadrato [] tabKvadrato = new Kvadrato[10];
boolean ene;
String t = new String("");
TextField T = new TextField(t, 5);

public void init()
{
add(T);
for (int i=0; i<10; i++)
   {
   tabKvadrato [i] = new Kvadrato(absciso,ordinato);--- alvoko de la konstruilo de Kvadrato
   absciso+=12;
   }//for i
}//init

public void paint(Graphics g)
   {
   g.setColor(Color.black);
   for (int j=0;j<10;j++)
      {
      tabKvadrato[j].paint(g);--- alvoko de la metodo paint() de Kvadrato
      }//for j
   }//paint

   public boolean mouseDown(Event evt, int x, int y)
   {
   int k;
   for (k=0; k<10;k++)
      {
      ene =(tabKvadrato[k].inside(x,y)) ? true : false;--- metodo inside() de Rectangle, kiun heredas Kvadrato
      if (ene)
         {
         t=Integer.toString(tabKvadrato[k].absciso);--- atributo absciso de la objekto Kvadrato
         T.setText(t);
         }
      }//for k
   return true;
   }

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

 

Kaj jen la rezulto :

La uzpreta kodo de la klaso
La uzpreta kodo de la retprogramo