Enrera
Mòdul 1
Iniciació a la programació en Java
  Pràctica
1
2
3
4
   
Exercicis
Exercicis
 
 

L'objectiu d'aquesta pràctica és familiaritzar-se amb l'entorn JCreator mentre descobrim algunes de les seves funcionalitats bàsiques.

   
Desenvolupament de la pràctica
   
Revisarem l'estructura de finestres de JCreator, descobrirem com obtenir ajuda de la documentació del SDK, veurem els avantatges de separar en carpetes diferents el codi font de les classes compilades, crearem una eina personalitzada per tal de documentar els nostres projectes i, finalment, aprendrem a crear classes des de l'expert de creació de classes.
   
  Primers passos amb JCreator
   
Atenció !

Tots els entorns de programació tenen força elements en comú. Si hem treballat amb Microsoft Visual C++, Delphi o Visual Basic, la interfície de JCreator ens resultarà molt familiar: un menú amb barra d'eines, un editor de text i diverses finestres amb informació sobre l'estructura del programa, les sortides, els avisos, etc.

Les finestres de JCreator

JCreator distribueix la gestió d'un projecte en una finestra principal, la d'edició de codi font,i quatre finestres complementàries que ofereixen al programador diferents informacions de l'estat del projecte. El conjunt de finestres és el següent:

  • Finestra d'edició de programes, distribuïda en tantes pestanyes com fitxers tinguem oberts a la vegada.
  • FileView. Ens mostra, en forma d'arbre, l'estructura de fitxers de tot l'espai de treball. A l'arrel tenim el nom de l'espai i d'aquest en pengen els diferents projectes amb les seves carpetes i fitxers. Es tracta d'un arbre amb una estructura lògica, no física -això ben segur que ens sorprendrà inicialment-. Si creem una carpeta a la finestra FileView, aquesta carpeta no es crea pas al disc dur!. Tanmateix, des de FileView no podrem esborrar fitxers, només treure'ls de la vista.

Finestra FileView

  • ClassView. Aquesta finestra mostra la carcassa de la classe activa a la finestra FileView o a la finestra d'edició i ens permet una localització d'elements i una navegació fàcils. Podem veure i accedir a tots els mètodes i variables d'una classe i també identificar i navegar pels paquets importats. Provem-ho: fem doble-clic sobre el mètode main(String[] args) de la classe ProvaFuncionament. JCreator ens porta al lloc on l'hem declarat dins la finestra d'edició.

Finestra FileView

  • PackageView. De fet és una versió més extensa de ClassView. Aquesta finestra, que s'obre alternativament a ClassView, mostra l'estructura completa de paquets del projecte i fa possible la navegació per totes les classes del projecte actiu. Com que en el projecte modul1 no hem declarat cap paquet -això ho farem més endavant-, JCreator ens mostra el paquet implícit amb les dues classes que el componen:

Finestra Package View

  • Output. És la finestra que centralitza les sortides de compilació, depurat, recerques i de les eines personalitzades. A través d'ella podem saber si un programa compila bé o anar seguint les traces de depuració, per exemple.
Finestra Output

La distribució d'aquestes finestres per l'àrea de treball de l'entorn és completament personalitzable. Podeu obrir-les o tancar-les a través dels botons i també podeu posar-les on us agradi tot arrossegant i deixant ("drag-and-drop") amb el ratolí.

Finalment, si ens interessa concentrar-nos en el codi que estem escrivint, sense interferències de finestres i menús, podem utilitzar la vista en pantalla sencera ( View | Full Screen).

   
Pràctica Obtenir ajuda
   
 

Per a programar amb agilitat és fonamental accedir fàcilment a la documentació de les classes, com a mínim a la documentació de totes les llibreries que vénen amb el SDK. Si hem instal·lat correctament la documentació del SDK al nostre ordinador, i li hem indicat al JCreator on és, podem obrir la documentació amb la combinació de tecles Ctrl-F1. JCreator actuarà de dues maneres diferents segons el context. Experimentem-ho:

  • Activem l'entorn i obrim ProvaFuncionament.java.


  • A l'editor de text fem clic sobre String[]


  • Premem Ctrl-F1. JCreator ens obrirà una finestra en una pestanya nova amb la documentació disponible sobre la classe String.

Aquesta és l'eina d'accés a l'ajuda més còmoda. Si tenim una dificultat amb una classe del SDK senzillament la marquem a l'editor i premem Ctrl-F1.

Què passa quan l'editor no troba la paraula a la documentació del SDK?

  • A l'editor ens situem sobre la paraula void  (es tracta d'una paraula reservada i no d'una classe).


  • Premem Ctrl-F1. JCreator no troba la classe i ens obre una finestra com aquesta:


  • Finestra d'ajuda

