Diferència entre revisions de la pàgina «DAM-M3-UF4. Sintaxi»
(→Condicionals) |
|||
Línia 581: | Línia 581: | ||
| valign="TOP" colspan="2" | '''''Condicionals''''' | | valign="TOP" colspan="2" | '''''Condicionals''''' | ||
|- | |- | ||
− | | if ( | + | | <html><pre><code class="java">if (<i>condició</i>) { |
− | | switch( | + | <i>instruccions</i> |
+ | } [else { | ||
+ | <i>instruccions</i> | ||
+ | }]</code></pre></html> | ||
+ | | <html><pre><code class="java">switch(<i>expressió</i>) { | ||
+ | case valor1: | ||
+ | <i>instruccions</i> | ||
+ | break; | ||
+ | case valor2: | ||
+ | <i>instruccions</i> | ||
+ | break; | ||
+ | [default: | ||
+ | <i>instruccions</i>] | ||
+ | }</code></pre></html> | ||
|} | |} | ||
− | Per exemple, para atenció a l'ús (o no) dels blocs { } | + | Per exemple, para atenció a l'ús (o no) dels blocs <code>{ }</code> |
Revisió del 18:38, 2 feb 2021
torna M3 - Programació
Contingut
- 1 Estructura i organització
- 2 Sintaxis
- 2.1 El primer programa
- 2.2 Comentaris
- 2.3 Declaració de variables i assignació
- 2.4 Visibilitat
- 2.5 Constants
- 2.6 Cadenes de caràcters. String
- 2.7 Operadors
- 2.8 Vectors
- 2.9 Exercici. Vectors + Strings
- 2.10 Modularitat. Mètodes
- 2.11 Exercici. Mètode
- 2.12 Estructures de Control
- 2.13 Entrada i Sortida bàsica
- 3 Convencions Programació Java
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.
http://docs.oracle.com/javase/6/docs
-
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
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 sertrue
ofalse
(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);
Visibilitat
Una variable només és accessible
- Dins del fragment de codi delimitat per
{ }
on està declarada - Si és un paràmetre d'un mètode (veure mètodes més endavant), dins el propi mètode
Per exemple, el següent codi genera errors
int a;
if (true) {
int d;
}
a = 1;
d = 4; //Error
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
Exercici. Vectors + Strings
Fent un únic println()
mostrar el següent llistat
(On els valors provenen d'un vector, p.e. String[] paraules = {"Hola", "Adeu", "Eps!!"};
)
Vector de 3 elements:
"Hola"
"Adeu"
"Eps!!"
Fin
.
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;
}
}
- Aclariment: Això no és exactament així. Java passa tots els paràmetres per valor. Però quan aquests són complexes (Objectes, vectors...) en comptes de passar per valor tot l'objecte passa per valor només l'identificador (OID). Així es comporta com si fos un pas per referència, però per exemple no es pot substituir l'objecte dins el mètode.
Exercici. Mètode
Posar llistat de l'exercici anterior en un mètode
paràmetres: String[] vector
resultat: String
Estructures de Control
Condicionals
Condicionals | |
|
|
Per exemple, para atenció a l'ús (o no) dels blocs { }
int opcio;
opcio = 0;
if (opcio == 0) System.out.println("Has introduït 0");
else {
if (opcio == 1) System.out.println("Has introduït 1");
else System.out.println("????");
}
switch(opcio) {
case 0: System.out.println("Has introduït 0");
break;
case 1: System.out.println("Has introduït 1");
break;
default: System.out.println("????");
}
Bucles
Iteració | |
|
|
|
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);
}
}
El tractament de matrius és anàleg, només cal parar atenció al control de longitud
int [][] mat;
mat = new int[4][2]; // Matriu 4 files i 2 columnes
for (int i=0; i < mat.length; i++) { // Informar matriu
for (int j=0; j < mat[0].length; j++) {
mat[i][j] = i + 3;
System.out.print(mat[i][j]);
System.out.print(" ");
}
System.out.println();
}
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]
.
int opcio;
opcio = Integer.parseInt(args[0]);
switch(opcio) {
case 0: System.out.println("Has introduït 0");
break;
case 1: System.out.println("Has introduït 1");
break;
default: System.out.println("????");
}
Per a l'execució del programa cal indicar aquest atribut
~$java Programa 0
Has introduït 0
Convencions Programació Java
http://www.oracle.com/technetwork/java/codeconv-138413.html
http://checkstyle.sourceforge.net/ Aplicació per validar els estàndards