[PDF] Introduction programmation Java - Cours 8





Previous PDF Next PDF



Initiation à la programmation orientée-objet avec le langage Java

java -classpath /prog/exos1:/cours MyProg. 1.2 Programmation orientée-objet. Chaque langage de programmation appartient à une “famille” de langages 



Support de cours Java - Structures de données Notions en Génie

Classes de java.util; Classes et interfaces de comparaison . . . . 109 Ces notes de cours rassemblent des éléments de base du langage Java. Les cha-.



Apprenez à programmer en Java

24 sept. 2011 Bienvenue dans mon cours de programmation en Java. ... Voici donc le code complet : ... Vous devez taper le nom complet de votre classe.



Programmer en Java

variable correspondante ne peut pas être modifiée au cours de l'exécution. Le tableau suivant fournit la liste complète des opérateurs de Java ...



PROGRAMMATION ORIENTEE OBJET JAVA Programmes du cours

JAVA. Programmes du cours Algorithmique et Programmation Orientée Objet Java ... Une sortie de boucle se fait toujours après un parcours complet des ...



Les bases de la programmation orientée objet avec Java

Le cours de MariePierre Béal Le bytecode est interpété par une machine virtuelle Java ... son nom de paquetage complet ou qu'on utilise la directive.



Support de cours Java

– Les places vides dans le tableau qui surviennent pendant le jeu ne peuvent être remplies que par des rois. 2A.H. Morehead et G. Mott-Smith “The Complete Book 



Cours programmation- orientée objet en Java

Plan du cours. ?. Introduction: ? programmation objet pourquoi? Comment? Un exemple en Java. ?. Classes et objets (révision).



Java EE

Java EE. -. Cours 1. Cours de 2e année ingénieur Java Enterprise Edition est un framework ... Une plate-forme d'exécution JEE complète implémentée.



Introduction programmation Java - Cours 8

False. Cours 8– (Stéphane Airiau). Java 7. Page 8. On peut lire le code des classes Java. soit sur le site de openjdk on peut "lier" le code source sous éclipse.

Introduction programmation Java

Cours 8

Stéphane Airiau

Université Paris-Dauphine

Cours 8- (Stéphane Airiau)Java1

Quelques détails vus en TD

Cours 8- (Stéphane Airiau)Java2

Tests Junit

chaque test est vu "presque comme" un nouveaumaina priori, par défault on ne contrôle pas l"ordre dans lequel les tests sont

effectués on peut ajouter des instructions pour induire un ordre

ëil faut écrire les tests indépendemment les uns des autresLes variables d"instance peuvent être recréées

pas une bonne idée de ma part de vous demander d"écrire des méthodes dont le résultat est un affichage ëpourquoi est-ce difficile à tester?Cours 8- (Stéphane Airiau)Java3

méthoderemovedans une boucleforDans le TD, on demande d"implémenter une méthode qui enlève un élé-

