Présentation de la formation Java les fondamentaux (examen 1Z0-803) Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Présentation du formateur Les autres formations sur Alphorm Qu est-ce que Java? Le plan de la formation Présentation des outils Les publics concernés
Présentation du formateur Fabien Brissonneau Email : fabien.brissonneau@gmail.com Consultant Concepteur et Formateur Missions d architecture, de conception, de réalisation logicielles Fondateur de eixa6 Actuellement en mission sur un projet de gestion Mes références : Mon profil Viadeo: http://fr.viadeo.com/fr/profile/fabien.brissonneau Mon profil LinkedIn: http://fr.linkedin.com/pub/fabien-brissonneau/65/902/92a/
Mes formations sur alphorm
Les autres formations dévsur Alphorm
Qu est-ce que Java? Langage de programmation généraliste Créé en 1995 par Sun, héritant du C++ Géré en communauté Langage de programmation objet Avec un très grande bibliothèque de classes
Le plan de la formation Présentation de la technologie Java Penser en termes objet Présentation du langage Java Utiliser des variables primitives Utiliser des objets Utiliser des opérateurs et des décisions Créer et utiliser des tableaux Utiliser des structures en boucles Utiliser des méthodes et la surcharge Utiliser l encapsulation et les constructeurs Concepts avancés de l objet Gestion des erreurs Vue d ensemble
Certification OCA suite à l examen 1Z0-803
Présentation des outils Le site de Oracle sera utilisé pour télécharger Les outils en ligne de commande La bibliothèque de base Un IDE, Netbeans Nous utiliserons aussi Eclipse La présentation sera faite sous Windows 7
Les publics concernés Cette formation est la première de 2 formations certifiantes Java SE7 La formation suivante est Java avancé!
Scoop Formation à apparaitre prochainement sur alphorm
Allons-y! Nous pouvons démarrer!!
Présentation Associer Java à d autres langages Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Historique Caractéristiques essentielles du langage Comparer Java à C++ Comparer Java à C# Comparer Java à Python
Historique Démarre en 1991, chez SUN, projet dirigé par James Gosling Projet Oak, partant du C++ en éliminant les points dangereux Version alpha de Java en 1995 Version 1.0 en 1996
Caractéristiques essentielles Langage à la syntaxe simple Langage généraliste Langage indépendant de la plateforme Langage orienté objet Langage prévu pour le support du réseau
Comparer Java à C++ Objectifs : C++ est proche du système, Java a une grande couche d abstraction Syntaxe : C++ a une syntaxe complexe et pleine de surprises, Java a une syntaxe simple Bibliothèquestandard : la bibliothèque du C++ est le plus petit commun à toute application, Java a une bibliothèque très large Exécution : C++ est natif, Java tourne sur une machine virtuelle Paradigme de programmation : C++ favorise un mélange des façons de programmer, Java est fortement orienté objet Mémoire : en C++, la gestion de la mémoire est manuelle, Java utilise un ramasse-miette Origine et évolution : C++ est un standard ISO, Java a été créé par Sun, maintenant Oracle
Comparer Java à C# Objectifs : C# est lié au monde Microsoft et Java n est pas lié à un constructeur Syntaxe : C# et Java ont une syntaxe simple. C# ajoute quelques éléments, qui rapellent le C++ Bibliothèque standard : les bibliothèques Java et DotNet sont très larges Exécution : C# et Java tournent sur une machine virtuelle, avec compilation JIT Paradigme de programmation : C# et Java sont fortement orientés objet Mémoire : C# et Java utilisent un ramasse-miette Origine et évolution : C# est un langage d origine Microsoft
Comparer Java à Python Objectifs : Python est plus un langage de «glue», là où Java servirait à créer les composants liés Syntaxe : Python utilise les indentations, limite la verbosité. Java comme Python ont peu de types de base Bibliothèque standard : les bibliothèques Java et Python sont très larges Exécution : Python est interprété, son bytecodeest invisible. La phase de compilation du source Java en bytecode est clairement identifiée Paradigme de programmation : Python et Java sont orientés objet, mais Python s utilise souvent comme un langage de script Mémoire : Python et Java utilisent un ramasse-miette Origine et évolution : Python est d origine associative, PSF
Cequ ona couvert Nous avons rappelé les caractéristiques essentielles de Java Nous avons comparé Java à d autres de langages comparables Par rapport à ces langages, Java apparaît comme : Un langage à la syntaxe simple Un langage qui permet une bonne productivité Un langage fortement typé, qui guide le développeur Fortement orienté objet Avec une grande bibliothèque standard Ouvert sur le monde
Présentation Téléchargement et installation de Java Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Où trouver Java? Les téléchargements disponibles Installation des outils Java Configuration de l environnement de travail Java
Où trouver Java? Le nécessaire pour exécuter : www.java.com Le kit de développement : Java DevelopmentKit (JDK) Le runtimeen 2 versions : Le Java Rutime Environment(JRE) Le JRE pour serveur Sur le site : www.oracle.com/technetwork/java Oracle participe au Java CommunityProcess, les nouveautés Java sont émises sous la forme de Java Specification Request: www.jcp.org Oracle participe aussi à OpenJDK
Les téléchargements disponibles Les éditions Java : Java SE, Java EE, Java ME Standard Edition : JRE complet + outils pour développer (compilateur, débuggeur, moniteur) Enterprise Edition : concerne les applications serveur (multi-tier, sécurisées, ) Glassfish API supplémentaire, documentation et exemples EE Web Profile : sous-ensemble ne concernant que les applis Web Micro Edition : pour des applications embarquées, mémoire limitées, accès permanent au réseau, etc
Installation des outils JDK SE : téléchargement, installation sous différentes plateformes Téléchargement et installation avec ou sans NetBeans(netbeans.org) Le JRE sera installé dans : <program files>/java/jre8 Il faut avoir les droits d administration NetBeans8 utilise n importe quel jdk7 ou 8, il le référence par jdkhome
Configuration des outils Netbeans Eclipse Ligne de commande PATH CLASSPATH JAVA_HOME / JRE_HOME
Cequ ona couvert Où trouver Java? Les téléchargements disponibles Installation des outils Java Configuration de l environnement de travail Java
Présentation Les technologies Java Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Java SE Java EE Embedded Java
Java SE Version standard de la livraison Java Le Java DevelopmentKit (JDK) incluant le SDK JavaFX Le Java RuntimeEnvironment(JRE) permettant d exécuter les applications Le runtime JavaFX La machine virtuelle Oracle JRockit
Java EE Version entreprise de Java Il existe 2 profils : EE SDK et EE Web Profile SDK Les deux versions sont livrées avec Glassfish Exemples de code, documentation et tutoriel Une plateforme pour déployer des applications d entreprise (robustesse, Web services, déploiement facilité)
Embedded Java Java pour environnements pauvres en ressources 2 options proposées : Java ME Embedded et Java ME Embedded Client
Cequ ona couvert Java SE Java EE Embedded Java
Présentation Caractéristiques principales et les avantages de la technologie Java Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Syntaxe du langage Java Les bibliothèques Java La machine virtuelle La gestion de la ressource mémoire L ouverture des technologies
La syntaxe du langage Java Une syntaxe rappelant celle du C++ Simple et productive Pas de pièges, objectif de lisibilité maximale
Les bibliothèques Java Les bibliothèques standard sont très larges Couvrent tous les aspects d une aplication Evitent le besoin de réinventer l existant De nombreuses bibliothèques de tiers
La machine virtuelle A l origine, une machine logicielle qui interprète du bytecode Le code Java est compilé explicitement en bytecode Les machines virtuelles compilent Just In Time Un bytecode et une machine très optimisés
La gestion de le ressource mémoire La mémoire n est pas gérée explicitement par le développeur Un thread de la JVM se charge de la gestion Les zones mémoire plus utilisées sont récupérées La responsabilité du développeur est de rendre la main
L ouverture des technologies Le processus d évolution du langage est ouvert Les spécifications sont ouvertes (JVM) De nombreux intervenants proposent des composants Certains on tendance à tirer à eux les standards
Cequ ona couvert Syntaxe du langage Java Les bibliothèques Java La machine virtuelle La gestion de la ressource mémoire L ouverture des technologies
Présentation Utiliser un environnement de développement intégré Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan L IDE Netbeans Créer un projet Produire à partir du projet L IDE Eclipse
Netbeans Environnement d origine Oracle/Sun Fournit en bundle avec Java JDK Plateforme sur laquelle on installe des plugs-in Supporte plusieurs langages et plusieurs utilisations
Créer un projet La notion de projet n est pas Java Il faut créer un projet Netbeans Le source Java est créé/compilé à partir de ce projet Le projet peut aussi référencer des éléments extérieurs Le projet est «typé», les répertoires sont différemment organisés
Produire à partir du projet Production de.class, issus de la compilation Génération de fichiers zippés comme les «jar» Génération de la documentation technique
L IDE Eclipse Eclipse est une plateforme d origine IBM Largement utilisée Indépendante de Java Plateforme sur laquelle on installe des plugs in Multilangages, multi-utilisations
Cequ ona couvert L IDE Netbeans Créer un projet Produire à partir du projet L IDE Eclipse
Penser en termes d objets Définir le domaine du problème Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Domaine/métier/analyse/conception/code Rôle du modèle du domaine Rôle du modèle de conception Traduction en Java
Domaine -> conception -> code Le modèle du domaine est la première vue orientée objets La trace entre métier et code est assurée Le code est une autre vue du métier Le code n est là que pour répondre à un besoin métier
Rôle du modèle du domaine Le modèle du domaine est une vue orientée objet On peut le traduire en code (à travers des étapes nombreuses) Il est compris par le métier Il est stable (contrairement au code) Le modèle du domaine est quasiment hors informatique
Le modèle de conception A partir du modèle du domaine Prenant en compte l architecture technique Le modèle de conception est efficace, performant, et fidèle Il sera traduit en code
Traduction en Java Le type d objet est une classe -> Java Les attributs sont les données Les méthodes sont les fonctions membres Les associations sont des attributs références Le code n invente quasi rien Le corps des méthodes n est pas spécifié par un modèle de classes
Cequ ona couvert Domaine/métier/analyse/conception/code Rôle du modèle du domaine Rôle du modèle de conception Traduction en Java
Penser en termes d objets Identifier les objets Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Définition d un objet Pourquoi parler de classes Définir un bon objet métier Les classes applicatives Vocabulaire
Définition d un objet Une entité vivante, qui réagit aux messages reçus Un objet contient les données et les traitements qui permettent d agir dessus Un objet a des frontières bien définies, des états et des comportements
Pourquoi parler des classes Une classe est un type d objet Parler des types au lieu des exemples occurrents permet simplifier la description du problème Une classe est aussi le descripteur d objets Il y a plusieurs sortes de classes (métier, applicatives ) Une classe est lisible dans les services qu elle rend
Définir un bon objet métier Souvent repéré comme un groupe nominal dans un énoncé Un bon objet métier est manipulé par le métier Il contient des données importantes Il est cohérent dans un traitement
Les classes applicatives Une classe applicative correspond aux couches techniques Elle apparaît dans le modèle de conception N est pas le reflet des objets métier Peuvent ne contenir que des traitements
Vocabulaire Les classes contiennent toutes les données et traitements Rien ne peut être en dehors des classes Les objets masquent leur implémentation : c est l encapsulation Les classes définissent : des attributs (données) des méthodes (traitements)
Cequ ona couvert Définition d un objet Pourquoi parler de classes Définir un bon objet métier Les classes applicatives Vocabulaire
Présentation du langage Java Définir les classes Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Une classe définit les attributs et les méthodes Les visibilités autorisent ou interdisent les accès aux membres Les constructeurs sont remarquables La définition de la classe peut supporter des modificateurs
Une classe définit attributs et méthodes Les attributs sont typés, ce sont les données Les méthodes sont décrits par un nom, un type de retour et des paramètres, eux-mêmes typés Il n y a pas d ordre dans les déclarations Le corps des méthodes peut utiliser les attributs, les paramètres et les variables locales éventuelles Par convention, une classe commencent par une majuscule, un attribut et une méthode par une minuscule
Les visibilités Pour implémenter l encapsulation Visibilités : par défaut, private, protected, public Limitent l accès aux membres par d autres morceaux de code
Les constructeurs Les constructeurs sont des méthodes Qui portent le nom de la classe N ont pas de type de retour Initialisent les attributs L appel d un constructeur est implicite
La définition de classe a des modificateurs Classe publique ou non Classe extension d une autre Classe implémentation d une interface
Cequ ona couvert Une classe définit les attributs et les méthodes Les visibilités autorisent ou interdisent les accès aux membres Les constructeurs sont remarquables La définition de la classe peut supporter des modificateurs
Présentation du langage Java Identifier les composants d une classe Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Les composants possibles Créer des attributs Créer des constructeurs Créer des méthodes
Les composants d une classe Une classe définit des attributs, ou champs de données Une classe définit des constructeurs, qui initialisent ces champs Une classe définit des méthodes, ou fonctions membres Les membres sont affectés d une visibilité L ordre de leurs déclarations n est pas significatif
Créer des attributs Un champ de donnée est typé Son nom suit la convention : commence par une minuscule et ensuite capitalisation En général, la visibilité est privée Le type de ce champ de donnée est : Un type fondamental (int, ) Une chaîne de caractères (String) Une référence vers un autre type, standard ou utilisateur
Créer des constructeurs Un constructeur est une fonction membre spéciale Le nom d un constructeur est le nom de la classe Il peut avoir des paramètres, mais pas de retour Dans le corps du constructeur, on doit initialiser les champs de donnée
Créer des méthodes Une méthode est un traitement effectué sur un objet Son nom suit la même convention que les attributs Elle déclare une liste de paramètres (type nom) Elle peut ne pas avoir de paramètres Elle a un retour, sinon, elle déclare «void» Une méthode correspond à un message que l on peut envoyer à l objet de ce type
Cequ ona couvert Les composants possibles Créer des attributs Créer des constructeurs Créer des méthodes
Présentation du langage Java Créer et utiliser une classe de test Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Définition d une classe de test Construction d une classe de test Utilisation simple d une classe de test Utilisation d une classe de test via un framework
Définition d une classe de test Une classe qui ne sert qu à tester une autre classe Une classe est l unité de test par excellence La classe de test propose une méthode par traitement à tester Les méthodes de tests sont déclenchés par l extérieur
Construction d une classe de test Pour chaque classe du modèle, créer une classe de test Dans cette nouvelle classe, créer une méthode par test à réaliser Dans une méthode de test : mettre en place le jeu de test, lancer
Utilisation simple d une classe de test Dans un main Appeler les méthodes de la classe de test On voit qu il est plus simple de faire des appels «statiques» Remarquer la visualisation des résultats dans la console
Utilisation d un frameworkde test JUnits est imposé comme un frameworkde test Appels statiques Les classes et les méthodes de tests sont annotés Une ihm simple permet d identifier les réussites et les échecs
Cequ ona couvert Définition d une classe de test Construction d une classe de test Utilisation simple d une classe de test Utilisation d une classe de test via un framework
Présentation du langage Java Compiler et exécuter un programme de test Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Création d un programme de test Lancement d un programme de test JUnit
Création d un programme de test Il faut disposer des classes à tester Créer un programme avec un main Compiler et exécuter le programme Vérifier les sorties
Programme de test JUnit Avec un frameworkde test comme JUnit, construction des classes de test simplifié Lancement d un ihm spécifique
Cequ ona couvert Création d un programme de test Lancement d un programme de test
Utiliser des primitives Déclarer et initialiser des variables de champs Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Qu est-ce qu une primitive? Déclaration d un champ de donnée Initialiser un champ de donnée
Qu est-ce qu une primitive? Les types primitifs sont les types fondamentaux de Java Les données primitives sont placées sur la pile Les valeurs possibles sont déterminées par le type Il n est pas possible de créer de nouveaux types primitifs
Déclaration d un champ de donnée La forme générale est : Type nomdelavariable; On peut rajouter la visibilité Et une valeur par défaut
Initialiser un champ de donnée Par défaut la valeur est 0, 0.0, nullou false suivant le type Il faut donc en général donner une valeur à ce champ Initialiser par défaut, lors de la déclaration Ecrire le code d initialisation dans un constructeur
Cequ ona couvert Qu est-ce qu une primitive? Déclaration d un champ de donnée Initialiser un champ de donnée
Utiliser des primitives Décrire les types primitifs Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Les types entiers Les types flottants Le type caractère Le type booléen
Les types entiers Un octet signé : byte Deux octets signés : short Quatre octets signés : int Huit octets signés : long Pas de types non signés, mais des méthodes sur les types Integeret Long pour gérer l arithmétique non signée Les littéraux sont typés : 4 est un int, 4L est un long
Les types flottants 32-bit IEEE 754 : float 64-bit IEEE 754 : double Ne pas utiliser ces types pour des monétaires, mais plutôt BigDecimal Les littéraux sont typés : 5.6 est un double, 5.6F est un float
Le type caractère Représenté par char 16-bit Unicode, soit de \u0000 à \uffff Le type chaîne de caractère n est pas un type primitif (String)
Le type booléen Une valeur soit true, soit false La taille en mémoire n est pas précisée Les booléens ne peuvent être confondus ni avec des entiers, ni avec des référence (null)
Cequ ona couvert Les types entiers Les types flottants Le type caractère Le type booléen
Utiliser des primitives Déclarer des variables et leur affecter des valeurs Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Les variables en Java Comportement des variables locales L affectation d une valeur à une variable locale
Les variables en Java Les variables sont déclarées et typées Les variables attributs, ou champ de donnée Les variables paramètres Les variables locales à une méthode Notez l absence de variable globale
Comportement des variables locales Une variable locale est déclarée à l intérieur d une méthode Elle disparaît à la fin du bloc {} dans lequel elle est déclarée Elle doit être initialisée avant d être utilisée
L affectation d une variable locale Pour être utilisée, une variable doit avoir une valeur : À l initialisation Plus tard, en affectant une valeur calculée Le compilateur identifie les chemins dans la méthode Tous les chemins doivent donner une valeur à la variable Certaines variables sont utilisées en retour de fonctions
Cequ ona couvert Les variables en Java Comportement des variables locales L affectation d une valeur à une variable locale
Utiliser des primitives Utiliser des constantes Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Un mot clé pour créer une constante Une constante en attribut, publique ou non Une constante en variable locale
Un mot clé pour créer une constante En utilisant le mot-clé «final» Il faut donner une valeur à la variable Il est impossible de modifier la valeur donnée Le type de la variable est quelconque Par convention, le nom de la variable est en majuscules
Une constante en attribut Une constante en attribut peut-être : Une information constante pour le code de la classe -> private Une information constante pour le reste du monde -> public Un attribut publique et constant n est pas dangereux Exemple : Math.PI
Une constante en variable locale Une variable locale constante ne peut pas être modifiée dans sa portée Elle interdit simplement toute modification Elle est utilisable dans une classe anonyme de la même portée Dans le cas du paramètre, attention à ne pas confondre avec les «const» du C++
Cequ ona couvert Un mot clé pour créer une constante Une constante en attribut, publique ou non Une constante en variable locale
Utiliser des primitives Utiliser des opérateurs arithmétiques Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Les opérateurs arithmétiques en Java Le comportement des types
Les opérateurs arithmétiques Opérateurs +, -,/,* Opérateurs combinant affectation et opération +=, -=,/=,*= Opérateurs unaires ++, -- L opérateur %(modulo) Pas de surcharge possible des opérateurs Il existe des opérateurs au niveau des bits :&, ~, décalage <<, >>,
Le comportement des types Pour garder la précision des calculs, on promeut les short et byte en int Il vaut mieux donc utiliser des int Les débordements sur entiers ne sont pas gérés comme sur les réels Les littéraux ont des types : 1 est un int 1.0 est un double
Cequ ona couvert Les opérateurs arithmétiques en Java Le comportement des types
Utiliser des objets Déclarer et initialiser des objets Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Référence vs objet Référence locale, paramètre Référence en attribut
Référence vs objet Un objet est une zone mémoire allouée avec un «new» Pour garder un lien vers cette zone mémoire, on utilise une référence Un objet ne peut pas être manipulé sans référence Lors qu un objet n est plus référencé, il est finalisé Voiture titine = new Voiture()
Référence locale, paramètre Une référence vers un objet peut apparaître en paramètre L appelant doit fournir l objet en question Une référence peut être une variable locale Il faut initialiser cette variable : À partir d une autre référence En créant un objet
Référence en attribut Une référence peut être un attribut Il s agit d un lien vers un autre objet Les règles d initialisation des types primitifs s appliquent Valeur nullpar défaut Initialisation lors de la déclaration ou dans un constructeur
Cequ ona couvert Référence vs objet Référence locale, paramètre Référence en attribut
Utiliser des objets Stocker des objets en mémoire Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Un objet peut référencer d autres objets Règles d accès aux objets en mémoire
Un objet peut référencer d autres objets Via des attributs en mémoire Des graphes d objets sont stockés en mémoire Exemple : Le gobelet référence des dés Tant que le gobelet existe en mémoire, les dés aussi La règle d encapsulation s applique, le gobelet ne peut accéder aux membres privés des dés
Règles d accès aux objets Les objets ne sont finalisés (ramassés) que lorsqu ils ne sont plus référencés Cette règle s applique aux graphes d objets Suppose que les références sur objet sont comptées Il faut que le développeur pense à mettre ses références à «null»
Cequ ona couvert Un objet peut référencer d autres objets Règles d accès aux objets en mémoire
Utiliser des objets Utiliser des références d objets Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Référence et objets Accéder à un champ d un objet Accéder à une méthode d un objet
Référence et objet Un objet est accessible via les références qui pointent vers lui Une référence est un accès mémoire, mais non explicite La sélection des membres se fait avec l opérateur «.» Obtenir une référence à un objet se fait : En créant soi-même l objet En invoquant une méthode qui crée l objet et nous le retourne En récupérant la référence en paramètre
Accéder à un champ Via une référence, on obtient un accès aux membres Si le champ est accessible (champ«public» par exemple) Avec un code genre : ref. attribut Je peux lire, modifier l attribut de l objet pointé par ref Un accès direct à un champ est rare, car cela ne respecte pas l encapsulation
Accéder à une méthode Via une référence, on accède aux traitements de l objet L appel se réalise comme pour un attribut, mais avec des parenthèses, même s il n y a pas de paramètres à passer Le déclenchement de la méthode suppose un effet sur l objet : La méthode nous retourne le résultat d un calcul La méthode modifie l état de l objet En général, l objet peut garder le résultat du calcul lui-même
Cequ ona couvert Référence et objets Accéder à un champ d un objet Accéder à une méthode d un objet
Utiliser des objets Utiliser les javadocs Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Qu est-ce que javadoc? Visiter la documentation de jse Appliquer la documentation dans son code
Qu est-ce que javadoc? Javadoc est un outil pour produire de la documentation technique Il peut être appliqué sur son propre projet La structure de la documentation suit celle du projet Les textes qui apparaissent sont des compléments que l on peut ajouter
Visiter la documentation jse Accéder au site Oracle, ou bien en utiliser un téléchargement Trouver le package, la classe, la méthode La description contient des généralités, des exemples Voyons la classe Date, la classe Math
Appliquer la documentation au code Avec la classe Date, créer une Date nowet today Un constructeur par défaut qui créer un Date maintenant Avec la classe Math, comprendre la description des champs Voir le lien avec d autres classes, StrictMath
Cequ ona couvert Qu est-ce que javadoc? Visiter la documentation de jse Appliquer la documentation dans son code
Utiliser des objets Utiliser des objets String et StringBuilder Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan La chaîne de caractères String Les limites de la classe String L intérêt de StringBuilder
La chaîne de caractères String Une classe, avec des comportements Une création exceptionnelle, rappelant les types primitifs L application de l opérateur +, y compris pour concaténer des primitives Méthode de manipulation de chaîne Voir la documentation pour les détails
Les limites de la classe String Une String est «immutable value» Toutes les méthodes qui semblent modifier l objet String en crée un autre Très peu efficace pour créer un buffer
L intérêt de StringBuilder La classe StringBuildern a pas de relation de type avec String Dédiée à la gestion de buffer Ajout de morceaux de chaînes Troncature aléatoire On obtient à tout moment le buffer via tostring()
Cequ ona couvert La chaîne de caractères String Les limites de la classe String L intérêt de StringBuilder
Utiliser des opérateurs et des structures décisionnelles Opérateurs relationnels et conditionnels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Les opérateurs relationnels Les opérateurs conditionnels
Les opérateurs relationnels Opérateur ==,!=, <,>,<=,>= Evalués à un booléen S appliquent à tous les types primitifs S appliquent aussi aux références, mais attention pas aux objets
Les opérateurs conditionnels Les opérateurs &&, sont court-circuit Les opérateurs &,,^ s appliquent comme sur les bits d un entier L opérateur! est NOT L opérateur ternaire : (a > b )? A : b Si a est supérieur à b alors a sinon b
Cequ ona couvert Les opérateurs relationnels Les opérateurs conditionnels
Utiliser des opérateurs et des structures décisionnelles Tester l égalité entre chaînes Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan L égalité physique ou sémantique des objets La classe String et ses méthodes == ou bien equals( )?
L égalité sémantique ou physique Un objet est sur le tas et est référencé via une référence L opérateur == s applique sur la référence, test physique Comparer deux objets en prenant en compte ce qu ils contiennent est le test sémantique Le test sémantique se fait PAR les objets eux-mêmes Il n y a pas de test sémantique par défaut en Java
La classe String et ses méthodes Méthode equals: test d égalité de 2 objets String String str1 String str2 Test : str1.equals(str2) Méthode equalsignorecase: test d égalité sans prendre en compte la casse
== ou bien equals( ) == est un test physique Les méthodes equals ou equalsignorecase testent le contenu == peut servir à identifier le contenu CAR String est une «immutable value»
Cequ ona couvert L égalité physique ou sémantique des objets La classe String et ses méthodes == ou bien equals( )?
Utiliser des opérateurs et des structures décisionnelles Evaluer différentes conditions et coder Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Les expressions booléennes Tester une seule condition, simple ou complexe Tester une suite de condition Un branchement complexe
Les expressions booléennes Un expression booléenne est une expression dont l évaluation donne true ou false Un numérique ou une référence ne sont pas des booléens Le type «boolean» représente une variable booléenne
Tester une seule condition Pour tester une seule condition : «if» avec ou sans accolades Il est courant de rajouter systématiquement les accolades pour éviter une erreur future : les indentations ne comptent pas Il est courant de rajouter un «else» car un «if» seul est peu lisible La condition est mise entre parenthèses La condition peut être complexe, utilisant les opérateurs booléens
Tester une suite de condition Il faut enchaîner les «if» et les «else» La logique conditionnelle pose rapidement des problèmes : De lecture, le code est long à lire De fragilité, difficile de modifier une condition sans impact Facile à boguer, la logique est compliquée Les conditions elles-mêmes sont rapidement trop complexes
Un branchement complexe Lorsqu une seule variable est tester, pour un ensemble de valeurs En utilisant «switch / case», on simplifie un peu Mais la variable est forcément primitive Peu être le signe d un manque de conception objet
Cequ ona couvert Les expressions booléennes Tester une seule condition, simple ou complexe Tester une suite de condition Un branchement complexe
Utiliser des opérateurs et des structures décisionnelles Créer des if et if/else Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan L instruction «if» Le couple «if/ else» L intense «if/ else/ if /else/»
L instruction «if» L instruction «if» est suivie d une condition entre parenthèses Il y a une seule instruction derrière un «if» Mais on va placer plusieurs instructions grâce aux accolades
Le couple «if / else» Un «if» sans «else» a t-il du sens? Une seule instruction après un «else», ou bien des accolades
L intense Enchaîner des «if / elseif /» est rarement une bonne idée
Cequ ona couvert L instruction «if» Le couple «if/ else» L intense «if/ else/ if /else/»
Utiliser des opérateurs et des structures décisionnelles Enchaîner les conditions Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan L instruction «if/ else» Le cas de la création des objets Que testent réellement les conditions?
L instruction «if / else» Une instruction conditionnelle est rapidement inévitable Ne pas la rendre trop complexe Eventuellement réduire la complexité
Le cas de la création des objets Pour créer un objet, il faut connaître sa classe La logique conditionnelle est donc quasi-imparable
Que testent réellement les conditions? Il faut éviter de tester le type des objets Par instanceof Par un autre moyen Pour déclencher des méthodes sur des objets en fonctions des types, il faut penser polymorphisme Les conditions sont souvent des primitives La combinaison des variables de conditions reflète le résultat d une méthode
Cequ ona couvert L instruction «if/ else» Le cas de la création des objets Que testent réellement les conditions?
Utiliser des opérateurs et des structures décisionnelles L instruction switch Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Forme générale du switch Quand utiliser switch Quand ne pas utiliser switch
Forme générale du switch Il faut une variable, entière jusqu à Java7, String compris depuis Le cas par défaut est optionnel
Quand utiliser le switch Reste simple et inévitable
Quand ne pas utiliser le switch Expression complexe, qui pourrait être remplacée par une conception plus poussée Oublier le «default»
Cequ ona couvert Forme générale du switch Quand utiliser switch Quand ne pas utiliser switch
Créer et utiliser des tableaux Déclarer et instancier un tableau à 1 dimension Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Qu est-ce qu un tableau? Tableau de primitives Tableau d objets
Qu est-ce qu un tableau? Le tableau est un objet Il s instancie avec un new Son type et T[ ] Il ne fournit aucune information, n a aucune intelligence
Tableau de primitives Un tableau de type primitifs contient les valeurs Les valeurs sont mises à 0 (en fonction du type) Une seul «new» suffit à disposer des données
Tableau d objets Le tableau d objets n existe pas Le tableau est un tableau de références Les références sont mises à null Il faut donc un autre new pour chaque objet dont on veut disposer
Cequ ona couvert Qu est-ce qu un tableau? Tableau de primitives Tableau d objets
Créer et utiliser des tableaux Déclarer et instancier un tableau à 2 dimensions Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Qu est-ce qu un tableau à deux dimensions? Les services de ce tableau
Qu est-ce qu un tableau à deux dimensions? On spécifie 2 dimensions, le tableau est donc une matrice Il faut deux indices pour ranger un élément dans le tableau On peut aussi l initialiser de façon statique
Les services de ce tableau L attribut en lecture seule «length» est disponible pour les 2 dimensions
Cequ ona couvert Qu est-ce qu un tableau à deux dimensions? Les services de ce tableau
Créer et utiliser des tableaux Utiliser une boucle for dans le tableau Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Les boucles for, while, do-while, for(each) Le parcours du tableau à une dimension Le parcours du tableau à 2 dimensions
Les boucles La boucle while(cond) {} La boucle do { } while(cond) ; La boucle for( inti =0; i<cond; i++) {} La boucle for ( E e: tab) {}
Parcourir un tableau à une dimension Avec une boucle for basé sur une variable La variable de boucle est indice d accès dans le tableau Avec une boucle for «each» On ressort l élement contenu dans le tableau
Parcourir un tableau à deux dimensions Avec une double boucle Les variables de boucles sont les indices d accès aux éléments du tableau La capacité du tableau «length» est utilisée
Cequ ona couvert Les boucles for, while, do-while, for(each) Le parcours du tableau à une dimension Le parcours du tableau à 2 dimensions
Créer et utiliser des tableaux Créer et initialiser une ArrayList Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Qu est-ce que java.util.arraylist? Comment initialiser une ArrayList Parcourir une ArrayList
Qu est-ce qu une ArrayList? Un objet de java.util Tableau dynamique, se redimensionne seule Offre des services supplémentaires
Comment initialiser une ArrayList En la remplissant au fur et au mesure, avec «add» En lui donnant une taille initiale
Parcourir une ArrayList En utilisant un indice jusqu à «size» En utilisant le for «each»
Cequ ona couvert Qu est-ce que java.util.arraylist? Comment initialiser une ArrayList Parcourir une ArrayList
Créer et utiliser des tableaux Utiliser l instruction import Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Le package java.util Utiliser import
Le package java.util Les classes de collection se trouvent dans java.util Voir la documentation On ne peut pas utiliser le nom simple de la classe ArrayList, sans son nom de package Cela garantit l absence de collision entre les noms de classes
L instruction import Arbitrage entre utiliser le nom complet de la classe Ou bien faire un «import» de la classe, et utiliser son nom court Aucun impact sur le code généré Confort de codage et de lecture Pas d import du package lui-même On importe des classes d un package On peut importer toutes les classes d un package
Cequ ona couvert Le package java.util Utiliser import
Créer et utiliser des tableaux Accéder à une valeur d un tableau Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Accéder aux valeurs dans un tableau Accéder aux valeurs dans une ArrayList
Accéder aux valeurs dans un tableau Le tableau supporte l accès aléatoire Avec l opérateur [], on lit n importe quelle valeur Les débordements sont repérés Le même opérateur permet d écrire Le tableau ne se redimensionne pas
Accéder aux valeur d une ArrayList Ce tableau peut se redimensionner seul Avec get(int), on obtient la ièmevaleur Mais pour modifier le ième élément, utiliser add(int, E)
Cequ ona couvert Accéder aux valeurs dans un tableau Accéder aux valeurs dans une ArrayList
Créer et utiliser des tableaux Utiliser le tableau args Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Les arguments de la ligne de commande Parcourir le tableau Convertir les éléments de ce tableau
Les arguments de la ligne de commande Les arguments fournit après «java app» sur le ligne de commande Séparés par des blancs Ce sont des chaînes de caractères dans le main
Parcourir le tableau Soit utiliser length, soit for«each» La capacité du tableau est sa taille utile Permet typiquement de passer des options à l application Utilisable même avec netbeans ou eclipse
Convertir les éléments du tableau Pour être exploitable, il faut souvent convertir en entiers? Integer.parseInt(str) Attention à prendre en compte des erreurs de type Gérer les exceptions Rechercher le type
Cequ ona couvert Les arguments de la ligne de commande Parcourir le tableau Convertir les éléments de ce tableau
Utiliser des boucles Coder une do/while Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Les composants de la boucle do /while Les composants de la boucle while Les erreurs à ne pas faire
Les composants de la boucle do/while Un bloc de code à exécuter Une condition à respecter Une condition d arrêt
Les composants de la boucle while Une ou plusieurs instructions dans un bloc Une condition pour arrêter la boucle
Les erreurs à ne pas faire Pour le «while», ne pas oublier les accolades si besoin Que la condition permette de sortir de la boucle
Cequ ona couvert Les composants de la boucle do /while Les composants de la boucle while Les erreurs à ne pas faire
Utiliser des boucles Développer une boucle for Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Les composants d une boucle «for» Les avantages du for sur le while Les écritures limites du «for»
Les composants d une boucle for Initialisation Tant que Incrément
Les avantages du for sur le while Le «for» possède toujours 3 parties On oublie moins la modification de la variable de boucle L initialisation est plus évidente
Les écritures limites du for Utiliser un «for» pour une boucle infinie Oublier volontairement une partie du «for» Mettre des listes d initialisation Mettre des listes d incréments Utiliser des conditions d arrêt compliquées
Cequ ona couvert Les composants d une boucle «for» Les avantages du for sur le while Les écritures limites du «for»
Utiliser des boucles Utiliser des ArrayListdans une boucle for Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Remarques sur le contenu d une ArrayList Parcourir une ArrayListen utilisant «get» Parcourir une ArrayList en utilisant un itérateur
Remarques sur le contenu d une ArrayList ArrayList est une implémentation tableau Depuis Java5, ArrayList peut être typé : ArrayList<String> Avant, ArrayList contient des Object Il est possible de récupérer le ièmeélément du tableau L ordre est conservé!
Parcourir une ArrayListavec get Avec la méthode «get», on peut passer un indice Récupérer le ième élément La méthode «size» donne le nombre d éléments présents
Parcourir une ArrayListavec des itérateurs Un itérateurest une sorte de «curseur» sur l ArrayList Il peut avancer et donner l élément courant L indice auquel on accède n est plus important Pratique si on veut juste parcourir du premier au dernier
Cequ ona couvert Remarques sur le contenu d une ArrayList Parcourir une ArrayListen utilisant «get» Parcourir une ArrayList en utilisant un itérateur
Utiliser des boucles Comprendre la portée des variables Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Définir la portée d une variable Les variables locales et les paramètres Les variables champ de donnée Pourquoi n y a t-il pas en Java de variable de portée globale?
Définir la portée d une variable La zone de code où l accès à la variable est possible Plus la portée est réduite, plus la gestion de la ressource est simple La donnée disparaît elle-même dans certains cas Lorsqu on sort de la portée d une référence, on n accède PLUS à l objet En Java, les blocs { } limite la portée d une variable
Les variables locales et paramètres Une variable locale ne peut pas être utilisée en dehors de la méthode dans laquelle elle est déclarée Pour garder la donnée, il faut la recopier dans une autre variable Retour de fonction Variable attribut Les paramètres sont des sortes de variables locales La valeur est fournie par l appelant
Les variables champ de donnée Un attribut, ou champ de donnée a une portée limitée par la classe Il appartient à l objet ou à la classe (cfstatic) L attribut a donc une portée supérieure à celle d une variable locale
Pas de variables globales en Java La portée ultime serait la variable globale Mais ce type de portée pose des problèmes Difficile de maîtriser qui utilise la variable Etat de la variable cahotique Avec le «static», certains essaient de recréer la situation d une portée globale
Cequ ona couvert Définir la portée d une variable Les variables locales et les paramètres Les variables champ de donnée Pourquoi n y a t-il pas en Java de variable de portée globale?
Utiliser des méthodes Créer et appeler des méthodes Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Créer une méthode dans une classe Appeler une méthode
Créer une méthode Pour réaliser un traitement sur les données de l objet Une méthode a une implémentation Pour proposer un service à l extérieur Une méthode a une signature Les variables : locale, paramètre, champ Le retour n est pas obligatoire
Appeler une méthode Il faut accéder à un objet de ce type Utiliser l opérateur «.» pour sélectionner la méthode Passer des arguments Utiliser ou non le retour
Cequ ona couvert Créer une méthode dans une classe Appeler une méthode
Utiliser des méthodes Transmettre des arguments Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Le passage des arguments à l appel Le passage de primitives Le passage d objets
Le passage des arguments à l appel Lors de l appel de la méthode, utiliser les parenthèses Les parenthèses seules si pas d argument La liste des arguments sans leurs types Les arguments doivent correspondre aux types attendus Il n est pas possible d omettre des arguments Pas de valeurs par défaut sur les paramètres
Le passage de primitives Les primitives sont toujours recopiées dans la méthode Les paramètres sont donc en IN Il n y a aucun mot clé pour changer ce comportement On dit que les primitives sont passées par valeur
Le passage des objets Les objets sont référencés La copie entière des objets n existe pas en Java Le passage ne concerne que les références des objets On dit que les objets sont passés par références
Cequ ona couvert Le passage des arguments à l appel Le passage de primitives Le passage d objets
Utiliser des méthodes Créer des méthodes et des variables statiques Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
Plan Créer des variables statiques et les utiliser Créer des méthodes statiques et les utiliser
Créer des variables statiques et les utiliser Définition d une variable statique Une variable qui est allouée en dehors des objets La syntaxe pour déclarer un champ statique :«static» L intérêt des champs statiques Unicité de l information pour tous les objets Accès aux données sans objet Utilisation dénoncée : une variable globale en Java!!