français
interlingua
 

Nova objekto

Do la tabelo da objektoj Rectangle en la antaŭa retprogramo ebligus produkti la 216 surklakeblajn rektangulojn de nia projekto. Ĝis nun, ili ĉiuj estas nigraj, por plisimpligi la programon, sed oni certe povas ilin desegni kun 216 malsamaj koloroj per la meĥanismo vidita en la paŝo 8 (bonega ideo por ekzerco !).
Tamen oni ankoraŭ devus trovi rimedon por igi ilin afiŝi la RGB-kodon de sia koloro. Kaj jen la hoko en la ezoko : ĉar la koloro estas difinita en la metodo paint(), la rilato inter ĉiu objekto Rectangle kaj ties koloro tute ne estas evidenta. La objektoj Rectangle, kiaj ilin proponas al ni la lingvo Ĝavo, havas la atributojn x, y, width kaj height, kaj la metodon inside(), kiujn ni uzis, sed tiuj objektoj havas neniun atributon "koloro", kaj neniun atributon R, G aŭ B, kiujn oni povus tiel facile uzi kiel la atributojn x, y, width kaj height.
Oni tamen probable povas trovi rilaton inter x kaj y, kaj la koloro de ĉiu rektangulo, ĉar ĉiuj ĉi parametroj samtempe varias, sed la algoritmo por retrovi la valorojn de R, G kaj B pere de x kaj y tute ne evidentas ! (alia ideo por ekzerco !!)
La solvo estas multe pli simpla : ĉar la objektoj Rectangle ne havas atributojn R, G, B, ni kreos novan objekton, kiu plenumos niajn bezonojn.

Difini klason

Objekto, kiel vidite en la paŝo 10, estas pruduktita de strukturo nomata "klaso" : difini novan objekton estas deklari novan klason.

Jen la maniero deklari klason :

class MiaObjekto
{
public int MiaAtributo;--- atributo de tipo "entjero" estas ĉi tie deklarita

         --- ĉi-sube, ruĝe : la konstruilo
public MiaObjekto(int parametro1)
   {
   this.MiaAtributo = parametro1;
   }


public int Adicii()--- metodo estas ĉi tie deklarita
   {
   return MiaAtributo + 2;
   }
}

 

La ĉi-supra kodo difinas novan objekton de tipo "entjero". Tiu objekto havas unu atributon (MiaAtributo) kaj du metodojn.

  • La unua metodo donos la eblecon al la aliaj programoj uzi tiun objekton (ĝin generi) deklarante ĝin tiel :
    MiaObjekto x = new MiaObjekto(18);
    Notu, ke oni interkrampe devas indiki entjeron, ĉar tion petas la konstruilo (int parametro1).
  • La dua metodo, kiam vokita, simple resendos (return) la ciferon, kiun oni pasigis en parametro (parametro1, alidire MiaAtributo), plus 2.
    La aliaj programoj vokos tiun metodon tiel :
    int rezulto = x.Adicii();

Generi objekton

Generi objekton estas ekzistigi objekton laŭ la reguloj de ĝia konstruilo, kion ni jam faris kun la objektoj Rectangle en la antaŭaj paŝoj.

Post kiam la objekto estas generita, oni povas uzi ĝiajn atributojn kaj metodojn.

Jen la kodo de retprogramo, kiu uzas la klason MiaObjekto. Ĝi ricevas la entjeron 1 kiel parametron :

import java.awt.*;
public class VPMiaObjekto extends java.applet.Applet
{
MiaObjekto x = new MiaObjekto(1);
int rezulto;--- atentu : deklaru la variablojn en la komenco
String S;

public void init()
   {
   rezulto = x.Adicii();
   S = Integer.toString(rezulto);--- tiu metodo transformas la entjeron "rezulto" en signoĉenon : necesas por la ĉi-suba afiŝado
   }

   public void paint (Graphics g)
   {
   g.drawString(S, 10, 10);--- la metodo drawString, por la afiŝado, postulas signoĉenon kiel parametron
   }
}

 

Kaj jen la atendita rezulto :

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

Por ke tiu retprogramo funkciu, vi devas unue traduki dosieron MiaObjekto.java (la klaso), poste la retprogramon mem, ĉ tie nomata VPMiaObjekto.java (Vokanta Programo, ankaŭ nomata "ĉefprogramo"). Vi ankaŭ povas verki la klason kaj la retprogramon en la sama dosiero, sed la tradukilo tamen fabrikos du dosierojn kun la sufikso .class.

Tiu klaso MiaObjekto, kaj la retprogramo, kiu generas objekton x de tiu klaso, estas sen praktika utilo, sed eble helpis al vi kompreni la meĥanismon kaj la utilecon de la objektema programado. La venontaj paŝoj uzas tiun sistemon por aldoni la finan tuŝon al nia projekto.