CLASSI E METODI


 


Classi

Una classe si puo' schematizzare in due punti principali: La dichiarazione, dove si definisce le caratteristiche, e il corpo dove si implementano i comportamenti (metodi). In tale sezione un ruolo fondamentale e' svolto dalle variabili.

Dichiarazione

class NameOfClass

Per convenzione il nome e’ indicato con una lettera maiuscola,

inoltre nella dichiarazione della classe si puo’:

1) Dichiarare che la classe e’ una superclasse

2) Elencare le interfacce implementate dalla classe

3) Dichiarare se la classe e’ public, abstract, o final

[modifiers] class NameofClass [extends superclass] [implements (interface)]

[modifiers]
public indica cha la classe puo’ essere usata da oggetti non inclusi nel package corrente

abstract indica che puo’ contenere metodi non implementati

final indica che non puo’ avere sottoclassi

[extends superclass] per specificare la superclasse dell’oggetto esplicitamente
[implements (interface)] specifica le interfacce (serie di metodi) implementate

 

Le variabili

Dichiarazione delle variabili

Le variabili naturalmente hanno un ruolo fondamentale, in java una variabile prima di poter essere usata deve essere dichiarata, specificandone il tipo e i livelli di accesso

Dichiarzione minima:
type variableName (es. int anInteger)

Per convenzione il nome di una variabile inizia con una lettera minuscola

Inoltre si possono specificare una serie di attributi:

[accessSpecifier] [static] [final] [transient] [volatile] type variable

[accessSpecifier] definisce quali altre classi hanno accesso alla variabile

[static] indica che la variabile e’ membro di una classe e non un istanza

[final] indica che la variabile e’ una costante

[transient] indica che non fa’ parte dello stato "persistente" dell’oggetto

[volatile] indica che la variabile e’ modificabile in modo asincrono

 

 

Livelli di accesso

class subclass package world
private x
protected x x* x
public x x x x
package x x

  

 

Subclass

Una subclass e’ una classe che deriva da un altra classe (superclasse) e ne eredita il comportamento, i metodi e le variabili. Per riferirsi al valore della superclass basta usare la parole chiave "super".

class subclass extends superclass {

Es.

class Super {

Number aNumber;

}

class Sub extends Super {

float aNumber;

super.aNumber

}

Aggiungendo "final" alla dichiarazione di classe/metodo [es. final class NomeClasse / final void nomeMetodo()] si evita l’uso di tale classe/metodo da parte di sottoclassi.

  

 

Classi e metodi astratti

Classi che implementano concetti astratti (es. Number) e possono essere solo superclassi

(es. abstract class Number)

Metodi:

Ogni classe astratta puo’ contenere metodi astratti, cioe’ che non hanno implementazioni

  

 

Le classi String e StringBuffer

Sono 2 classi contenute nel package java.lang utili per lavorare con stringhe di dati.

Il seguente metodo inverte le parole:

