Programmation avancée et répartie en Java : rappels sur ... · PDF...

23
Programmation avanc´ ee et r´ epartie en Java : rappels sur les mots-cl´ es de Java Fr´ ed´ eric Gava L.A.C.L Laboratoire d’Algorithmique, Complexit´ e et Logique Cours de M1 MIAGE

Transcript of Programmation avancée et répartie en Java : rappels sur ... · PDF...

Programmation avancee et repartie en Java :rappels sur les mots-cles de Java

Frederic Gava

L.A.C.LLaboratoire d’Algorithmique, Complexite et Logique

Cours de M1 MIAGE

Plan

1 Flot de controle

2 Gestion des classes

Plan

1 Flot de controle

2 Gestion des classes

Flot de controleGestion des classes

Deroulement du cours

1 Flot de controle

2 Gestion des classes

Programmation avancee et repartie en Java 3 / 22

Flot de controleGestion des classes

Assert

Role

Permet de s’assurer d’une propriete avant de continuer l’execution.

assert condition [: objet] ;

Un AssertionError est lance si la condition n’est pas verifiee. Lesassertions sont ignore par defaut (il faut utiliser l’option -ea ou-enableassertions pour les activer). Dans la condition, ne pasmettre un calcul qui modifie vos donnees !

Exemple