ment dans une liste. On pourrait écrireList ls =newLinkedList<>();ls.add("Eenie"); ls.add("Meeney"); ls.add("Miney"); ls.add("Moe"); for(String w : ls){if(w.equals("Miny"))ls.remove(w); et l"exécution donne [Eenie, Meenie, Moe] Pourtant, je dis que cela ne devrait pas marcher! Pourquoi?

Cours 8- (Stéphane Airiau)Java4

méthoderemovedans une boucleforIl y a deux raisons pour lesquelles ce code n"est pas bien : 1- performance 2- cela devrait pr ovoquerune err eur! but nodoby"s perfect!

4902078

Cours 8- (Stéphane Airiau)Java5

méthoderemovedans une boucleforList ls =newLinkedList<>();ls.add("Eenie"); ls.add("Meeney"); ls.add("Miney"); ls.add("Moe");

Iterator it = ls.iterator();

while(it.hasNext()){String w = it.next(); if(w.equals("Miny"))it.remove();

Cours 8- (Stéphane Airiau)Java6

equalspublic classBox{static intcount = 0;private intid;private inthgX, hgY, bdX, bdY;publicBox(int a, int b, int c, int d){id= ++count;

hgX=a; hgY=b; bdX=c; bdY=d;

public static voidmain(String[] args){List ls =newLinkedList<>();ls.add(newBox(0,100,200,50));ls.add(newBox(20,60,60,30));Box b =newBox(20,60,60,30);System.out.println(ls.contains(b));

False

Cours 8- (Stéphane Airiau)Java7

On peut lire le code des classesJava.soit sur le site deopenjdkon peut "lier" le code source sous éclipse

ëquand on a une erreur, on peut suivre le problème jusque dans le code source.

src/share/classes/java/util/ArrayList.javaregardez par exemple la méthodeindexOf().par curiosité, on peut aussi regarder comment est géré la taille des

tableaux et comment ils sont augmentés

Cours 8- (Stéphane Airiau)Java8

Retour sur les streams

Cours 8- (Stéphane Airiau)Java9

Remplacez des itérations

en itérant, on précise l"ordre avec lequel on réalise des opérations avec les streams, on utilise des fonctions qui indique le traitement, on laisseJavachoisir la meilleure manière de réaliser les opérations

principe "what, not how"les opérations sur les streams sont "fainéantes" (lazy) : elles ne sont

exécutée que quand on a vraiment besoin de les exécuter!

Cours 8- (Stéphane Airiau)Java10

Utilisation avec lesStreamSupposonsqu"onaunecollectiondechaînesdecaractèresetquel"onveut compter les mots de plus de 12 caractères.1intcount =0;

2for(String m: words)

3if(m.length()>12)

4count++;

L"idée avec lesstreams sera d"écrire le code suivant :longcount = words.stream().filter(w-> w.length > 12).count();En lisant, on comprends exactement ce qui se passe.

Désormais,Javapeut optimiser l"exécution de ce code 1. création d"un str eam 2. opérations intermédiair estransformant le str eaminitial (en d"autr es, pourrait utiliser plusieurs étapes) 3. opération terminale pour pr oduirele résultat. Nous allons voir plus en détail ces trois phases.

Cours 8- (Stéphane Airiau)Java11

Création destreamsA partir d"une collection : appel de la méthodestream()A partir d"un tableau :

utiliser la méthode de classeofde la classeStream:Stream words = Stream.of(line.split(","));

// split découpe une chaîne de caractères et retourne un tableau deStringappel de la méthode de classestream(array, from, to)de la

classeArraysStream words = Arrays.stream(line.split(","), 3, 7); on peut créer un stream videStream.empty();on peut créer des stream infini avec la méthodegenerate:Stream echos = Stream.generate( () -> "Echo");

Stream randDoubles =

Stream.generate(Math::random);

avec la méthodeiterateStream intSeq = Stream.iterate(0, n -> n.add(1);)

Cours 8- (Stéphane Airiau)Java12

Création destreams (suite)On peut aussi avoir une séquence finie aveciterateen ajoutant un test

d"arrêt. autres exemples de de créationla méthode d"instancetokens()de la classeScannerretourne un Stream.la méthode de classelines(Path p)de la classeFilesretourne également unStream.Cours 8- (Stéphane Airiau)Java13

Transformation destreams : filtreun filtre permet de récupérer un nouveau stream dont les éléments ont

passé un test. Le test doit donc être une fonction qui retourne un booléen ëdoit donc suivre l"interface fonctionnellePredicatequi est une

fonctionT!fTrue,Falseglongcount = words.stream().filter(w-> w.length > 12).count();Cours 8- (Stéphane Airiau)Java14

Transformation destreams :mapL"opérateurmappermet detransformerle stream.Stream lowerCase =

words.stream().map(String::toLowerCase); La plupart du temps, il n"existera pas une référence méthode adéquate, on pourra donc utiliser une expression.Stream firstLetters = word.stream().map( s -> s.substring(0,1));

Cours 8- (Stéphane Airiau)Java15

Transformation destreams :flatmapSi la fonction retourne un stream, on pourrait avoir comme résultat un

stream de stream. Si on veut simplement un seul stream, on peut alors utiliser l"opérateurflatmapCours 8- (Stéphane Airiau)Java16 transformation de stream La méthodelimit(int n)retourne un nouveau stream qui se termine après au plusnélémentsStream randDoubles = La méthodeskip(int n)fait l"opposé : elle retourne un stream sans les premiersnéléments. La méthodetakeWhile(predicate)prend tout élément tant que le prédicat est vrai, et s"arrête ensuite.Stream.of(1,3,5,6,8,6,2,18) .takeWhile(no -> no<=5).forEach(System.out::println); La méthodedropWhile(predicate)fait le contraire : elle ne prend pas les éléments tant que le prédicat est vrai, et retourne donc le stream partant du moment ou le prédicat devient faux.Stream.of(1,3,5,6,8,6,2,18). dropWhile(no -> no<=5).forEach(System.out::println);

Cours 8- (Stéphane Airiau)Java17

Autres transformations de streams

Evidemment, il vaudrait mieux que le premier stream ne soit pas infini!

La méthodedistinctretourne un stream qui n"a pas de doublons.Stream.of("boo", "bee", "boo", "boo", "bee", "boo").distinct();

va être un stream avec seulement "bee" et "boo". La méthodesortedpermet de trier un stream (mieux vaut qu"il contienne des objets d"une classe qui implémenteComparable!) La méthodepeekretourne le même stream, mais applique une fonction

à chaque élémentInteger[] powersOfTwo =

Stream.iterate(1.0, n ->2

*n).peek(e -> System.out.println("treating "+e)) .limit(20).toArray();

Cours 8- (Stéphane Airiau)Java18

Réduction de streams

Réduction simple :count,min,max

Point délicat : que se passe-t-il quand le stream est vide? ëcertaines opération de réduction retourne une valeur de type Optional.Optional largest = words.max(String::compareToIgnoreCase); findFirst retourne la première valeur dans une collection non vide

Optional startsWithW =

words.filter(s -> s.startsWith("W")).findFirst(); Il existe de la même manièrefindAnysi on ne se focalise pas vraiment sur le premier. Si on veut juste savoir s"il y a au moins un élément,anyMatchsera alors judicieux.boolean b = words.anyMatch(s -> s.startsWith("W")); Il existe également des méthodesallMatchetNoneMatchqui vérifient si tous ou aucun élément satisfait un prédicat.

Cours 8- (Stéphane Airiau)Java19

Le type optionel

L"idée est de ne pas utiliser qu"une méthode retournenullquand il n"y a pas de résultat (provoque unNullPointerExceptionpas toujours simple à corriger) ëdonner une valeur alternativeString result = optionalString.orElse(""); ëjeter une exception (on verra cela bientôt)String result = ëlancer un calcul alternatif avecorElseGet().String result = optionalString.orElseGet( () -> if (Math.random()>0.5) return "bonjour"; else return "bye");ifPresentprendcommeparamètreunefonction:silavaleuroptionelle existe, elle est passée à cette fonction.optionalValue.ifPresent(v -> results.add(v));

Cours 8- (Stéphane Airiau)Java20

Obtenir le résultat

ex affichage : stream.forEach(System.out::println); ex : obtenir un tableau :String[] result = stream.toArray(String[]::new); Notez que le type destream.toArray()estObject[]car on ne peut pas faire un tableau avec des génériques. On peut avoir le bon type en passant le constructeur en paramètre. L"interfaceCollectorest utilisée pour collecter les éléments dans une autre structure. La classeCollectorspropose des méthodes pour des structures classiques.List result = stream.collect(Collectors.toList()); Set result = stream.collect(Collectors.toSet());

TreeSet result =

Cours 8- (Stéphane Airiau)Java21

Obtenir le résultat (suite)

concatenation de chaînes de caractères :String result = stream.collect(Collectors.joining()); concatenation de chaînes de caractères avec ajout d"un délimiteur : String result = stream.collect(Collectors.joining(", ")); On peut utiliser une méthode d"aggrégation (somme, compter, moyenne, min, max) :IntSummaryStatistics summary = stream.collect( double avg = summary.getAverage(); double max = summary.getMax();

Cours 8- (Stéphane Airiau)Java22

Obtenir le résultat : reduce

Optional sum =

values.stream().reduce((agg, next) -> agg +next); est équivalent à la somme. On retrouve ici des choses similaires à la programmation fonctionnelle.

Cours 8- (Stéphane Airiau)Java23

quotesdbs_dbs50.pdfusesText_50
[PDF] cours java debutant pdf

[PDF] cours java interface graphique pdf

[PDF] cours java netbeans pdf

[PDF] cours java pdf complet

[PDF] cours java pdf site du zero

[PDF] cours java pour les nuls pdf

[PDF] cours javascript complet pdf

[PDF] cours kartable pdf gratuit

[PDF] cours knowledge management pdf

[PDF] cours lamartine abidjan

[PDF] cours lea anglais espagnol

[PDF] cours lea economie

[PDF] cours leadership gratuit pdf

[PDF] cours leadership pdf

[PDF] cours lentille convergente 1ere s