|
|||||||||||||||||
![]() |
|||||||||||||||||
Pràctica |
![]() |
Exercicis
|
|||||||||||||||
Els paquets: fer codi i aprofitar-lo per a qualsevol altre programa. |
|||
![]() |
En si mateix Java és un llenguatge senzill. Gran part de la seva força, de la capacitat de fer les tasques més complexes o resoldre els problemes més específics està en la gran quantitat de paquets de què disposa. Un paquet (package) és un conjunt de classes organitzades internament que "es veuen" les unes a les altres i comparteixen els seus recursos i capacitats. En certa forma, un paquet és un "mòdul" del llenguatge, el qual puc incorporar optativament en els meus programes sempre que el necessiti. Per exemple, una bona part de les utilitats per a manipular cadenes estan en un paquet. Aquest paquet té el nom "java.text". Conté classes per a formatar dates (DateFormat) , formatar nombres que tenen decimals (DecimalFormat) i un grapat més. Si jo vull utilitzar aquestes classes ho de d'especificar tot important el paquet a la capçalera del codi dels meus programes. Si penso utilitzar la classe java.text.DateFormat en un programa, he d'escriure aquesta primera línia a dalt de tot del codi:
Amb això, ara ja podria utilitzar la classe DateFormat, però no les altres classes que hi ha al paquet. Ara, si escric:
llavors ja podré utilitzar DateFormat, DecimalFormat i la resta de classes del paquet. El rendiment global d'un programa no es degrada pel fet d'importar paquets sencers. Per això, molts programadors importen tot el paquet quan en necessiten, encara que sigui només una classe. En contrapartida, un programa és més llegible si només importa allò que necessita. Podeu triar l'opció que vulgueu quan escriviu els vostres programes. Els paquets que venen amb el SDK comencen per "java." N'hi ha molts, cada cop més, en la mesura que va creixent el propi llenguatge. Alguns dels més importants són: java.lang, conté les funcions pròpies del llenguatge. Aquest no cal importar-lo, ja que el compilador considera que l'importem cada cop que fem un programa. java.util, amb tot d'utilitats addicionals. java.text, amb utilitats de format i manipulació de textos. java.math, amb funcions matemàtiques. java.io, amb rutines d'entrada i sortida java.net, amb utilitats de xarxa. java.applet, per a construir applets. java.awt, per a gràfics i interfícies gràfiques d'usuari (GUI). java.sql, classes per a accedir a bases
de dades. Hi ha, però, dues diferències fonamentals entre els nostres paquets i els que porta el SDK de Java:
|
||
![]() |
Crear un paquet:
|
||
Imaginem que el nostre cap ens encarrega que preparem un programa que serveixi per traduir els dies de la setmana de número a text en català. Ens diu que el programa s'ha de dir DiaenCatala i ha d'estar a disposició de tots els programes de la nostra empresa dins el paquet d110.utils. Creem en primer lloc el programa de traducció que ens demanen, tot incorporant-lo al paquet d110.utils. Observeu la declaració package d110.utils; al començament del programa. És l'únic requisit que hem de seguir per poder informar que el programa DiaenCatalà pertany al paquet d110 i al subpaquet utils |
|||
|
|||
Enregistrem el programa i el compilem amb JCreator. El programa ens avisa que ha completat el procés de compilació sense problemes. Tot i que sembla que no ha passat res d'estrany, si anem a la carpeta on tenim DiaenCatala.java, veurem que ha passat quelcom de nou; busqueu el fitxer corresponent DiaenCatala.class: no el trobaru ni al costat del fitxer font ni a la carpeta /classes, si és que teníem separats el codi dels fitxers compilats. Sí que trobarem una carpeta nova que es diu /d110. Obrim-la. Observarem que a dins s'hi ha creat una carpeta nova que es diu utils. Obrim-la i a l'interior hi trobarem el fitxer DiaenCatala.class. Endevineu què ha passat? Quan el compilador de Java troba una definició de package en un programa, va creant una estructura jeràrquica de directoris equivalent als noms dels paquets, tants directoris com paraules separades per punts. Al final de tot hi deixa el fitxer del programa compilat. Ara, per a la utilització del nostre programa DiaenCatala des d'un altre programa, només ens cal fer la importació amb l'expressió import d110.utils.DiaenCatala; Provem-ho. Tornem a obrir JCreator i fem aquest programa, que es diu "QuinDia": |
|||
|
|||
Hem importat DiaenCatala juntament amb java.util.Date, i en cridem el seu mètode getDia() per fer una sortida en pantalla que ens informa de quin dia de la setmana és avui, en català. Aquest programa funciona perquè el paquet d110 és a l'arrel de l'aplicació QuinDia. Com que el compilador, en primer lloc, busca els paquets en aquest directori, l'ha trobat sense dificultat. Hem de reconéixer que això no és gens pràctic. Hem de tenir tots els programes auxiliars a l'arrel del directori de treball? És clar que no. El directori-paquet d110 pot estar a qualsevol lloc de l'ordinador, on ens sigui més còmode. L'únic que hem de fer és dir-li al compil·lador on el pot trobar. Hem decidit deixar el paquet d110 en un directori que es diu c:/java/paquets, lloc on anirem posant tots els programes auxiliars.
|
|||
![]() |
Incorporar llibreries o paquets a JCreator: | ||
Així doncs, cada cop que necessitem recursos externs, hem de treballar amb directoris, subdirectoris i fitxers? No, és clar. Els dissenyadors de Java ja van pensar que això no era massa còmode. Per tal de facilitar encara més la feina, van fer possible que tots els directoris d'un paquet es poguessin comprimir en un sol fitxer ZIP. La Màquina Virtual de Java sap llegir dins dels fitxers ZIP i els tracta igual que si fossin directoris oberts. De fet, el SDK incorpora una utilitat per a fer la feina de comprimir directoris que contenen paquets i deixar-los com a arxius de llibreria de Java. El programa es diu jar.exe i es troba al directori /bin de la nostra distribució de Java. Construeix fitxers amb l'extensió *.jar que són fitxers comprimits en format ZIP que poden contenir informació addicional per a Màquina Virtual de Java q ue els ha de llegir. |
|||
Crear una llibreria amb JAR.exe | |||
![]() |
Si en algun moment considerem que el paquet d110 ja és complet i que no haurem de compilar més les classes que el componen, el podem tancar en el fitxer d110.jar. Llavors aquest fitxer, que ja és una llibreria de Java, es pot deixar a qualsevol lloc, es pot distribuir i es pot incorporar amb més comoditat als nostres programes, en substitució del directori d110 i les seves carpetes Fem-ne la prova:
|
||
![]() |
|||
|
|||
![]() |
A la pràctica 4 del mòdul 1 vàrem aprendre a afegir eines personalitzades a JCreator. Seríeu capaços d'afegir la utilitat jar.exe per tal facilitat la creació de llibreries de Java? |
||
![]() |
|||