private double divise(int a, int b) {assert b != 0 : ”Impossible de diviser par zero”;...

On verifie souvent les parametres d’une methode avec des assertpour etre sur qu’ils sont tels qu’on les pense.

Programmation avancee et repartie en Java 4 / 22

Flot de controleGestion des classes

Break et Continue (1)

Role

break : une instruction permettant de sortir d’une instructionde controle, d’un operateur d’iteration ou d’un bloc try.

continue : permet de sauter une iteration d’une boucle. C’esta dire qu’on passe directement a l’iteration suivante sanseffectuer le reste des operations.

Exemple (1)

for(int i = 0; i < 1555; i++){if(condition) break; //On sort de la boucle...}

Programmation avancee et repartie en Java 5 / 22

Flot de controleGestion des classes

Break et Continue (2)

Exemple (2)

Boucle1: while(true){System.out.println(”Boucle 1”);Boucle2: for(int ind=0; ind < 10; ind++) {

System.out.println(”Boucle 2”);Boucle3: while(true){

System.out.println(”Boucle 3”);break Boucle2;}}

break;}

Exemple (3)

while(true) {...if(condition1) break; // quitte la boucleif (condition2) continue; // retourne au debut de la boucle... }

Programmation avancee et repartie en Java 6 / 22

Flot de controleGestion des classes

Switch, case et default

Role

Eviter trop de if else dans le cas ou il y a plusieurs cas possibles.Le code de default est execute si aucun case n’est possible.Utilisation de break pour couper le switch, sinon celui-ci testeaussi les autres case (au cas ou).

Exemple

switch(id) {case 1 : System.out.println(”Je suis premier”); break;case 2 : System.out.println(”Je suis deuxieme”); break;case 3 : System.out.println(”Je suis troisieme”); break;default : System.out.println(”Je ne sais pas ou je suis”);}

Fonctionne aussi avec les String depuis Java 7.

Programmation avancee et repartie en Java 7 / 22

Flot de controleGestion des classes

Finally

Role

Clause suivie d’un bloc d’instructions. Cette clause suit elle-memeun bloc try, ou un bloc try catch. Quelque soit la maniere dont onsort du try, les instructions contenues dans le finally sont toujoursexecutees.

Exemple

try {... //Instructions quelconques}

finally {... //Operations effectuees apres les instructions du try}

Programmation avancee et repartie en Java 8 / 22

Flot de controleGestion des classes

Throw et Throws

Role

throw est pour lancer une exception. throws est pour indiquer quela methode peut faire remonter une exception.

Exemple

if(erreur) throw new Exception(”Une erreur est arrivee”);

public void read throws IOException {//Code pouvant lancer une IOException}

Rappel : Exception et IOException doivent obligatoirementdescendre de Throwable.

Programmation avancee et repartie en Java 9 / 22

Flot de controleGestion des classes

Utilisation de this dans une classe interne

Role

Dans le cas d’une classe interne (non static), le mot cle thispermet de recuperer l’instance de la classe englobante.

Exemple

public class Englobante {private Object attribut;public final class Interne {

private Object attribut;private switch() {

Englobante.this.attribut = this.attribut;}

...

Englobante.this fait donc reference a l’instance de la classeenglobante et this fait reference a la classe interne.

Programmation avancee et repartie en Java 10 / 22

Flot de controleGestion des classes

Synchronised

Plus de details la semaine prochaine !

Role

Utilise dans la programmation multithread dans la declarationd’une methode ou d’un bloc d’instructions pour indiquer que seulun thread peut acceder en meme temps a ce bloc ou a cettemethode

4 manieres d’utilisation

(1) public void synchronized methode(){print(”2 threads ne peuvent pas appeler cette methode ‘en meme temps’”);...

(2) public void methode(){synchronized(this){

print(”2 threads ne peuvent pas executer ce code ‘en meme temps’”);...

(3) synchronized(monObjet) {... // code}(4) public static void methode() {synchronized(MaClass.class) {... // code} ... }

Programmation avancee et repartie en Java 11 / 22

Flot de controleGestion des classes

Volatile

Plus de details prochainement !

Role

Utilisation sur des variables modifiables de maniere asynchrone(plusieurs threads y ont acces “simultanement”). Le faitd’employer volatile oblige la JVM a rafraıchir son contenu achaque utilisation. Ainsi, on est sur qu’on n’accede pas a la valeurmise en cache mais bien a la valeur correcte.

Declaration

public volatile Integer = 5;

Programmation avancee et repartie en Java 12 / 22

Flot de controleGestion des classes

Deroulement du cours

1 Flot de controle

2 Gestion des classes

Programmation avancee et repartie en Java 13 / 22

Flot de controleGestion des classes

Import static

Role

Importer que les codes statiques.

Utilisation

import com.test.Tester;import static java.lang.∗;

Permet d’importer dans notre code, une classe stactic ou unevariable static d’une classe, ceci a des fins d’allegement de code.

Programmation avancee et repartie en Java 14 / 22

Flot de controleGestion des classes

Native

Plus de details prochainement !

Role

Ce mot-cle est utilise dans la declaration d’une methode pourindiquer que cette methode n’est pas codee en Java, mais dans unlangage natif dans un fichier a part (du C generalement). Une tellemethode n’a donc pas de corps puisque le code ne se trouve pasdans la classe Java.

Declaration

public native void ouvrirLecteurCD();

Beaucoup utilise dans les bibliotheques standards pour effectuerdes appels systemes en code C (IO, materiel, etc.)

Programmation avancee et repartie en Java 15 / 22

Flot de controleGestion des classes

Strictfp

Role

Utilisable sur la declaration de classes, d’interfaces ou demethodes. Il oblige la JVM a effectuer les calculs selon lesspecifications du langage : garantie un meme resulat quelle quesoit la machine virtuelle utilisee. Java effectue les calculs engarantissant une priorite de la gauche vers la droite. Mais pasforcement les implementations des JVM...

Exemple

public strictfp class FPDemo {public static void main(String[] args) {double d = 8e+307;System.out.println(4 ∗ d / 2); ===> si droite gauche alors, (d/2)∗4System.out.println(2 ∗ d);

(4∗d) produit un depassement de capacite, donc un resultat infini.En revanche, 2∗d produit bien un resultat correct.

Programmation avancee et repartie en Java 16 / 22

Flot de controleGestion des classes

Transient

Role

Permet de ne pas sauvegarder une variable lors de la serialisationde la classe. Ainsi la variable ne va pas apparaıtre dans le fichier.Applications alors qu’une donnee sensible ne doit en aucun casapparaıtre dans un fichier (p. ex. un mot de passe). Cela permetaussi de “remettre a zero” certaines valeurs (p. ex., dans un jeu, nepas sauvegarder le temps de jeu depuis le debut de la partie).

Utilisation

class Writeable implements java.io.Serializable {...public transient int var1 = 2;

Si nous serialisons une instance de cette classe, “var1” ne sera pas sauvegardee. Lors

de la deserialisation, elle prendra la valeur 0 malgre la presence de la valeur par defaut

2. L’attribution d’une valeur par defaut se fait lors de l’instanciation de l’objet.

Programmation avancee et repartie en Java 17 / 22

Flot de controleGestion des classes

Final, Rappel des roles (1)

Devant une methode

Celle-ci ne pourra plus etre redefinie dans une classe fille. Ce quientraıne une certaine optimisation dans les appels a cette methode.

Devant une classe

On ne peut pas creer de classe derivee de celle-ci. Par exemple ilest impossible de deriver une classe a partir de la classe String dela bibliotheque de base. La solution consisterait a “encapsuler”String dans une classe de notre conception.

Devant un parametre d’une methode

Empeche l’attribution d’une nouvelle valeur au parametre :public void methode(final List<Object> liste, final int entier){

entrier = 0; // interditliste = new ArrayList<Object>(); // interdit

Programmation avancee et repartie en Java 18 / 22

Flot de controleGestion des classes

Final, Rappel des roles (2)

Devant une variable membre ou une variable locale

La variable ne peut plus etre modifiee apres son initialisation etdoit obligatoirement etre initialisee une fois (et une seule fois). Sila classe possede plusieurs constructeurs, la variable doit etrecorrectement initialisee quel que soit le constructeur utilise (sinonle compilateur provoquera une erreur). Pour une variable membrestatic, elle doit etre initialisee telle quelle :

private static final int x = 5;

Immutable ≡ final

Un objet est immutable s’il n’est jamais modifiee apres saconstruction. Un objet immutable est toujours thread-safe.

Coherence du mot-cles : nous verrons plus tard qu’un objet specialest toujours associe a une definition de classe. Donc, a une classefinal (heritage interdit) est associee un objet immutable.

Programmation avancee et repartie en Java 19 / 22

Flot de controleGestion des classes

Enum, enumerations (1)

Role

Permettre d’avoir differentes valeurs pour des variables sans utiliserune simulation avec des String ou des int.

Exemple

public enum Langage {JAVA, C, CPlus, PHP; }

les enumerations heritent de la classe java.lang.Enum.

Utilisation

for(Langage lang : Langage.values()){if(Langage.JAVA.equals(lang))System.out.println(”J’aime le : ” + lang); // ===> Affiche JAVA

...

Programmation avancee et repartie en Java 20 / 22

Flot de controleGestion des classes

Enum, enumerations (2)

Constructeur

public enum Langage {//Objets directement construitsJAVA (”Langage JAVA”),C (”Langage C”),CPlus (”Langage C++”),PHP (”Langage PHP”);

private String name = ””;

//ConstructeurLangage(String name){this.name = name;}

public String toString(){return name;}...

Remarque : pas de declaration de portee, pour une raison simple ; il est toujours

considere comme private afin de preserver les valeurs definies dans l’enum.

Programmation avancee et repartie en Java 21 / 22

Au travail !