NetRexx at Once

Guida rapida per programmatori Java


[Indice] [Capitolo precedente] [Capitolo successivo]

2. Classi ed oggetti

Ciò che abbiamo visto prima è utile per piccole applicazioni. Cosa succede se dobbiamo realizzare applicazioni ed applet più complesse? Abbiamo la necessità di dichiarare classi, campi, metodi e di creare oggetti. Per esempio, consideriamo il seguente caso: vogliamo scrivere una semplice Applet che legga un parametro di tipo stringa (fornito da PARAM) e lo scriva sullo schermo in bianco su uno sfondo rosso. Vediamo quello che ci serve.

2.1 L'istruzione CLASS

Vogliamo creare un file class che deve essere usato come un'applet da un browser. Dobbiamo estendere la classe java.applet.Applet e, quindi, scriviamo ciò che segue:

Java
/* This is MyApplet.java */
import java.applet.Applet;
public class MyApplet extends Applet {
  //... list of fields and methods
}
NetRexx
/* This is MyApplet.nrx */
class MyApplet extends Applet
  --... list of properties and methods
--
--
note
  • Non è necessario importare i packages Java standard.
  • I campi (le variabili delle classi) sono chiamati properties.
CLASS Instruction Sintax

class class_name [private|public|shared] [abstract|final|interface|adapter] [binary]
[extends parent_class_name]
[uses used_class_name[,...]]
[implements interface_name[,...]];

visibility

    public visibile a tutte le classi (default per la prima classe di un file)
    private
    visibile al package corrente (default per tutte le altre classe di un file)
    shared
    visibile al package corrente (esattamente come private)

modifiers

    final non può essere estesa
    abstract
    alcuni metodi sono astratti
    interface
    tutti i metodi sono astratti e le proprietà sono costanti
    adapter
    implementa (automaticamente) tutti i metodi astratti ereditati

binary forza l'uso di tipi nativi

extends identifica la superclasse

uses elenca le classi sorgenti di proprietà e metodi statici

implements elenca le interfacce ereditate

2.2 L'istruzione PROPERTIES

Ora aggiungiamo un campo all'Applet. Nel metodo init leggiamo il parametro MSG e memorizziamo il suo valore in una variabile.

Java
/* This is MyApplet.java */
import java.applet.Applet;
public class MyApplet extends Applet {
  String message;
  //... list of methods
}
NetRexx
/* This is MyApplet.nrx */
class MyApplet extends Applet
  message=String  -- inheritable by default
  --... list of methods
--
--
notes
  • Le variabili non necessitano di una dichiarazione di tipo: è scelta in accordo all'assegnamento.
  • Il valore iniziale è null (scrittura differente da message=String()).
  • L'istruzione properties è usata per cambiare la visibilità (inheritable per default).
PROPERTIES Instruction Sintax

properties [public|inheritable|private|shared] [constant|static|volatile|transient|indirect];

visibility

    public visibile a tutte le classi per le quali è visibile la classe corrente
    inheritable
    visibile all'interno del package corrente ed alle classi che estendono la classe corrente (default)
    shared
    visibile all'interno del package corrente ma non ereditato dalle classi che estendono la classe corrente
    private
    visibile solo all'interno della classe corrente

modifiers

    constant proprietà inalterabile della classe
    static
    proprietà alterabile della classe
    volatile
    può cambiare in modo asincrono
    transient
    non è salvata quando l'oggetto è serializzato
    indirect
    è accessibile per mezzo di metodi get-set generati automaticamente (convenzioni JavaBeans)

2.3 L'istruzione METHOD

Infine, abbiamo bisogno del metodo init() (per inizializzare la variabile message leggendo il parametro MSG) e del metodo paint(Graphics g) (per mostrare il messaggio).

Java
/* This is MyApplet.java */
import java.applet.Applet;
public class MyApplet extends Applet {
  String message;
  public void init() {
    setBackground(Color.red);
    setForeground(Color.white);
    message = getParameter("MSG");
  }
  public void paint(Graphics g) {
    g.drawString(message,10,10);
  }
}
NetRexx
/* This is MyApplet.nrx */
class MyApplet extends Applet
  message=String
  method init
    setBackground(Color.red)
    setForeground(Color.white)
    message=getParameter("MSG")
  method paint(g=Graphics)
    g.drawString(message,10,10)
--
--
--
--
  • I metodi senza argomenti non necessitano di parentesi.
  • Gli argomenti sono dichiarati per mezzo di un assegnamento.
  • Agli argomenti possono essere associati dei valori di default per mezzo del meccanismo dell'assegnamento.
  • Non sono necessarie le parentesi graffe per delimitare il blocco di un metodo.
METHOD Instruction Sintax

