Diferència entre revisions de la pàgina «DAM-M3-UF4. Sintaxi»
(→Declaració de variables i assignació) |
(→Modularitat. Mètodes) |
||
Línia 266: | Línia 266: | ||
Les funcions són mètodes que retornen un valor | Les funcions són mètodes que retornen un valor | ||
− | La Declaració de funcions | + | La Declaració de '''funcions''' |
<pre> | <pre> | ||
Línia 277: | Línia 277: | ||
</pre> | </pre> | ||
− | On la declaració de paràmetres és una llista | + | On la declaració de paràmetres és una llista del tipus |
− | Tipus variable, Tipus variable, ..., Tipus variable | + | <pre>Tipus variable, Tipus variable, ..., Tipus variable</pre> |
− | + | * ''static'' ho farem servir per mètodes de classe. | |
Les accions són mètodes que no retornen cap valor | Les accions són mètodes que no retornen cap valor | ||
− | La Declaració | + | La Declaració '''d'accions''' o procediments |
<pre> | <pre> |
Revisió del 16:55, 5 set 2012
torna M3 - Programació
Contingut
Sintaxis
El primer programa
import java.io.*; public class PrimerPrograma { public static void main(String[] args) { System.out.println("(''Text qualsevol'')"); // Display the string. } }
- A Java tot el codi va dins de les classes (Funcions + Dades)
- Per determinar on comencen i acaben les estructures (classe, funcions, estructures de control) s’utilitzen els caràcters { }
- La classe principal ha de tenir el mateix nom que el fitxer que la conté (Case sensitive)
- La paraula import indica els recursos externs que usem dins el nostre programa (API de java o recursos propis)
- Les aplicacions d'escriptori (No Applets per exemple), dins de la classe principal sempre tenen la funció main. Aquesta és la funció per on entra el programa a l’execució. La capçalera de la funció és obligatòriament la de l'exemple.
- Per finalitzar qualsevol instrucció cal posar “;”
- Java distingeix majúscules i minúscules
Comentaris
Els comentaris en Java poden ser
- De una línia i comencen per "//", es poden col·locar a qualsevol lloc i marquen tot el que segueix fins al final de línia com un comentari
- De bloc, delimitats per "/* ..... */".
- De Javadoc, mostrar informació quan es genera la documentació, delimitats per "/** ....... */"
Declaració de variables i assignació
La declaració de variables és OBLIGATÒRIA, a diferència d'altres llenguatges com PHP o VB
Els tipus de dades primitius són:
- byte . Nombres enters "molt curts" de 8 bits.
- short . Nombres enters "curts" de 16 bits.
- int . Nombres enters de 32 bits.
- long . Nombres enters "llargs" de 64 bits.
- float . Nombres reals de 32 bits. Precisió simple.
- double . Nombres reals de 64 bits. Precisió doble.
- char . Caràcters de 16 bits (UNICODE).
- boolean . Valors de veritat o falsedat: només pot ser true o false (Paraules reservades).
Observar que tots comencen amb minúscules!!!!!, a diferència de les classes que sempre comencen amb majúscules.
La declaració de variables
tipus_de_dada nom_variable [= valor_inicial];
Per exemple
int i; double radi, sup; boolean repetidor; int k = 3;
La operació d’assignació es realitza amb el símbol "=" (No confondre amb la operació de comparació "= =")
Per exemple
int i, j; i = 3; j = i; j = j * 4 + 3; j += 5; // Equivalent a j = j + 5.
Abans de fer servir qualsevol variable cal inicialitzar-la, directe o indirectament
Per exemple, el següent codi genera diversos errors
boolean a; if (a == true) System.out.println("true"); else System.out.println("false"); String b; System.out.println(" ----" + b + "----- "); int c; System.out.println(c);
Constants
La declaració de constants en Java, s'associa a conceptes de OO.
De moment només cal saber que cal definir les constants fora de les funcions (però dins de la classe)
static final tipus_de_dada NOM_CONSTANT [= valor_inicial];
Per exemple
public class Radi { static final double PI = 3.1416; //Fora del main public static void main(String[] args) { double radi, perimeter; radi = 3.3; perimeter = radi * PI * 2.0; System.out.println("El perimetre es : " + perimeter); } }
Cadenes de caràcters. String
Java proporciona la classe String pel tractament de text. (No és un tipus simple, és una classe).
- Operació "+" per concatenar.
I els següents mètodes d'utilitat per exemple
- Text.length(): Longitud d’una cadena de text
- Text.substring(index inici, index final): Obté un tros d’una cadena
- Text.equals("Altre Text"): Compara dos textos
Per exemple
String textemeu; textemeu = "Bon"; textemeu += " dia"; System.out.println(textemeu.length()); // Escriu la longitud del text, 7 System.out.println(textemeu.substring(1,3)) ;// Escriu “on” System.out.println(textemeu.equals("Bon deia")); // Escriu false
http://docs.oracle.com/javase/6/docs/api/java/lang/String.html
Per al tractament de text es poden fer servir alguns caràcters especials:
Caràcter | Significat |
\b | Retrocés |
\t | Tabulació |
\n | Salt de línia |
\' | Cometes simple |
\" | Cometes normals |
Operadors
Matemàtics | Lògics | ||
+ | Suma | && | AND |
- | Resta | | | | OR
|
* | Producte | ! | NOT |
/ | Divisió | Relacionals | |
% | Mòdul | = = | Igual |
++ | Increment | != | Diferent |
-- | Decrement | >, < | Més gran que, Menor que |
Text | |
>=, <= | Més gran o igual que, Menor o igual que |
+ | Concatenació | instanceof | obj instanceof cls és true si, i només si l'objecte obj deriva de la classe cls. |
.
Vectors
Un vector o matriu és un conjunt d’elements del mateix tipus que s’identifiquen per la seva posició.
Per declarar vectors a Java la sintaxi és la següent
Tipus[] nom;
A més, no hi prou amb declarar les variables, el compilador necessita conèixer la mida o longitud dels vectors per poder reservar l’espai necessari, així cal un segon pas per inicialitzar els vectors.
int [] vec; vec = new int[4]; // Vector de 4 enters String[] paraules = {"Hola", "Adeu"};
Finalment si volem fer referència als elements del vector cal que indiquem quin és l’element, tenint en compte que el primer element sempre és el 0.
int [] vec; vec = new int[4]; // Vector de 4 enters vec[0] = 1; // Primer element del vector vec[3] = 7; // Últim element del vector
.
Modularitat. Mètodes
Les funcions són mètodes que retornen un valor
La Declaració de funcions
public [static] Tipus nomFuncio(paràmetres) { instruccions; return expressió; }
On la declaració de paràmetres és una llista del tipus
Tipus variable, Tipus variable, ..., Tipus variable
- static ho farem servir per mètodes de classe.
Les accions són mètodes que no retornen cap valor
La Declaració d'accions o procediments
public [static] void nomAccio(paràmetres) { instruccions; }
Els mètodes es defineixen dins la classe
public class Radi { static final double PI = 3.1416; //Fora del main public static void main(String[] args) { System.out.println("El perimetre es : " + funcioPerimetre(3.3)); accioPerimetre(3.3); } public static double funcioPerimetre(double radi) { double perimeter = radi * PI * 2.0; return perimeter; } public static void accioPerimetre(double radi) { double perimeter = radi * PI * 2.0; System.out.println("El perimetre es : " + perimeter); } }
Pas de paràmetres
- Els paràmetres de tipus simples (int, double, char, boolean) es passen sempre per valor.
- Els tipus compostos (vectors, matrius i objectes en general) es passen sempre per referència. Una excepció és String que funciona com un tipus simple (per valor).
public class PasParametres { public static void main(String[] args) { int sim = 3; pasValor(sim); System.out.println("El valor de sim és: " + sim); // Mostra 3 String text = "Sense canviar"; pasString(text); System.out.println("El valor de text és: " + text); // Mostra "Sense canviar" int[] vec = new int[1]; vec[0] = 3; pasReferencia(vec); System.out.println("El valor de vec [0]: " + vec[0]); // Mostra 7 } public static void pasValor(int a) { a = 7; } public static void pasString(String s) { s = "Canviat"; } public static void pasReferencia(int[] b) { b[0] = 7; } }
Estructures de Control
Condicionals
Condicionals | |
if (Condició ) { <Instruccions> } [ else { <Instruccions> } ] |
switch( < expressió > ) { case valor1: <Instruccions> break; case valor2: <Instruccions> break; [default: <Instruccions>] } |
Bucles
Iteració | |
do { <Instruccions>; } while ( <Condició> ); |
while ( <Condició> ) {
<Instruccions>; |
for ( <inicialització>; <acabament>; <iteració> ) { <Instruccions>; } |
public class ExFor { public static void main(String[] args) { System.out.println("Inici Bucle for"); for ( int i=0; i<10; i++) { System.out.println("Valor de i: "+i); } System.out.println("Inici Bucle while"); int i = 0; while ( i < 10 ) { System.out.println("Valor de i: "+i); i++; } System.out.println("Inici Bucle do while"); i = 10; do { i--; System.out.println("Valor de i: " + i); } while (i > 0); } }
Break and Continue
Aquestes dues instruccions permeten controlar l’execució de bucles.
break atura el bucle i surt, mentre que continue passa a la següent iteració
En general aquestes estructures compliquen la lectura del codi i no es fan servir.
..
Entrada i Sortida bàsica
De moment ens limitarem a l’entrada/sortida de dades des de la línia de comandes en cru (sense les classes d'utilitat habituals per aquestes operacions).
De manera automàtica a qualsevol programa estan oberts tres canals
System.in | Entrada de dades pel dispositiu estàndard d’entrada |
System.out | Sortida de dades pel dispositiu estàndard de sortida |
System.err | Sortida d’errors |
Sortida
Per mostrar informació a la línia de comandes es fan servir les operacions de la classe System.out que ja s’han fet servir.
print(): Escriptura sense salt de línia println(): Escriptura amb salt de línia al final
Entrada per Consola
Per entrar informació des de la línia de comandes es fan servir les operacions de la classe System.in .
read(): Lectura d'un caràcter
El següent exemple mostra com llegir una cadena de caràcters des de consola
public static void main(String[] args) throws IOException { System.out.println("Llegir fins a ENTER..."); char caracter; String strEntrada = ""; while ((caracter = (char) System.in.read()) != '\n') { strEntrada = strEntrada + caracter; } System.out.println("strEntrada = " + strEntrada); }
Entrada Per Paràmetres
L'entrada per paràmetres consisteix en introduir dades al programa quan s'executa com a paràmetres de l'execució
Per a l’entrada des de consola es pot fer servir el pas de paràmetres de la funció main(String[] args) que es recuperen des del programa a través del vector args[index].
...
Estructura i organització
Paquets
Un paquet és un conjunt de classes organitzades i relacionades que es veuen unes a les altres i que comparteixen recursos.
Un paquet són una agrupació de classes relacionades funcionalment. El SDK de Java proporciona gran quantitat de paquets de codi obert que cal conèixer per estalviar-nos temps i esforços.
- 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.
Per importar un paquet i poder usar les classes que conté cal indicar el paquet.*
Els punts en els noms dels paquets indiquen la estructura de directoris on es troben les classes.
Es recomanable crear les nostres classes sempre en algun paquet
package dam.m3.uf4; public class Radi { .... }
Llibreries
Les llibreries a Java es troben comprimides normalment en fitxers .jar. Una vegada totes les funcions d’una llibreria estan finalitzades i no cal compilar-les més, el fitxer .jar generat el podem distribuir i incorporar fàcilment als nostres programes o a d’altres.
Java proporciona la utilitat jar' per crear aquestes llibreries. La sintaxi és la següent
$jar cvf nomllibreria.jar directori
Aquesta instrucció crea una llibreria nomllibreria.jar amb el contingut del directori
Compilació i execució. Terminal
La variable d’entorn CLASSPATH indica els directoris on el compilador espera trobar els paquets i classes definits. Per defecte només cerca al directori actual. (Al treballar amb Eclipse no cal definir-la, ho gestiona automàticament)
La variable CLASSPATH pot apuntar a un directori o a un fitxer, i pot contenir múltiples entrades separades per “;”:
- Per a .class en packets sense nom (Sense la declaració package). CLASSPATH ha de contenir el nom del directori
- Per a .class en paquets amb nom. CLASSPATH ha de contenir el nom del directori principal del paquet
- Per llibreries .jar o .zip. CLASSPATH ha de contenir el nom del fitxer
Per compilar un programa que utilitza una llibreria jar sense definir CLASSPATH
$javac –cp c6.jar ExSample.java
Per executar el programa sense definir CLASSPATH
$java –cp .;c6.jar ExSample // El . per referenciar el fitxer ExSample.class
També es pot definir el CLASSPATH
$set CLASSPATH=.;c6.jar $java ExSample
Convencions Programació Java
http://www.oracle.com/technetwork/java/codeconv-138413.html
http://checkstyle.sourceforge.net/ Aplicació per validar els estàndards