Enrera
Mòdul 2
Iniciació a la programació en Java
  Pràctica
1
2
3
4
   
Exercicis
Exercicis
 
 
  Declaració de mètodes i pas de paràmetres
   
 

Aquesta pràctica ens servirà per aprendre a crear mètodes, declarar-los i utilitzar-los tot passant-los els paràmetres que siguin necessaris.

   
Desenvolupament de la pràctica
   

Ja hem vist que a Java tots els programes són classes. També sabem que les classes són especificacions de com són i què poden fer els objectes que pertanyen a aquella classe i que els objectes són entitats individuals o instàncies d'una classe. Els objectes són d'una forma determinada i poden fer algunes coses. Com són els objectes ens ho expliquen els seus camps (fields). Què poden fer, ens ho definiran els seus mètodes. Ambdues coses, camps i mètodes, són el que es coneix com a "membres de la classe".

Imaginem la nostra biblioteca escolar i tractem de representar-la en llenguatge d'objectes: estarà formada per llibres, revistes, vídeos, CDs, etc. Considerem que tot aquest material el volem representar amb una única classe, a la qual li posarem de nom "Publicacio". Ja sabem que l'hem de crear així:

public class Publicacio {
}

Com que a la biblioteca hi tenim molts formats de publicació, creem un camp per a identificar-los:

public class Publicacio {
    String format;

}

i, de la mateixa manera, podem anar afegint tots els camps que ens ajudaran a descriure una publicació de la biblioteca:

public class Publicacio {
    String format;

    String titol;
    String editorial;
    java.util.Date data;
    java.util.Date dataentrada;
    java.util.Date datadebaixa;
}

Podem afegir-hi molts camps que ens serviran per afinar tan com vulguem la descripció d'un objecte Publicacio. La nostra classe però, no és encara capaç de fer res. Per tal que ens serveixi d'alguna cosa més que de magatzem de llibres i revistes, li hem d'afegir mètodes.

Un mètode és un grup d'instruccions al qual li posarem un nom, i que ens servirà per a fer tasques concretes. La forma sintàctica és la següent:

<modificador tipus> <nomdelmetode> ( <paràmetres> ) {
    <feina a fer>;
    return <una expressió>;
}

Aclarim ara què volen dir els termes "modificador", "grup" i "paràmetres" en aquest context:

  • Modificador: Ens descriu com ha de ser el mètode: amb la clàusula "public", el mètode serà visible a qualsevol programa que utilitzi la nostra classe, amb "static" el mètode serà únic per a tots els objectes de la classe -exactament igual que funcionen les constants- i, amb "final" impedim que el mètode es pugui reescriure (override) en les classes filles de la classe Publicacio.

  • Tipus: Quin tipus d'informació ens retorna el mètode: cap valor?; un tipus?;una classe? Si el mètode no retorna res el grup és "void". En aquest cas la darrera expressió "return" és innecessària i il·legal.

  • Paràmetres: Tots els mètodes tenen, al final del nom, una parella de parèntesis, encara que no continguin res. Quan el nostre mètode necessita alguna informació externa per a poder operar, la passem en forma de paràmetres. Quan fem una declaració de paràmetres posem en primer lloc el tipus del paràmetre i després el nom del paràmetre. A Java no existeix la diferència de pas de paràmetres per valor o per referència d'altres llenguatges. Tots els paràmetres que passem ho són per valor: si a dins del mètode modifiquem el valor del paràmetre, aquesta modificació no queda reflectida a la variable externa.

Fem ara combinacions en la declaració de mètodes per a la nostra classe Publicacio.

  • L'administrador de la biblioteca ens demana que creem una utilitat que ens permeti esbrinar si una certa publicació s' ha deixat en préstec:

    public boolean isEnprestec(int codi) {
        boolean hies = metodedeconsultadeprestec(codi);
        return hies;
    }

    El mètode és public -visible per qualsevol programa que utilitzi la classe Publicacio- i retorna un valor de tipus boolean que ens indica si el llibre s'ha deixat en préstec. Li passem el paràmetre codi, que és l'identificador enter d'aquest llibre a la nostra base de dades. La gràcia rauria ara en la possibilitat de crear un mètode privat, intern a la classe i invisible des de l'exterior, amb la consulta a la base de dades sobre l'estat d'aquest llibre:

    private boolean metodedeconsultadeprestec(int codi) {
       <connexio a les dades>;
       <consulta a la taula>;
       <retorn del valor>;
    }

  • L'administrador ens demana que creem una utilitat per identificar una publicació a partir del seu número d'inventari:

    public Publicacio findByPrimaryKey(int codi) {
        Publicacio publicacio=unmetodederecercaalabasededades(codi);
        return publicacio;
    }

  • L'administrador ens demana un procediment per fer un préstec d'una publicació a un lector:

    public void setEnprestec( int llibre, int lector) {
        prestaunllibre(llibre,lector);
    }

    En aquest cas el mètode no torna res -void-. Li passem dos paràmetres, el codi del llibre que volem prestar i el codi del lector que rep la publicació. Observem com, en aquest cas, el mètode pot utilitzar-se directament. Els mètodes que tenen tipus, en canvi, retornen un valor que ha de ser assignat a alguna variable.
  Taula d'equivalències de qualificacions
   

Ara farem un programa que ens servirà per a fer i representar diferents sistemes de qualificacions. A través d'ell il·lustrarem la declaració de mètodes i el pas de paràmetres.

El director del nostre institut ens demana que construïm una taula amb equivalències de qualificacions segons diferents escales de qualificació:

 

public class ConversorNotes {
/**
*
* Programa de conversió de qualificacions entre diferents sistemes
*
*/

    static int notamaxima = 10;

    public static void main(String[] args) {
        System.out.println("Conversor de qualificacions");
        System.out.println("---------------------------");
        System.out.println("No."+"\t"+"Lletra"+"\t\t"+"Progressa"+
                           "\t\t"+"Bona nota ");
        System.out.println();
            for (int n=1; n<=notamaxima; n++) {
                picaNotes(n);
            }
    }

    public static void picaNotes(int linia) {
        System.out.println(linia+"\t"+
                           lletra(linia)+"\t"+
                           progressa(linia)+"\t"+
                           totvabe(linia));
    }

    static String lletra(int nota) {
        String enlletra="";
            switch( nota ) {
                case 1 :
                case 2 :
                case 3 :
                case 4 : enlletra="Insuficient"; break;
                case 5 : enlletra="Suficient "; break;
                case 6 : enlletra="Be \t"; break;
                case 7 :
                case 8 : enlletra="Notable "; break;
                case 9 :
                case 10 : enlletra="Excel.lent"; break;
            }
        return enlletra;
    }

    static String progressa(int nota) {
        String enlletra="Progressa adequadament";
            switch( nota ) {
                case 1 :
                case 2 :
                case 3 :
                case 4 : enlletra="Necessita millorar";
            }
        return enlletra;
    }

    static String totvabe( int nota) {
        return "molt bona nota!";
    }

}

   
  Compilem i executem. Ha de produir una sortida com la següent
   
 
   
   
 
Amunt