method method_name[([argument_name[,...]])]
[public|inheritable|private|shared]
[constant|static|abstract|final|native] [protect]
[returns return_type]
[signal exception_name[,...]];

visibility

    public visibile a tutte le classi per le quali è visibile la classe corrente
    inheritable
    visibile all'interno del package corrente ed alle classi che estendono la classe corrente (default)
    shared
    visibile all'interno del package corrente ma non ereditato dalle classi che estendono la classe corrente
    private
    visibile solo all'interno della classe corrente

modifiers

    static metodo della classe
    final
    non può essere sovraccaricato
    constant
    static e final
    abstract
    non implementato
    native
    implementato esternamente

protect protegge l'oggetto corrente (sincronizzazione)

returns definisce il tipo restituito (per default NetRexx String)

signal elenca le eccezioni che possono essere lanciate

2.3.1 Valori di dafault per gli argomenti

Il poter specificare dei valori di default per gli argomenti è una utile caratteristica del C++. Java non la possiede, ma il NetRexx sì. Immaginiamo che una classe abbia spesso bisogno di passare lo stesso argomento ad uno dei suoi metodi. Con Java è possibile aggiungere un'altro metodo con lo stesso nome che usi un valore di default e richiami il metodo originale, in caso contrario si è obbligati a passare lo stesso velore ogni volta che è necessario. Con il NetRexx è sufficiente dichiarare quel valore nella lista degli argomenti. Per esempio consideriamo una classe Sphere che deve essere ridimensionata (spesso di un fattore due):

Java
/* This is Sphere.java */
public class Sphere {
  private float radius = 1.0;
  Sphere(float radius) {
    this.radius = radius;
  }
  public void Scale(float factor) {
    radius *= factor;
  }
  public void Scale() {
    Scale(2.0);
  }
}

// In another class
Sphere sph = new Sphere();
sph.Scale();   // doubles the radius
sph.Scale(0.5); // halves the radius
NetRexx
/* This is Sphere.nrx */
class Sphere
  properties private
    radius
  method Sphere(radius=1.0)
    this.radius=radius
  method Scale(factor=2.0)
    radius = radius * factor
--
--
--
--
--

-- In another class
sph=Sphere
sph.Scale     -- doubles the radius
sph.Scale(0.5) -- halves the radius
  • Non è necessario dichiarare le variabili (REXX per defaut).
  • Gli argomenti di default sono dichiarati con un assegnamento.
  • Non sono disponibili gli operatori op=.
  • PROPERTIES è usata per cambiare la visibilità delle proprietà.

2.3.2 Valori restituiti

Un metodo restituisce un valore per mezzo della parola chiave return. Per esempio, riscriviamo la classe Sphere in modo che sia maggiormente configurabile:

Java
/* This is Sphere.java */
public class Sphere {
  private float radius = 1.0;
  public Sphere(float r) {
    radius = r;
  }
  public float getRadius() {
    return radius;
  }
  public void setRadius(float r) {
    radius = r;
  }
}
NetRexx
/* This is Sphere.nrx */
class Sphere
  properties private
    radius
  method Sphere(r=1.0)
    radius=r
  method getRadius
    return radius
  method setRadius(r)
    radius=r
--
--
--
NetRexx (experimental)
/* This is Sphere.nrx */
class Sphere
  properties indirect
    radius
  method Sphere(r=1.0)
    radius=r
--
--
--
--
--
--
--
  • Non è necessario dichiarare le variabili (REXX per defaut).
  • Non è necessario dichiarare il tipo restituito da un metodo (REXX by defaut).
  • Indirect è usato per generare automaticamente i metodi di accesso (convenzioni JavaBeans).

2.4 Costruttori

Gli oggetti sono creati utilizzando metodi speciali chiamati costruttori. I costruttori, come in Java, hanno lo stesso nome della classe. Le istanze di una classe (gli oggetti) sono create senza l'uso della parola chiave new e, come nei metodi normali, gli argomenti possono avere valori di default.

Java
/* Examples of new Java objects */
Vector v1 = new Vector();   // empty Vector
Vector v2 = new Vector(10); // with capacity
NetRexx
/* Examples of new NetRexx objects */
v1=Vector()     -- an empty Vector
v2=Vector(10) -- with capacity
  • Non è necessaria la parola chiave new.
  • Sono necessarie le parentesi anche se il costruttore non ha argomenti.
  • E' possibile definire valori di default per gli argomenti.
  • Non è necessaria alcuna dichiarazione di tipo (è sottintesa nell'assegnamento).

[Indice] [Capitolo precedente] [Capitolo successivo]


TETRACTYS Freeware Main Page hosted by GeoCities Get your own Free Home Page