View
2.037
Download
56
Category
Preview:
Citation preview
Présentation de la formation
Java les fondamentaux
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Java les fondamentaux (examen 1Z0-803)
Plan• Présentation du formateur
• Les autres formations sur Alphorm
• Qu’est-ce que Java ?
• Le plan de la formation
• Présentation des outils
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
Les autres formations dév sur Alphorm
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• 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 méthodes et la surcharge
• Utiliser l’encapsulation et les constructeurs
• Concepts avancés de l’objet
• Gestion des erreurs
Java, les fondamentaux alphorm.com™©
• Utiliser des objets
• Utiliser des opérateurs et des décisions
• Créer et utiliser des tableaux
• Utiliser des structures en boucles
• Gestion des erreurs
• Vue d’ensemble
Certification OCA suite à l’examen 1Z0-803
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• 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é !
Java, les fondamentaux alphorm.com™©
Scoop • Formation à apparaitre prochainement sur alphorm
Java, les fondamentaux alphorm.com™©
Allons-y !…• Nous pouvons démarrer !!
Java, les fondamentaux alphorm.com™©
Présentation
Associer Java à d’autres
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Associer Java à d’autres langages
Plan• Historique
• Caractéristiques essentielles du langage
• Comparer Java à C++
• Comparer Java à C#
• Comparer Java à Python
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
Caractéristiques essentielles• Langage à la syntaxe simple
• Langage généraliste
• Langage indépendant de la plateforme
• Langage orienté objet
Java, les fondamentaux alphorm.com™©
• 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èque standard : 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
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
• 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 bytecode est invisible. La phase de
Java, les fondamentaux alphorm.com™©
• Exécution : Python est interprété, son bytecode est 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
Ce qu’on a 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
Java, les fondamentaux alphorm.com™©
� 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
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Téléchargement et installation de Java
Plan• Où trouver Java ?
• Les téléchargements disponibles
• Installation des outils Java
• Configuration de l’environnement de travail Java
Java, les fondamentaux alphorm.com™©
Où trouver Java ?• Le nécessaire pour exécuter : www.java.com
• Le kit de développement : Java Development Kit (JDK)
• Le runtime en 2 versions :
� Le Java Rutime Environment (JRE)
Java, les fondamentaux alphorm.com™©
� Le JRE pour serveur
• Sur le site : www.oracle.com/technetwork/java
• Oracle participe au Java Community Process, 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,…)
Java, les fondamentaux alphorm.com™©
� 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
Java, les fondamentaux alphorm.com™©
• NetBeans 8 utilise n’importe quel jdk 7 ou 8, il le référence par jdkhome
Configuration des outils• Netbeans
• Eclipse
• Ligne de commande
� PATH
Java, les fondamentaux alphorm.com™©
� CLASSPATH
� JAVA_HOME / JRE_HOME
Ce qu’on a couvert• Où trouver Java ?
• Les téléchargements disponibles
• Installation des outils Java
• Configuration de l’environnement de travail Java
Java, les fondamentaux alphorm.com™©
Présentation
Les technologies Java
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Les technologies Java
Plan• Java SE
• Java EE
• Embedded Java
Java, les fondamentaux alphorm.com™©
Java SE• Version standard de la livraison Java
• Le Java Development Kit (JDK) incluant le SDK JavaFX
• Le Java Runtime Environment (JRE) permettant d’exécuter les applications
• Le runtime JavaFX
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• Java SE
• Java EE
• Embedded Java
Java, les fondamentaux alphorm.com™©
Présentation
Caractéristiques principales
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Caractéristiques principales et les avantages de la
technologie Java
Plan• Syntaxe du langage Java
• Les bibliothèques Java
• La machine virtuelle
• La gestion de la ressource mémoire
• L’ouverture des technologies
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• Syntaxe du langage Java
• Les bibliothèques Java
• La machine virtuelle
• La gestion de la ressource mémoire
• L’ouverture des technologies
Java, les fondamentaux alphorm.com™©
• L’ouverture des technologies
Présentation
Utiliser un environnement
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Utiliser un environnement de développement intégré
Plan• L’IDE Netbeans
• Créer un projet
• Produire à partir du projet
• L’IDE Eclipse
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• Multilangages, multi-utilisations
Ce qu’on a couvert• L’IDE Netbeans
• Créer un projet
• Produire à partir du projet
• L’IDE Eclipse
Java, les fondamentaux alphorm.com™©
Penser en termes d’objets
Définir le domaine du
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Définir le domaine du problème
Plan• Domaine/métier/analyse/conception/code
• Rôle du modèle du domaine
• Rôle du modèle de conception
• Traduction en Java
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• Le code n’invente quasi rien
• Le corps des méthodes n’est pas spécifié par un modèle de classes
Ce qu’on a couvert• Domaine/métier/analyse/conception/code
• Rôle du modèle du domaine
• Rôle du modèle de conception
• Traduction en Java
Java, les fondamentaux alphorm.com™©
Penser en termes d’objets
Identifier les objets
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Identifier les objets
Plan• Définition d’un objet
• Pourquoi parler de classes
• Définir un bon objet métier
• Les classes applicatives
• Vocabulaire
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
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…)
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
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 :
Java, les fondamentaux alphorm.com™©
� des attributs (données)
� des méthodes (traitements)
Ce qu’on a couvert• Définition d’un objet
• Pourquoi parler de classes
• Définir un bon objet métier
• Les classes applicatives
• Vocabulaire
Java, les fondamentaux alphorm.com™©
• Vocabulaire
Présentation du langage Java
Définir les classes
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Définir les classes
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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
Ce qu’on a 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
Java, les fondamentaux alphorm.com™©
Présentation du langage Java
Identifier les composants
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Identifier les composants d’une classe
Plan• Les composants possibles
• Créer des attributs
• Créer des constructeurs
• Créer des méthodes
Java, les fondamentaux alphorm.com™©
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é
Java, les fondamentaux alphorm.com™©
• 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 :
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• 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
Ce qu’on a couvert• Les composants possibles
• Créer des attributs
• Créer des constructeurs
• Créer des méthodes
Java, les fondamentaux alphorm.com™©
Présentation du langage Java
Créer et utiliser une classe
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Créer et utiliser une classe de test
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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
Utilisation d’un framework de test• JUnit s’est imposé comme un framework de 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
Java, les fondamentaux alphorm.com™©
Ce qu’on a 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
Java, les fondamentaux alphorm.com™©
Présentation du langage Java
Compiler et exécuter un
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Compiler et exécuter un programme de test
Plan• Création d’un programme de test
• Lancement d’un programme de test JUnit
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
Programme de test JUnit• Avec un framework de test comme JUnit, construction des classes de
test simplifié
• Lancement d’un ihm spécifique
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• Création d’un programme de test
• Lancement d’un programme de test
Java, les fondamentaux alphorm.com™©
Utiliser des primitives
Déclarer et initialiser des
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Déclarer et initialiser des variables de champs
Plan• Qu’est-ce qu’une primitive ?
• Déclaration d’un champ de donnée
• Initialiser un champ de donnée
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
Initialiser un champ de donnée• Par défaut la valeur est 0, 0.0, null ou 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
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• Qu’est-ce qu’une primitive ?
• Déclaration d’un champ de donnée
• Initialiser un champ de donnée
Java, les fondamentaux alphorm.com™©
Utiliser des primitives
Décrire les types primitifs
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Décrire les types primitifs
Plan• Les types entiers
• Les types flottants
• Le type caractère
• Le type booléen
Java, les fondamentaux alphorm.com™©
Les types entiers• Un octet signé : byte
• Deux octets signés : short
• Quatre octets signés : int
• Huit octets signés : long
Java, les fondamentaux alphorm.com™©
• Pas de types non signés, mais des méthodes sur les types Integer et 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
Java, les fondamentaux alphorm.com™©
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)
Java, les fondamentaux alphorm.com™©
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)
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• Les types entiers
• Les types flottants
• Le type caractère
• Le type booléen
Java, les fondamentaux alphorm.com™©
Utiliser des primitives
Déclarer des variables et
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Déclarer des variables et leur affecter des valeurs
Plan• Les variables en Java
• Comportement des variables locales
• L’affectation d’une valeur à une variable locale
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• Tous les chemins doivent donner une valeur à la variable
• Certaines variables sont utilisées en retour de fonctions
Ce qu’on a couvert• Les variables en Java
• Comportement des variables locales
• L’affectation d’une valeur à une variable locale
Java, les fondamentaux alphorm.com™©
Utiliser des primitives
Utiliser des constantes
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Utiliser des constantes
Plan• Un mot clé pour créer une constante
• Une constante en attribut, publique ou non
• Une constante en variable locale
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
• 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++
Java, les fondamentaux alphorm.com™©
« const » du C++
Ce qu’on a couvert• Un mot clé pour créer une constante
• Une constante en attribut, publique ou non
• Une constante en variable locale
Java, les fondamentaux alphorm.com™©
Utiliser des primitives
Utiliser des opérateurs
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Utiliser des opérateurs arithmétiques
Plan• Les opérateurs arithmétiques en Java
• Le comportement des types
Java, les fondamentaux alphorm.com™©
Les opérateurs arithmétiques• Opérateurs +, -, / , *
• Opérateurs combinant affectation et opération +=, -=, /=,*=
• Opérateurs unaires ++, --
• L’opérateur % (modulo)
Java, les fondamentaux alphorm.com™©
• 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 :
Java, les fondamentaux alphorm.com™©
� 1 est un int
� 1.0 est un double
Ce qu’on a couvert• Les opérateurs arithmétiques en Java
• Le comportement des types
Java, les fondamentaux alphorm.com™©
Utiliser des objets
Déclarer et initialiser des
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Déclarer et initialiser des objets
Plan• Référence vs objet
• Référence locale, paramètre
• Référence en attribut
Java, les fondamentaux alphorm.com™©
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é
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
• À 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 null par défaut
Java, les fondamentaux alphorm.com™©
� Initialisation lors de la déclaration ou dans un constructeur
Ce qu’on a couvert• Référence vs objet
• Référence locale, paramètre
• Référence en attribut
Java, les fondamentaux alphorm.com™©
Utiliser des objets
Stocker des objets en
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Stocker des objets en mémoire
Plan• Un objet peut référencer d’autres objets
• Règles d’accès aux objets en mémoire
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
� 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 »
Java, les fondamentaux alphorm.com™©
• Il faut que le développeur pense à mettre ses références à « null »
Ce qu’on a couvert• Un objet peut référencer d’autres objets
• Règles d’accès aux objets en mémoire
Java, les fondamentaux alphorm.com™©
Utiliser des objets
Utiliser des références
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Utiliser des références d’objets
Plan• Référence et objets
• Accéder à un champ d’un objet
• Accéder à une méthode d’un objet
Java, les fondamentaux alphorm.com™©
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 :
Java, les fondamentaux alphorm.com™©
� 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
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
� 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
Ce qu’on a couvert• Référence et objets
• Accéder à un champ d’un objet
• Accéder à une méthode d’un objet
Java, les fondamentaux alphorm.com™©
Utiliser des objets
Utiliser les javadocs
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Utiliser les javadocs
Plan• Qu’est-ce que javadoc ?
• Visiter la documentation de jse
• Appliquer la documentation dans son code
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
Appliquer la documentation au code• Avec la classe Date, créer une Date now et 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
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• Qu’est-ce que javadoc ?
• Visiter la documentation de jse
• Appliquer la documentation dans son code
Java, les fondamentaux alphorm.com™©
Utiliser des objets
Utiliser des objets String et
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Utiliser des objets String et StringBuilder
Plan• La chaîne de caractères String
• Les limites de la classe String
• L’intérêt de StringBuilder
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
L’intérêt de StringBuilder• La classe StringBuilder n’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()
Java, les fondamentaux alphorm.com™©
• On obtient à tout moment le buffer via toString()
Ce qu’on a couvert• La chaîne de caractères String
• Les limites de la classe String
• L’intérêt de StringBuilder
Java, les fondamentaux alphorm.com™©
Utiliser des opérateurs et des structures décisionnelles
Opérateurs relationnels et
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Opérateurs relationnels et conditionnels
Plan• Les opérateurs relationnels
• Les opérateurs conditionnels
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
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 :
Java, les fondamentaux alphorm.com™©
� (a > b )? A : b
� Si a est supérieur à b alors a sinon b
Ce qu’on a couvert• Les opérateurs relationnels
• Les opérateurs conditionnels
Java, les fondamentaux alphorm.com™©
Utiliser des opérateurs et des structures décisionnelles
Tester l’égalité entre chaînes
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Tester l’égalité entre chaînes
Plan• L’égalité physique ou sémantique des objets
• La classe String et ses méthodes
• == ou bien equals(…) ?
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
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 »
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• L’égalité physique ou sémantique des objets
• La classe String et ses méthodes
• == ou bien equals(…) ?
Java, les fondamentaux alphorm.com™©
Utiliser des opérateurs et des structures décisionnelles
Evaluer différentes
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Evaluer différentes conditions et coder
Plan• Les expressions booléennes
• Tester une seule condition, simple ou complexe
• Tester une suite de condition
• Un branchement complexe
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
� 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
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• Les expressions booléennes
• Tester une seule condition, simple ou complexe
• Tester une suite de condition
• Un branchement complexe
Java, les fondamentaux alphorm.com™©
Utiliser des opérateurs et des structures décisionnelles
Créer des if et if/else
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Créer des if et if/else
Plan• L’instruction « if »
• Le couple « if / else »
• L’intense « if / else / if /else / … »
Java, les fondamentaux alphorm.com™©
L’instruction « if »• L’instruction « if » est suivie d’une condition entre parenthèses
• Il y a une seule instruction derrière un « if »
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
L’intense …• Enchaîner des « if / else if / … » est rarement une bonne idée
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• L’instruction « if »
• Le couple « if / else »
• L’intense « if / else / if /else / … »
Java, les fondamentaux alphorm.com™©
Utiliser des opérateurs et des structures décisionnelles
Enchaîner les conditions
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Enchaîner les conditions
Plan• L’instruction « if / else »
• Le cas de la création des objets
• Que testent réellement les conditions ?
Java, les fondamentaux alphorm.com™©
L’instruction « if / else »• Une instruction conditionnelle est rapidement inévitable
• Ne pas la rendre trop complexe
• Eventuellement réduire la complexité
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
faut penser polymorphisme
• Les conditions sont souvent des primitives
• La combinaison des variables de conditions reflète le résultat d’une méthode
Ce qu’on a couvert• L’instruction « if / else »
• Le cas de la création des objets
• Que testent réellement les conditions ?
Java, les fondamentaux alphorm.com™©
Utiliser des opérateurs et des structures décisionnelles
L’instruction switch
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
L’instruction switch
Plan• Forme générale du switch
• Quand utiliser switch
• Quand ne pas utiliser switch
Java, les fondamentaux alphorm.com™©
Forme générale du switch• Il faut une variable, entière jusqu’à Java7, String compris depuis
• Le cas par défaut est optionnel
Java, les fondamentaux alphorm.com™©
Quand utiliser le switch• Reste simple et inévitable
Java, les fondamentaux alphorm.com™©
Quand ne pas utiliser le switch• Expression complexe, qui pourrait être remplacée par une conception
plus poussée
• Oublier le « default »
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• Forme générale du switch
• Quand utiliser switch
• Quand ne pas utiliser switch
Java, les fondamentaux alphorm.com™©
Créer et utiliser des tableaux
Déclarer et instancier un
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Déclarer et instancier un tableau à 1 dimension
Plan• Qu’est-ce qu’un tableau ?
• Tableau de primitives
• Tableau d’objets
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• Qu’est-ce qu’un tableau ?
• Tableau de primitives
• Tableau d’objets
Java, les fondamentaux alphorm.com™©
Créer et utiliser des tableaux
Déclarer et instancier un
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Déclarer et instancier un tableau à 2 dimensions
Plan• Qu’est-ce qu’un tableau à deux dimensions?
• Les services de ce tableau
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
Les services de ce tableau• L’attribut en lecture seule « length » est disponible pour les 2
dimensions
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• Qu’est-ce qu’un tableau à deux dimensions?
• Les services de ce tableau
Java, les fondamentaux alphorm.com™©
Créer et utiliser des tableaux
Utiliser une boucle for dans
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Utiliser une boucle for dans le tableau
Plan• Les boucles for, while, do-while, for(each)
• Le parcours du tableau à une dimension
• Le parcours du tableau à 2 dimensions
Java, les fondamentaux alphorm.com™©
Les boucles• La boucle while(cond) { }
• La boucle do { … } while(cond) ;
• La boucle for( int i =0; i<cond; i++) { }
• La boucle for ( E e: tab) { }
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• Les boucles for, while, do-while, for(each)
• Le parcours du tableau à une dimension
• Le parcours du tableau à 2 dimensions
Java, les fondamentaux alphorm.com™©
Créer et utiliser des tableaux
Créer et initialiser une
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Créer et initialiser une ArrayList
Plan• Qu’est-ce que java.util.ArrayList ?
• Comment initialiser une ArrayList
• Parcourir une ArrayList
Java, les fondamentaux alphorm.com™©
Qu’est-ce qu’une ArrayList ?• Un objet de java.util
• Tableau dynamique, se redimensionne seule
• Offre des services supplémentaires
Java, les fondamentaux alphorm.com™©
Comment initialiser une ArrayList• En la remplissant au fur et au mesure, avec « add »
• En lui donnant une taille initiale
Java, les fondamentaux alphorm.com™©
Parcourir une ArrayList• En utilisant un indice jusqu’à « size »
• En utilisant le for « each »
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• Qu’est-ce que java.util.ArrayList ?
• Comment initialiser une ArrayList
• Parcourir une ArrayList
Java, les fondamentaux alphorm.com™©
Créer et utiliser des tableaux
Utiliser l’instruction import
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Utiliser l’instruction import
Plan• Le package java.util
• Utiliser import
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
• Pas d’import du package lui-même
• On importe des classes d’un package
• On peut importer toutes les classes d’un package
Ce qu’on a couvert• Le package java.util
• Utiliser import
Java, les fondamentaux alphorm.com™©
Créer et utiliser des tableaux
Accéder à une valeur d’un
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Accéder à une valeur d’un tableau
Plan• Accéder aux valeurs dans un tableau
• Accéder aux valeurs dans une ArrayList
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• 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ème valeur
• Mais pour modifier le ième élément, utiliser add(int, E)
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• Accéder aux valeurs dans un tableau
• Accéder aux valeurs dans une ArrayList
Java, les fondamentaux alphorm.com™©
Créer et utiliser des tableaux
Utiliser le tableau args
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Utiliser le tableau args
Plan• Les arguments de la ligne de commande
• Parcourir le tableau
• Convertir les éléments de ce tableau
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
� Rechercher le type
Ce qu’on a couvert• Les arguments de la ligne de commande
• Parcourir le tableau
• Convertir les éléments de ce tableau
Java, les fondamentaux alphorm.com™©
Utiliser des boucles
Coder une do/while
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Coder une do/while
Plan• Les composants de la boucle do /while
• Les composants de la boucle while
• Les erreurs à ne pas faire
Java, les fondamentaux alphorm.com™©
Les composants de la boucle do/while• Un bloc de code à exécuter
• Une condition à respecter
• Une condition d’arrêt
Java, les fondamentaux alphorm.com™©
Les composants de la boucle while• Une ou plusieurs instructions dans un bloc
• Une condition pour arrêter la boucle
Java, les fondamentaux alphorm.com™©
Les erreurs à ne pas faire• Pour le « while », ne pas oublier les accolades si besoin
• Que la condition permette de sortir de la boucle
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• Les composants de la boucle do /while
• Les composants de la boucle while
• Les erreurs à ne pas faire
Java, les fondamentaux alphorm.com™©
Utiliser des boucles
Développer une boucle for
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Développer une boucle for
Plan• Les composants d’une boucle « for »
• Les avantages du for sur le while
• Les écritures limites du « for »
Java, les fondamentaux alphorm.com™©
Les composants d’une boucle for• Initialisation
• Tant que
• Incrément
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• Utiliser des conditions d’arrêt compliquées
Ce qu’on a couvert• Les composants d’une boucle « for »
• Les avantages du for sur le while
• Les écritures limites du « for »
Java, les fondamentaux alphorm.com™©
Utiliser des boucles
Utiliser des ArrayList dans
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Utiliser des ArrayList dans une boucle for
Plan• Remarques sur le contenu d’une ArrayList
• Parcourir une ArrayList en utilisant « get »
• Parcourir une ArrayList en utilisant un itérateur
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• L’ordre est conservé !
Parcourir une ArrayList avec 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
Java, les fondamentaux alphorm.com™©
Parcourir une ArrayList avec des itérateurs• Un itérateur est 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
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• Remarques sur le contenu d’une ArrayList
• Parcourir une ArrayList en utilisant « get »
• Parcourir une ArrayList en utilisant un itérateur
Java, les fondamentaux alphorm.com™©
Utiliser des boucles
Comprendre la portée des
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Comprendre la portée des variables
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 ?
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
� 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 (cf static)
• L’attribut a donc une portée supérieure à celle d’une variable locale
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• Avec le « static », certains essaient de recréer la situation d’une portée globale
Ce qu’on a 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 ?
Java, les fondamentaux alphorm.com™©
Utiliser des méthodes
Créer et appeler des
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Créer et appeler des méthodes
Plan• Créer une méthode dans une classe
• Appeler une méthode
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• Créer une méthode dans une classe
• Appeler une méthode
Java, les fondamentaux alphorm.com™©
Utiliser des méthodes
Transmettre des arguments
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Transmettre des arguments
Plan• Le passage des arguments à l’appel
• Le passage de primitives
• Le passage d’objets
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
• 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
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• Le passage des arguments à l’appel
• Le passage de primitives
• Le passage d’objets
Java, les fondamentaux alphorm.com™©
Utiliser des méthodes
Créer des méthodes et des
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Créer des méthodes et des variables statiques
Plan• Créer des variables statiques et les utiliser
• Créer des méthodes statiques et les utiliser
Java, les fondamentaux alphorm.com™©
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
Java, les fondamentaux alphorm.com™©
� Unicité de l’information pour tous les objets
� Accès aux données sans objet
• Utilisation dénoncée : une variable globale en Java !!
Créer des méthodes statiques et les utiliser• Syntaxe de la méthode statique : « static »
• Utilisation de la méthode statique : appel sur LA CLASSE
� D’où le nom : méthode de classe
• Intérêt : appeler une méthode sans créer un objet
Java, les fondamentaux alphorm.com™©
� Parce qu’aucun objet n’existe
� Parce que la création d’un objet coûte cher
� Parce qu’on n’a pas accès à l’objet
� …
Ce qu’on a couvert• Créer des variables statiques et les utiliser
• Créer des méthodes statiques et les utiliser
Java, les fondamentaux alphorm.com™©
Utiliser des méthodes
Utiliser des modificateurs
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Utiliser des modificateurs
Plan• Les modificateurs : public, protected, private
• Visibilité par défaut, sans modificateur
• Visibilité « private »
• Visibilité « protected »
• Visibilité « public »
Java, les fondamentaux alphorm.com™©
• Visibilité « public »
Les modificateurs• Un mot-clé que l’on place avant la déclaration du membre
• Les modificateurs de visibilité
� Pour régler l’encapsulation
• Les mots-clés « static », « final », …
Java, les fondamentaux alphorm.com™©
La visibilité par défaut• Un membre sans visibilité
• Toutes les classes du même package peuvent y accéder
• Intéressant pour les infos/traitements partagés par le package
Java, les fondamentaux alphorm.com™©
La visibilité private• Pour protéger les données internes à l’objet
• Accessible uniquement par le code de la classe elle-même
• Les membres « private » font partie de l’implémentation
Java, les fondamentaux alphorm.com™©
La visibilité protected• Un accès intermédiaire
• Toutes les classes du package y accèdent
• Et aussi toutes les classes ‘filles’ … cf héritage…
• Permet d’ouvrir un accès en direction des futures classes étendues
Java, les fondamentaux alphorm.com™©
• Intéressant surtout pour les méthodes
La visibilité public• La visibilité la plus large
• Expose les accès à tout le code
• Intéressant surtout pour des méthodes
� Des champs de données « public » devraient être « final »
Java, les fondamentaux alphorm.com™©
• Correspond à des offres de services pour l’extérieur, qui appelle
• Attention à ne pas confondre visibilité et portée…
Ce qu’on a couvert• Les modificateurs : public, protected, private
• Visibilité par défaut, sans modificateur
• Visibilité « private »
• Visibilité « protected »
• Visibilité « public »
Java, les fondamentaux alphorm.com™©
• Visibilité « public »
Utiliser des méthodes
Utiliser la surcharge des
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Utiliser la surcharge des méthodes
Plan• La syntaxe de la surcharge
• Appeler une méthode surchargée
• La surcharge et l’héritage
Java, les fondamentaux alphorm.com™©
La syntaxe de la surcharge• Plusieurs méthodes peuvent
� avoir le même nom,
� avec des paramètres différents
• La signature d’une méthode comprend son nom ET ses arguments
Java, les fondamentaux alphorm.com™©
Appeler une méthode surchargée• Choisir les arguments à passer
� Nombre d’arguments
� Type des arguments
• Le compilateur fait le bon appel
Tout est figé à la compilation
Java, les fondamentaux alphorm.com™©
• Tout est figé à la compilation
• On parle parfois de polymorphisme de surcharge
La surcharge et l’héritage• La surcharge est résolue à travers l’héritage
• Une classe fille peut enrichir l’interface en ajoutant une surcharge
• Ne pas confondre
� Surcharge
Java, les fondamentaux alphorm.com™©
� Redéfinition
Ce qu’on a couvert• La syntaxe de la surcharge
• Appeler une méthode surchargée
• La surcharge et l’héritage
Java, les fondamentaux alphorm.com™©
Utiliser l’encapsulation et les constructeurs
Créer des constructeurs
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Créer des constructeurs
Plan• L’initialisation des objets
• Le rôle des constructeurs
• Les blocs d’initialisation
Java, les fondamentaux alphorm.com™©
L’initialisation des objets• Les champs de donnée sont mis à « 0 »
� 0 pour les entiers, 0.0 pour les flottants, \u0000 pour char
� Pour les références, null et false pour les booléens
• Cette initialisation par défaut est rarement suffisante
Il est possible de donner une valeur à la déclaration du champ
Java, les fondamentaux alphorm.com™©
• Il est possible de donner une valeur à la déclaration du champ
Le rôle des constructeurs• Par défaut, le compilateur génère un constructeur sans paramètre
• La réécriture de ce constructeur est possible
• Il est possible de créer d’autres constructeurs, avec des signatures différentes
• Le rôle du constructeur est d’initialiser les champs de l’objet
Java, les fondamentaux alphorm.com™©
• Le rôle du constructeur est d’initialiser les champs de l’objet
• Afin que l’objet soit dans un bon état
Les blocs d’initialisation• On peut simplement écrire un bloc {…} dans lequel on initialise les
champs
• Ce bloc peut être marqué « static », dans ce cas ce bloc sert à initialiser les champs « static »
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• L’initialisation des objets
• Le rôle des constructeurs
• Les blocs d’initialisation
Java, les fondamentaux alphorm.com™©
Utiliser l’encapsulation et les constructeurs
Implémenter l’encapsulation
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Implémenter l’encapsulation
Plan• L’encapsulation par la visibilité des membres
• L’encapsulation par la visibilité des classes
Java, les fondamentaux alphorm.com™©
L’encapsulation par la visibilité des membres• Les membres dans une classe sont par défaut accessible des autres
classes du package
• Les visibilités « public », « protected » et « private » permettent de régler ces accès
• Ces visibilités s’entendent par rapport à la classe
Java, les fondamentaux alphorm.com™©
• Cela n’a pas de rapport avec la portée
L’encapsulation par la visibilité des classes• Une classe par défaut n’est accessible que depuis son package
• Une classe peut être « public », et elle devient accessible de l’extérieur
• Cela n’a pas de rapport avec la portée
• Un package bien construite propose un ou plusieurs points d’entrée, mais ne montre pas toutes les classes qu’il contient
Java, les fondamentaux alphorm.com™©
mais ne montre pas toutes les classes qu’il contient
Ce qu’on a couvert• L’encapsulation par la visibilité des membres
• L’encapsulation par la visibilité des classes
Java, les fondamentaux alphorm.com™©
Concepts avancés
Utiliser l’héritage
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Utiliser l’héritage
Plan• La relation de généralisation-spécialisation
• Les conséquences en termes d’héritage
• Le mot-clé « extends »
Java, les fondamentaux alphorm.com™©
La relation de généralisation-spécialisation• Une relation statique entre classe
• Qui relie un concept général à un concept spécialisé
� Chat->Félin
• Qui évite les doublons
Java, les fondamentaux alphorm.com™©
� Les membres de Félin sont hérités par le Chat
• Qui introduit des variations sur un thème
� Le Chat parle d’une façon spécifique
Les conséquences en terme d’héritage• Les membres sont tous hérités
• Les membres publiques de l’ancêtre restent publiques sur la classe fille
• Seuls les membres privés de l’ancêtre sont inaccessibles de la fille
• La classe fille peut compléter
Java, les fondamentaux alphorm.com™©
� Les méthodes en en ajoutant
� Les champs de données en en ajoutant
� Les méthodes en les redéfinissant
Le mot clé extends• La relation de généralisation-spécialisation correspond à une extension
� De type
� De comportement
• Le mot clé « extends » suffit à établir la relation
La classe fille se substitue alors à a sa mère
Java, les fondamentaux alphorm.com™©
• La classe fille se substitue alors à a sa mère
Ce qu’on a couvert• La relation de généralisation-spécialisation
• Les conséquences en termes d’héritage
• Le mot-clé « extends »
Java, les fondamentaux alphorm.com™©
Concepts avancés
Polymorphisme
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Polymorphisme
Plan• La redéfinition des méthodes
• Mettre en œuvre le polymorphisme
• Savoir utiliser le polymorphisme
Java, les fondamentaux alphorm.com™©
La redéfinition des méthodes• La relation de généralisation-spécialisation suppose l’héritage des
membres de la classe mère par la classe fille
• Cette relation est utile lorsque la sous-classe est une spécialisation de la super-classe
• Cette spécialisation peut être due à une redéfinition de certains comportements
Java, les fondamentaux alphorm.com™©
comportements
� Redéclarer dans la sous-classe la même méthode que dans la super-classe, mais modifier le corps de la méthode
Mettre en œuvre le polymorphisme• Il suffit de :
� Disposer d’un héritage
� Redéfinir une méthode
� Pointer sur un objet en tant que super-classe
� Appeler la méthode redéfinie
Java, les fondamentaux alphorm.com™©
� Appeler la méthode redéfinie
Savoir utiliser le polymorphisme• Utiliser le polymorphisme lorsqu’on identifie une comportement qui
dépend du type de l’objet
� Ne pas tester le type des objets
• Moindre usage de la logique conditionnelle
• Arbitrage entre simplicité et sécurité des appels
Java, les fondamentaux alphorm.com™©
• Arbitrage entre simplicité et sécurité des appels
Ce qu’on a couvert• La redéfinition des méthodes
• Mettre en œuvre le polymorphisme
• Savoir utiliser le polymorphisme
Java, les fondamentaux alphorm.com™©
Concepts avancés
Utiliser des super-classes et
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Utiliser des super-classes et des sous-classes
Plan• Des super-classes pour factoriser les membres
• Substituer des sous-classes aux super-classes
• Spécialiser les comportements des sous-classes
Java, les fondamentaux alphorm.com™©
Des super-classes pour factoriser• Lorsque des classes contiennent des membres communs
• Faire apparaître une super-classe qui regroupe ces membres communs
• Cette super-classe peut être abstraite
• Elle peut contenir une ou plusieurs méthodes abstraites
Java, les fondamentaux alphorm.com™©
Substituer des sous-classes • Une sous-classe doit être conforme à l’interface de la super-classe
• Elle contient 100% des données
• Elle répond à 100% des méthodes
� La signification des méthodes doit être conforme
Java, les fondamentaux alphorm.com™©
Spécialiser le comportement• Une sous-classe peut proposer des attributs et des méthodes en plus
• Elle peut redéfinir une ou plusieurs méthodes
� Même signature, mais corps différent
• Le comportement différent repose sur le fait que la méthode s’exécute différemment
Java, les fondamentaux alphorm.com™©
différemment
• Pas de mot-clé spécifique, mais une annotation optionnelle
Ce qu’on a couvert• Des super-classes pour factoriser les membres
• Substituer des sous-classes aux super-classes
• Spécialiser les comportements des sous-classes
Java, les fondamentaux alphorm.com™©
Concepts avancés
Ajouter un niveau
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Ajouter un niveau d’abstraction
Plan• Les abstractions en Java : classes et interfaces
• Intérêts d’utiliser des abstractions
• Les abstractions dans le framework
• Analyse et conception
Java, les fondamentaux alphorm.com™©
Les abstractions en Java • Une classe abstraite
� Est une classe qui ne peut pas être instanciée
� Peut contenir des méthodes abstraites
� Contient en général des attributs et des méthodes implémentées
• Une interface
Java, les fondamentaux alphorm.com™©
• Une interface
� Est un type non instanciable
� Ne peut contenir aucune implémentation d’instance
Intérêts des abstractions• Une abstraction est stable
• Le code qui utilise une abstraction ne bouge pas
• Une abstraction sert de point de stabilité entre modules
Java, les fondamentaux alphorm.com™©
Les abstractions dans le framework• Exemple d’une classe abstraite : AbstractList
� On hérite d’une classe abstraite pour profiter d’une partie d’implémentation
• Exemple d’une interface : ActionListener
� Pour introduire une fonction de rappel en face d’un bouton
Java, les fondamentaux alphorm.com™©
Analyse et conception• Une abstraction en analyse
� Une classe abstraite pour factoriser des données et des traitements
� Exemple de la bibliothèque
• Une abstraction en conception
Indépendance des modules via une interface
Java, les fondamentaux alphorm.com™©
� Indépendance des modules via une interface
Ce qu’on a couvert• Les abstractions en Java : classes et interfaces
• Intérêts d’utiliser des abstractions
• Les abstractions dans le framework
• Analyse et conception
Java, les fondamentaux alphorm.com™©
Concepts avancés
Les interfaces en Java
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Les interfaces en Java
Plan• Définition et syntaxe des interfaces
• Définir une interface
• Implémenter une interface
• Cas d’usage connus
Java, les fondamentaux alphorm.com™©
Définition et syntaxe d’une interface• Une interface est un type sans implémentation
� Dans son propre fichier
• Impossible d’implémenter les méthodes
• Les méthodes sont forcément public
Java, les fondamentaux alphorm.com™©
• Si des attributs existent, ils sont « static », « final » et « public »
Définir une interface• En tant que code client
� J’ai besoin de telles et telles méthodes
� Mais je n’ai pas besoin de savoir comment elles sont implémentées
Java, les fondamentaux alphorm.com™©
Implémenter une interface• S’engager à fournir une implémentation pour chaque méthode prévue
par l’interface
• Le compilateur vérifie la présence de cette implémentation
Java, les fondamentaux alphorm.com™©
Cas d’usage connus• Interconnexions entre modules
• Définition des services d’objets distribués
� Sous-interface de Remote
• Définition des webservices
Java, les fondamentaux alphorm.com™©
• Abstraction des conteneurs : List, Set, Map…
Ce qu’on a couvert• Définition et syntaxe des interfaces
• Définir une interface
• Implémenter une interface
• Cas d’usage connus
Java, les fondamentaux alphorm.com™©
La gestion des erreurs
Les différents types d’erreur
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Les différents types d’erreur
Plan• Les erreurs de syntaxe
• Les erreurs de logique, de programmation
• Les erreurs exceptionnelles dues à l’environnement
Java, les fondamentaux alphorm.com™©
Les erreurs de syntaxe• Empêchent la compilation
• Seront corrigées pour livrer
• Attention, en Java la compilation de chaque classe est indépendante
• Exemple : erreur de syntaxe empêchant la compilation
Java, les fondamentaux alphorm.com™©
Les erreurs de logique, de programmation• « Une bonne lecture élimine 80% des erreurs »
• N’ont pas à être gérées
• Doivent être corrigées par le développeur
� Garder un code lisible
Java, les fondamentaux alphorm.com™©
� Réfléchir la conception avant d’écrire le code
• Exemple : une variable référence n’est pas initialisée
Les erreurs exceptionnelles• Dues à l’environnement d’exécution, difficiles à prévoir
• Sont souvent « gérées » : le compilateur les détecte
• Typiquement non prises en compte lors du prototypage
• Exemple : un fichier n’existe pas alors qu’il devrait
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• Les erreurs de syntaxe
• Les erreurs de logique, de programmation
• Les erreurs exceptionnelles dues à l’environnement
Java, les fondamentaux alphorm.com™©
La gestion des erreurs
Présentation des types
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Présentation des types d’exceptions
Plan• Nature de l’exception
• Les exceptions runtime
• Les exceptions gérées
• Les exceptions de l’utilisateur
Java, les fondamentaux alphorm.com™©
Nature de l’exception• Une exception est un objet
• D’une classe qui hérite de java.lang.Exception
• Cet objet est créé lors de la levée de l’exception
• Il est récupéré dans le bloc du gestionnaire d’erreur
Java, les fondamentaux alphorm.com™©
Les exceptions runtime• Exceptions qui correspondent à des erreurs de programmation
• Ne sont pas gérées : non signalées par le compilateur
• NullPointerException : accès à un membre via une référence null
• IllegalArgumentException : l’argument ne correspond pas à l’attendu
Java, les fondamentaux alphorm.com™©
• ArrayIndexOutOfBoundException : débordement d’un tableau
• ArithmeticException : exceptions comme la division entière par zéro
Les exceptions gérées• Ces exceptions correspondent à des erreurs dues à l’environnement
� Ressources non disponibles, manque de droits d’accès,…
• Spécifiées par les méthodes
• Prise en compte par le compilateur qui oblige à gérer l’appel
Java, les fondamentaux alphorm.com™©
• FileNotFoundException : fichier non trouvé
• IOException : problème d’accès aux entrées-sorties
• SqlException : erreur remontée du SGBD
Les exceptions de l’utilisateur• Créer une classe qui hérite de java.lang.Exception
� Attributs, méthodes, constructeurs comme toute classe
• Créer un objet de cette classe et utiliser « throw »
• Les erreurs bas-niveau doivent être signalées par des exceptions
Java, les fondamentaux alphorm.com™©
Ce qu’on a couvert• Nature de l’exception
• Les exceptions runtime
• Les exceptions gérées
• Les exceptions de l’utilisateur
Java, les fondamentaux alphorm.com™©
La gestion des erreurs
Utiliser Javadocs pour
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Utiliser Javadocs pour rechercher des exceptions
Plan• Le rôle du compilateur pour les exceptions gérées
• La spécification des exceptions par les méthodes
Java, les fondamentaux alphorm.com™©
Le rôle du compilateur• Le compilateur lit la spécification des exceptions
• Il engage le développeur à gérer les exceptions
• Ce contrôle n’est pas réalisé pour les exceptions runtime
Java, les fondamentaux alphorm.com™©
La spécification des exceptions• La documentation référence les exceptions levées par les méthodes
� Trouver la classe qui contient la méthode
� Trouver la spécification des exceptions
• Pour les exceptions gérées, le compilateur nous guide
Exemple : Integer.parseInt(…)
Java, les fondamentaux alphorm.com™©
• Exemple : Integer.parseInt(…)
Ce qu’on a couvert• Le rôle du compilateur pour les exceptions gérées
• La spécification des exceptions par les méthodes
Java, les fondamentaux alphorm.com™©
La gestion des erreurs
Ecrire du code pour gérer
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Ecrire du code pour gérer les exceptions
Plan• Gérer une exception détectée par le compilateur
• Lever une exception
• Créer son propre type d’exception
• Réinterpréter une exception
Java, les fondamentaux alphorm.com™©
Gérer une exception • Le mot-clé « try » permet d’isoler le code nominal
• Correspond à une méthode
• Suivi de un ou plusieurs blocs « catch » qui sont typés par une classe d’exception
• Soit le try s’exécute puis le code après les catch
Java, les fondamentaux alphorm.com™©
• Soit le try s’exécute puis le code après les catch
• Soit le try est interrompu et un catch est exécuté, puis le code après le catch
• Possibilité de placer un bloc « finally », toujours exécuté
Lever une exception• Utiliser le mot-clé « throw » pour lever une exception
• Cette exception est simplement un objet créé pour l’occasion
• Branchement à l’exécution vers le plus proche « catch »
� Remonte vers les appelants en cherchant un bloc catch qui accepte l’objet levé
Java, les fondamentaux alphorm.com™©
levé
• Il faut spécifier la levée d’exception dans la signature de la méthode
� Sauf pour une exception runtime
Créer son propre type d’exception• Créer une classe qui hérite (au moins) de java.lang.Exception
• Déclarer les membres et constructeurs nécessaires
� Pour capter le contexte d’erreur (à la construction de l’objet, « throw »)
� Pour restituer les infos sur l’erreur (dans un « catch »)
Lever cette exception lorsqu’on détecte les situations irrécupérables
Java, les fondamentaux alphorm.com™©
• Lever cette exception lorsqu’on détecte les situations irrécupérables
Réinterpréter une exception• Dans un bloc catch, relancer une exception
• Pour réinterpréter l’exception, la nouvelle exception étant :
� Plus claire dans le contexte de l’utilisateur
� Traduite dans la culture du poste
D’une granularité différente de l’exception d’origine
Java, les fondamentaux alphorm.com™©
� D’une granularité différente de l’exception d’origine
� L’occasion de rétablir l’état du système
Ce qu’on a couvert• Gérer une exception détectée par le compilateur
• Lever une exception
• Créer son propre type d’exception
• Réinterpréter une exception
Java, les fondamentaux alphorm.com™©
Vue d’ensemble
Créer des packages et des
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Créer des packages et des fichier .jar
Plan• Les packages
• Les fichiers .jar
• Utiliser des fichiers .jar pour livrer une application
Java, les fondamentaux alphorm.com™©
Les packages• Conceptuellement : un regroupement de classes
• Physiquement : un répertoire qui contient les fichiers .java
• Logiquement : un sous-système qui isole des classes travaillant ensemble et proposant des points d’entrée
Java, les fondamentaux alphorm.com™©
Les fichiers .jar• Créé par l’outil jar (disponible dans le jdk)
• Fichier compressé zippé
• Contient tout et n’importe quoi, mais surtout :
� Des fichiers .class (binaire Java)
Java, les fondamentaux alphorm.com™©
� Un manifeste : description du contenu, en particulier la classe qui contient le « main »
Utiliser les fichiers .jar pour livrer • Il n’y a pas d’exe en Java
• Pour livrer une bibliothèque de classes
� Les classes restent organisées en packages, répertoires
• Pour livrer une application
Java, les fondamentaux alphorm.com™©
� En spécifiant la classe principale
Ce qu’on a couvert• Les packages
• Les fichiers .jar
• Utiliser des fichiers .jar pour livrer une application
Java, les fondamentaux alphorm.com™©
Vue d’ensemble
Architecture en 2 ou 3
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Architecture en 2 ou 3 niveaux
Plan• Architecture et niveaux
• Architecture 2 niveaux
• Architecture 3 niveaux
Java, les fondamentaux alphorm.com™©
Architecture et niveaux• L’architecture est l’effort d’organisation générale de l’application
• La conception devra se conformer à l’architecture
• Faire plusieurs niveaux permet de séparer les responsabilités
� Améliorer la maintenabilité de chaque niveau
Java, les fondamentaux alphorm.com™©
� Améliorer la cohérence
� Favoriser l’évolutivité
Architecture 2 niveaux• Séparer la présentation et des données
• Répartir ou pas les services de l’application
• Architecture logique, pas forcément physique
• Client-serveur
Java, les fondamentaux alphorm.com™©
• En Java, la communication est : socket, RMI, jdbc…
Architecture 3 niveaux• Présentation – services – données
• Architecture logique qui peut correspondre ou pas au physique
• En Java :
� présentation sous HTML, JSP, Servlet, Swing….
Java, les fondamentaux alphorm.com™©
� services : classes Java, Servlet, …
� Données accessibles via javabeans, EJB, jdbc…
Ce qu’on a couvert• Architecture et niveaux
• Architecture 2 niveaux
• Architecture 3 niveaux
Java, les fondamentaux alphorm.com™©
Vue d’ensemble
Exemples d’applications Java
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Exemples d’applications Java
Plan• L’application standalone, console
• L’application Applet
• L’application Servlet, associée à JSP
• L’application Android
Java, les fondamentaux alphorm.com™©
L’application standalone, console• Avec une classe qui a un « main »
• Cette méthode est le point d’entrée de l’application
• Le main est exécuté séquentiellement
• Une ihm graphique peut être gérée
Java, les fondamentaux alphorm.com™©
• Exécuté sur le système d’exploitation
• Cas particulier de Java Web Start
L’application Applet• Une applet hérite de Applet
• Instanciée et exécutée dans le contexte d’un navigateur
• Un cycle de vie spécifique
• Accès limité au système
Java, les fondamentaux alphorm.com™©
• Déploiement via un accès http
L’application Servlet• Un servlet hérite de Servlet
• Est instanciée et exécutée sur un serveur
� Conteneur de servlet
• Répond aux méthodes HTTP (Get, Post…)
Java, les fondamentaux alphorm.com™©
• Peut écrire du HTML, mais plutôt logique applicative
• Est souvent associée à la technique des JSP
L’application Android• Une application Java spéciale
� Machine virtuelle spécifique
� API spécifique
� Cycle de vie contraint
• Typiquement construite avec un IDE spéciale
Java, les fondamentaux alphorm.com™©
• Typiquement construite avec un IDE spéciale
Ce qu’on a couvert• L’application standalone, console
• L’application Applet
• L’application Servlet, associée à JSP
• L’application Android
Java, les fondamentaux alphorm.com™©
Conclusion
Conclusion
Java, les fondamentaux alphorm.com™©
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
Site : http://www.alphorm.comBlog : http://www.alphorm.com/blogForum : http://www.alphorm.com/forum
Conclusion
Plan• Présentation de la technologie Java
• Penser en termes objet
• Présentation du langage Java
• Utiliser des variables primitives
• Utiliser des objets
• Concepts avancés de l’objet
• Gestion des erreurs
• Vue d’ensemble
Java, les fondamentaux alphorm.com™©
• 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
Pour continuer …• Le module avancé de la formation Java
• Ne pas oublier la documentation Javadoc, en ligne ou sur le poste
Java, les fondamentaux alphorm.com™©
Recommended