A la finestra anterior podem investigar lliurement la documentació del SDK: fins i tot podem fer recerques interactives a la pestanya "Index". Investigueu les possibilitats d'aquesta finestra com a font d'ajuda a la programació

   
  Separar el codi font de les classes compilades
   

Quan un projecte es fa gran pot contenir dotzenes de fitxers. Si no especifiquem res en sentit contrari, el compilador sempre col·loca els fitxers de bytecodes amb l'extensió .class en el mateix directori on estan les fonts (*.java). Això complica bastant la llegibilitat del projecte. És millor que les fonts estiguin en un directori i les classes compilades en un altre. Així ho farem a partir d'ara a les pràctiques d'aquest curs.

   
Pràctica
  • Creem el directori que contindrà les classes compilades a l'interior de la carpeta del projecte. Ha de tenir el nom de classes. (Per exemple, c:/d110src/d110ws/modul1/classes).


  • En JCreator obrim l'opció de menú Project | Settings. A la caixa "Output path" hi escriurem el nom de la carpeta de sortida, per exemple, C:\D110src\d110ws\modul1\classes. Tanquem la finestra.


  • Comprovem el funcionament compilant la classe ProvaFuncionament.java. El compilador ens ha deixat el fitxer ProvaFuncionament.class al directori classes.
