106
Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Embed Size (px)

Citation preview

Page 1: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Conception par objet et Programmation Java

Préparé par :

Ibrahim BENLAZREG

Page 2: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Références

«Java -tête la première»

Kathy Sierra, Bert Bates,1re édition, O’Reilly, septembre 2004

«Cahiers du Programmeur -Java -1 .4 et 5.0 »

Emmanuel Puybaret, Eyrolles, mars 2006

«Introduction à Java », 2e édition

Pat Niemeyer et Jonathan Knudsen, O’Reilly, déc. 2002

«Au coeur de Java 2 -Volume 1 : Notions fondamentales»

Cay S. Horstmann, Gary Cornell, CampusPress, nov. 2003

«Thinkingin Java»,

Bruce Eckel-Prentice-Hall( www.BruceEckel.com, www.penserenjava.free)

«JAVA in a nutshell, 5th Edition»,

David Flanagan -O'Reilly2005

2

Page 3: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

CONCEPTS DE LA PROGRAMMATION ORIENTÉE OBJET

3

Page 4: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Programmation Orientée Objet

• La programmation orientée objet se base sur une approche de conception et de développement de logiciels permettant d'améliorer la productivité et la qualité du logiciel.

– Représenter les éléments du monde réel par des entités informatiques appelés "objets" en adoptant un haut niveau d'abstraction.  

modélisation simplifiée vu que le monde réel n'est plus représenté par des structures de données et des fonctions isolées (cas de la programmation classique) mais par des objets correspondant aux éléments traités du champ de l'étude.

4

Page 5: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Avant…

Approche procédurale :

"Que doit faire mon programme ?"

Exemple: Gestion d'une bibliothèque

UML par la pratique

JAVA 2Le guide du développeur

La Presse Directrice

Bibliothécaire

Lectrice

Lecteur

Page 6: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Avant…

Approche procédurale :

"Que doit faire mon programme ?"

Exemple: Gestion d'une bibliothèque

La Presse Directrice

Bibliothécaire

Lectrice

Lecteur

Gérer le stock

Gérer les empruntsde livres

JAVA 2Le guide du développeur

UML par la pratique

Page 7: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Présent…

Approche procédurale :"Que doit faire mon programme ?"

Approche orientée-objet :"De quoi doit être composé mon programme ?"

Cette composition est conséquence d'un choix de modélisation fait pendant la conception

Exemple: Gestion d'une bibliothèque

La Presse Directrice

Bibliothécaire

Lectrice

Lecteur

JAVA 2Le guide du développeur

UML par la pratique

Page 8: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Concepts : Classe

Des objets similaires peuvent être informatiquement décrits par une même abstraction : une classe

même structure de données et méthodes de traitement

valeurs différentes pour chaque objet

La Presse Directrice

Bibliothécaire

Lectrice

Lecteur

Classe LivreClasse Journal

Classe EmployéClasse Lecteur

JAVA 2Le guide du développeur

UML par la pratique

Page 9: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Concepts : Classe

LES CLASSES :Une classe d'objets est constituée d'une partie statique et d'une partie dynamique

• Partie statique : LES ATTRIBUTS : Les attributs représentent la description des données propres à chaque classe d'objets. Ceux-ci peuvent être des objets d'autres classes ou des références sur d'autres objets.

• Partie dynamique : LES METHODES : Les méthodes représentent l'ensemble des actions, procédures, fonctions ou opérations que l'on peut associer à une classe.L'ensemble des méthodes de la classe définit le "COMPORTEMENT "

Page 10: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Concepts : Classe

CLASSE VOITURE

ATTRIBUTS METHODES

MarqueModèleImmatriculationVitesseCouleurPuissance fiscaleEtc ...

DémarrerAccélérerFreinerStopperVidangerEtc ....

Page 11: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Concepts : Objet

Une instance de classe est un élément construit selon le modèle de sa

classe.

On nommera cet élément "OBJET".

L'opération par laquelle une classe produit plusieurs instances est

l'instanciation

Page 12: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

12

Concepts : Objet

• Un objet représente une entité du monde réel qui se caractérisent par une identité, des états et par un comportement.

• L’identité d’un objet permet de distinguer les objets les uns par rapport aux autres.

• Son état correspond aux valeurs de tous les attributs à un instant donné.

