![]() |
Pràctica 3: Camps, Paràmetres i Variables Locals. Els diferents tipus de mètodes. ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
En aquesta pràctica estudiaràs els tres tipus de variables amb que treballen les classes de Java: els camps, que ja coneixes, els paràmetres i les variables locals. Seguiràs aprofundint, també, en la classificació dels mètodes de Java en funció del tipus de feina que fan. |
||||||
Passar dades als mètodes a través de paràmetres | ||||||
La forma en què els mètodes recullen informació de l'exterior és a través del seus paràmetres. Els has estat utilitzant des del primer mòdul i també a la classe Mobil. Observa aquest mètode:
Serveix per a carregar la targeta, és a dir, afegir una certa quantitat al saldo de què disposem. Aquest és un mètode void, que, tal com està no ens retornarà el nou valor del camp saldo, només farà alguna feina. La feina que ara com ara tenim en el codi que hem mostrat és incrementar el saldo i el mètode ho fa utilitzant una sentència d'assignació amb l'operador +=. Com podem fer per demanar-li al mètode la quantitat en que s'ha d'incrementar el saldo? Establim aquesta comunicació amb el mètode mitjançant un paràmetre. En aquest exemple el paràmetre es diu quantitat. El posem entre parèntesis immediatament desprès del nom del mètode a la seva capçalera. Observa que hem d'especificar el tipus de dada que conté el paràmetre. Nosaltres passem un enter (int quantitat). Si has de passar més d'un paràmetre als teus mètodes, els has d'anar posant un darrere l'altre i separant-los amb comes. Per exemple, imagina que la companyia telefònica ofereix una bonificació a tots els usuaris que carreguin la seva targeta a les oficines de la companyia. Podríes escriure un nou mètode de càrrega que ho reflectís:
Si tens curiositat per dominar correctament la terminologia del llenguatge has de saber que el paràmetre que escrivim a la capçalera dels mètodes té el nom de paràmetre formal. El valor que li donem, el que té quan entra al cos del mètode és el paràmetre actual. Li diem així perquè, un cop dins del mètode, el valor del paràmetre pot anar canviant. |
||||||
Visibilitat i cicle de vida de les variables. Variables locals | ||||||
Al mètode anterior li hem passat dos paràmetres. Quan introduïm aquesta informació al mètode, la màquina de Java la pren i en col·loca el seu valor a la memòria RAM de l'ordinador. També considerem el valor dels camps o variables d'instància. Sovint haurem de crear variables auxiliars que ens ajudin en la feina que fan els mètodes. Ara és hora de fer-se dues importants preguntes que has de saber contestar perfectament bé si t'interessa fer poques errades de programació:
Aquests aspectes constitueixen la visibilitat i el cicle de vida de les variables. És un tema central de la programació que Java resol d'una manera senzilla, seguint les regles següents:
Per a demostrar aquestes característiques, pots jugar una estona a fer saltar el programa. Ara et proposem unes modificacions a la classe Mobil que incompleixen els principis de visibilitat de Java. A veure si dedueixes per què es produeixen.
|
||||||
![]() |
Primera Situació: Utilitzar variables fóra del cos del mètode que les ha creades: Obre amb el
Has d'obtenir un error en temps de compilació que t'avisarà
amb una frase de l'estil cannot resolve symbol - variable
quantitat. El que succeeix és que l'enter quantitat
era un paràmetre del mètode carrega
i només és visible al seu interior. Com
que el que hem fet és un exemple d'errada, convé que esborris
la línia que provoca aquesta anomalia ( i el mateix en els altres
exemples que et proposem en aquesta part de la pràctica.) Segona Situació: Utilitzar variables fora de les claus { } on han estat creades. Modifica el mètode carrega de la següent forma:
Observa que hem posat claus d'una forma arbitrària. En situacions reals de programació les claus s'utilitzen, a més de fer-ho en la definició del cos dels mètodes, com ja saps, en sentències de control de flux que començaràs a aprendre a la pràctica següent. Si intentes compilar la classe amb aquest mètode tornaràs a rebre el mateix avís d'error del compilador: has intentar utilitzar la variable numeroCarregues fora del fragment de codi delimitat per {} on l'has creat. Observa la variable numeroCarregues i observa també aquesta modificació del mètode carrega amb la creació d'una nova variable, la variable lògica (boolean) isClientEstrella.:
Modifica el codi, recompila i carrega el mòbil vàries vegades, fins a passar de 50000 unitats de saldo. Observa com varia la resposta del programa. A la pràctica següent estudiaràs el detall d'aquesta acció. El que ara ens interessa és que et concentris en les humils variables numeroCarregues i isClientEstrella. Aquest tipus de variables són conegudes com a variables locals.
Les variables locals són una mica com els peons d'una partida d'escacs, modestos però eficients. Tenen una peculiaritat quant a la seva inicialització respecte els camps: recordes que els camps s'inicialitzen per defecte només declarar-los? Les variables locals no.
Pensa ara en la variable isClientEstrella. L'hem creat com a variable local. Coneixent el què has après sobre visibilitat de variables, quin lloc creus que seria més adient per a una informació d'aquest tipus, en una variable local o en un camp? Perquè?
Ara estàs ja en condicions d'identificar els tres tipus de variables que s'utilitzen a les classes de java: els camps, els paràmetres i les variables locals. Resumim una mica la seva visibilitat i cicle de vida:
|
|||||
Diferents tipus de mètodes | ||||||
La classe Mobil disposa d'alguns dels tipus de mètodes més estesos en la programació Java:
És important que siguis conscient de quin tipus de mètode estàs fent quan programes perquè això farà que el codi que escrius tingui una bona qualitat. Observem amb una mica de detall les característiques de cadascun dels tipus. |
||||||
Mètodes d'accés a dades | ||||||
La nostra classe disposa d'un grup de mètodes d'aquest tipus:
La seva feina és molt simple: retornen el valor o estat de camps que, al declarar-los privats, no són visibles des de l'exterior de l'objecte. Per extensió, qualsevol mètode que retorni informació sobre l'estat d'un objecte el classifiquem com a mètode d'accés. Observa com en tots els casos (saldo, preu, número, etc) hem adoptat una forma uniforme de batejar els mètodes accessors: get + el nom del camp privat al que volem accedir. Pensa que no està fet per caprici: és una altra de les convencions del llenguatge que has d'utilitzar invariablement i que serveix a qualsevol lector humà del codi per a interpretar que estem fent un accés a un camp o una petició de dades. I no només els lectors humans; si et dediques a la programació professional amb Java descobriràs que algunes tecnologies obliguen els programadors a utilitzar aquesta sintaxi.
|
||||||
Mètodes de transformació de dades | ||||||
Qualsevol mètode que canvia l'estat de l'objecte és un mètode transformador. Aquest n'és un exemple: |
||||||
|
||||||
Observa que el mètode rep un paràmetre i canvia l'estat de l'objecte: en modifica el saldo mitjnçant un operador -=. Com que la capçalera o signatura del mètode és void, no retorna res. En general, els mètodes transformadors no necessiten tornar res, aquesta és una feina que hem d'intentar deixar als mètodes d'accés. |
||||||
Mètodes de sortida | ||||||
Es tracta de mètodes que tenen com a funció la sortida de dades cap a diferents tipus de dispositius. Com aquest exemple: | ||||||
|
||||||
Observa que es tracta de mètodes de tipus void; la sortida es fa a l'interior del mètode, però el mètode, en sí mateix, no retorna el valor de cap variable. En aquest exemple, la sortida es fa a la consola de text, però amb Java podríem fer sortides cap a altres dispositius, des de fitxers a pàgines web.
|
||||||
![]() |
Modifica el mètode printSaldo() canviant-hi els System.out.println() per System.out.print(); adequa una mica la segona sentència de manera que quedi com es veu tot seguit i observa les diferències de sortida amb l'original. | |||||
|
||||||
![]() |
Diuen els experts que quant menys barregem les funcionalitats dels mètodes, més qualitat tindran els nostres programes. Moltes vegades estaràs tentat de fer mètodes d'accés que també fan modificacions sobre l'estat de l'objecte. No està prohibit i alguns cops és inevitable, però és millor intentar separar les tasques en mètodes diferents: si pots, construeix mètodes void transformadors per a fer |