Atenció !
  • Els programadors de Java habitualment tenen un mínim de tres carpetes interiors dins de la carpeta d'un projecte: /src que conté les fonts del programa, /classes amb els fitxers compilats i /doc amb la documentació del projecte. També és freqüent la presència d'altres carpetes com /conf, la qual conté fitxers de configuració, o /lib, on es posen els paquets, habitualment comprimits en fitxers *.jar, procedents d'altres programadors
   
  Les eines personalitzades (creació d'una eina per a la documentació dels nostres projectes)
   
Pràctica

A la pràctica anterior hem après a documentar una classe amb el programa Javadoc. Ara integrarem aquesta eina amb JCreator, per tal de no haver de cridar-lo des de la línia de comandes, i la configurarem de tal manera que ens servirà per a crear tota la documentació del projecte.

Com que a Java és freqüent accedir a programes que funcionen des de la consola, JCreator permet definir eines personalitzades que criden aquests programes i els passen els paràmetres corresponents. Al menú d'eines de l'entorn, hi tenim deu botons per a eines personalitzables . Experimentem ara amb la creació d'una tasca personalitzada:

  • Anem a l'opció de menú Configure | Option | Tools.


  • Cliquem sobre el botó "New". Això ens obre un menú amb diferents tipus de programes per a integrar. Poden ser comandes del DOS, fitxers d'ajuda, programes, creació de paquets JAR, etc.


  • Triem l'opció "Program" i naveguem fins on tinguem instal·lat el SDK. A la carpeta /bin hi ha el fitxer javadoc.exe que ja coneixem. El seleccionem.


  • Aquesta acció dóna la tasca d'alta. Ara ens apareix com una branca de l'arbre tools. Quan hi cliquem a sobre, podrem configurar l'eina segons les nostres necessitats.


  • A la caixa arguments hi escriurem això:

    -private -version -author -docfilessubdirs -d $[PrjDir]\doc -classpath $[PrjDir]\classes -sourcepath $[PrjDir] $[JavaFiles]

    que vol dir que que engegui javadoc, tot incloent-hi la versió de programa, l'autor, els camps privats de les classes, que generi la documentació a la carpeta doc del directori del projecte, i que busqui els fitxers amb les classes al directori /classes. No cal preocupar-se si de moment hi ha coses que no entenem.

  • Com a opcions de l'eina, li demanarem que desi en primer lloc els documents oberts (save all documents first) i que capturi la sortida del programa a la finestra de sortides de JCreator (Capture output).


  • Creem en el directori del projecte, la carpeta doc, per exemple,

    c:/d110src/d110ws/modul1/doc>

Ja tenim un botó que ens crearà la documentació de tot el projecte per a qualsevol dels projectes que fem, sempre que respectem la ubicació de les carpetes. Verifiquem el correcte funcionament de la integració:

  • Cliquem sobre el botó amb el símbol d'eina número 1 (o piquem amb el teclat la seqüència de "Control-nº de l'eina", "Control-1" en aquest cas). La finestra de sortides, a la pestanya "output", ens anirà informant del procés de creació de la documentació.


  • Anem a la carpeta /doc del directori del projecte. Observarem un conjunt de documents HTML (pàgines Web). Obrim index.html. A partir d'aquí podem navegar sobre la documentació de qualsevol paquet i classe del nostre projecte.
   
  Escriure una classe des d'un expert
   
Pràctica L'expert de classes és una de les eines que estan disponibles en pràcticament tots els entorns de Java. Està pensat per a facilitar l'execució de tasques repetitives durant el procés d'escriptura de les classes (Java és un llenguatge molt eficaç, però tediós pel que fa a l'escriptura d'alguns processos).

Per a provar el seu funcionament escriurem una classe nova, Llibre.java, que contindrà la informació mínima per a definir qualsevol tipus de llibre.

  • Obrim l'expert de classes, "Project | New Class".


  • Escrivim "Llibre" com a nom de classe - atenció amb la primera majúscula! - i deixem el destí del fitxer tal qual suggereix l'expert.


  • Deixem java.lang.Object com a classe base. Com ja sabem, qualsevol classe que escrivim arrela a java.lang.Object. Però podem triar qualsevol classe no final que JCreator pugui identificar.


  • Com que encara no treballem amb paquets, deixarem la caixa corresponent en blanc.


  • Ara hem de triar les opcions de la classe. Aquestes opcions les veurem al detall quan estudiem el sistema de classes de Java. Marcarem "Public" perquè volem que aquesta classe es pugui veure des de fora del paquet al qual pertany, deixarem sense marcar "Abstract" i "Final". També marcarem "Generate default constructor" i "Generate main method" per tal que l'expert ens crei un mètode constructor per a la classe i un mètode principal.


  • Ara obrirem la pestanya "Variables". Aquí podem crear la llista de variables que utilitzarà la nova classe. Hi entrem les següents dades, sense deixar les cometes, i tot respectant majúscules i minúscules:
Tipus
Nom
Valor
String autor "Froufe, Agustín" marcar "Private"
String títol "Java 2" marcar "Private"
String editorial "Rama" marcar "Private"
String ISBN "84-7897-429-6" marcar "Private"
int pàgines 673 marcar "Private"
String ciutat "Barcelona" marcar "Private"
String data "2000" marcar "Private"
       
  • Finalment, obrim la pestanya "Methods". Afegirem dos mètodes a la classe:
Tipus
Nom
 
String nomLlarg() marcar "Public"
String nomCurt() marcar "Public"
  • Piquem sobre el botó "OK". JCreator ens crearà un fitxer, Llibre.java, i l'afegirà a la finestra de fitxers ("FileView"). Fem doble-clic sobre Llibre.java a la finestra de fitxers i s'obrirà el fitxer a la finestra d'edició, amb el codi següent:

    public class Llibre {
        private String autor = "Froufe, Agustín";
        private String titol = "Java 2";
        private String editorial = "Rama";
        private String data = "2000";
        private String ciutat = "Barcelona";
        private String ISBN = "84-7897-429-6";
        private int pagines = 500;

        public static void main(String[] args) {
            // TODO: Add your code here
        }

        public String nomLlarg() {
            // TODO: Add your code here
        }

        public String nomCurt() {
            // TODO: Add your code here
        }

       
    public Llibre() {
            // TODO: Add your code here
        }
    }


    Quan les classes són senzilles i elementals, l'esforç d'utilitzar l'expert compensa poc. Però quan es tracta d'una estructura complexa o quan s'han de crear un grapat de classes alhora després d'una sessió d'UML, la utilització de l'expert escurça considerablement el temps de producció.

  • Observeu com JCreator ha sagnat (indent) les línies del codi. Cal fer sempre el sagnat d'aquesta forma, perquè és l'única manera d'aconseguir un codi llegible. La norma és que cada tabulació ha de ser de quatre espais.

  • Ara completarem la classe, la documentarem i en comprovarem el funcionament. Hem destacat en groc el text nou que hem d'incorporar al codi:

    /**
    * Una classe que representa un llibre. Per a fer-la servir
    * heu de fer:
    *
    * <pre>
    * Llibre unllibre = new Llibre();
    * </pre>
    *
    * @author Carles Romero
    * @author Angel Solans
    * @version 0.1
    * @since java 1.3.1_04
    *
    */
    public class Llibre {
        private String autor = "Froufe, Agustín";
        private String titol = "Java 2";
        private String editorial = "Rama";
        private String data = "2000";
        private String ciutat = "Barcelona";
        private String ISBN = "84-7897-429-6";
        private int pagines = 500;

        public static void main(String[] args) {
            Llibre unllibre = new Llibre();
            System.out.print("Nom Llarg: ");
            System.out.println(unllibre.nomLlarg());
            System.out.print("Nom Curt: ");
            System.out.println(unllibre.nomCurt());
        }
     
    /**
    * Retorna la descripció del llibre
    *
    * @return Descripció del llibre amb tots els camps disponibles
    * @param Aquest mètode no té paràmetres
    *
    */
        public String nomLlarg() {
            return autor+", "+
            titol+", "+
            editorial+". "+
            ciutat+". "+
            data+". ISBN "+
            ISBN;
        }
     
    /**
    * Retorna una descripció curta d'un llibre
    *
    * @deprecated
    * @see Llibre.nomLlarg()
    * @see <a href="Llibre.html#formatLlarg()">Llibre.nomLlarg()</a>
    * @param Aquest mètode tampoc té paràmetres
    * @return Descripció del llibre amb dos camps, autor i títol
    *
    */
        public String nomCurt() {
            return autor+", "+titol;
        }
     
    /**
    * Això és el <b>constructor</b>. Quan creem una instància
    * de la classe Llibre, les primeres instruccions que
    * s'executen són les que hi ha dins d'aquest mètode
    * especial
    *
    */
        public Llibre() {
     
        }
     

    }


    La nostra nova classe té un grapat de variables que en descriuen el seu estat (autor, títol, editorial, etc.) i pot fer dues coses, que són retornades en forma de cadena (string): donar-nos un nom llarg ( nomLlarg()) o un de curt ( nomCurt() ). A més a més, la classe Llibre també té un tercer mètode: main, que conté les instruccions a seguir si executem directament el fitxer Llibre.class.

  • Si executem el fitxer Llibre.class, el programa segueix els següents passos:
    • Es crea un objecte Llibre (amb més precisió, direm que es crea una instància de la classe Llibre):

Llibre unllibre = new Llibre();

    • Seguidament es demana la sortida per la consola de quatre cadenes (strings), a través de  System.out.print()  System.out.println(), entre elles les que produeixen els mètodes nomCurt() i nomLlarg() de l'objecte "unllibre" (unllibre.nomCurt() i unllibre.nomLlarg()).

     

  • Executem des de JCreator el fitxer Llibre.java des de l'opció "Build | Execute File". Si no hi ha problemes de compilació, obtindrem la següent sortida:

   
Atenció !
  • Observeu ara la documentació de la classe; hi hem afegit algunes idees noves!:

    • Al text li podem afegir marques HTML (HTML tags) que després apareixen a la documentació. Com per exemple la parella  <PRE> / </PRE>.

    • A més de text podem afegir etiquetes. En aquesta documentació n'hem utilitzades bastantes: @author, @version, @since, @see, @return i @param. Genereu la documentació del projecte amb la recentment estrenada eina personalitzada número 1 i observeu com les etiquetes afecten al contingut dels fitxers HTML. Aquí trobareu una descripció més àmplia del sistema d'etiquetes

    • Heu d'anar en compte, però. El documentador javadoc.exe no llegeix cap etiqueta, marca o text que estigui abans de les clàusules import, les quals solen estar a la capçalera del corresponent fitxer *.java. Si el fitxer no conté cap clàusula import, no cal amoinars'hi...
  Posem ordre a tot això: l'estructura de directoris

Ara ja estem en disposició d'establir l'estructura de directoris que haurem de mantenir durant tot el curs:

 

  • La carpeta ElMeuWorkspace correspon a l'arrel d'on pengen els diversos projectes. Podeu posar-li aquest nom o un altre que us abelleixi més: CursD110, Curs_Java, etc. Aquesta carpeta només conté un fitxer *.jcw que JCreator crea per defecte i que no s'ha de manipular.

  • La carpeta ElMeuProjecte que ha de contenir tots els fitxers i subcarpetes d'un cert projecte. En aquest curs, això vol dir una aplicació Java o un Applet. En el cas dels exercicis de cada mòdul, el nom d'aquesta carpeta se us indica expressament. Aquesta carpeta conté uns fitxers *.jcp i *.txt creats per JCreator i que tampoc heu de manipular i, a més, els fitxers *.java de codi font Java (que escriureu vosaltres!).

  • La carpeta classes que, com ja hem dit més amunt, ha de contenir els fitxers Java compilats *.class.

  • La carpeta doc ha de contenir la documentació de les classes, elaborada amb javadoc.exe, si és que se us demana.
Per a cadascun dels exercicis de cada mòdul se us demanarà que envieu al vostre tutor la carpeta ElMeuProjecte, arrel del projecte en què consisteix l'exercici, no pas amb aquest nom, sinó amb el que s'hi us indiqui. En respectar aquesta estructura, facilitareu moltíssim la correcció al vostre tutor. Gràcies!
   
 
Amunt