• le comportement d’un objet se défini par l’ensemble des opérations qu’il peut exécuter en réaction aux messages envoyés (un message = demande d’exécution d’une opération) par les autres objets..

Objet = Etat + comportement + identité

Page 13: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Concepts : Classe et Objet

CLASSE VOITURE EXEMPLES D'INSTANCESDE LA CLASSE VOITURE

ATTRIBUTS METHODES

MarqueModèleImmatriculationVitesseCouleurPuissance fiscaleEtc ...

DémarrerAccélérerFreinerStopperVidangerEtc ....

PEUGEOTPARTNER120 TN 1234160 Km /hrouge6 CV

RENAUTLaguna130 TN5671

190 Km /hbleu5 CV

Page 14: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Concepts : Encapsulation …

• "L'encapsulation est le processus qui consiste à empêcher

d'accéder aux détails d'un objet qui ne contribuent pas à ses

caractéristiques essentielles" (définition de BOOCH -

1991-).

• L'encapsulation :

– intégrer le code et les données d'une entité au sein d'un objet.

– empêche également les utilisateurs clients de connaître les détails de son

implémentation en ne fournissant qu'une vue externe (correspondant à

un masquage d'information).

– Seule l'interface (ou protocole) d'un objet doit paraître visible aux yeux

d'un client potentiel.

Page 15: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

L'encapsulation des données

Exemple :

Méthode : Vérifier le mot de passe d’un utilisateur

Objet : Individu (Employer d’une entreprise)

Donnée protégée : Valeur du mot de passe

Page 16: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

L'encapsulation des méthodes

Exemple :

Message = Débiter(somme, compte, code_confidentiel).

Objet = compte bancaire.