 Esempio:
/*
* Copyright (c) 1995, 1996 Sun Microsystems, Inc. All Rights Reserved.
*
*/
class ReverseString {
public static String reverseIt(String source) {
int i, len = source.length();
StringBuffer dest = new StringBuffer(len);
for (i = (len - 1); i >= 0; i--) {
dest.append(source.charAt(i));
}
return dest.toString();
}
}

String = Per lavorare con stringhe che non possono essere cambiate

StringBuffer = quando si vuole manipolare il contenuto della stringa

 

Metodi accessori

Sono metodi usati per ottenere informazioni su un oggetto.

es:

source.lenght() = restituisce la lunghezza della stringa

source.charAt(i) = restituisce il carattere nella posizione "i" della stringa

 

indexOf(int carattere)

Restituiscel’indice della prima occorrenza del carattere specificato

lastIndexOf(int carattere)

Restituiscel’indice dell’ultima occorrenza del carattere specificato

indexOf(int carattere, int from)

Restituisce l’indice della prima occorrenza del carattere specificato cercando avanti dall’indice specificato

lastIndexOf(int carattere, int from)

Restituisce l’indice dell’ultima occorrenza del carattere specificato cercando indietro dall’indice specificato

indexOf(String String)

Restituisce l’indice della prima occorrenza della stringa specificata

lastIndexOf(String String)

Restituisce l’indice dell’ultima occorrenza della stringa specificata

indexOf(String String, int from)

Restituisce l’indice della prima occorrenza della stringa specificata cercando avanti dall’indice specificato

lastIndexOf(String String, int from)

Restituisce l’indice dell’ultima occorrenza della stringa specificata cercando indietro dall’indice specificato

Append (dest.append(source.charAt(i)) = aggiunge un carattere alla fine della stringa "dest" (solo per StringBuffer)

insert (var.insert(posizione, stringa) var.insert(6, "stringa")

toString() = Usato per stampare, converte la StringBuffer in String (es. return dest.toString())

valueOf = Converte variabili di diverso tipo in stringa

es.

System.out.println(String.valueOf(Math.PI))

string piStr = "3.14159";

Float pi = Float.valueOf(piStr);

   

 

La classe System

Include gli standard input, output ed error stream, le propieta’ del sistema ed altre utilita’ varie (es ora, etc.)

es.

System.out

System.getProperty(argomento)

System.getProperty("user.name")

   

 

Standard IO Stream

Standard input System.in = usato per input del programma

Standard output System.out = usato per l’output del programma

Standard error System.err = usato per visualizzare i messaggi di errore

   

 

Le propieta’ del sistema

La classe system ha 2 differenti versioni di getProperty:

  1. getProperty
  2. getProperties

getProperty = prende un singolo argomento[es. System.getProperty("Path.separator", "valore in caso di null");

getProperties = comprende l’intero set di propieta’ del sistema

   

 

Metodi

Dichiarazione

Piu’ metodi possono avere anche lo stesso nome, basta che varino il tipo dei dati

[es. draw(String s) / draw(int i)]

La dichiarazione fornisce il nome del metodo e il tipo di dati che restituisce [es. boolean isEmpty]

Puo’ avere un campo aspetto come le variabili implementato dalle seguenti voci:syncronized, paramlist, trows exceptionlist

Ogni metodo che ha lo stesso nome della sua classe e’ un costruttore e sara’ usato per inizializzare nuovi oggetti della classe, tramite l’operatore new

Passare informazioni ad un metodo

Quando si scrive un metodo si dichiara il numero e il tipo di argomenti richiesti da quel metodo.

Se gli argomenti hanno lo stesso nome delle variabili della classe, il metodo prende il suo valore (usato per inizializzare), per poi far riferimento alle variabili iniziali del metodo si usa "this"

es.

class Circle {

int x, y, radius

public circle(int x, int y, int radius) {

this.x=x

this.y=y

this.radius=radius

.....

Nei metodi java gli argomenti sono passati come valore, quindi il metodo non puo’ variare il suo valore, se non chiamnado i metodi dell’oggetto e modificando le variabili accessibili dell’oggetto.

es.

int r=-1, g=-1, b=-1

pen.getRGBColor(r,g,b);

e’ equivalente a pen.getRGBColor (-1,-1,-1)

Per avere un valore come variabile usare la seguente chiamata :

es.

class Pen {

int redValue, greeValue, blueValue;

void getRGBColor( int red, int green, int blue)

red = redValue;

green = greenValue;

blue = blueValue;

Per modificare un argomento bisogna far riferimento ad un oggetto o ad un array

es. (introducendo un nuovo oggetto RGBColor che conterra’ i valori delle 3 variabili)

classRGBColor {

public int red, green, blue;

}

e scrivendo il metodo getRGBColor in modo che accetti un oggetto RGBColor come argomento

class pen {

int redValue, int greeValue, int blueValue;

void getRGBColor(RGBColor aColor){

aColor.red = redValue

aColor.green = greenValue

aColor.blue = blueValue

}

}

e con la seguente sequenza di chiamate le modifiche fatte all’oggetto RGBColor avranno effetto in quanto pencolor e aColor fanno riferimento allo stesso oggetto

RGBColor penColor = new RGBColor()]

pen.getRGBColor(penColor);

System.out.println("red"+penColor.red+"green"+penColor.green+"blue"+penColor.blue

  

 

Corpo di un metodo

class ....

metodo

corpo del metodo

Nel corpo di un metodo normalmente si puo’ fare riferimento alle variabili della classe.

Con this si puo’ diversificare le variabili della classe dagli argomenti del metodo. this si riferisce all’oggetto corrente.

es.

class HSBColor

int hue, saturation, brightness

HSBColor (int hue, int saturation, int brightness)

this.hue=hue

this.saturation=saturation

this.brightness=brightness

 

Quando un metodo nasconde una variabile dalla sua superclasse ci si puo’ riferire alla variabile nascosta attraverso l’uso di super

Le variabili locali rimangono valide fino a che il controllo rimane al metodo.

  

 

Eccezioni

Un eccezzione e’ un evento che esula dal normale flusso del programma

try/catch/finally

try - il primo passo e’ racchiudere le dichiarazioni che potrebbero provocare eccezioni tra un blocco try

catch - (oggettodelleccezzione variabile[e]) associato direttamente al metodo try

throw - Specialmente nei metodi che possono essere solo una parte del programma (es per distribuzione) fa si che le eccezione possa essere vista da qualsiasi parte del programma.

Va specificato subito dopo il nome della classe, prima delle parentesi graffe

Richiede che l’eccezzione usata nella dichiarazione di throw derivi dalla classe trowable

  

 

1