Méthode A (Visible depuis l'interface) = Débiter_carte_de_crédit.

Méthode B (non visible par l'utilisateur mais appelée par la méthode A) =

Algorithme de validation du code confidentiel.

Des méthodes encapsulées peuvent faire appel à des données qui sont

elles-mêmes protégées

Page 17: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Concepts : Héritage

.

L'héritage est un mécanisme destiné à exprimer les similitudes

entre classes. Il met en oeuvre les principes de généralisation et

de spécialisation en partageant explicitement les attributs et

méthodes communs au moyen d'une hiérarchie de classes

Page 18: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Concepts : Héritage…

SUPER CLASSE ou classe mère,métaclasse,classe de base,ancêtre

Lien d'héritage

SOUS CLASSE ou classe fille,classe dérivée,descendant

.

La classe fille hérite des caractéristiques de sa classe mère

(attributs et méthodes) mais elle se distingue par ses

caractéristiques propres.

Page 19: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Les différents types d'héritage

AVION BATEAU

HYDRAVION

.

Héritage simple : une classe fille n'a qu'une seule classe mère et elle

hérite d'une partie des attributs et méthodes de celle-ci en ayant ses

spécifications propres. Héritage multiple : une classe fille hérite de plusieurs classes mères.

Elle hérite d'une partie des attributs et des méthodes de chacune de ses

classes mères, en plus de ses spécifications propres.

Page 20: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

La notion de composition ou agrégation

VOITURE

 

 

1 4 1 1 

CARROSSERIE ROUES DIRECTION MOTEUR 

La composition consiste à réunir des objets pour en former un autre.

Dans le cas d'une composition (ou agrégation), on s'attachera à préciser le cardinal de cette relation.

Page 21: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

INTRODUCTION A LA PROGRAMMATION JAVA

21

Page 22: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Qu’est-ce que Java ?

• Une technologie développée par SUN Microsystems™ lancée en 1995– Un langage de programmation

– Une plateforme , environnement logiciel dans lequel les programmes java s'exécutent.

• La « Java Virtual Machine » (JVM)

• Des interfaces de programmation d’application (Java API)

22

Page 23: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

23

Le langage Java

• JAVA est un langage de programmation orientée objet

• Il hérite partiellement la syntaxe de C++ mais non ses défauts.

• Dans java ont été éliminés tous les éléments qui permettaient dans C++ d'engendrer des erreurs dans le code (pointeurs, allocation, désallocation, héritage multiple,...).

• Libération automatique de la mémoire : garbage collector

Page 24: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Le langage Java:Les différences avec C++

• Pas de structures ni d’unions

• Pas de types énumérés? (avant la version 5.0)

• Pas de typedef

• Pas de variables ni de fonctions en dehors des classes

• Pas de fonctions à nombre variable d’arguments

• Pas d'héritage multiple de classes

• Pas de surcharge d’opérateurs

• Pas de passage par copie pour les objets

• Pas de pointeurs, seulement des références

24

Page 25: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Le langage Java:caractéristiques

Orienté objet :– Meilleure modularité.

– Maintenance aisée des applications.

– Optimisation des composants.

Simple : – Supprime les aspects lourds et pénibles comme l'héritage multiple.

– Interdit la manipulation de pointeurs générateurs de nombreux bugs.

– Fournit via son Application Programming Interface API (une librairie) un très grand nombre d'outils avec des fonctionnalités puissantes qui vont simplifier et accélérer le développement d'applications.

– Syntaxe proche du C/C++ mais plus simple.

25

Page 26: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Le langage Java:caractéristiques

Interprété : – Le Byte Code est interprété par la JVM.– La JVM se charge de l'interaction avec le système d'exploitation sous-jacent.

Réparti : – JAVA supporte des mécanismes de communication à distance au moyen de son

API réseau.

Robuste : – JAVA est un langage fortement typé.– Interdiction de manipulation des adresses via des pointeurs qui est souvent

génératrice d'erreurs. – Récupération automatique de la mémoire inutilisée.– Des contrôles lors de l'exécution (exemple : dépassement de la taille d'un tableau).

26

Page 27: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Le langage Java:caractéristiques

Sécurité:– Limitation des erreurs par la syntaxe.

– Vérification par le compilateur et l'interpréteur.

Indépendant de la plate-forme : – Génération d'un Byte Code indépendant de la plate-forme.

– Chaque plate-forme possède sa propre JVM. 

Multi-thread : – Un thread est une entité d'exécution qui peut s'exécuter en parallèle d'une

manière concurrente à d'autres threads au sein d'une même application.

– Lancement de plusieurs threads en même temps sans blocage.

27

Page 28: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Le langage Java:caractéristiques

Dynamique:– Les composants d'une application (les classes) sont chargés au

lancement de l'application.

Performance ? : – Exécution ralentie à cause de l’interpréteur ?

– Le code natif généré par l’interpréteur est-il aussi rapide que celui réalisé par un compilateur classique (par ex C)?

28

Page 29: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

La plateforme Java

• Plateforme = environnement hardware ou software sur lequel le programme est exécuté.

• La Java « Platform » se compose de: – la Java Virtual Machine (Java VM)

– la Java Application Programming Interface (Java API)

29

Page 30: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

La plateforme Java: API Java

• API Java– (très) vaste collection de composants logiciels (classes et

interfaces)– organisée en bibliothèques (packages)– offre de nombreux services de manière standard

(indépendamment de la plateforme matérielle)

• Aperçu :– Java.lang: gestion des chaînes de caractères (String), interaction avec l’OS

(System), programmation parallèle (Thread).– Java.util: parseur de chaîne, Liste, Dictionnaires, HashTable,...– Java.io: gestion des entrées/Sorties (écran, clavier, fichier)– java.applet: gestion des applets– Java.awt et Java.swing: gestion de l’interface graphique: Fenêtres, boutons,

boites de dialogue, événements souris,..30

Page 31: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

La plateforme Java:évolution de l’API standard

31

Page 32: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

La plateforme Java:les différentes éditions de Java

32

Page 33: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Java : Comment ça marche??

Page 34: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Étapes d’exécution d’un programme Java

Page 35: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

35

Types de programmes Java

• En Java, on développe deux genres de programmes :– Les applications indépendantes

• Programmes autonomes (standalone)

– les applets qui sont des programmes java insérés dans un document HTML s'exécutant à travers la machine virtuelle java du navigateur lisant le document HTML.

Page 36: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

36

JDK : boîte à outils Java

• Le JDK (Java Development Kit) contient tout ce qui est nécessaire pour développer des programmes Java (utilitaires + documentation + JRE)

• Utilitaires :– javac, le compilateur qui transforme votre programme source en bytecode,– java, le programme permettant l'exécution du bytecode constituant les

applications, – l'AppletViewer, pour exécuter les applets,– javadoc, un programme permettant de créer automatiquement la documentation

de vos programmes au format HTML, – autres utilitaires…

• Documentation :– contient la liste de toutes les classes Java. Cette documentation est absolument

indispensable au programmeur. Elle est au format HTML et doit être consultée à l'aide d'un navigateur.

• Le J2RE (Java 2 Runtime Environment), qui contient tout ce qui estnécessaire pour diffuser vos applications aux utilisateurs.

Page 37: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

37

Installation du JDK

• A l'installation, le JDK est placé dans un dossier qui comporte plusieurs sous-dossiers.

• Dans la version actuelle, ce dossier est nommé jdk1.6.

Page 38: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Installation du JDK : paramétrage

• Path:

– Pour exécuter le compilateur javac et l’interpréteur java de n’importe quelle répertoire il faudra spécifier la variable d’environnement path=%java_home%\bin

• Classpath : – Pour compiler ou exécuter un programme java qui importe

de packages (externes au "core") ou qui utilise des classes additionnelles à vous, il faut indiquer où se trouvent ces classes, soit un répertoire, un archive (de type *.jar ou *.zip)

– Quand le compilateur ne trouve pas une classe, il faut rajouter l'endroit où elle se trouve (ou plutôt le package ou elle se trouve) dans le classpath

38

Page 39: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Installation du JDK : paramétrage

• La configuration de l'environnement comporte deux aspects :– Le chemin d'accès aux programmes exécutables (javac, java…).

• Set path=%path%;C:\....\jdk1.x\bin dans l’invité de commandes• Fichier autoexec.bat• Démarrer/paramètres/panneau de configuration/systèmes/onglet Avancé/bouton Variables

d’environnement/variables système

– Le chemin d'accès aux classes Java (fich.class).• Set classpath= =%classpath%;C:\......\repertoire_personnel

39

Page 40: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Environnement de développement

• Définitions:– Console:

• Invite de commande

• terminal (linux), MSDOS (windows)

– Éditeur de texte:• Notepad, Wordpad, Vi

– Environnement de développement intégré (IDE)• est un programme regroupant un ensemble d'outils pour le

développement de logiciels. En règle générale, un EDI regroupe un éditeur de texte, un compilateur , des outils automatiques de fabrication, et souvent un débogueur. [wikipedia]

• Forte for java, Jcreator, JpadPro, Jbuilder, eclipse…

40

Page 41: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Premier Programme

• Editer le code source Java suivant et le sauver dans Hello.java :

Public class Hello

{

public static void main( String args[])

{

System.out.println( "Bienvenue dans le monde Java ");

} }

• Compiler avec la commande javac Hello.java

– hello.class est générée• Exécuter en lançant la machine virtuelle java et en lui spécifiant le point

d'entrée

• Java Hello

41

Page 42: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Commentaire sur le premier programme

• La POO pure

– Rien que pour afficher "Bienvenue" nous avons développé une classe.

– Nous avons utilisé les classes System et String ; ces classes appartiennent à java.lang qui est implicitement importé

• La méthode main() doit être static

– main doit être une méthode de classe pour qu'on puisse l'invoquer directement à partir de la classe sans besoin de construire une instance de la classe.

• La méthode main() doit déclarer l'argument String

– main() doit déclarer la chaîne d'arguments même si on lui passera rien lors de l'exécution.

42

Page 43: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Commentaire sur le premier programme

• Le nom du fichier source doit obligatoirement concorder avec le nom de la classe

• Il est dans les habitudes des programmeurs Java de faire concorder le nom du fichier source avec celui de la classe qu'il contient. Dans le cas où l'on a plusieurs classes dans le fichier, on nomme ce dernier avec la classe ayant le point d'entrée main(). Ceci n'est suscité que pour des raison de simplicité.

• Le compilateur génère un fichier .class par classe source compilé et que le nom du .class est le même que celui de la classe source.

43

Page 44: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Exemple d’erreurs de syntaxe…

Page 45: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Exemple d’erreurs de syntaxe…

Page 46: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Structure du code en Java

Page 47: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Anatomie d’une classe

Page 48: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

TYPES ET INSTRUCTIONS DE BASE JAVA

48

Page 49: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Mots clés Java

• abstract, boolean, break,

byte,case,catch, char,class,

continue,default, do, double, else,

extends,final, finally, float, for,

if, implements, import, instanceof,

int, interface, long, native, new,

null,package, private, protected,

public, return, short, static,

super, switch, synchronized, this,

throw, throws, transient, try,

void, volatile, while49

Page 50: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Identificateurs

• Nommer les classes, les variables, les méthodes, ...

• Un identificateur Java– est de longueur quelconque

– commence par une lettre Unicode

– peut ensuite contenir des lettres ou des chiffres ou le caractère souligné«_ »

– ne doit pas être un mot réservé du langage (mot clé) (if, for, true, … )

– , les caractères suivants sont autorisés pour construire un identificateur Java : "$" , "_" , "µ" et les lettres accentuées.

[a..z, A..Z, $, _, µ ]{a..z, A..Z, $, _, µ, 0..9, Unicode}

50

Page 51: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Conventions de nommage

• Les noms de classes commencent par une majuscule (ce sont les seuls avec les constantes) :– Visage, Object

• Les mots contenus dans un identificateur commencent par une majuscule :– UneClasse, uneMethode, uneVariable

– On préférera ageDuCapitaine à ageducapitaine ou age_du_capitaine

• Les constantes sont en majuscules et les mots sont séparés par le caractère souligné« _ »:– UNE_CONSTANTE

51

Page 52: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Commentaires

• Sur une ligne

• Sur plusieurs lignes

• Commentaires documentant pour le javadoc

52

Page 53: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Commentaires

• Commenter le plus possible et judicieusement

• Chaque déclaration (variable, mais aussi méthode, classe)

• Commenter clairement (utiliser au mieux les 3 possibilités)

53

Page 54: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Types de données en Java

• 2 grands groupes de types de données :– types primitifs

– objets (instances de classe)

• Java manipule différemment les valeurs des types primitifs et les objets : les variables contiennent– des valeurs de types primitifs

– ou des références aux objets

54

Page 55: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Types primitifs

• Valeur logique– boolean (true/false)

• Nombres entiers– byte (1 octet), short (2octets), int (4 octets), long (8 octets)

• Nombres non entiers (à virgule flottante)– float (4 octets), double (8 octets).

• Caractère (un seul)– char (2 octets) ; codé par le codage Unicode (et pas ASCII)

• types indépendants de l’architecture– En C/C++, représentation dépendante de l’architecture (compilateur,

système d’exploitation, processeur)

ex: int= 32 bits sous x86, mais 64 bits sous DEC alpha

Portage difficile, types numériques signés/non signés55

Page 56: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

56

Types primitifs et valeurs

Page 57: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Constantes nombres

• Une constante «entière»est de type long si elle est suffixée par «L»et de type int sinon

• Une constante «flottante»est de type float si elle est suffixée par «F»et de type double sinon

• Exemples– 35

– 2589L // constante de type long

– 4.567e2 // 456,7 de type double

– .123587E-25F // de type float

57

Page 58: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Constantes de type caractère

• Un caractère Unicode entouré par 2 simples quotes '  

• Exemples :– 'A' 'a' 'ç''1' '2‘– \ caractère d’échappement pour introduire caractères spéciaux

• '\t' tabulation• '\n' nouvelle ligne• '\r' retourchariotretourarrière

• '\f' sautde page

• …• '\\' '\‘‘ '\" ‘

– ’\u03a9’ ( \u suivi du code hexadécimal à 4 chiffres d’un caractère Unicode)

• 'α'58

Page 59: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Autres constantes

• Type booléen– False

– true

• Référence inexistante (indique qu’une variable de type non primitif ne référence rien)– null

59

Page 60: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Forcer un type en Java

• Java langage fortement typé

• Dans certains cas, nécessaire de forcer le programme à considérer une expression comme étant d’un type qui n’est pas son type réel ou déclaré

• On utilise le cast : (type-forcé) expression

• Exemple– int i = 64;

– char c = (char)i;

60

Page 61: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Casts entre types primitifs

• Un cast entre types primitifs peut occasionner une perte de données– Par exemple, la conversion d'un int vers un short peut donner un

nombre complètement différent du nombre de départ

• Un cast peut provoquer une simple perte de précision– Par exemple, la conversion d'un long vers un float peut faire

perdre des chiffres significatifs mais pas l'ordre de grandeur

61

Page 62: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Casts entre types primitifs

• Les affectations entre types primitifs peuvent utiliser un cast implicite si elles ne peuvent provoquer qu'une perte de précision (ou, encore mieux, aucune perte) – int i = 130;

– double x = 20 * i;

• Sinon, elles doivent comporter un cast explicite– short s = 65; // cas particulier affectation int "petit"

– s = 1000000; // provoque une erreur de compilation

– int i = 130;

– byte b = (byte)(i + 2);

– char c = i; // caractère dont le code est 65

– b = (byte)i; // b = -126 !62

Page 63: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Casts entre entier et caractère

• La correspondance char → int, long s’obtient par cast implicite

• Les correspondances char → short, byte , et long, int, short ou byte → char nécessitent un cast explicite (entiers sont signés et pas les char)

– int i = 80;

– char c = 68; // caractère dont le code est 68

– c = (char)i

– i = c;

– short s = (short)i;

– char c2 = s; // provoque une erreur

63

Page 64: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

64

Opérateurs

• Il existe 39 opérateurs de Java classés par famille.

• Les opérateurs ont soit une seule opérande, soit deux opérandes,

• Il n'existe en Java qu'un seul opérateur à trois opérandes (comme en C) l'opérateur conditionnel " ? : ".

• La priorité des opérateurs sert, lorsqu'une expression contient plusieurs opérateurs, à indiquer l'ordre dans lequel s'effectueront les opérations.

– Par exemple sur les entiers l'expression 2+3*4 vaut 14 car l'opérateur * est plus prioritaire que l'opérateur +, donc l'opérateur * est effectué en premier.

• Lorsqu'une expression contient des opérateurs de même priorité alors Java effectue les évaluations de gauche à droite. Par exemple l'expression 12/3*2 vaut 8 car Java effectue le parenthésage automatique de gauche à droite ((12/3)*2).

Page 65: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

65

Priorité d'opérateurs

La plus haute

La plus basse

Page 66: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

66

Les opérateurs arithmétiques

Page 67: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

67

Les opérateurs arithmétiques

Page 68: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

68

Post-incrémentation

• k++ : la valeur de k est d'abord utilisée telle quelle dans l'instruction, puis elle est augmentée de un à la fin.

Page 69: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

69

Pré-incrémentation

++k : la valeur de k est d'abord augmentée de un ensuite utilisée dans l'instruction.

Page 70: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

70

Post ou pré-décrémentation

• k-- : la valeur de k est d'abord utilisée telle quelle dans l'instruction, puis elle est diminuée de un à la fin.

• --k : la valeur de k est d'abord diminuée puis utilisée dans l'instruction.

Page 71: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

71

Opérateurs de comparaison

• Ces opérateurs employés dans une expression renvoient un résultat de type booléen (false ou true).

Page 72: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

72

Opérateurs booléens

• Ce sont les opérateurs logiques classiques de l'algèbre de Boole

• Les connecteurs logiques ont pour syntaxe en Java : ! , & , | , ^ :– L’opérateur et : & ( { V, F }x { V, F } { V, F })

– L’opérateur ou : | ( { V, F }x { V, F } { V, F })

– L’opérateur ou exclusif : ^ ( { V, F }x { V, F } { V, F })

– L’opérateur non : ! ( { V, F } { V, F })

où { V, F }représente l'ensemble {Vrai , Faux}

• L'opérateur et optimisé : &&

• L'opérateur ou optimisé : | |

Page 73: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

73

Opérateurs bits level

• Ce sont des opérateurs de bas niveau en Java dont les opérandes sont exclusivement l'un des types entiers ou caractère de Java (short, int, long, char, byte). Ils permettent de manipuler directement les bits du mot mémoire associé à la donnée.

Page 74: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Déclarations des variables

• Avant toute utilisation dans un programme une variable doit être déclarée

• syntaxe: type identificateur– type : un type primitif ou un nom de classe

• Exemples– byte age;

– boolean jeune;

– float poids;

– double x, y ,z;

• Une variable est accessible (visible) depuis l'endroit où elle est déclarée jusqu'à la fin du bloc où sa déclaration a été effectuée

74

Page 75: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Déclarations des variables (suite)

75

Page 76: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

76

Les instructions

• Toutes les instructions doivent se terminer en Java par un point-virgule " ; «

• Instruction simple, instruction composée ou bloc instruction (encadrée par { …….})

Page 77: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

77

L’affectation

• Le symbole d'affectation en Java est " = ", soit par exemple : x = y avec x est un identificateur de variable

• L'affectation peut être utilisée dans une expression: – int a , b = 56 ;– a = (b = 12)+8 ; // b prend une nouvelle valeur dans l'expression– a = b = c = d =8 ; // affectation multiple

• Optimisation : soit op un opérateurs quelconque

– int a , b = 56 ;– a = -8 ;– a += b ; // équivalent à : a = a + b– b *= 3 ; // équivalent à : b = b * 3 => a=48 et b=168

Page 78: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

78

Les instructions conditionnellesl’opérateur if …else

• if ( Expression ) Instruction ; • if (Expression ) Instruction ; else Instruction ;• L'expression doit être de type booléen

int a , b , c ;….if ( b = = 0 ) c =1 ;else {c = a / b;System.out.println("c = " + c);}if ((c = a*b) != 0) c += b; affectaion de a*b dans c puis

comparaisonelse c = a;

Page 79: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

79

Les instructions conditionnelles :L'opérateur …? … : …

• Où expression renvoie une valeur booléenne (le test), les deux termes valeur sont des expressions générales (variable, expression numérique, booléenne etc...) renvoyant une valeur de type quelconque.

• Si l'expression est true l'opérateur renvoie la première valeur,

• Si l'expression est false l'opérateur renvoie la seconde valeur

• Exemple :int a,b,c ;

c = a = = 0 ? b : a+1 ; < == > if (a = = 0) c = b; else c = a+1;

Page 80: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

80

Exercice

• question : utiliser l'opérateur conditionnel pour calculer le plus grand de deux entiers a, b.

• question : que fait ce morceau de programme ci-après ?int a , b , c ; ....

c = a>b ? (b=a) : (a=b) ;

Page 81: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

81

Les instructions conditionnelles:l'opérateur switch...case

Switch (expression)

{

Case (expression1) : instructions; break;

Case (expression2) : instruction; break;

……….

Default : instruction;

}

• La partie expression d'une instruction switch doit être une expression ou une variable du type byte, char, int ou bien short.

• La partie expression d'un bloc case doit être une constante ou une valeur

immédiate du type byte, char, int ou bien short.

Page 82: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

82

Exercice

Question : Les résultats sont-ils corrects ? Pourquoi?

Page 83: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

83

Les instructions itératives:la boucle while

while ( Expression ){Instruction 1 ;Instruction 2 ; ...}

• L'expression doit être de type booléendo

{Instruction 1 ;Instruction 2 ; ...} while ( Expr ) => elle s’exécute au moins une fois

Page 84: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

84

Les instructions itératives:la boucle for

for (Expr1 ; Expr2 ; Expr3 ) Instructions

• Expr1 sert à initialiser une ou plusieurs variables (dont éventuellement la variable de contrôle de la boucle) sous forme d'une liste d'instructions d'initialisation séparées par des virgules.

• Expr2 sert à donner la condition de rebouclage sous la forme d'une expression renvoyant une valeur booléenne (le test de l'itération).

• Expr3 sert à réactualiser les variables (dont éventuellement la variable de contrôle de la boucle)sous forme d'une liste d'instructions séparées par des virgules.

Page 85: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

85

Exemples de boucle for

Page 86: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

86

Exemples de boucle for

• Voici une boucle dite infinie

• Voici une boucle ne possédant pas de variable de contrôle(f(x) est une fonction déjà déclarée) :

• Terminons par une boucle for possédant deux variables de contrôle :

Page 87: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

87

Récapitulation

Page 88: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG
Page 89: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

STRUCTURES DE DONNÉES: STRING & TABLEAUX

89

Page 90: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

90

La classe String

• Le type de données String (chaîne de caractère) est une classe.

• Une chaîne de type String est un objet

• Un objet String n'est utilisable qu'à travers les méthodes de la classe String.

• Exemple de valeur littéral de chaîne: " abcdef ".

Page 91: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

91

La classe String: Méthodes

• Concat ( ) : concaténer 2 chaines de caractères

• toCharArray ( ) : converti une chaîne en un tableau de caractères contenant tous les caractères de la chaîne.

Page 92: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

92

La classe String:Méthodes (suite)

Page 93: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

93

La classe String:caractéristiques

• Les objets String sont « immutables » : méthodes de manipulation d'une chaîne renvoient un autre objet de chaîne différent.

• On ne peut pas concaténer avec l’opérateur +, des char à une chaîne String

Page 94: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

94

Tableaux

Page 95: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

95

Les tableaux à une dimension

• Déclaration d'une variable de type tableau :int [ ] table1; OU int table1[ ];char [ ] table2;float [ ] table3;...String [ ] tableStr;

• Déclaration d'une variable de tableau avec définition explicite de taille :

int [ ] table1 = new int [5];char [] table2 = new char [12];float [ ] table3 = new float [8];...String [ ] tableStr = new String [9];

Page 96: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

96

Les tableaux à une dimension

• La déclaration et la définition de taille peuvent être séparés,

• La définition peut être mise n'importe où dans le corps d'instruction, mais elle doit être utilisée avant toute manipulation du tableau. Cette dernière instruction de définition peut être répétée plusieurs fois dans le programme, il s'agira alors à chaque fois de la création d'un nouvel objet (donc un nouveau tableau), l'ancien étant détruit et désalloué automatiquement par le ramasse-miettes (garbage collector) de Java.

Page 97: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

97

Les tableaux à une dimension

• Déclaration et initialisation d'un tableau avec définition implicite de taille :

int [ ] table1 = {17,-9,4,3,57};

char [ ] table2 = {'a','j','k','m','z'};

float [ ] table3 = {-15.7f,75,-22.03f,3,57};

String [ ] tableStr = {"chat","chien","souris","rat","vache"};

• Dans cette éventualité Java crée le tableau, calcule sa taille et l'initialise avec les valeurs fournies.

• Il existe un attribut général qui contient la taille d'un tableau quelque soit son type, c'est l'attribut length.

• Le premier élément d'un tableau est numéroté 0, le dernier length-1.

Page 98: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

98

Les tableaux à deux dimension

• La déclaration s'effectue avec deux opérateurs crochets [ ] [ ] .

• Le premier crochet sert à indiquer le nombre de lignes (nombre de tableaux à une dimension), le second crochet sert à indiquer la taille de la ligne.

Page 99: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

99

Les tableaux à deux dimension

Page 100: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

ENTRÉES/SORTIES SUR CONSOLE

100

Page 101: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Affichage sur console

• Affichage sur la consoleSystem.out.print(chaîne de caractères à afficher)

System.out.println(chaîne de caractères à afficher)

• chaîne de caractères peut être :– une constante chaîne de caractères (String)

System.out.println("coucou");

– une expression de type String

System.out.println(age);

– une combinaison (concaténation) de constantes et d'expressions de type String. La concaténation est exprimée à l'aide de l'opérateur +

System.out.println("L'age de la personne est " + age + " son poids " + poids);

101

Page 102: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Lecture du clavier:classe Scanner

import java.util.Scanner;

public class Addition

{

public static void main( String args[] ) {

Scanner input = new Scanner( System.in );

int n1,n2,somme;

System.out.print(" Donner le premier entier: " );

n1 = input.nextInt();

System.out.print(" Donner un deuxième entier: " );

n2 = input.nextInt();

somme = n1 + n2;

System.out.printf( "Somme est %d\n", sommme );

} }

Pour lire une chaine de caractère input.nextLine();102

Page 103: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Lecture du clavier:classe JOptionPane

• Affiche une boîte de dialogue standard qui permet à l’utilisateur de saisir ou d’afficher une information

import javax.swing.JOptionPane;

public class GetInputFromKeyboard {

public static void main( String[] args ){

String name = "";

name=JOptionPane.showInputDialog(“Please enter your name");

String msg = "Hello " + name + "!";

JOptionPane.showMessageDialog(null, msg);

}

}

103

Page 104: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG

Exécution de l’exemple

104

Page 105: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG
Page 106: Conception par objet et Programmation Java Préparé par : Ibrahim BENLAZREG