Module Informatique 1

Dimension: px
Commencer à balayer dès la page:

Download "Module Informatique 1"

Transcription

1 Module Informatique 1 Algorithmique et Programmation transparents du cours Ye-Qiong SONG Professeur à l ENSEM-INPL,

2 Organisation du cours Modules «informatique 1» et «informatique 2» correspondent à l enseignement de l informatique des premier et second semestres en 1A Deux parties: Algorithmique et programmation (en java) Architecture des machines (microprocesseur) Module «informatique 1» se focalise sur l algo. & prog. avec comme objectif connaissance en techniques de programmation et en méthodologies de conception d algorithmes Enseignement effectué en 12h CM, 2h MC, 7h Tutorats et 6x3h TP + travail personnel (40h environ) cours d algo. et prog. par Y.Q. Song Informatique 1 2

3 Organisation du cours Savoir-faire et compétences acquises à l issue du module «informatique 1» Autonomie en programmation en java et capacité de conception d algorithmes simples Supports Polycopiés, transparents du cours et livres de référence (disponibles au centre de doc INPL) Clinique informatique pour vous aider dans votre progression (horaires sera affichées sur l ENT) Deux très bons livres pour la partie programmation en Java: - Anne Tasso, «Le livre de Java: premier langage pour les vrais débutants en programmation», Eyrolles, Irène Charon, «Le langage Java: concepts et pratique», Hermes-Lavoisier, Et un bon polycopié de F. Morain à l école polytechnique: cours d algo. et prog. par Y.Q. Song Informatique 1 3 X2005/Poly/polyX05.pdf

4 Comment réussir? Ce cours demande beaucoup de travail personnel car l'apprentissage d'un langage de programmation et la maîtrise des environnements informatiques prend du temps! Contrôle des connaissances en semestre 1: -Un test en novembre -Un partiel en janvier -Un test pratique et oral de TP en janvier -Contrôle de régularité du travail et tests de tutorats cours d algo. et prog. par Y.Q. Song Informatique 1 4

5 Contenus S1et 2: introduction générale S3, 4 et 5: techniques de base de la programmation communs à tous les langages S6, 7, 8, 9 et 10: Modélisation par classe et programmation objet (notion de classe, méthode et objet) S11: gestion des exceptions S12: interface graphique et programmation événementielle (exemple sur robots LEGO en TP) Pour aller plus loin (notions utiles mais ne seront pas nécessairement abordées en cours): Annexe1: notions de flux de données et de fichiers Annexe2: Java et Internet Applet et Servlet Annexe3: notion de thread cours d algo. et prog. par Y.Q. Song Informatique 1 5

6 S1et2 - Introduction -Ordinateur -Système d exploitation -Programme -Langages -Java -Production d un programme: -Algorithme -Ecriture d un programme -Compilation et édition de liens cours d algo. et prog. par Y.Q. Song Informatique 1 6

7 Histoire de l informatique Représentation d'un nombre par un boulier cours d algo. et prog. par Y.Q. Song Informatique 1 7

8 Histoire de l informatique Alan Mathieson TURING (jun 1912-jun 1954) Mathématicien anglais, maître-assistant à Cambridge dès 23 ans. Il a conçu en 1936 une machine logique capable de résoudre tous les problèmes que l'on peut formuler en termes d'algorithmes. Pendant la guerre, il participera à la réalisation de la Bombe, première machine électromécanique de décryptage des messages codés avec l'enigma Allemande. cours d algo. et prog. par Y.Q. Song Informatique 1 8

9 Machines de Turing Ces machines (théoriques) permettent de résoudre tous les problèmes qui peuvent être décrits sous forme algorithmique. Leur mémoire peut être représentée par des cases et des pions et un pointeur. Il suffit alors de suivre scrupuleusement les instructions, sans chercher à penser, pour que le résultat soit garanti. Ciaprès, l'algorithme à utiliser pour multiplier par 2. Extrait de cours d algo. et prog. par Y.Q. Song Informatique 1 9

10 Machines de Turing Etat Il n'y a pas de pion en face du pointeur Il y a un pion en face du pointeur 1 FIN Enlevez le pion - Déplacez le pointeur d'une case vers la gauche - Passez à l'état 2 2 Mettez un pion - Déplacez le pointeur d'une case vers la gauche - Passez à l'état 3 Déplacez le pointeur d'une case vers la gauche - Restez à l'état 2 3 Mettez un pion - Déplacez le pointeur d'une case vers la droite - Passez à l'état 4 4 Déplacez le pointeur d'une case vers la droite - Passez à l'état 1 Déplacez le pointeur d'une case vers la gauche - Restez à l'état 3 Déplacez le pointeur d'une case vers la droite - Restez à l'état 4 Extrait de cours d algo. et prog. par Y.Q. Song Informatique 1 10

11 Histoire de l informatique Johannes Von NEUMANN (Hongrie déc 1903-USA fév 1957) Il a été l'un des personnages clés des débuts de l'informatique. Il publia de nombreux articles sur l'algèbre et la mécanique quantique avant de se consacrer à la construction d'ordinateurs et à la modélisation mathématique de la réaction en chaîne de la bombe A. Ses "machines IAS" sont à l'origine de "l'architecture Von NEUMANN", c'est à dire celle des ordinateurs tels que nous les connaissons aujourd hui. cours d algo. et prog. par Y.Q. Song Informatique 1 11

12 1er ordinateur: ENIAC [1943] l ENIAC (Electronic Numerical Integrator and Computer) est le premier ordinateur entièrement électronique d un poids de 30 tonnes! Pour en connaître plus, taper «histoire de l informatique» sur google -Wikipedia -Commentcamarche -Et bien d autres cours d algo. et prog. par Y.Q. Song Informatique 1 12

13 Architecture d un ordinateur [Von Neumann 1944] Unité centrale registre unité de commande unité arithmétique et logique instructions données résultats mémoire Centrale unité d échange Périphériques cours d algo. et prog. par Y.Q. Song Informatique 1 13

14 Programmes et données en mémoire Adresse de Prog. en assembleur Prog. en code machine MC6809 Adresse mémoire l instruction $ LDA $1000 $ B 6 $ 1 0 $ 0 0 $2000 $B6 $2001 $10 $2002 $00 $ ADDA $1001 $ B B $ 1 0 $ 0 1 $2003 $BB $2004 $10 $2005 $01 $ STA $1002 $ B 7 $ 1 0 $ 0 2 $2006 $B7 $2007 $10 $2008 $02 Programme en Java ou en c: byte a, b, c; a=1; b=2; c=a+b; Case mémoire $1000 $01 $1001 $02 $1002 $03 Prog. Données cours d algo. et prog. par Y.Q. Song Informatique 1 14

15 Programme et langage Un programme informatique est une succession d instructions exécutables par l ordinateur Un ordinateur ne sait manipuler que du binaire (0 et 1), nécessité d un langage de programmation pour écrire de façon lisible (proche du langage humain) les instructions à exécuter par l ordinateur Un programme ainsi écrit s appelle programme source (ou fichier source ou encore code source): un simple fichier de texte Un fichier source doit être traduit par un compilateur en langage machine (binaire) pour être exécutable (fichier exécutable) cours d algo. et prog. par Y.Q. Song Informatique 1 15

16 Compilation et édition de liens Fichier source Fichier objet Fichier exécutable (programme) Compilateur Editeur de liens Le compilateur transforme le code source en code objet (stocké dans le fichier objet) un traducteur Le compilateur fait ensuite l appel à un éditeur de liens pour intégrer dans le fichier final tous les éléments annexes (fonctions ou librairies stockées dans des fichiers séparés), puis crée un fichier exécutable (code exécutable ou programme) Exemple: les fichiers *.exe sous Windows cours d algo. et prog. par Y.Q. Song Informatique 1 16

17 Systèmes d exploitation Comment dialoguer avec un ordinateur? Un ordinateur (matériel) ne sait qu exécuter des opérations simples (arithmétique et logique ou comparaison), opérations données sous un code binaire Utilisateur a besoin d un interpréteur pour donner des consignes (Comment entrer un programme? Comment dire quel programme à exécuter? Quel fichier à imprimer?, ) Notion de système d exploitation (SE ou OS en anglais) Extrait de cours d algo. et prog. par Y.Q. Song Informatique 1 17

18 SE Le SE est chargé d'assurer la liaison entre l'utilisateur, les ressources matérielles, et les applications (e.g. logiciel de traitement de texte, jeu vidéo,...). Rôles du système d'exploitation Gestion du processeur (multitâche, ordonnanceur), mémoire (RAM, virtuelle), E/S (via pilote ou «driver») Gestion de l'exécution des applications (multitâche, mémoire vive (RAM), mémoire virtuelle Gestion de fichiers et de droits cours d algo. et prog. par Y.Q. Song Informatique 1 18

19 SE Un SE est composé d un ensemble de logiciels permettant de gérer les interactions avec le matériel. Le noyau (en anglais kernel) représentant les fonctions fondamentales du SE telles que la gestion de la mémoire, des processus, des fichiers, des entrées-sorties principales, et des fonctionnalités de communication. L'interpréteur de commande (en anglais shell, traduisez «coquille» par opposition au noyau) permettant la communication avec le SE par l'intermédiaire d'un langage de commandes, afin de permettre à l'utilisateur de piloter les périphériques en ignorant tout des caractéristiques du matériel qu'il utilise, de la gestion des adresses physiques, etc. Le système de fichiers permettant d'enregistrer les fichiers dans une arborescence. cours d algo. et prog. par Y.Q. Song Informatique 1 19

20 Le noyau Le noyau (ou cœur) assure les fonctionnalités suivantes : gestion des périphériques (au moyen de pilotes ou «drivers») ; gestion de l exécution des programmes (aussi nommée processus) : gestion de la mémoire attribuée à chaque processus ; ordonnancement des processus (répartition du temps d exécution sur le ou les processeurs). synchronisation et communication entre processus (services de synchronisation, d échange de messages, mise en commun de segments de mémoire, etc.) gestion des fichiers (au moyen de système de fichiers) ; gestion des protocoles réseau (TCP/IP, etc.). cours d algo. et prog. par Y.Q. Song Informatique 1 20

21 Le système de fichiers Un système de gestion de fichiers est une structure de données permettant de stocker les informations et de les organiser dans des fichiers sur ce que l on appelle des mémoires secondaires (disque dur, CD-ROM, Clé USB, etc.). Il offre à l utilisateur une vue abstraite sur ses données et permet de les localiser à partir d un chemin d accès. cours d algo. et prog. par Y.Q. Song Informatique 1 21

22 Interface utilisateur (interpréteur) L'interface utilisateur aussi nommée interface Homme-Machine (IHM) permet à un homme de se servir de l'ordinateur à l aide de clavier, souris et écran Cette interaction homme machine s élabore tant par le biais d'interfaces graphiques (en anglais GUI pour Graphical User Interface) qu'en ligne de commande par le «Shell». cours d algo. et prog. par Y.Q. Song Informatique 1 22

23 SE Types de systèmes multitâches, multi-processeurs, embarqués, temps réel Quelques SE DOS/Windows Unix/Linux Mac/OS X cours d algo. et prog. par Y.Q. Song Informatique 1 23

24 Langages de programmation Langage informatique: un langage pour donner des instructions à un ordinateur Langage machine (binaire): difficile à comprendre par l humain moyen Langage évolué: plus facile à comprendre. Sa traduction en langage machine est assurée par un compilateur Langage interprété: chaque instruction est traduite en langage machine par un programme interpréteur Langage compilé: tout le programme en langage «compilé» est traduit un fois pour toute par un programme compilateur. Il génère un nouveau fichier autonome qui s exécute tout seul sans la nécessité d autre programme (un interpréteur par exemple) cours d algo. et prog. par Y.Q. Song Informatique 1 24

25 Java est un langage intermédiaire Langage intermédiaire: à la fois compilé et interprété (e.g. Java, LISP, Python, ) Le fichier intermédiaire a un format interne (ni fichier source, ni exécutable) En Java, pseudo code ou byte-code, ce sont des fichier *.class JVM est un interpréteur qui fonctionne sur tout type de machine, rendant un bytecode portable données programme Source java compilateur javac pseudo-code byte-code Interprète JVM langage machine résultats cours d algo. et prog. par Y.Q. Song Informatique 1 25

26 Langage Domaine d'application principal Compilé/interprété ADA Le temps réél langage compilé BASIC Comme son nom l'indique... langage interprété C Programmation système langage compilé C++ Programmation système objet langage compilé Cobol Gestion langage compilé Fortran Calcul langage compilé Java Programmation orientée internet langage intermédiaire MATLAB Calcul mathématique langage interprété Mathematica Calcul mathématique langage interprété LISP Intelligence artificielle langage intermédiaire Pascal Enseignement langage compilé Prolog Intelligence artificielle langage interprété Perl Traitement de chaînes de caractères langage interprété cours d algo. et prog. par Y.Q. Song Informatique 1 26

27 Niveaux des langages de programmation Langage machine seul code exécutable par une machine (binaire) spécifique à une machine (e.g. intel, motorola,...) Langage d assemblage (ou assembleur) Codage alphanumérique du langage machine (dépend du type de machines) Assembleur assure la traduction vers langage machine Langage de haut niveau (Fortran, Pascal, C, C++, java, ) Proche du langage humain Code indépendant de type de machine cours d algo. et prog. par Y.Q. Song Informatique 1 27

28 Compilation ou interprétation Deux méthodes de traduction en langage machine (code exécutable) programme source programme Source java compilateur javac compilateur pseudo-code byte-code données langage machine résultats données Interprète JVM langage machine résultats cours d algo. et prog. par Y.Q. Song Informatique 1 28

29 Java et JVM Java est né dans un café: Bill Joy, James Gosling Java est un langage objet (basé sur C++), développé par Sun Microsystems en Un environnement de programmation orienté objets adapté à la distribution d'applications sur Internet et s'intégrant au Web L introduction de JVM (Java Virtual Machine) assure la portabilité du code (exécutable sur Windows, MacOS, Unix, sans réécriture ni recompilation), mais au prix d une exécution plus lente car interprété JDK (Java Development Kit) ou SDK téléchargeable sur le site de SUN: pour compiler: javac monprog.java monprog.class pour exécuter: java monprog (sans extension) Autres Environnements de Développement Intégré (IDE): JBuilder (n est plus maintenu), Netbeans, Eclipse, cours d algo. et prog. par Y.Q. Song Informatique 1 29

30 Autres intérêts du java Java et Internet Java a d'abord été utilisé pour animer les pages Web Le «World Wide Web» passe d'un «simple» instrument de publication passive à un réseau pleinement client-serveur (avec notions de servlet et applet) Avec Java, un programme précompilé stocké sur le serveur, associé à une page spécifique, est téléchargé automatiquement sur le client lorsqu'un browser Web lit cette page, permettant ainsi au browser doté d'un interpréteur Java (JVM) de l'exécuter En cliquant sur telle icône ou en chargeant telle page HTML, l'utilisateur voit s'activer sur son browser un dessin animé ou une mise à jour en temps réel d'une courbe de données Java et interfaces graphiques interfaces graphiques des applications développées en Java sont hautement performantes grâce au support du multithreading et bibliothèque de «classes» cours d algo. et prog. par Y.Q. Song Informatique 1 30

31 Java 4 éléments : un langage de programmation une machine virtuelle (JVM) ou interpréteur (JDK) un ensemble d'outils (jdb, javadoc, ) (JDK) un ensemble de classes standards dans des API cours d algo. et prog. par Y.Q. Song Informatique 1 31

32 Les versions de java Janvier 96 Version JDK La version 2.0 du navigateur Web Netscape accepte les applets Java 8 packages, 211 classes JDK 1.2 (Java 2 SDK, version 1.2) fin classes SWING pour les GUI, interfaces avec CORBA Décembre 98 : SUN annonce une nouvelle dénomination pour ses produits Java : Plate-forme Java 2 2 versions : J2SE (Java 2 Standard Edition) J2EE (Java 2 Entreprise Edition) cours d algo. et prog. par Y.Q. Song Informatique 1 32

33 J2SE (extrait de P. Itey) La plate-forme Java 2, édition standard version1.2 (J2SE) désigne les spécifications abstraites et environnement de base liés à Java Cette plate-forme est implantée par Java 2 SDK édition standard version 1.2 (J2SDK), autrefois appelée JDK1.2 comprend J2RE et les outils de développement Java 2 Runtime Environment, standard édition version 1.2 (J2RE) est l'environnement minimum pour l'exécution des applications J2SDK cours d algo. et prog. par Y.Q. Song Informatique 1 33

34 J2EE (extrait de P. Itey) J2EE (Entreprise Edition) inclus la version standard et ajoute des fonctionnalités liées aux serveurs des applications distribuées telles que : Entreprise Java Beans (EJB; beans côté serveur) Servlets (applets côté serveur) Java Server Pages ou JSP (pages Web dynamiques avec Java) cours d algo. et prog. par Y.Q. Song Informatique 1 34

35 JDK (Java Development Kit) (extrait de P. Itey) Ensemble d'outils pour développer de programmes en java Les outils qui le composent sont : javac : le compilateur java java : la machine virtuelle javadoc : le générateur de documents appletviewer : outils de test des applets jdb : le debugger java javap : le desassembleur java. Permet de convertir un fichier.class en un fichier lisible cours d algo. et prog. par Y.Q. Song Informatique 1 35

36 Principales propriétés de Java (extrait de P. Itey) Java est un langage orienté objet à classes de syntaxe proche du langage C (C++) fourni avec le SDK (Software Développement Kit) : outils de développement ensemble de paquetages très riches et très variés portable (grâce JVM) cours d algo. et prog. par Y.Q. Song Informatique 1 36

37 Autres propriétés importantes (extrait de P. Itey) mufti-tâches (thread) sûr fortement typé nombreuses vérifications au chargement des classes et durant leur exécution adapté à Internet chargement de classes en cours d exécution (par le réseau : applet ou RMI) distribution des traitements entre plusieurs machines (sockets, RMI, Corba) cours d algo. et prog. par Y.Q. Song Informatique 1 37

38 Java et les performances (extrait de P. Itey) Java est performant depuis peu! Attention : le compilateur proposé gratuitement par SUN est le plus lent du marché! D'autres produits commerciaux sont plus performants Borland, Symantec, Microsoft Visual J++, exple : compilation de 2 millions de lignes/seconde sur Pentium 133 avec Symantec Café Le JIT (Just In Time compiler - compilateur à la volée) peut remplacer l'interpréteur compilation lors de la phase d'interprétation appels de méthodes/procédures par seconde sur Sun SPARC 10 avec le JIT de Sun : presque identique à du C/C++ natif équivalent Java est peu gourmand en mémoire : la JVM n'a besoin que de 215 Ko pour s'exécuter Java dans une montre à quartz?? cours d algo. et prog. par Y.Q. Song Informatique 1 38

39 Construction de programmes: Algorithme et programme Résoudre un problème = trouver la suite logique de tous les ordres nécessaire à la solution algorithme Décomposer l énoncé en étapes Définir les objets manipulés Définir les opérations (actions) Exemple: convertir un nombre entier de secondes en j/h/m/s (donné en cycle de rentrée) cours d algo. et prog. par Y.Q. Song Informatique 1 39

40 Construction de programmes: Algorithme et programme? un algorithme n --o--> j, h, m, s n< 10 6 par exemple o--> 3, 14, 0, 39 1 COMPRENDRE ~ spécifier le problème - DONNÉES - RÉSULTATS - RELATIONS CARACTÉRISER, NOMMER EXPRIMER cours d algo. et prog. par Y.Q. Song Informatique 1 40

41 Construction de programmes: Algorithme et programme ICI: 0 n 10 6 Propriété de la donnée j,h,m,s dans j N + j 0 h 0 h 23 m,s 0 m 59 ou s Propriété des résultats Résultat n = * J * h + 60 * m + s Relation N + : type de base cours d algo. et prog. par Y.Q. Song Informatique 1 41

42 Construction d un programme: Lexique des informations Description des actions Algorithme Programme test 1 lexique 2 action "convertir" n,j,h,m,s : entiers n ---o---> { j, h, m, s t q relation vraie 0 n j 0 h 23 0 m 59 0 s 59 3 algorithme suite d'actions ( élémentaires ou composées) par automate pour passer, en un temps fini, à un résultat déterminé ( post-condition) à partir d'une situation donnée ( pré- condition) cours d algo. et prog. par Y.Q. Song Informatique 1 42

43 Construction de programmes: Algorithme et programme Savoir comprendre et organiser : analyser + paramétriser Analyse descendante ex? algo imprimant, par ordre croissant, 3 nombres donnés lexique: par exemple 41, -25, 0 --o--> -25, 0, 41 a, b, c entiers donnée p, s, t entiers résultat action: classer t.q. a, b, c --o--> p, s, t p < s < t et p, s, t permutation de a, b, c algo: lire (a, b, c) / actions prédéfinies classer écrire (p, s, t) cours d algo. et prog. par Y.Q. Song Informatique 1 43

44 Construction de programmes: Algorithme et programme Analyse par cas: Solution 1 examiner toutes les valeurs possibles du résultat a<b<c p=a s=b t=c a<c<b p=a s=c t= b b<a<c p=b s=a t= c b<c<a p=b s=c t=a c<a<b p=c s=a t=b c<b<a p=c s=b t=a SCHÉMA: SI COND ALORS ACTION ; cours d algo. et prog. par Y.Q. Song Informatique 1 44

45 Solution 2 selon a,b a<b calculer pst > a>b calculer pst -----> c>b a<c<b a>c c<b a>c>b c>a A1: p=a, s=b, t=c A2: p=a, s=c, t=b A3: p=c, s=a, t=b A4: p=c, s=b, t=a A5: p=b, s=c, t=a A6: p=b, s=a, t=c Schéma des CAS EMBOÎTÉS SI a<b ALORS (SI c>b ALORS A1 SINON ( Si a<c ALORS A2 SINON A3 )) cours d algo. et prog. par Y.Q. Song Informatique 1 45

46 Solution 3 Construction progressive par étape vers le résultat Par exemple placer la plus petite valeur, PUIS classer les autres Solution généralisable e1: p=a s=b t=c e2: on permutera si nécessaire pour avoir p<s et p<t e3: t?s permute si nécessaire pour que s<t on obtient p<s< t; p, s, t restant une permutation des données Algorithme: 1 { p=a, s=b, t=c 2 selon p, s, t SI p<s et p<t : { vide SI s<p et s<t : p<--> s SI t<p et t<s : p<--> t {p<s et p<t et p,s,t permutation de a,b,c 3 SI s>t ALORS s <--> t {p<s et s<t et p,s,t est permutation de a,b,c Construire comparer évaluer les solutions cours d algo. et prog. par Y.Q. Song Informatique 1 46

47 Construire un programme: Lexique des informations Description des actions Algorithme Programme test Construire une solution (bonne?) Construire comparer évaluer des solutions Lexique des informations Description des actions Identifier des Algorithmes Evaluer leurs performances (vitesse, simplicité,solidité, etc ) Choisir et ( seulement maintenant ) TESTER Programmer le ou les algorithme(s) choisi(s) cours d algo. et prog. par Y.Q. Song Informatique 1 47

48 S3, 4 et S5 Programmation java: Outils et techniques de base D après le livre d Anne Tasso Cf. polycopié «algorithmique et programmation» par M. Dufner cours d algo. et prog. par Y.Q. Song Informatique 1 48

49 Plan Premier programme en java Variables et types de données élémentaires Affectation, opérateurs et expressions Entrée/sortie standard (clavier et écran) Conditionnels Itérations String (chaîne de caractères) Tableaux et introduction aux algorithmes de Tri cours d algo. et prog. par Y.Q. Song Informatique 1 49

50 Premier programme en java Calculer la circonférence d un cercle: P=2x xr Algorithme: Réserver deux cases mémoires pour ranger les valeurs du Rayon (R) et du Périmètre (P) Demander la saisie au clavier de la valeur de R et ranger la valeur en mémoire Calculer la circonférence Afficher à l écran le résultat cours d algo. et prog. par Y.Q. Song Informatique 1 50

51 Premier programme en java Nom du fichier: Cercle.java import utilensemjava.*; public class Cercle { // Calculer la circonférence d un cercle public static void main (String [ ] arg) { /* programme principal */ double R, P; R=Lecture. lireflottantdouble("valeur du rayon :"); P=2*Math.PI*R; System.out.print("le cercle de rayon "+R+" a pour périmètre: "+P); Cycle de rentrée vous a appris à utiliser Jbuilder pour éditer, compiler et exécuter un programme cours d algo. et prog. par Y.Q. Song Informatique 1 51

52 Premier programme en java public class Cercle : définit le nom d une classe (un programme) Les accolades marquent le début { et la fin d un bloc de programme Commentaire // Calculer la circonférence d un cercle /* programme principal */ public static void main (String [ ] arg): l en-tête d une méthode particulière (on verra plus tard pour une vraie explication) double R, P; déclaration de variable de type réel double précision R=Lecture.lireFlottantDouble("valeur du rayon :"); Lecture est une classe (vue au cycle de rentrée) dans laquelle on trouve, entre autres, la méthode lireflottantdouble() pour la saisie d une valeur de type réel (virgule flottante) double précision (NB: la classe Lecture.class se trouve dans le répertoire public de l ENSEM. Elle se trouve aussi dans la bibliothèque utilensemjava.jar. Cf. polycopié du tutorat distribué lors du cycle de rentrée pour savoir comment inclure une bibliothèque dans un projet Jbuilder. Il faut aussi l importer dans votre classe par import utilensemjava.*; ) cours d algo. et prog. par Y.Q. Song Informatique 1 52

53 Premier programme en java System.out.println( ) Affiche une chaîne de caractères au terminal et passe à la ligne System.out.print( ) Affiche une chaîne de caractères sans passer à la ligne System.out.println( i ) Si i est un nombre, transforme ce nombre en une chaîne de caractères et l affiche System.out.println("la valeur de i est: "+ i ) Si i est un nombre, transforme ce nombre en une chaîne de caractères et affiche la concaténation du texte qui précède et de la chaîne obtenue La concaténation se fait par + cours d algo. et prog. par Y.Q. Song Informatique 1 53

54 Exécution du programme A partir d un fichier source *.java, Java ne génère pas directement d exécutable (e.g. un fichier *.exe) mais un fichier *.class qui sera exécuté par la JVM Deux façons de compiler et exécuter un programme, directement depuis l environnement Eclipse ou depuis une interface du système (fenêtre commande DOS ou terminal Linux) javac Cercle.java Cercle.class java Cercle affichage du résultat Pas de suffixe.class (Nom de la classe, pas d un fichier!) cours d algo. et prog. par Y.Q. Song Informatique 1 54 Lancer CMD

55 Compilation en Java bytecode (extrait de P. Itey) En Java, le code source n est pas traduit directement dans le langage de l ordinateur (natif) Il est d abord traduit dans un langage appelé «bytecode» qui est le langage d une machine virtuelle (JVM ; Java Virtual Machine) dont le langage a été défini par Sun Ce langage est indépendant de l ordinateur qui va exécuter le programme cours d algo. et prog. par Y.Q. Song Informatique 1 55

56 Exécution du bytecode (adapté de P. Itey) Le bytecode doit être exécuté par une JVM Cette JVM est virtuelle (n'existe pas physiquement) ; elle est simulée par un programme, en fait un interpréteur, qui lit chaque instruction (en bytecode) du programme.class, la traduit dans le langage du processeur de l ordinateur et lance son exécution Les systèmes qui veulent pouvoir exécuter un programme Java doivent fournir un tel interpréteur A l'heure actuelle, tous les systèmes ont une JVM (tous les Unix/Linux, Windows, MacOs, et même LEJOS sur les robots LEGO) cours d algo. et prog. par Y.Q. Song Informatique 1 56

57 Le bytecode peut être exécuté par n'importe quelle JVM (extrait de P. Itey) Si un ordinateur possède une JVM, il peut exécuter tous les fichiers.class compilés sur n'importe quel autre système cours d algo. et prog. par Y.Q. Song Informatique 1 57

58 En lien avec SE:Variables d environnement La compilation crée un fichier «Cercle.class» qui contient le bytecode, situé dans le même répertoire que le fichier «.java» Attention: le fichier Lecture.java doit être «trouvable» par le compilateur, qui génère en même temps un fichier Lecture.class. Sinon, le byte-code Lecture.class doit être «trouvable» par l interprète JVM L exécution interprète le bytecode de la méthode main() de la classe Cercle (simule une JVM) Cercle.class doit être dans le répertoire courant ou dans un des emplacements indiqués par une option -classpath ou par la variable d environnement CLASSPATH Variables d environnement PATH : doit inclure le répertoire qui contient les utilitaires Java (javac, java, javadoc, ) CLASSPATH : indique un chemin de recherche des classes de l utilisateur cours d algo. et prog. par Y.Q. Song Informatique 1 58

59 Instructions, expressions et commentaires //ce programme donne un exemple int i = 1; /* déclaration de variable i */ i = k*2 x*x/(r+1); System.out.print("valeur du rayon :"); Les expressions retourne une valeur: e.g. x+3 Les opérateurs sont des symboles utilisés dans les expressions: +, -, /, *, Les commentaires: // /* */ cours d algo. et prog. par Y.Q. Song Informatique 1 59

60 Variable et types élémentaires Variable: un nom et un type Nom (ou identificateur) : repérer l emplacement de la variable en mémoire ~ adresse mémoire Type: la taille de cet emplacement en mémoire 8 types de données élémentaires boolean; char (2 octets, en unicode) (voir sur l internet la table unicode complète, 4096 caractères! Pour les curieux, voir aussi la table de code ASCII); entier : byte (1 oct), short (2 oct), int (4 oct) et long (8 oct); réel: float (4 octets:) et double (8 octets) Un nombre entier est signé (complément à deux) Codage d un nombre réel en virgule flottante est défini par IEEE-754 cours d algo. et prog. par Y.Q. Song Informatique 1 60

61 Codage d un nombre Un nombre entier signé: On définit le complément à 2, C2(N), l opposé d'un nombre entier signé N de n bits et on a : N+C2(N) = 0 modulo 2 n. Pour trouver le nombre négatif, on calcul le complément à 1 auquel on ajoute 1 Le complément à 1 d'un nombre binaire est obtenu en inversant tous les bits de ce nombre Exemple: +6 : Son complément à 1 est: Son complément à 2 est: = = -6 Un nombre réel : exposant et mantisse: r = s 2 e m avec s: signe, e: exposant décalé, m: mantisse = 1.Fraction (en binaire) (1<= m <=2) Exemple: float (-1) s *(1+fraction)*2 e-127 exposant sur 8 bits mantisse sur 23 bits signe cours d algo. et prog. par Y.Q. Song Informatique 1 61

62 IEEE754 pour coder un nombre réel Extrait du Wikipedia Décalage de l'exposant L'exposant est décalé de 2 e-1-1. Ce décalage est utile car l'exposant peut être positif ou négatif. Cependant, la représentation habituelle des nombres signés (complément à 2) rendrait la comparaison entre les nombres flottants difficile. Pour régler ce problème, l'exposant est décalé, afin de le stocker sous forme d'un nombre non signé. Exceptions Le bit de poids fort de la mantisse est déterminé par la valeur de l'exposant. Si l'exposant est différent de 0 et de 2 e 1, le bit de poids fort de la mantisse est 1, et le nombre est dit "normalisé". Si l'exposant est nul, le bit de poids fort de la mantisse est nul, et le nombre est 'dé-normalisé'. Il y a trois cas particuliers : 1. si l'exposant et la mantisse sont tous deux nuls, le nombre est ±0 (selon le bit de signe) 2. si l'exposant est égal à 2 e 1, et si la mantisse est nulle, le nombre est ±infini (selon le bit de signe) 3. si l'exposant est égal à 2 e 1, mais que la mantisse n'est pas nulle, le nombre est NaN (not a number : pas un nombre). cours d algo. et prog. par Y.Q. Song Informatique 1 62

63 IEEE754 pour coder un nombre réel Extrait du Wikipedia Nous pouvons le résumer ainsi : Type Exposant Mantisse Zeroes 0 0 nombres dénormalisés 0 différente de 0 nombres normalisés 1 à 2 e 2 quelconque Infinis 2 e 1 0 NaNs 2 e 1 différente de 0 cours d algo. et prog. par Y.Q. Song Informatique 1 63

64 IEEE754 pour coder un nombre réel Extrait du Wikipedia Un nombre flottant «simple précision» est stocké dans un mot de 32 bit : 1 bit de signe, 8 bits pour l'exposant et 23 pour la mantisse. L'exposant est décalé de = 127 dans ce cas. L'exposant va donc de -126 à Un exposant de -127 serait décalé vers la valeur 0, mais celle-ci est réservée pour 0 et les nombres dé-normalisés. Un exposant de 128 serait décalé vers 255, qui est réservé pour coder les infinis, et les NaNs. (voir le tableau précédent) Pour les nombres normalisés (la plupart), Exp est l'exposant décalé et Fraction est la partie fractionnelle de la partie significative. Le nombre a la valeur suivante : v = s 2 e m Avec s = +1 (nombre positif) lorsque le bit de signe est nul. s = 1 (nombre négatif) lorsque le bit de signe est à 1. e = Exp 127 (en d'autres mots, l'exposant est stocké avec 127 ajouté, autrement dit, "décalé de 127") m = 1.Fraction (en binaire). D'où 1 m < 2. Dans l'exemple précédent, le signe est nul, l'exposant est -3, et la partie significative est 1,01 (ce qui donne 1,25 en décimal). Le nombre représenté est donc , ce qui donne cours d algo. et prog. par Y.Q. Song Informatique 1 64

65 IEEE754 pour coder un nombre réel Extrait du Wikipedia Un exemple plus complexe Codons le nombre décimal 118,625 en utilisant le mécanisme IEEE Premièrement, nous avons besoin du signe, de l'exposant et de la partie fractionnaire. C'est un nombre négatif, le signe est donc "1". 2. Puis nous écrivons le nombre (sans le signe) en binaire. Nous obtenons , Ensuite, nous décalons la virgule vers la gauche, en laissant seulement un 1 sur sa gauche : ,101 = 1, C'est un nombre flottant normalisé. la mantisse est la partie à droite de la virgule, remplie de 0 vers la droite pour obtenir 23 bits. Cela donne L'exposant est égal à 6, et nous devons le convertir en binaire et le décaler. Pour le format 32-bit IEEE 754, le décalage est 127. Donc = 133. En binaire, cela donne On a donc 118,625 (dec) = (float) cours d algo. et prog. par Y.Q. Song Informatique 1 65

66 Transtypage (cast) Attention à la conversion entre les types numériques Dans l ordre croissant de précision, pas de perte de précision Dans le cas contraire, il faut utiliser le cast. Mais risque de perte de précision Un deuxième exemple: conversion de types cours d algo. et prog. par Y.Q. Song Informatique 1 66

67 public class TypesNumeriques{ public static void main(string [] arg) {byte b; short s; int n; long l; float x; double y= ; System.out.println("y= " + y); System.out.println("x= " + (x = (float)y)); System.out.println("l = " + (l = (long)x)); System.out.println("n = " + (n = (int)l)); System.out.println("s= " + (s = (short)n)); System.out.println("b = " + (b = (byte) (s/10))); System.out.println("tous egalent a b = " + (y = x = l = n = s = b)); System.out.println("4.99 en entier = "+ (int)4.99); System.out.println("les min et max des types numeriques:"); System.out.println("byte: "+ Byte.MIN_VALUE + ", " + Byte.MAX_VALUE); System.out.println("short: "+ Short.MIN_VALUE + ", " + Short.MAX_VALUE); System.out.println("int: "+ Integer.MIN_VALUE + ", " + Integer.MAX_VALUE); System.out.println("long: "+ Long.MIN_VALUE + ", " + Long.MAX_VALUE); System.out.println("float: "+ Float.MIN_VALUE + ", " + Float.MAX_VALUE); System.out.println("double: "+ Double.MIN_VALUE + ", " + Double.MAX_VALUE); //fin de main //fin de la classe cours d algo. et prog. par Y.Q. Song Informatique 1 67

68 public class TypesNumeriques{ public static void main(string [] arg) {byte b; short s; int n; long l; float x; double y= ; System.out.println("y= " + y); System.out.println("x= " + (x = (float)y)); System.out.println("l = " + (l = (long)x)); System.out.println("n = " + (n = (int)l)); System.out.println("s= " + (s = (short)n)); System.out.println("b = " + (b = (byte) (s/10))); System.out.println("tous egalent a b = " + (y = x = l = n = s = b)); System.out.println("4.99 en entier = "+ (int)4.99); System.out.println("les min et max des types numeriques:"); System.out.println("byte: "+ Byte.MIN_VALUE + ", " + Byte.MAX_VALUE); System.out.println("short: "+ Short.MIN_VALUE + ", " + Short.MAX_VALUE); System.out.println("int: "+ Integer.MIN_VALUE + ", " + Integer.MAX_VALUE); System.out.println("long: "+ Long.MIN_VALUE + ", " + Long.MAX_VALUE); System.out.println("float: "+ Float.MIN_VALUE + ", " + Float.MAX_VALUE); System.out.println("double: "+ Double.MIN_VALUE + ", " + Double.MAX_VALUE); cours d algo. et prog. par Y.Q. Song Informatique 1 68 //fin de main //fin de la classe y= E11 x= E10 l = n = s= b = -51 tous egalent a b = en entier = 4 les min et max des types numeriques: byte: -128, 127 short: , int: , long: , float: 1.4E-45, E38 double: 4.9E-324, E308 Lancer eliot3 ou jdb

69 y= E11 x= E10 l = n = s= b = -51 tous egalent a b = en entier = 4 les min et max des types numeriques: byte: -128, 127 short: , int: , long: , float: 1.4E-45, E38 2 cours d algo. et prog. par Y.Q. Song Informatique , double: 4.9E-324, E308 n = = E = 8192 s = précision, max 2-128,

70 Variable: déclaration et initialisation type nomdevariable; type nomdevariable1, nomdevariable2; float f1, f2; long CodeBar, codebar; int test; boolean OK; char choix; Pour éviter l erreur lors de l affichage d une variable non initialisée: float f1 = 0.0f, f2 = 1.2f; long CodeBar = , codebar = 333; int test = 0; boolean OK = true; char choix = n ; cours d algo. et prog. par Y.Q. Song Informatique 1 70

71 Noms de variables Noms de variables Commencent par _ ou par le caractère $ ou par une lettre Les caractères suivants d un nom peuvent être des chiffres ou des lettres Jeux de caractères: Unicode (16 bits) Ne pas utiliser les mots réservés du langage java e.g. double, int, public, if, else, class, Penser à utiliser un nom qui a un sens E.g. tva, prix au lieu de v1, v2 cours d algo. et prog. par Y.Q. Song Informatique 1 71

72 Affectation Affectation nom_de_variable = valeur; nom_de_variable = expression; Exemple 1 Instruction prix tva total prix = 20; tva = 18.6; total = prix + prix*tva; tva = 5.5; cours d algo. et prog. par Y.Q. Song Informatique 1 72

73 Affectation Exemple 2: échanger les valeurs de deux variables Instruction a b int a = 2; 2 - int b = 8; 2 8 a = b; 8 8 b = a; 8 8 Instruction a b tmp int a = 2; int b = 8, tmp; tmp = a; a = b; b = tmp; cours d algo. et prog. par Y.Q. Song Informatique 1 73

74 Opérateurs Opérateurs: Arithmétique Logique De comparaison De manipulation binaire D affectation Voir polycopié pour plus de détails «Algorithmique et Programmation» par M. Dufner / F. Simonot cours d algo. et prog. par Y.Q. Song Informatique 1 74

75 Opérateurs arithmétiques A titre d exemple Opération opérateur exemple Négation - -a Incrémentation de i (avant), i++ (après) Décrémentation de i, i-- Soustraction - a 2 Addition + a + 2 Multiplication * a*2 Division / a/2 (attention aux types) Modulo % a%2 (le reste de division) cours d algo. et prog. par Y.Q. Song Informatique 1 75

76 Expressions Priorité: Groupe 1: + - Groupe 2: * / % Exemple: a b / c * d = a ((b / c) * d) Conversion de types lorsque les termes d une opération ne sont pas du même type Conversion implicite: byte short int long float double Conversion explicite: le cast (type ciblé) expression cours d algo. et prog. par Y.Q. Song Informatique 1 76

77 Expressions Exemple de conversion implicite: Instruction a x result_float result_int int a = 5, result_int; float x = 2.0f, result_float; 5 2.0f - - result_float = a/x; 5 2.0f 2.5f - result_int = a/x; 5 2.0f 2.5f err compil Exemple de conversion explicite: Instruction a x result_int int a = 5, result_int; float x = 2.0f; 5 2.0f - result_int = (int) a/x; 5 2.0f 2 cours d algo. et prog. par Y.Q. Song Informatique 1 77

78 Entrée/sortie standard Affichage System.out.print(); System.out.println(); //passe à la ligne suivante Affichage de caractères spéciaux (unicode) Environnement é è ê Unix \u00e9 \u00e8 \u00ea dos \u0082 \u008a \u0088 windows \u00e9 \u00e8 \u00ea Mac OS \u00c8 \u00cb \u00cd cours d algo. et prog. par Y.Q. Song Informatique 1 78

79 Entrée/sortie standard La saisie (environnement non graphique) System.in.read(); //ne permet de récupérer //qu un seul caractère On fabrique une class lire.java (ou lecture.java à l ENSEM) pour faciliter la saisie au clavier lire.s(); ou lecture.lirechaine(); //saisir une String (chaîne de caractères) Tous les autres (e.g. lire.i(); ou lecture.lireentier(); ) qui s appuient sur la saisie de String la conversion de type (e.g. String nombre) Les autres détails seront expliqués au fur et à mesure cours d algo. et prog. par Y.Q. Song Informatique 1 79

80 import java.io.*; public class Lire { public static String s() // Lire un String { String tmp = ""; char C='\0'; try { while ((C=(char) System.in.read())!='\n') { if (C!= '\r') tmp = tmp+c; catch (IOException e) { System.out.println("Erreur de frappe"); System.exit(0); return tmp; // fin de s() // à suivre cours d algo. et prog. par Y.Q. Song Informatique 1 80

81 // suite public static int i() // Lire un entier { int x=0; try { x=integer.parseint(s()); catch (NumberFormatException e) { System.out.println("Format numérique incorrect"); System.exit(0); return x ; //fin de i() cours d algo. et prog. par Y.Q. Song Informatique 1 81

82 Conditionnels: si - sinon if-else (et if-else imbriqué) if (expression logique) bloc1 else bloc2 ou if (expression logique) bloc Expression logique Opérateurs de comparaison == < > <= >=!= Opérateurs logiques! (négation), & (et), (ou), ^ (ou exclusif) && (et évalué), (ou évalué) : appelés aussi opérateurs à court-circuit. Au fait, ils n évaluent leur second opérande que lorsque cela est nécessaire boolean a=true, c; int g=5, h=0; c=a ((g/h)= =2)); //division par 0 c=a ((g/h)= =2)); //2 nd opérande non évaluée cours d algo. et prog. par Y.Q. Song Informatique 1 82

83 Table de vérité X Y X Y X^Y X&Y true true true false true true false true true false false true true true false false false false false false cours d algo. et prog. par Y.Q. Song Informatique 1 83

84 public class Maximum { // Le fichier s'appelle Maximum.java public static void main (String [] parametre) { int première, deuxième, laplusgrande ; System.out.print("Entrer une valeur :") ; première = Lire.i() ; System.out.print("Entrer une deuxieme valeur :") ; deuxième = Lire.i() ; if (première > deuxième) { System.out.println(deuxième + " " + première) ; laplusgrande = première ; else { System.out.println(première + " " + deuxième) ; laplusgrande = deuxième ; System.out.println("La plus grande valeur est : " + laplusgrande) ; // Fin du main () // Fin de la classe Maximum cours d algo. et prog. par Y.Q. Song Informatique 1 84

85 Conditionnels: aiguillage switch Switch (valeur) { case étiquette 1: //une ou plusieurs instructions break; /*pour sortir de switch*/ case étiquette 2: case étiquette 3: //une ou plusieurs instructions break; default: //une ou plusieurs instructions cours d algo. et prog. par Y.Q. Song Informatique 1 85

86 public class JourParMois { // Le fichier s'appelle JourParMois.java public static void main (String [] parametre) { byte mois, nbjours = 0 ; short année ; System.out.println("De quel mois s'agit-il? :") ; mois = Lire.b() ; System.out.println("De quelle annee? :") ; année = Lire.s() ; switch(mois) { case 1 : case 3 : case 5 : case 7 : case 8 : case 10 : case 12 : // Pour les mois à 31 jours nbjours = 31 ; break ; case 4 : case 6 : case 9 : case 11 : // Pour les mois à 30 jours nbjours = 30 ; break ; case 2 : // Pour le cas particulier du mois de février if (année % 4 = = 0 && année % 100!= 0 année % 400 = = 0) nbjours = 29 ; //année bissextile else nbjours = 28 ; break ; default : // En cas d'erreur de frappe System.out.println("Impossible, ce mois n'existe pas ") ; System.exit(0) ; System.out.print(" En " + année + ", le mois n " + mois + " a " + nbjours + " jours ") ; cours // Fin d algo. du main() et prog. par Y.Q. Song Informatique 1 86 // Fin de la class JourParMois

87 Itérations répéter tant que do bloc while (expression logique) Sortie de boucle à la fin tant que répéter while (expression logique) bloc Sortie de boucle dès l entrée cours d algo. et prog. par Y.Q. Song Informatique 1 87

88 Itérations pour répéter for (expression1;expression2;expression3) bloc expression1: déclaration et initialisation de l indice de parcours expression2: expression logique (répéter tant que vraie) expression3: expression (pour incrémenter/décrémenter l indice) Équivalent à: expression1; while (expression2) { bloc; expression3; cours d algo. et prog. par Y.Q. Song Informatique 1 88

89 // calcule la somme des nombres entiers de 0 à 99 int max=100; int somme; int entier_courant; // initialisations somme = 0; entier_courant = 0; // répéter le calcul do{ somme += entier_courant; somme = somme + entier_courant entier_courant += 1; // tant que l entier courant est inférieur à max while (entier_courant<max) // dés que l entier_courant est >=max, // arrêt des itérations // affichage du résultat System.out.println("Somme des "+(entier_courant-1)+" entiers = "+somme) ; cours d algo. et prog. par Y.Q. Song Informatique 1 89

90 // calcule la somme des nombres entiers de 0 à 99 int max=100; int somme; int entier_courant; // initialisations somme = 0; entier_courant = 0; // répéter le calcul tant que l entier courant est inférieur à max while (entier_courant<max) { somme += entier_courant; entier_courant += 1; // lorsque l entier courant est >=100, // arrêt des itérations // affichage du résultat System.out.println("Somme des "+(entier_courant-1)+" entiers = "+somme) ; cours d algo. et prog. par Y.Q. Song Informatique 1 90

91 // calcule la somme des nombres entiers de 0 à 99 int max=100; int somme=0; int entier_courant; //servira comme indice // répéter le calcul for(entier_courant = 0;entier_courant<max; entier_courant++) somme += entier_courant; // dès que l entier courant est >=max, // arrêt des itérations // affichage du résultat System.out.println("Somme des "+(entier_courant-1)+" entiers = "+somme) ; cours d algo. et prog. par Y.Q. Song Informatique 1 91

92 Encore un mot sur le «cast» char c; c = (char) System.in.read(); System.in.read() attend l appui sur une touche au clavier Elle retourne en résultat la valeur entière du caractère (unicode) c = (char) un_entier convertit l entier en caractère c = (char) i donne à c le caractère dont le code unicode = i, avec i <256 cours d algo. et prog. par Y.Q. Song Informatique 1 92

93 Exemple du programme de saisie d un Algorithme entier au clavier 1. Tant que le caractère saisi n est pas «entrée» Lire un caractère Stocker le caractère lu dans un mot Retourner en Tous les caractères étant saisis (une chaîne de caractères!), traduire en un nombre entier. cours d algo. et prog. par Y.Q. Song Informatique 1 93

94 Type «String» String message= ; «String» est une séquence de caractères En java, String n est pas un type simple, mais plutôt une classe (on le détaillera plus loin dans ce cours) Pour convertir un «String» en un nombre entier on utilise la méthode java: valeur = Integer.parseInt(message); cours d algo. et prog. par Y.Q. Song Informatique 1 94

95 import java.io.*; public class LireUnEntier { public static void main (String [ ] param) { String tmp = ""; char C= '\0'; int valeur ; System.out.print("Entrez des chiffres et appuyez sur "); System.out.println("la touche Entree, pour valider la saisie : "); while (C!= '\n') { try {C = (char) System.in.read() ; catch (IOException e){ System.out.println("Erreur de frappe"); System.exit(0); if (C!= '\r' && C!= '\n') tmp = tmp + C; System.out.println("Vous avez entre : " + tmp); valeur = Integer.parseInt(tmp); System.out.println("C'est a dire : " + valeur + " en entier"); // Fin du main () // Fin de la Class LireUnEntier cours d algo. et prog. par Y.Q. Song Informatique 1 95

96 Programme qui donne unicode d un caractère public class QuelUnicode { public static void main (String [] paramètre) { int i; char recherche, atrouver; System.out.print("Quel caractere recherchez-vous : "); recherche = Lire.c(); for (i = 1; i < 255; i++) { atrouver = (char) i; if (atrouver = = recherche) { System.out.print("le code Unicode de " + atrouver); System.out.println(" est \\u00" + Integer.toString(i,16)); // Fin du if // Fin du for // Fin du main() // Fin de QuelUnicode cours d algo. et prog. par Y.Q. Song Informatique 1 96

97 Tableaux à une dimension Un tableau permet le stockage d un nombre fini de valeurs du même type Déclaration d un tableau: type [ ] nom; int [] tableau_d_entiers ; float [] notes ; boolean [] resultats ; Construction d un tableau: nom = new type [taille]; Un tableau est une classe Java. Exemple de methode: nom.length cours d algo. et prog. par Y.Q. Song Informatique 1 97

98 Tableaux à une dimension Désignation des éléments d un tableau: nom[indice] L indice du 1er élément est toujours 0 L indice du dernier élément est égale à (nom.length 1) Attention au débordement des bornes! java.lang.arrayindexoutofboundsexception cours d algo. et prog. par Y.Q. Song Informatique 1 98

99 Tableaux à une dimension // déclaration de tableaux à une dimension int [ ] tableau_d_entiers; // déclaration de variables int i; i = 5 ; // création du tableau tableau_d_entiers = new int [10]; // initialisation du 6ième élément du tableau à la valeur 5 tableau_d_entiers[i] = i; // initialisation du premier élément à la valeur 1 tableau_d_entiers[0] = 1; // initialisation du dernier élément à la valeur 10 tableau_d_entiers[tableau_d_entiers.length-1] = tableau_d_entiers.length; cours d algo. et prog. par Y.Q. Song Informatique 1 99

100 Tableaux à deux dimensions ou plus Déclaration d un tableau à deux dimensions float [][] tab; double [][] matrice; char [][] mots_croisés; byte [][] notes; Construction d un tableau rectangulaire tab = new float [2][5]; // tableau de 2 lignes et 5 colonnes matrice = new double [20][15]; // tableau de 20 lignes et 15 colonnes mots_croisés = new char [10][10]; // tableau de 10 lignes et 10 colonnes notes = new byte [130][12]; // tableau de 130 lignes et 12 colonnes cours d algo. et prog. par Y.Q. Song Informatique 1 100

101 Tableaux à deux dimensions ou plus Construction dynamique d un tableau: un 1er tableau à une dimension, puis pour chaque élément du 1er, on construit un tableau spécifique à une dimension // déclaration du tableau float [][] tab; // construction d un tableau à deux éléments (de type tableau) tab = new float[2][]; // le 1er élément du tableau est un tableau de 3 éléments de type flottant tab[0] = new float[3]; // le 2eme élément du tableau est un tableau de 5 éléments de type flottant tab[1] = new float[5]; cours d algo. et prog. par Y.Q. Song Informatique 1 101

102 Tableaux à deux dimensions ou plus tab tab[0] Carré tab[1] tab, tab[0], tab[1] sont des tableaux est un réel tab[1][3] est un réel Non carré tab tab[0] tab[1] tab, tab[0], tab[1] sont des tableaux est un réel tab[1][3] est un réel cours d algo. et prog. par Y.Q. Song Informatique 1 102

103 Introduction aux algorithmes de tri L importance de tri dans un ordinateur Les éléments triés facilitent la recherche Les méthodes/algorithmes de tri sont très nombreux Méthodes de tri élémentaires Tri par sélection (selection sort) Tri par insertion (insertion sort) Tri bulle (bubble sort) cours d algo. et prog. par Y.Q. Song Informatique 1 103

104 Tri par sélection E X E M P L E D E T R I D X E M P L E E E T R I D E X M P L E E E T R I D E E M P L X E E T R I D E E E P L X M E T R I D E E E E L X M P T R I D E E E E I X M P T R L D E E E E I L M P T R X D E E E E I L M P T R X D E E E E I L M P T R X D E E E E I L M P R T X D E E E E I L M P R T X cours d algo. et prog. par Y.Q. Song Informatique 1 104

105 Tri par insertion E X E M P L E D E T R I E X E M P L E D E T R I E E X M P L E D E T R I E E M X P L E D E T R I E E M P X L E D E T R I E E L M P X E D E T R I E E E L M P X D E T R I D E E E L M P X E T R I D E E E E L M P X T R I D E E E E L M P T X R I D E E E E L M P R T X I D E E E E I L M P R T X cours d algo. et prog. par Y.Q. Song Informatique 1 105

106 Tri bulle E X E M P L E D E T R I E X E M P L E D E T I R E X E M P L E D E I T R E X E M P L E D E I T R E X E M P L E D E I T R E X E M P L D E E I T R E X E M P D L E E I T R E X E M D P L E E I T R E X E D M P L E E I T R E X D E M P L E E I T R E D X E M P L E E I T R D E X E M P L E E I T R... D E X E M P L E E I T R D E E X E M P L E I R T D E E E X E M P L I R T D E E E E X I M P L R T D E E E E I X L M P R T D E E E E I L X M P R T D E E E E I L M X P R T D E E E E I L M P X R T D E E E E I L M P R X T D E E E E I L M P R T X cours d algo. et prog. par Y.Q. Song Informatique 1 106

107 S6: Programmation java: Initiation à la programmation objet D après le livre d Anne Tasso cours d algo. et prog. par Y.Q. Song Informatique 1 107

108 Plan Méthodes statiques du Java (appelées aussi Fonctions ou encore Procédures dans d autres langages tels que C, Pascal, Fortran) Classes et objets «String» comme exemple cours d algo. et prog. par Y.Q. Song Informatique 1 108

109 Méthodes statiques public class Cercle { // Calculer la circonférence d un cercle public static void main(string [ ] arg) { double R, P; System.out.print("valeur du rayon :"); R=Lire.d(); P=2*Math.PI*R; System.out.print("le cercle de rayon "+R+" a pour perimetre: "+P); Méthodes java standards Méthodes java utilisateur cours d algo. et prog. par Y.Q. Song Informatique 1 109

110 De l algorithme paramétré à l écriture de méthodes Un programme est constitué de Instructions élémentaires (affectation, comparaison, répétition) Sous-programmes appelés méthodes (e.g. Math.sqrt(), System.Out.print(), Lire.d(), Lecture.LireEntier(), ) Pour développer de logiciels de grande envergure, les langages de programmation offrent la possibilité de définir ses propres «instructions» méthodes spécifiques Analogie avec construction d une maison à partir de briques de base ou cours de pièces d algo. et prog. préfabriquées par Y.Q. Song Informatique 1 110

111 De l algorithme paramétré à l écriture de méthodes statiques Algorithme paramétré Des méthodes java prédéfinies Construire ses propres méthodes Méthodes au sein d un programme Notions avancées Visibilité de variables Échanger des données entre méthodes cours d algo. et prog. par Y.Q. Song Informatique 1 111

112 Méthodes: algo. paramétré Algorithmes paramétrés: algorithmes permettant de résoudre des problèmes voisins en simplement modifiant les données Un exemple: une cafetière pour faire du «café» ou du «thé» cours d algo. et prog. par Y.Q. Song Informatique 1 112

113 Méthodes : algo. paramétré 1. Prendre une cafetière 2. Poser la cafetière sur la table 3. Prendre du café 4. Prendre un filtre 5. Verser le café dans le filtre 6. Prendre de l eau 7. Verser l eau dans la cafetière 8. Allumer la cafetière 9. Attendre que le café soit prêt 10. Prendre une tasse 11. Poser la tasse sur la table 12. Éteindre la cafetière 13. Verser le café dans la tasse 1. Prendre une cafetière 2. Poser la cafetière sur la table 3. Prendre du thé 4. Prendre un filtre 5. Verser le thé dans le filtre 6. Prendre de l eau 7. Verser l eau dans la cafetière 8. Allumer la cafetière 9. Attendre que le thé soit prêt 10. Prendre une tasse 11. Poser la tasse sur la table 12. Éteindre la cafetière 13. Verser le thé dans la tasse cours d algo. et prog. par Y.Q. Song Informatique 1 113

114 Méthodes : algo. paramétré Ingrédient = café ou thé 1. Prendre une cafetière 2. Poser la cafetière sur la table 3. Prendre ingrédient 4. Prendre un filtre 5. Verser ingrédient dans le filtre 6. Prendre de l eau 7. Verser l eau dans la cafetière 8. Allumer la cafetière 9. Attendre que ingrédient soit prêt 10. Prendre une tasse 11. Poser la tasse sur la table 12. Éteindre la cafetière 13. Verser ingrédient dans la tasse cours d algo. et prog. par Y.Q. Song Informatique 1 114

115 Méthodes statiques prédéfinies Méthodes : nom_de_ Méthodes(paramètres) Exemple: les fonctions mathématiques en java sont stockées dans la librairie: Math double resultat, a, b; resultat = Math.sin(a); resultat = Math.exp(a); resultat = Math.sqrt(a); resultat = Math.pow(a,b); resultat = Math.random(); cours d algo. et prog. par Y.Q. Song Informatique 1 115

116 Méthodes : construire ses propres méthodes Etapes pour définir une méthode Déterminer le bloc des instructions composant la méthode Associer le nom de la méthode au bloc Établir les paramètres utiles à l exécution de la méthode Préciser le type de résultat retourné («return») par la méthode cours d algo. et prog. par Y.Q. Song Informatique 1 116

117 Peut être appelée Par d autres classes (si visible) Type du résultat Nom de la méthode Entier local qui reçoit la valeur du paramètre public static int somme (int deb, int fin) { int s = deb ; for (int i = deb + 1 ; i fin ; i++) { s = s + i ; return s ; Retour du résultat à l appelant Méthode de classe Zone des paramètres Leur type est déclaré Leur valeur sera passée à la méthode lors d un appel cours d algo. et prog. par Y.Q. Song Informatique 1 117

118 Méthodes: méthode au sein d un prog. Appel de méthodes statiques: méthodes appelées et programme appelant les méthodes public class ExempleSomme { public static void main(string args[]) {int a,b ; a = Lecture.lireEntier( saisir la valeur de a: ) ; b= Lecture.lireEntier( saisir la valeur de b: ) ; System.out.println( somme de a à b : + somme(a,b)); public static int somme (int deb, int fin) { int s = deb ; for (int i = deb + 1 ; i fin ; i++) { s = s + i ; return s ; cours d algo. et prog. par Y.Q. Song Informatique 1 118

119 Méthodes: résumé public static type nom_de_ méthode(type paramètres) Une méthode est une «boîte noire». paramètres constituent son interface. Le résultat est du type «type» type de paramètres doit être placé devant chaque paramètre public static int max (int a, int b) public static int max (int a, b) Si pas de retour de résultat (return), type = void Une méthode peut ne pas avoir de paramètre Une méthode peut être appelée par un programme principal (méthode main()) ou par toute autre méthode Une méthode ne peut retourner plus d un résultat! cours d algo. et prog. par Y.Q. Song Informatique 1 119

120 Méthodes: notions avancées Structure d un programme public class NomDeLaClass { // déclaration de variables de class (globales) cours d algo. et prog. par Y.Q. Song Informatique public static void main (string [ ] arg) { //déclaration de variables locales //instructions élémentaires (if, for, ) //appel de méthodes prédéfinies ou non public static type nomméthode (paramètres) { //déclaration de variables locales //instructions élémentaires (if, for, ) //appel de méthodes prédéfinies ou non

121 Méthodes: variable locale public class VariableLocale { public static void main(string [] paramètre) { // déclaration de variables locales int valeur = 2 ; System.out.println("Valeur = " + valeur + " avant modifier() "); modifier(); System.out.println("Valeur = " + valeur + " apres modifier() "); // fin de main() public static void modifier () { // déclaration de variables locales int valeur ; valeur = 3 ; System.out.println("Valeur = " + valeur + " dans modifier() "); // fin de modifier //fin de class VariableLocale valeur 2 valeur 3 cours d algo. et prog. par Y.Q. Song Informatique 1 121

122 Méthodes : variable de class (globale) public class VariableDeClass { //Déclaration de variable de class static int valeur; public static void main(string [] paramètre) { valeur = 2 ; System.out.println("Valeur = " + valeur + " avant modifier() "); modifier(); System.out.println("Valeur = " + valeur + " apres modifier() "); // fin de main() valeur 2 3 public static void modifier () { valeur = 3 ; System.out.println("Valeur = " + valeur + " dans modifier() "); // fin de modifier //fin de class VariableDeClass cours d algo. et prog. par Y.Q. Song Informatique 1 122

123 Méthodes : variable de class Variables de classe (globales) à utiliser avec des précautions Risque de déclarer plusieurs variables portant le même nom. Peut être évité en utilisant : nom_de_classe.nom_de_variable Risque de nuire l indépendance des méthodes si liées à la classe et à la méthode main(). cours d algo. et prog. par Y.Q. Song Informatique 1 123

124 public class MemeNom { // déclaration de la variable de la classe (globale) valeur static int valeur ; public static void main(string [] parametre) { valeur = 2 ; System.out.println("Valeur = " + valeur + " avant modifier() "); modifier(); System.out.println("Valeur = " + valeur + " après modifier() "); // fin de main() public static void modifier () { System.out.println(valeur + " dans modifier() avant la déclaration"); int valeur ; //c est variable locale qui est prise en compte! valeur = 3 ; System.out.println(valeur + " dans modifier() après la déclaration"); // fin de modifier //fin de class MemeNom valeur cours d algo. et prog. par Y.Q. Song Informatique valeur 2 valeur 2 valeur 3

125 public class VeritableNom { // déclaration de la variable de la classe (globale) valeur static int valeur ; public static void main(string [] parametre) { VeritableNom.valeur = 2 ; System.out.println(VeritableNom.valeur + " avant modifier() "); modifier(); System.out.println(VeritableNom.valeur + " après modifier() "); // fin de main() public static void modifier () { System.out.println("Variable de classe : " + VeritableNom.valeur ); int valeur = 3 ; System.out.println("Variable locale : " + valeur ); VeritableNom.valeur = 3 ; valeur System.out.println("Variable de classe : " + VeritableNom.valeur ); // fin de modifier //fin de class VeritableNom 3 valeur 2 valeur 3 valeur 2 valeur 3 cours d algo. et prog. par Y.Q. Song Informatique 1 125

126 Méthodes : passage de paramètres Objectif: communiquer la valeur d une méthode à une autre en utilisant les paramètres de méthodes et le retour de résultat (return) Passage de paramètres par valeur cours d algo. et prog. par Y.Q. Song Informatique 1 126

127 public class ParValeur { Passage de paramètre par valeur public static void main (string [ ] arg) { //déclaration de variables locales int valeur = 2; tripler(valeur); public static void tripler (int valeur) { valeur = 3 * valeur; valeur 2 valeur 2 6 cours d algo. et prog. par Y.Q. Song Informatique 1 127

128 Méthodes : passage de paramètres par valeurs public class ParValeur { public static void main (string [ ] arg) { //déclaration de variables locales int valeur = 2; valeur = tripler(valeur); public static int tripler (int valeur) { int resultat = 3 * valeur; return resultat; valeur valeur valeur 2 6 cours d algo. et prog. par Y.Q. Song Informatique 1 128

129 Méthodes : échange de plusieurs valeurs public class PlusieursResultats { public static void main (String [] arg) { int a, b; System.out.print("Entrer une valeur pour a : "); a = Lire.i(); System.out.print("Entrer une valeur pour b : "); b = Lire.i(); System.out.println(" a = "+a+" b = "+b); echange (a,b); System.out.println("Apres echange,"); System.out.println(" a = "+ a +" b = "+b); public static void echange(int x, int y) { int tmp = x; x = y; y = tmp; cours d algo. et prog. par Y.Q. Song Informatique Exemple: a=1, b=2; Après echange(a,b) a=1, b=2!!!

130 Méthodes statiques: impossibilité Une méthode ne permet pas de retourner plus d un résultat! Si une méthode modifie plusieurs variables, comment récupérer ces résultats? Seul le concept objet permet de réaliser cette opération! cours d algo. et prog. par Y.Q. Song Informatique 1 130

131 Classes et objets L exemple de la classe «String» pour comprendre la notion d objet (Attention: La classe String n est certainement pas un bon exemple car elle a subie certain nombre de modifications, notamment une méthode intern() qui la rend parfois ressembler à un type primitive, notamment avec concaténation + et la comparaison ==. Ce qui introduit parfois la confusion des concepts! Mais on la prend tout de même car utilisée très tôt dans l apprentissage de la programmation. Pour plus de détails, cf. Construire et utiliser ses propres classes Données (ou attributs) Méthodes (non statiques, c est à dire que le mot clé static disparaît!) cours d algo. et prog. par Y.Q. Song Informatique 1 131

132 La classe «String» La classe «String» est un type de données composé des méthodes pour sa transformation et consultation Une chaîne de caractères n est pas de taille fixe Java fixe la longueur d un String lors de sa création: String mot = exemple Normalement, les variables de type String ne contiennent pas directement l information mais seulement l adresse où trouver cette information. Ces variables s appellent objets (attention au cas exceptionnel de String: en interne, java considère que les chaînes identiques sont au même endroit et ne crée pas de copies multiples pour des raisons de performances) e.g. String second = mot; mot 0x second 0x exemple cours d algo. et prog. par Y.Q. Song Informatique 1 132

133 La classe «String» Attention: bien distinguer le nom d un objet à l objet lui-même! Exemple: String mot= exemple,second= exemple ; mot=mot+" de string"; second=second+" de string"; if (mot==second) System.out.print( égale ); else System.out.print( inégale ); mot 0x second 0x exemple de string exemple de string Le résultat: inégale if (mot.compareto(second)==0) ou if (mot.equals(second)) cours d algo. et prog. par Y.Q. Song Informatique 1 133

134 Manipulation de données par valeur et par référence La référence d une donnée est l adresse mémoire où est logée la donnée En java (ou C, C++, Pascal, ) les données de type primitif sont manipulées par valeur, les données des autres types sont manipulées par référence Exemple: char mot= e,second= e ; if (mot==second) System.out.print( égale ); else System.out.print( inégale ); Le résultat: égale cours d algo. et prog. par Y.Q. Song Informatique 1 134

135 La classe «String» Un objet est un élément particulier d une classe. Un objet est une instance de la classe Exemple: mot est un objet de la classe String La classe «String» est dotée des méthodes non statiques S t r i n g données Suite de caractères methodes compareto(); equals(); touppercase(); cours d algo. et prog. par Y.Q. Song Informatique 1 135

136 La classe «String» Appel d une méthode non statique appel d une méthode statique double x = - 4, y; y = Math.abs(x); String mot = petit, MOT; MOT = mot.touppercase(); Au fait, tout comme les notions de variable de classe et d instance (de l objet!), une méthode statique s applique à la classe tandis qu une méthode non-statique s applique à un objet. notation //déclaration et initialisation String objet = ; // la méthode non statique s applique à objet objet.nomdelaméthode(liste des paramètres éventuels); cours d algo. et prog. par Y.Q. Song Informatique 1 136

137 La classe «String»: exemples de méthodes String S="bonjour"; System.out.println("la longueur de la chaîne "+S+ " est : "+S.length()); System.out.println("Bye".length() + " est la longueur de : Bye"); String jour; System.out.println(jour.compareTo("mardi")); if (jour.compareto("mardi")==0) System.out.println("nous sommes mardi"); else if (jour.compareto("mardi")<0) System.out.println(jour+" est avant mardi"); else System.out.println(jour+" est après mardi"); Ne faisant pas partie des méthodes: Concaténation Bonjour + le monde = bonjour le monde Pour d autres méthodes, cf. l aide en ligne de Java cours d algo. et prog. par Y.Q. Song Informatique 1 137

138 Construire/utiliser ses propres classes «String» est l une des classes prédéfinies de Java. D autres classes existent et qui constituent des outils précieux et efficaces L intérêt des classes: définition des types structurés (données) et des opérations liées (méthodes) Exemples d objets: une personne, un livre cours d algo. et prog. par Y.Q. Song Informatique 1 138

139 Construire ses propres classes Construire un objet Cercle Rechercher les caractéristiques propres à tout cercle: coordonnée (x,y) et rayon (r) Définir le comportement de tout cercle (opérations de modification et d accès aux données): afficher, périmètre, déplacer, agrandir, cours d algo. et prog. par Y.Q. Song Informatique 1 139

140 Spécifier une classe en UML UML: Unified Modeling Language, «langage de modélisation unifié» est un langage graphique de modélisation de données et des traitements. UML est un formalisme standard pour la modélisation objet en génie logiciel. Il est largement répandu dans le monde industriel Pour spécifier une classe, on peut utiliser le diagramme de classes Cercle -x -y -r -afficher() -périmètre() -agrandir() -déplacer() Nom de la classe Les attributs Les méthodes cours d algo. et prog. par Y.Q. Song Informatique 1 140

141 Construire ses propres classes public class Cercle { public int x, y, r ; Variables d instance public void affiche(){ //Affichage des données de la classe System.out.println(" Centre en " + x + ", " + y); System.out.println(" Rayon : " + r); public double périmètre() {//Calcul du périmètre d'un cercle return 2*Math.PI*r; public void déplacer(int nx, int ny) { // Déplace le centre en (nx, ny). x = nx; y = ny; public void agrandir(int nr) { r = r + nr; cours d algo. et prog. par Y.Q. Song Informatique 1 141

142 Comparer à l approche par méthode statique public class VariableDeClass { //Déclaration de variable de class static int valeur; public static void main(string [] paramètre) { valeur = 2 ; System.out.println("Valeur = " + valeur + " avant modifier() "); modifier(); System.out.println("Valeur = " + valeur + " apres modifier() "); // fin de main() Variable simple de classe public static void modifier () { valeur = 3 ; System.out.println("Valeur = " + valeur + " dans modifier() "); // fin de modifier //fin de class VariableDeClass cours d algo. et prog. par Y.Q. Song Informatique 1 142

143 Construire ses propres classes Le mot clé static disparu, permettant de créer non plus de simples variables et méthodes statiques mais des objets (variables d instance et méthodes non statiques) Une classe définissant un objet (ou type structuré) ne possède pas de main() car elle est une entité à part entière, qui définit globalement de quoi est constitué un objet et précise les opérations possibles à lui appliquer cours d algo. et prog. par Y.Q. Song Informatique 1 143

144 Utiliser ses propres classes Une fois un nouveau type (une classe d objets) défini, son utilisation consiste à: Déclarer un objet. e.g. Cercle A; Cette déclaration ne crée qu une case mémoire, nommée A, pour contenir une référence vers l adresse où sont stockées les info de l objet A Réserver l espace mémoire à l aide de l opérateur new. e.g. A = new Cercle(); Il est possible d écrire: Cercle A = new Cercle(); cours d algo. et prog. par Y.Q. Song Informatique 1 144

145 Utiliser ses propres classes A 0x x 0 0x y 0.r 0.afficher() //byte code.périmètre() //byte code.agrandir() //byte code.déplacer() //byte code L objet ainsi défini est une instance de la classe. Les données sont des variables d instance cours d algo. et prog. par Y.Q. Song Informatique 1 145

146 Utiliser ses propres classes L accès aux variables d instance et méthodes d une classe se fait par l opérateur point (.) Cercle A = new Cercle(); A.nomDeLaDonnée = valeur du bon type; A.nomDeLaMéthode (liste des paramètres éventuels); cours d algo. et prog. par Y.Q. Song Informatique 1 146

147 public class FaireDesCercles { public static void main(string [] arg) { Cercle A = new Cercle(); A.affiche(); A.x = Lecture.lireEntier (" Entrez la position en x : ") ; A.y = Lecture.lireEntier (" Entrez la position en y : ") ; A.r = Lecture.lireEntier (" Entrez le rayon : "); A.affiche(); double p = A.périmètre(); System.out.print(" Votre cercle a pour perimetre : " + p); A.déplacer(5, 10); System.out.println(" Apres deplacement : "); A.affiche(); A.agrandir(10); System.out.println(" Apres agrandissement : "); A.affiche(); cours d algo. et prog. par Y.Q. Song Informatique 1 147

148 Utiliser ses propres classes Compilation des classes dans des fichiers séparés Le nom de fichier.java correspond au nom de la classe On ne compile que la classe contenant main() et Java cherche le reste dans le même répertoire où il y a l application main() Si dans un répertoire différent, utiliser une variable d environnement classpath (i.e. chemin d accès aux classes, cf. windows ou linux pour savoir comment le définir) Dans Eclipse, mettre toutes les classes dans le même projet La compilation génère des.class Interprétation: le chargeur (class loader) charge tous cours d algo. les et prog. «byte par Y.Q. codes Song» Informatique en mémoire 1 puis exécuter 148

149 Le projet Cercles en UML cours d algo. et prog. par Y.Q. Song Informatique 1 149

150 S7 - Technique de programmation : quelques exemples Une calculette lancée en ligne de commande Dessiner un sapin de Noël (mode texte) cours d algo. et prog. par Y.Q. Song Informatique 1 150

151 Ligne de commande public static void main (String [ ] argument) public: fonction main() est accessible depuis l extérieur de la classe où elle est définie static: fonction main() ne peut pas être copiée plusieurs fois en mémoire void: fonction main() ne fournit pas de résultat String [] argument: fonction main() possède un paramètre défini comme tableau de type String. Ce paramètre permet de passer des données en ligne de commande lors du lancement de la commande d exécution du programme cours d algo. et prog. par Y.Q. Song Informatique 1 151

152 Ligne de commande Ligne de commande: permet de transmettre un ordre à l ordinateur par saisie au clavier (par opposé à l interface graphique avec fenêtre et clic de souris) Format: nomdelacommande paramètreseventuels Exemples: ls *.java (unix/linux) dir *.java (dos) Passage de paramètres à un programme Java par l intermédiaire du tableau de String défini en paramètre de main(), en dehors d un environnement de travail (e.g. Eclipse) java nomdeprogramme Lancer CMD java nomdeprogramme p0 p1 p2 pn (séparés par espace) (sous Eclipse, se fait dans exécuter config. arguments de prog.) cours d algo. et prog. par Y.Q. Song Informatique Lancer Eclipse

153 public class Calculette { public static void main( String [] argument) { int a, b; char opérateur; double calcul; if (argument.length > 0) { a = Integer.parseInt(argument[0]); opérateur = argument[1].charat(0); b = Integer.parseInt(argument[2]); else { opérateur = menu(); a = Lecture.lireEntier("Entrer la première valeur "); b = Lecture.lireEntier("Entrer la seconde valeur "); calcul = calculer(a, b, opérateur ); afficher(a, b, opérateur, calcul); // à suivre page suivante On peut écrire: java Calculette ou saisir à la demande opérateur 1ère valeur 2 nd valeur cours d algo. et prog. par Y.Q. Song Informatique 1 153

154 // suite et fin du transparent précédent public static double calculer (int x, int y, char o) { double résultat =0; switch (o) { case '+' : résultat = x + y; break; case '-' : résultat = x - y; break; case '/' : résultat = x / y; break; case x' : résultat = x * y ; break; return résultat; public static void afficher(int x, int y, char o, double r) { System.out.println(x + " " +o+ " "+ y + " = " + r); public static char menu() { char opération ; x à la place de * car * est un caractère spécial selon systèmes (dos, unix, Jbuilder ) opération = Lecture.lireCaractere("Entrer en premier l'opération choisie (+, -, x, /) : "); return opération ; cours d algo. et prog. par Y.Q. Song Informatique 1 154

155 Dessiner un sapin de Noël (mode texte) Cahier des charges % %.%......% %.%...%. Lancer CMD cours d algo. et prog. par Y.Q. Song Informatique 1 155

156 Décomposition d un problème Dessiner un triangle avec un tableau de 3 lignes int [][] sapin = new int[3][5]; int milieu = sapin[0].length/2; for (int i = 0; i < sapin.length; i++) { for (int j = -i; j <= i; j++) { sapin[i][milieu+j] = 1; cours d algo. et prog. par Y.Q. Song Informatique 1 156

157 Décomposition d un problème Affichage du dessin for (int i = 0; i < sapin.length; i++) { for (int j = 0; j < sapin[0].length; j++) { if (sapin[i][j] == 0) System.out.print(" "); else System.out.print(". "); System.out.println(); cours d algo. et prog. par Y.Q. Song Informatique 1 157

158 Décomposition d un problème Créer un triangle composé de n lignes Relation entre le nombre de lignes et de colonnes Nombre de colonnes = 2 * Nombre de lignes 1 Placer des décorations (%) au hasard Utiliser math.random() pour générer des valeurs (exemple: entre 1 et 6) Une valeur parmi six pour afficher «%» cours d algo. et prog. par Y.Q. Song Informatique 1 158

159 public class Triangle { public static void main(string [] arg) { int nl = Lecture.lireEntier("Nombre de ligne : "); if (nl <= 0) { System.out.println("Le nombre de lignes doit être supérieur à 0 "); System.exit(0); int nc = 2*nl-1; int [][] sapin = new int[nl][nc]; int milieu = sapin[0].length/2; for ( int j = 0 ; j < nl ; j++) { for ( int i = -j; i <= j; i++) { sapin[j][milieu+i] = (int ) (5*Math.random()+1); affiche(sapin); // suite à la page suivante cours d algo. et prog. par Y.Q. Song Informatique 1 159

160 // suite et fin public static void affiche(int [][] t) { for (int j = 0; j < t.length; j++) { for (int i = 0; i < t[0].length; i++) { switch (t[j][i]) { case 0 : System.out.print(" "); break; case 2 : System.out.print("%"); break; default : System.out.print("."); System.out.println(); cours d algo. et prog. par Y.Q. Song Informatique 1 160

161 S8: Concept d objet et programmation orientée objet D après le livre d Anne Tasso cours d algo. et prog. par Y.Q. Song Informatique 1 161

162 Plan Principes fondamentaux du concept d objet Variables statiques (de classe) vs. variables d instance (d objet) Méthodes statiques et non statiques Passage de paramètres par référence Notion de constructeur Protection de données (protected, private) Héritage entre classes cours d algo. et prog. par Y.Q. Song Informatique 1 162

163 Variable d instance Classe: un modèle (attributs, méthodes) Objet: une copie ou instance du modèle en mémoire (données, méthodes) Création d une copie par l opérateur new Mot clé static devant une variable de classe Si oui, réservation d un seul emplacement mémoire Sinon, variable d instance. L interpréteur peut construire plusieurs exemplaires de variable en mémoire cours d algo. et prog. par Y.Q. Song Informatique 1 163

164 Exemple: classe Cercle Variables d instance public class Cercle { public int x, y, r ; // position du centre et rayon public static int nombre; // nombre de cercle public void créer() { Variable de classe x = Lecture.lireEntier ("Position en x : "); y = Lecture.lireEntier ("Position en y : "); r = Lecture.lireEntier ("Rayon : "); nombre ++; // et les autres méthodes vues dans ce cours // Fin de la classe Cercle cours d algo. et prog. par Y.Q. Song Informatique 1 164

165 Exemple: utilisation de la classe Cercle public class CompterDesCercles { public static void main(string [] arg) { Cercle A = new Cercle(); A.créer(); System.out.println("Nombre de cercle : "+Cercle.nombre); Cercle B = new Cercle(); B.créer(); System.out.println("Nombre de cercle : "+Cercle.nombre); // Fin de la classe CompterDesCercles cours d algo. et prog. par Y.Q. Song Informatique 1 165

166 Exemple: exécution de l application CompterDesCercles 0x x.y.r créer() x=lecture.lireentier(); y=lecture.lireentier(); r=lecture.lireentier(); nombre++; autres méthodes A 0x B 0x Cercle.nombre x x.y.r créer() x=lecture.lireentier(); y=lecture.lireentier(); r=lecture.lireentier(); nombre++; autres méthodes cours d algo. et prog. par Y.Q. Song Informatique 1 166

167 Passage de paramètres par référence nomdeméthode(paramètres) Au lieu de type simple t.q. int, char, double, Paramètres sont des objets. Un objet est défini par son adresse de stockage en mémoire (référence, ou encore pointeur) Modifications apportées sur l objet passé en paramètre à l intérieur de la méthode sont visibles en dehors de la méthode cours d algo. et prog. par Y.Q. Song Informatique 1 167

168 Exemple: échanger la position de deux cercles public class Cercle {public int x, y, r ; // position du centre et rayon // les autres méthodes déjà vues public void échanger (Cercle autre) { int tmp; tmp = x; x = autre.x; autre.x = tmp; tmp = y; y = autre.y; autre.y = tmp; cours d algo. et prog. par Y.Q. Song Informatique 1 168

169 Exemple: échanger la position de deux cercles public class EchangerDesCercles { public static void main(string [] arg) { Cercle A = new Cercle(); A.créer(); System.out.println("Le cercle A: "); A.afficher(); Position en x: 4 Position en y: 4 Rayon: 4 Le cercle A: Centre en 4, 4 Rayon: 4 Cercle B = new Cercle(); B.créer(); System.out.println("Le cercle B : "); B.afficher(); // continue à la page suivante Position en x: 5 Position en y: 5 Rayon: 5 Le cercle B: Centre en 5, 5 Rayon: 5 cours d algo. et prog. par Y.Q. Song Informatique 1 169

170 Exemple: échanger la position de deux cercles // suite du programme précédent B.échanger(A); System.out.println("Après échange : "); System.out.println("Le cercle A: "); A.afficher(); System.out.println("Le cercle B : "); B.afficher(); // Fin de la classe EchangerDesCercles Après échange Le cercle A: Centre en 5, 5 Rayon: 4 Le cercle B: Centre en 4, 4 Rayon: 5 cours d algo. et prog. par Y.Q. Song Informatique 1 170

171 Exemple: échanger la position de deux cercles autres méthodes EchangerDesCercles 0x A 0x x.y.r 0x x.y.r B.créer() 0x échanger(A).afficher() autre tmp = x;.échanger() x = autre.x; autre.x = tmp; 0x tmp 5 autres méthodes cours d algo. et prog. par Y.Q. Song Informatique 1 171

172 Exemple: échanger la position de deux cercles autres méthodes EchangerDesCercles 0x A 0x x.y.r 0x x.y.r B.créer() 0x échanger(A).afficher() tmp = x; autre.échanger() x = autre.x; autre.x = tmp; 0x tmp 5 autres méthodes cours d algo. et prog. par Y.Q. Song Informatique 1 172

173 Exemple: échanger la position de deux cercles autres méthodes EchangerDesCercles 0x A 0x x.y.r 0x x.y.r B.créer() 0x échanger(A).afficher() tmp = x; autre x = autre.x;.échanger() autre.x = tmp; 0x tmp 5 autres méthodes cours d algo. et prog. par Y.Q. Song Informatique 1 173

174 Les constructeurs Les constructeurs sont utilisés pour initialiser correctement les données d un objet au moment de la création de l objet en mémoire Constructeur par défaut du langage java initialise toutes les données d un objet, lors de sa création, à 0, 0.0, \0, null Exemple: Cercle C = new Cercle(); cours d algo. et prog. par Y.Q. Song Informatique 1 174

175 Les constructeurs Définir son propre constructeur (pour autres valeurs à l initialisation): écrire une méthode portant le même nom que sa classe Exemple: public class Cercle { private int x, y, r ; public final static int TailleEcran = 600 ; public Cercle(){ //Au lieu de la méthode créer() x = Lecture.lireEntier ("Position en x : "); y = Lecture.lireEntier ("Position en y : "); r = Lecture.lireEntier ("Rayon: "); cours d algo. et prog. par Y.Q. Song Informatique 1 175

176 Les constructeurs Remarque: Un constructeur n est pas typé (public cercle()) Dans l exemple précédent, Cercle A = new Cercle(); appelle le constructeur utilisateur et demande dès la création de l objet A, de saisir les ordonnées et rayon Le constructeur par défaut du Java n existe plus cours d algo. et prog. par Y.Q. Song Informatique 1 176

177 La surcharge de constructeurs Le langage Java permet de définir plusieurs constructeurs, ou méthodes, à l intérieur d une même classe Lorsqu il existe plusieurs constructeurs, on dit que le constructeur est surchargé Remarque: la définition de plusieurs constructeurs permet de satisfaire des besoins différents d initialisation de l objet. Par exemple, créer un cercle() en saisissant tous ses paramètres ou cercle(x,y,r) en prenant des valeurs déjà calculées dans le programme qui le crée. cours d algo. et prog. par Y.Q. Song Informatique 1 177

178 public class Cercle { private int x, y, r ; public final static int TailleEcran = 600 ; public Cercle(){ x = Lecture.lireEntier ("Position en x : "); y = Lecture.lireEntier ("Position en y : "); r = rayonvérifié(); public Cercle(int centrex, int centrey) { x = centrex ; y = centrey; public Cercle(int centrex, int centrey, int rayon) { this( centrex, centrey) ; r = rayonvérifié(rayon); cours d algo. et prog. par Y.Q. Song Informatique 1 178

179 La surcharge de constructeurs L interpréteur Java détermine le constructeur utilisé en fonction de la liste de paramètres de chaque constructeur Cercle A = new Cercle(); Cercle B = new Cercle(10, 10); Cercle C = new Cercle (10, 10, 30); Le mot-clé «this» this (centrex,centrey) appel un constructeur possédant deux paramètres doit toujours être placé comme 1ère instruction du constructeur qui l utilise cours d algo. et prog. par Y.Q. Song Informatique 1 179

180 Encapsulation Objectif: protéger les données d un objet contre ses transformations involontaires Cet objectif est réalisé par: Niveaux de protection de données Contrôle d accès aux données Consultation Modification cours d algo. et prog. par Y.Q. Song Informatique 1 180

181 Protection des données Pour les membres d une classe (données et méthodes) Protection private Ne sont accessibles que pour les méthodes de la classe où la donnée est définie. e.g., impossible depuis une main() se trouvant dans une autre classe Pas de mot réservé devant la variable ou la méthode Visibilité paquetage (par défaut): accessible de partout dans le paquetage où est définie la variable ou la méthode, nulle part ailleurs Protection protected Idem à private mais accessibles par les méthodes d une sousclasse (cf. notion de l héritage plus loin) Protection public Accessibles de partout dans le paquetage. Si la classe est public, accessible de partout ailleurs aussi cours d algo. et prog. par Y.Q. Song Informatique 1 181

182 public class CerclePrive { private int x, y, r ; public CerclePrive() { x = Lecture.lireEntier ("Position en x : "); y = Lecture.lireEntier ("Position en y : "); r = Lecture.lireEntier ("Rayon : "); public void échanger( CerclePrive autre) { int tmp; tmp = x; x = autre.x; autre.x = tmp; tmp = y; y = autre.y; autre.y = tmp; public void afficher() { System.out.println("Centre en " + x + ", " + y); System.out.println("Rayon : " + r); // les autres méthodes déjà vues // Fin de la classe CerclePrive cours d algo. et prog. par Y.Q. Song Informatique 1 182

183 public class FaireDesCerclesPrives { public static void main(string [] arg) { CerclePrive A = new CerclePrive(); A.afficher(); System.out.println("Entrez le rayon : "); A.r = Lecture.lireEntier ("Entrez le rayon : "); System.out.println("Le cercle est de rayon : " + A.r) ; Erreur de compilation: Variable r a un accès private dans la class CelrclePrive cours d algo. et prog. par Y.Q. Song Informatique 1 183

184 Méthodes d accès aux données Les données privées ne peuvent être consultées ou modifiées que par des méthodes de la classe où elles sont déclarées Nous pouvons ainsi construire des méthodes d une classe réalisant un certain nombre de contrôles pour bien protéger les données méthode accesseur en consultation Méthode accesseur en modification cours d algo. et prog. par Y.Q. Song Informatique 1 184

185 public class CercleControle { private int x, y, r ; public CercleControle() { x = Lecture.lireEntier ("Position en x : "); y = Lecture.lireEntier ("Position en y : "); do { r = Lecture.lireEntier ("Rayon : "); while (r < 0 r > 600); public void afficher() { System.out.println("Centre en " + x + ", " + y); System.out.println("Rayon : " + r); public void agrandir (int nr) { if (r+nr < 0) r = 0; else if (r + nr > 600) r = 600; else r = r + nr; // les autres méthodes déjà vues // Fin de la classe Cerclecontrole cours d algo. et prog. par Y.Q. Song Informatique 1 185

186 public class FaireDesCerclesControles { public static void main(string [] arg) { CercleControle A = new CercleControle(); A.afficher(); int plus = Lecture.lireEntier ("Entrer valeur d'agrandissement : "); A.agrandir(plus); System.out.println("Après agrandissement : "); A.afficher(); cours d algo. et prog. par Y.Q. Song Informatique 1 186

187 Des méthodes invisibles Données sont en général «private» pour les protéger, mais les méthodes sont souvent «public» car ce sont elles qui permettent l accès aux données protégées Dans certains cas particuliers, méthodes définies en mode «private». Elles deviennent alors inaccessibles depuis les classes extérieures cours d algo. et prog. par Y.Q. Song Informatique 1 187

188 Exemples des méthodes invisibles: méthodes d implémentation surcharge private int rayonvérifié() { int tmp; do { tmp = Lecture.LireEntier ( rayon : ); while (tmp < 0 tmp > TailleEcran); return tmp; private int rayonvérifié(int tmp) { if (tmp < 0) return 0; else if (tmp > TailleEcran) return TailleEcran; else return tmp; cours d algo. et prog. par Y.Q. Song Informatique 1 188

189 L héritage L héritage permet la réutilisation des fonctionnalités d une classe, tout en apportant certaines variations, spécifiques de l objet héritant Exemple: une classe «Forme» qui définit un ensemble de comportements propres à toute forme géométrique Ces comportements peuvent être réutilisés par la classe «Cercle». Cette réutilisation est effectuée sans avoir à modifier les instructions de la classe «Forme» Possibilité d ajouter d autres comportements spécifiques des objets «Cercle». Ces nouveaux comportements sont valides uniquement pour la classe «Cercle» et non pour la classe «Forme» cours d algo. et prog. par Y.Q. Song Informatique 1 189

190 L héritage Pour déclarer une classe B hérite d une classe A Class B extends A { //donnée et méthodes de la classe B On dit que: B est une sous-classe de A ou encore une classe dérivée de A A est une super-classe ou encore une classe de base cours d algo. et prog. par Y.Q. Song Informatique 1 190

191 import utilensemjava.*; public class Forme { protected int x, y; private int couleur ; //0-255 public Forme() { x = Lecture.lireEntier ("Position en x : "); y = Lecture.lireEntier ("Position en y : "); couleur = Lecture.lireEntier ("Couleur : "); public Forme(int nx, int ny) { x = nx; y = ny; couleur = 0; public Forme(int nx, int ny, int nc) { x = nx; y = ny; couleur = nc; public void afficher() { System.out.println("Position en " + x + ", " + y); System.out.println("Couleur : " + couleur); public void déplacer(int nx, int ny) { x = nx; y = ny; cours d algo. et prog. par Y.Q. Song Informatique // Fin de la classe Forme Protected permet l accès par la sous-classe

192 import utilensemjava.*; public class Cercle extends Forme { private int r ; Private final static int TailleEcran=600; public Cercle() { Constructeur de System.out.print ("Rayon : " ); la classe héritée r = rayonvérifié(); public Cercle(int xx, int yy) { Constructeur de super(xx, yy); la classe héritée r = rayonvérifié(); private int rayonvérifié() { // cf. transparents déjà présentés private int rayonvérifié(int tmp) { // cf. transparents déjà présentés public void afficher() { super.afficher(); System.out.println("Rayon : " + r); public double périmètre() { return 2*Math.PI*r; public void agrandir(int nr) { r = rayonvérifié(r + nr); cours d algo. et prog. par Y.Q. Song Informatique // Fin de la classe Cercle Deux formes différentes dans classe Forme classe Cercle polymorphisme

193 UML: association entre classes [schéma extrait du cours d algo. et prog. par Y.Q. Song Informatique 1 193

194 Le constructeur d une classe héritée La classe dérivée possède ses propres constructeurs Exemple: Cercle A = new Cercle(); Pour construire un objet dérivé, il faut construire d abord l objet associé à la classe mère Exemple: le constructeur de la classe «Cercle» doit appeler le constructeur de la classe «Forme» Par défaut, s il n y a pas d appel explicite (le cas de notre exemple de classe «Cercle»), le compilateur recherche le constructeur par défaut (sans paramètre) de la classe supérieure. Si pas de constructeur par défaut de la classe supérieure, il faut utiliser le mot-clé «super» cours d algo. et prog. par Y.Q. Song Informatique 1 194

195 Le constructeur d une classe héritée Exemple d absence de constructeur par défaut: public Forme(int nx, int ny) { x = nx; y = ny; couleur = 0; Exemple d appel direct du constructeur de la classe mère par «super» public Cercle(int xx, int yy) { Obligatoirement super(xx, yy); 1ère instruction System.out.print ("Rayon : " ); r = rayonvérifié(); cours d algo. et prog. par Y.Q. Song Informatique 1 195

196 La protection des données héritées Héritage n est pas synonyme d accessibilité lors que «private» est utilisé au lieu de «protected» dans la classe mère Exemple: public class Forme { protected int x, y; private couleur ; public Cercle (int xx, int yy) { super(xx, yy); couleur = 20; r = 10; Erreur: variable couleur non accessible cours d algo. et prog. par Y.Q. Song Informatique 1 196

197 Le polymorphisme Notion de polymorphisme est découlée directement de l héritage: une méthode peut se comporter différemment suivant l objet sur lequel elle est appliquée Dans notre exemple, la méthode afficher() est décrite dans la classe «Forme» et la classe «Cercle» On peut utiliser super.afficher() pour appeler la méthode afficher() de la classe «Forme» cours d algo. et prog. par Y.Q. Song Informatique 1 197

198 public class FormerDesCercles { public static void main(string [] arg) { Cercle A = new Cercle(5, 5); A.afficher(); Forme F = new Forme (10, 10, 3); F.afficher(); L appel du constructeur de l objet A demande de saisir rayon r Rayon : 7 A.afficher() appliquée à A comme définie dans «Cercle»: position en 5, 5 couleur : 0 Rayon : 7 F.affiche appliquée à F de type «Forme»: Position en 10, 10 cours d algo. et prog. par Y.Q. Song Couleur : 3 Informatique 1 198

199 Séance 8bis: Concept d objet (suite) Classe «Object» de Java Redéfinition de méthodes: exemple de tostring() Distinguer des objets: Instanceof cours d algo. et prog. par Y.Q. Song Informatique 1 199

200 Classe «Object» de java Toute classe hérite de la classe Object, et toute classe possède donc les méthodes de celle-ci. Exemple: la méthode public String tostring() sert à décrire les objets d une classe sous forme d une chaîne de caractères retournée par la méthode (nom de la classe cours d algo. et prog. par Y.Q. Song Informatique 1 200

201 Redéfinition de tostring() Pour afficher un objet selon nos souhaits, on redéfinit souvent la méthode tostring() lors qu on définit une classe (qui hérite toujours de la classe «Object»). C est équivalent à la méthode afficher() que nous avons maintenant l habitude à définir, avec l avantage qu elle peut être appelée par System.out.println(nomObjet) = System.out.println(nomObjet.toString()) cours d algo. et prog. par Y.Q. Song Informatique 1 201

202 Redéfinition de tostring() class Mammifere { int taille; Mammifere(int taille) { this.taille = taille; public String tostring() { return "animal à sang chaud mesurant " + taille + " cm"; cours d algo. et prog. par Y.Q. Song Informatique 1 202

203 Redéfinition de tostring() class Herbivore extends Mammifere { boolean ruminant; Herbivore(int taille, boolean ruminant) { super(taille); this.ruminant = ruminant; Appel du constructeur de la super classe, c est à dire Mammifere(int taille) public String tostring() { if (ruminant) return super.tostring() + " qui mange des vegetaux et rumine."; else return super.tostring() + " qui mange des vegetaux et ne rumine pas."; cours d algo. et prog. par Y.Q. Song Informatique 1 203

204 Redéfinition de tostring() class EssaiHerbivore { public static void main(string[] arg) { Mammifere chat = new Mammifere(40); Herbivore vache = new Herbivore(200, true); System.out.println(chat) ; System.out.println("Marguerite : " + vache); animal à sang chaud mesurant 40 cm Marguerite : animal à sang chaud mesurant 200 cm qui mange des vegetaux et rumine. cours d algo. et prog. par Y.Q. Song Informatique 1 204

205 Instanceof Une sous-classe peut être définie pour enrichir une classe existante (mais qui ne convient pas à tous nos besoins) Exemple: une classe MammifereEnrichi pour ajouter un attribut et des méthodes supplémentaires afin de déterminer si un mammifère est bon pour être l animal de compagnon. cours d algo. et prog. par Y.Q. Song Informatique 1 205

206 Instanceof public class MammifereEnrichi extends Mammifere{ boolean agressif; MammifereEnrichi(int taille, boolean agressif){ super(taille); this.agressif=agressif; boolean boncompagnon(){ if ((!agressif) && (taille < 250)) return true; else return false; cours d algo. et prog. par Y.Q. Song Informatique 1 206

207 Instanceof public class essaimammifere { public static void main(string[] args) { MammifereEnrichi animal = new MammifereEnrichi(50, false); System.out.println(animal); if (animal.boncompagnon()) System.out.println("vous pouvez l'adopter"); else System.out.println("vous courrez un danger"); Résultat: animal à sang chaud mesurant 50 cm vous pouvez l'adopter Question: animal est l instance de quelle classe? Réponse à l aide de instanceof cours d algo. et prog. par Y.Q. Song Informatique 1 207

208 instanceof public class essaiinstanceof { public static void main(string[] args) { MammifereEnrichi obj = new MammifereEnrichi(100,true); Mammifere obj1 = new Mammifere(20); System.out.println("obj est une instance de MammifereEnrichi : " + (obj instanceof MammifereEnrichi)); System.out.println("obj est une instance de Mammifere : " + (obj instanceof Mammifere)); System.out.println("obj est une instance de Object du java: " + (obj instanceof Object)); System.out.println("obj1 est une instance de MammifereEnrichi : " + (obj1 instanceof MammifereEnrichi)); obj est une instance de MammifereEnrichi : true obj est une instance de Mammifere : true obj est une instance de Object du java: true obj1 est une instance de MammifereEnrichi : false cours d algo. et prog. par Y.Q. Song Informatique 1 208

209 S9: Un exemple de la programmation orientée objet Rappel de l exercice du tutorat: Ecrire un logiciel permettant d évaluer un polynôme de degré n (à l aide de la méthode de HORNER) Différentes façons de programmer Un programme «plat» Un programme structuré avec des méthodes statiques Une programmation orientée objet Définir l objet: ses attributs et ses méthodes Décrire les méthodes cours d algo. et prog. par Y.Q. Song Informatique 1 209

210 public class polynome_plat { //programme «plat» public static void main(string[] args) { double [] coef; double resultat; int n=lecture.lireentier("saisir le degré du polynôme: "); coef = new double[n+1]; for (int i=0; i<coef.length; i++) coef[i]=lecture.lireentier("saisir le coef de x^"+i+": "); double x=lecture.lireflottantdouble("saisir la valeur de x : "); //méthode de HORNER resultat=coef[n]; for(int i = n-1; i >= 0; i--) resultat = resultat*x+coef[i]; System.out.println("résultat est = "+resultat); cours d algo. et prog. par Y.Q. Song Informatique 1 210

211 public class polynome_fonction { //programme structuré en fonctions public static void main(string[] args) { double [] coef; double resultat; int n=lecture.lireentier("saisir le degré du polynôme: "); coef = new double[n+1]; for (int i=0; i<coef.length; i++) coef[i]=lecture.lireentier("saisir le coef de x^"+i+": "); double x=lecture.lireflottantdouble("saisir la valeur de x : "); System.out.println("résultat est = "+horner(coef,x)); public static double horner(double [] coefficient, double x){ //méthode de HORNER int n=coefficient.length-1; double Px=coefficient[n]; for(int i = n-1; i >= 0; i--){ Px = Px*x+coefficient[i]; return Px; cours d algo. et prog. par Y.Q. Song Informatique 1 211

212 Objet polynôme Modélisation de l objet «Polynôme» Attributs: degré, les coefficients (degré+1) Méthodes: créer (par constructeurs), afficher (peut se faire via la redéfinition de tostring()), évaluer, additionner, soustraire, multiplier, dériver, diviser, Implémentation en Java Une classe «polynome» Une classe principale avec «main()» pour manipuler les polynômes cours d algo. et prog. par Y.Q. Song Informatique 1 212

213 public class Polynome_obj {//programme objet int deg; double [] coef; public Polynome_obj(){// constructeur par défaut deg=lecture.lireentier("saisir le degré du polynôme: "); coef = new double[deg+1]; for (int i=0; i<coef.length; i++) coef[i]=lecture.lireentier("saisir le coef de x^"+i+": "); public double horner(double x){//méthode de HORNER double resultat=coef[deg]; for(int i = deg-1; i >= 0; i--){ resultat = resultat*x+coef[i]; return resultat; cours d algo. et prog. par Y.Q. Song Informatique 1 213

214 Utilisation de la classe «Polynome_obj» public class ManipPolynome { public static void main(string[] args) { Polynome_obj p= new Polynome_obj(); double x=lecture.lireflottantdouble("saisir la valeur de x: "); System.out.println("valeur du polynome = "+p.horner(x)); cours d algo. et prog. par Y.Q. Song Informatique 1 214

215 Objet polynôme Si on veux ajouter d autres méthodes? Afficher un polynôme Par une chaîne de caractères. E.g. coef(3, 0, 1, 4) 3*X^3+0*X^2+1*X^1+4 ou 3*X^3+X^1+4 et si coef(3, 0, -1, 4)? Additionner deux polynômes P( X ) n m i pi X Q( X ) i 0 j 0 q X min( nm, ) n m k i j k k i j k 0 i min( n, m) 1 j min( n, m) 1 P( X ) Q( X ) ( p q ) X p X q X Pas d effet si m ou n < min(m,n)+1 cours d algo. et prog. par Y.Q. Song Informatique i j

216 Méthode afficher() public void afficher(){ String s=""; for (int i=deg; i>=0; i--) s=s.concat("+"+coef[i]+"*x^"+i); System.out.println(s); Concaténation de chaînes de caractères. Équivalent à: s = s+ "+"+coef[i]+"*x^"+i cours d algo. et prog. par Y.Q. Song Informatique 1 216

217 public Polynome_obj additionner(polynome_obj P){ int maxdeg = (P.deg >= this.deg? P.deg : this.deg); int mindeg = (P.deg <= this.deg? P.deg : this.deg); Polynome_obj R = new Polynome_obj(maxdeg); for(int i = 0; i <= mindeg; i++) R.coef[i] = P.coef[i] + this.coef[i]; for(int i = mindeg+1; i <= P.deg; i++) R.coef[i] = P.coef[i]; for(int i = mindeg+1; i <= this.deg; i++) R.coef[i] = this.coef[i]; return R; Ou Math.max() et Math.min() Besoin d un constructeur avec degré comme paramètre et sans la saisie des coef! public Polynome_obj(int d){ this.deg=d; this.coef=new double[d+1]; this.deg pour distinguer avec la variable d instance deg de la classe cours d algo. et prog. par Y.Q. Song Informatique 1 217

218 Exemple d un programme principal pour manipuler des polynômes public class ManipPolynome { public static void main(string[] args) { Polynome_obj p= new Polynome_obj(); //double x=lecture.lireflottantdouble("saisir la valeur de x: "); //System.out.println("valeur du polynome = "+p.horner(x)); p.afficher(); Polynome_obj q= new Polynome_obj(); q.afficher(); Polynome_obj r= new Polynome_obj(Math.max(p.deg,q.deg)); r=q.additionner(p); //ou p.additionner(q); r.afficher(); cours d algo. et prog. par Y.Q. Song Informatique 1 218

219 Moyenne classe 1: révision des points qui posent des problèmes Synthèse sur quelques points cruciaux de la programmation en Java Types de données et manipulation de données par référence Redéfinition de la méthode tostring() Variables et méthodes statiques et non statiques Un exemple pour illustrer les étapes pour: spécifier une classe décrire en Java une classe (attributs et méthodes) utiliser des classes à partir d une autre classe (e.g dans une classe «principale» avec la méthode main()) cours d algo. et prog. par Y.Q. Song Informatique 1 219

220 Références Deux catégories de types: Primitifs (ou élémentaires): ex. int, float, char, Tableau et Objets (prédéfinis ou définis par utilisateur): ex.: class Personne { String nom; Un nouveau type d objets int age; class Annuaire { Personne[] liste; Un autre type d objets ayant pour membre un tableau d objets de type Personne cours d algo. et prog. par Y.Q. Song Informatique 1 220

221 Références La référence d une donnée est l adresse mémoire où est logée la donnée En java (ou C, C++, Pascal, ) les données de type primitif sont manipulées par valeur, les données des autres types sont manipulées par référence public class testtableau { public static void main(string[] args) { byte [] t={5, 2, 6; System.out.println("Tableau "+t); Tableau [: tableau; adresse; f12c4e: adresse mémoire cours d algo. et prog. par Y.Q. Song Informatique 1 221

222 public class Personne { String nom; int age; Personne() { Personne(String n, int a) { nom = n; age = a; Personne(String n) { nom = n; public String tostring() { return (nom+", "+age+" ans"); Méthode tosting() public class TesterPersonne { public static void main(string[] args) { Personne o = new Personne(); o.nom = "Dominique"; o.age = 22; System.out.println(o); System.out.println(o.nom + ", " + o.age + " ans"); Personne p = new Personne("Luc", 23); Personne q = new Personne("Anne"); System.out.println(p.nom + ", " + p.age + " ans."); System.out.println(q.nom + ", " + q.age + " ans."); Dominique, 22 ans Luc, 23 ans. Anne, 0 ans. cours d algo. et prog. par Y.Q. Song Informatique 1 222

223 Copie superficielle d un tableau public static void main(string[] args){ byte[] t = {5, 2, 6; byte[] s; s = t; System.out.println("Tableau " + t + " " + s) ; Tableau cours d algo. et prog. par Y.Q. Song Informatique 1 223

224 Copie en profondeur d un tableau public static void main(string[] args) { byte[] t = {5, 2, 6; byte[] s = new byte[3]; for (int i = 0; i < t.length; i++) s[i] = t[i]; System.out.println(t + " " + s) ; System.out.println(s == t) ; false cours d algo. et prog. par Y.Q. Song Informatique 1 224

225 Méthodes et variables statiques et non statiques Une variable déclarée static est commune à tous les objets de la classe variable de classe (globale) Une variable non statique aura une instance par objet variable d instance Règle: toute modification d une variable statique peut être faite indistinctement par n importe quel objet de la classe. Cette modification est visible par tous les objets de la classe. cours d algo. et prog. par Y.Q. Song Informatique 1 225

226 Méthodes et variables statiques et non statiques Une méthode déclarée static peut être utilisée sans référence à un objet particulier méthode de classe Une méthode statique n a pas directement accès aux variables non statiques Une méthode non statique est toujours utilisée en référence à un objet Appel d une méthode statique: NomDeClasse.nomDeMethode() Appel d une méthode non statique: nomobjet. nomdemethode() cours d algo. et prog. par Y.Q. Song Informatique 1 226

227 Méthodes et variables statiques et non statiques public class Paire { static int x; //variable de la classe int y; //variable d instance void affiche_x() { System.out.println("s.x = " + this.x); void affiche_y() { System.out.println("s.y = " + this.y); static void affiche2_x() { System.out.println("s.x = " + x); // static void affiche2_y() { // System.out.println("s.y = " + y); // static void affiche3_y(paire s) { System.out.println("s.y = " + s.y); variable y non-statique ne peut pas être référencé depuis un contexte statique cours d algo. et prog. par Y.Q. Song Informatique 1 227

228 Méthodes et variables statiques et non statique public class TesterPaire { public static void main(string[] args) { Paire s = new Paire(); Paire t = new Paire(); t.x = 2; t.y = 3; System.out.println("t.x = " + t.x + ", t.y = " + t.y); //1 System.out.println("s.x = " + s.x + ", s.y = " + s.y); //2 s.affiche_x(); //3 s.affiche_y(); //4 Paire.affiche2_x(); //5 s.affiche2_x(); //6 Paire.affiche3_y(s); //7 t.x = 2, t.y = 3 s.x = 2, s.y = 0 s.x = 2 s.y = 0 s.x = 2 s.x = 2 s.y = 0 cours d algo. et prog. par Y.Q. Song Informatique 1 228

229 Séance 9bis: Un exemple de la programmation objet et introduction de la classe «Vector» Sujet: réaliser un logiciel permettant la saisie et l affichage des notes des étudiants ainsi que le classement (tri) par moyenne d une classe d étudiants Modélisation par objet Etudiant Données: nom, prénom, notes (tableau), moyenne Méthodes: saisi (ou initialisation par constructeur), calculmoyenne, afficherunetudiant, consultationmoyenne (si moyenne est protégée) Classe Données: un tableau d étudiants Méthodes: initialiser, afficher, trierparmoyenne Comment gérer un nombre indéterminé d étudiants: «Vector» à la place d un tableau cours d algo. et prog. par Y.Q. Song Informatique 1 229

230 public class Etudiant { // Les données caractéristiques private String nom, prénom; private double [] notes, moyenne; // Les comportements public Etudiant() { nom = Lecture.LireChaine("Entrer le nom de l'etudiant : "); prénom = Lecture.LireChaine("Entrer le prénom : "); int nombre = Lecture.LireEntier("Combien de notes pour l'etudiant "); notes = new double [nombre]; for (int i = 0; i < notes.length; i ++) { System.out.print("Entrer la note n "+ (i+1)+ " : "); notes[i] = Lecture.FlottantDouble("ici"); moyenne = calculmoyenne(); // à suivre à la page suivante Protégées par private Constructeur de la classe «Etudiant» permettant d initier les données par saisie et de calculer la moyenne cours d algo. et prog. par Y.Q. Song Informatique 1 230

231 // suite et fin public void afficheunetudiant() { System.out.print(" Les notes de "+prénom+" "+nom+ " sont : "); for (int i = 0; i < notes.length; i ++) System.out.print(" "+notes[i]); System.out.println(); System.out.println("Sa moyenne vaut "+ moyenne); private double calculmoyenne() { double somme = 0.0; for(int i = 0; i < notes.length; i++) somme = somme + notes[i]; return somme/notes.length; public double quellemoyenne() { return moyenne; Comme calculmoyenne() est privée pour la sécurité de cette donnée, la méthode quellemoyenne() permet sa consulation depuis une autre classe cours d algo. et prog. par Y.Q. Song Informatique 1 231

232 public class Classe { private Etudiant [] liste; public Classe() { int nbetudiants = Lecture.lireEntier("Nombre d'etudiants : "); liste = new Etudiant[nbetudiants]; for(int i = 0; i < liste.length; i ++) liste[i] = new Etudiant(); public void affichelesetudiants() { for (int i = 0; i < liste.length; i ++) liste[i].afficheunetudiant(); // à suivre à la page suivante Question de réflexion: que faut-il ajouter comme attribut supplémentaire pour avoir la possibilité d ajouter un étudiant, retirer un étudiant après la création d une classe? cours d algo. et prog. par Y.Q. Song Informatique 1 232

233 // suite et fin private int ouestlepluspetit( int debut) { int i = debut, j; for(j = debut+1; j < liste.length; j++) if (liste[j].quellemoyenne() < liste[i].quellemoyenne()) i = j; return i; public void classerparmoyenne() { int indicedupluspetit ; Etudiant tmp; for(int i = 0; i < liste.length; i ++) { indicedupluspetit = ouestlepluspetit( i); tmp = liste[i]; liste[i] = liste[indicedupluspetit]; liste[indicedupluspetit] = tmp; cours d algo. et prog. par Y.Q. Song Informatique 1 233

234 public class GestionClasse { public static void main(string [] argument) { Classe C = new Classe(); System.out.println(" Récapitulatif "); C.afficheLesEtudiants(); C.classerParMoyenne(); System.out.println(" Classement "); C.afficheLesEtudiants(); cours d algo. et prog. par Y.Q. Song Informatique 1 234

235 L exécution du programme: - demande de la saisie Nombre d'etudiants : 4 Entrer le nom de l'etudiant : Dupont Entrer le prénom de l'etudiant : Toto Combien de notes pour l'etudiant Toto Dupont : 3 Entrer la note n 1 : 12 Entrer la note n 2 : 13 Entrer la note n 3 : 15 Entrer le nom de l'etudiant : Durand Entrer le prénom de l'etudiant : Titi Combien de notes pour l'etudiant Titi Durand : 2 Entrer la note n 1 : 14 Entrer la note n 2 : 11 Entrer le nom de l'etudiant : Dubois Entrer le prénom de l'etudiant : Tata Combien de notes pour l'etudiant Tata Dubois : 2 Entrer la note n 1 : 13 Entrer la note n 2 : 18 Entrer le nom de l'etudiant : Martin Entrer le prénom de l'etudiant : Pierre Combien de notes pour l'etudiant Pierre Martin : 3 Entrer la note n 1 : 3 Entrer la note n 2 : 6 Entrer la note n 3 : 9 cours d algo. et prog. par Y.Q. Song Informatique 1 235

236 Résultat donné par le programme -affichage des étudiants -affichage des étudiants triés par leur moyenne Récapitulatif Les notes de Toto Dupont sont : Sa moyenne vaut Les notes de Titi Durand sont : Sa moyenne vaut 12.5 Les notes de Tata Dubois sont : Sa moyenne vaut 15.5 Les notes de Pierre Martin sont : Sa moyenne vaut Classement Les notes de Pierre Martin sont : Sa moyenne vaut 6.0 Les notes de Titi Durand sont : Sa moyenne vaut 12.5 Les notes de Toto Dupont sont : Sa moyenne vaut Les notes de Tata Dubois sont : Sa moyenne vaut 15.5 cours d algo. et prog. par Y.Q. Song Informatique 1 236

237 Une structure de données dynamique: «Vector» Un vecteur «Vector» est un type prédéfini du langage Java (dans le package java.util import java.util.*) Vector liste = new Vector; Un vecteur offre un autre moyen de stocker des données par rapport à un tableau: La taille d un vecteur n est pas fixe mais dynamique! Données enregistrées dans l ordre d arrivée Un indice cours d algo. et prog. par Y.Q. Song Informatique 1 237

238 Manipulation d un vecteur add(objet) add(indice, objet) addelement(objet) elementat(indice) clear() indexof(objet) lastindexof() remove(index) removerange(i, j) setelementat(objet, i) size()... -Un vecteur contient obligatoirement un objet -Types élémentaires impossibles: int, float, cours d algo. et prog. par Y.Q. Song Informatique 1 238

239 Exemple: créer un nombre indéterminé d étudiants Class «Etudiant» (déjà vue, reste inchangé) Class «Classe» (remplacer le tableau d étudiants par un vecteur d étudiants) Main() pour gérer une classe cours d algo. et prog. par Y.Q. Song Informatique 1 239

240 import java.util.*; Pour trouver la classe Vector public class Classe { private Vector liste; public Classe() { liste = new Vector(); public void ajouteunetudiant() { liste.addelement(new Etudiant()); public void affichelesetudiants() { int nbetudiants = liste.size(); if (nbetudiants > 0) { Etudiant tmp; for (int i = 0; i < nbetudiants; i ++) { tmp = (Etudiant)liste.elementAt(i); cast tmp.afficheunetudiant(); else System.out.println("Il n'y a pas d'etudiant dans cette liste"); cours d algo. et prog. par Y.Q. Song Informatique 1 240

241 public class GestionClasse { public static void main (String [] argument) { byte choix = 0 ; Classe C = new Classe(); do { System.out.println("1. Ajoute un etudiant"); System.out.println("2. Affiche la classe"); System.out.println("3. Sortir"); System.out.print("Votre choix : "); choix = Lire.b(); switch (choix) { case 1 : C.ajouteUnEtudiant(); break; case 2 : C.afficheLesEtudiants(); break; case 3 : System.exit(0) ; default : System.out.println("Cette option n'existe pas "); while ( choix!= 3); cours d algo. et prog. par Y.Q. Song Informatique 1 241

242 Séance 10: Classes abstraites et interfaces Programmation objet: Classes abstraites Interfaces Récapitulatif sur l organisation des classes et interfaces en java Paquetage, classe et visibilité Unité de compilation cours d algo. et prog. par Y.Q. Song Informatique 1 242

243 Classes abstraites Une méthode est dite abstraite si elle est uniquement déclarée et non définie (prototype) Syntaxe: abstract void methode(int n); Une classe est dite abstraite si elle contient au moins une méthode abstraite Syntaxe: abstract class MaClasse { Une classe abstraite ne peut pas être instanciée; il faut l étendre pour pouvoir l utiliser. Une sous-classe d une classe abstraite est encore abstraite si elle ne définit pas toutes les méthodes dont elle hérite Les classes abstraites sont très utiles pour définir des méthodes dépendant d autres méthodes qui ne sont pas définies (cas du développement de gros logiciels à plusieurs) cours d algo. et prog. par Y.Q. Song Informatique 1 243

244 Un exemple On définit la classe «Forme» qui modélise des formes géométriques, planes, délimitées par une courbe fermée On peut mélanger des méthodes abstraites avec des méthodes non abstraites Forme Ellipse Rectangle cours d algo. et prog. par Y.Q. Song Informatique 1 244

245 Un exemple: Classe Forme abstract class Forme { abstract double perimetre(); //methode abstraite abstract double surface(); //methode abstraite void decritetalement() { double leperimetre = perimetre(); if (surface() >= leperimetre*leperimetre/16) System.out.println(this + " s'etale plus qu'un carre"); else System.out.println(this + " s'etale moins qu'un carre"); - decritetalement() compare si, à périmètre fixe, la forme a une surface supérieure ou égale à celle d un carré, ou inférieure - System.out.println(this) exécute la méthode tostring() de la classe Object du paquetage standard java.lang. La méthode tostring() retourne le nom de la classe de l objet concerné suivi de l adresse de cet objet sous forme d une chaîne de cours d algo. et prog. par Y.Q. Song Informatique caractères. Cette méthode est redéfinie comme suit

246 Un exemple: sous-classe Ellipse class Ellipse extends Forme{ private int grandaxe, petitaxe; Ellipse(int grandaxe, int petitaxe) { this.grandaxe = grandaxe; this.petitaxe = petitaxe; double perimetre() { // calcul approché double sinus, cosinus, resultat = 0; double pcarre = petitaxe * petitaxe; double gcarre = grandaxe * grandaxe; for (int i = 0; i < 1000; i++) { sinus = Math.sin(i*Math.PI/2000); cosinus = Math.cos(i*Math.PI/2000); resultat += Math.sqrt(pcarre*sinus*sinus+gcarre*cosinus*cosinus); resultat *= 4*Math.PI/2000; return resultat; //à suivre cours d algo. et prog. par Y.Q. Song Informatique 1 246

247 Un exemple: sous-classe Ellipse // Suite et fin de classe Ellipse double surface() { return Math.PI*petitAxe*grandAxe; public String tostring() { return ("L'ellipse de grand axe " + grandaxe + ", de petit axe " + petitaxe); public String tostring() redéfinit la méthode tostring(). C est à dire qu au lieu de retourner le nom de la classe de l objet concerné suivi de l adresse de cet objet sous forme d une chaîne de caractères, on retourne la chaîne ci-dessus. cours d algo. et prog. par Y.Q. Song Informatique 1 247

248 Un exemple: sous-classe Rectangle class Rectangle extends Forme{ private int longueur, largeur; Rectangle(int longueur, int largeur) { this.longueur = longueur; this.largeur = largeur; double perimetre() { return 2*(longueur + largeur); double surface() { return longueur*largeur; public String tostring() { return (" Le rectangle de longueur " + longueur + " et de largeur " + largeur); cours d algo. et prog. par Y.Q. Song Informatique 1 248

249 Un exemple: EssaiFormes class EssaiFormes { public static void main(string[ ] arg) { (new Ellipse(2, 1)).decritEtalement(); (new Ellipse(4, 1)).decritEtalement(); (new Rectangle(2, 1)).decritEtalement(); java EssaiFormes donne le résultat suivant: L'ellipse de grand axe 2, de petit axe 1 s'etale plus qu'un carre L'ellipse de grand axe 4, de petit axe 1 s'etale moins qu'un carre Le rectangle de longueur 2 et de largeur 1 s'etale moins qu'un carre cours d algo. et prog. par Y.Q. Song Informatique 1 249

250 Interfaces Une interface Java se définit parallèlement aux classes Elle contient uniquement des définitions de constantes et des déclarations de méthodes, sans leur définitions (ne comporte que le prototype, et pas de corps) Syntaxe: interface I { Liste de constantes Liste de prototypes de méthodes cours d algo. et prog. par Y.Q. Song Informatique 1 250

251 Interfaces Une classe peut «implémenter» une ou plusieurs interfaces avec le mot réservé implements Class A implements I { Alors, la classe A dispose des constantes définies dans l interface I est contrainte à définir toutes les méthodes prototypées dans l interface I (sinon, elle doit être déclarée abstraite) Le fait qu une classe peut implémenter plusieurs interfaces étend la possibilité d héritage en Java. Or, une sous-classe ne peut hériter qu une seule classe (absence d héritage multiple). cours d algo. et prog. par Y.Q. Song Informatique 1 251

252 Interfaces: règles Les attributs et les méthodes sont automatiquement publics Si une classe A implémente une interface I, une sous-classe B de A implémente aussi automatiquement I Une classe peut implémenter plusieurs interfaces: class A implements I1, 12 { Une interface I peut étendre plusieurs interfaces: interface I extends I1, I2 { cours d algo. et prog. par Y.Q. Song Informatique 1 252

253 classe: Cercle Un exemple Interface: Tracable - DIM_MAX - dessine(java.awt.graphics g) classe: Carre CercleGraphique CarreGraphique Commentaire: - Java.awt.Graphics: définit un ensemble de fonctionnalités permettant d effectuer des tracés (lignes, cercles, caractères, etc.) dans un composant graphique. Pour dessiner dans un composant graphique, on passe nécessairement par une instance de Graphics. - awt (Abstract Window Toolkit): l ensemble des classes concernant les interfaces graphiques (à étudier plus loin) cours d algo. et prog. par Y.Q. Song Informatique 1 253

254 Un exemple Fichier Tracable.java: interface Tracable { static final int DIM_MAX = 500; void dessiner(java.awt.graphics g); Fichier Cercle.java: class Cercle { int rayon; Cercle(int rayon) { this.rayon = rayon; double circonference() { return 2 * Math.PI * rayon; cours d algo. et prog. par Y.Q. Song Informatique 1 254

255 Un exemple class CercleGraphique extends Cercle implements Tracable { // x et y : coordonnees du centre du cercle int x, y; // couleur : la couleur du cercle java.awt.color couleur; CercleGraphique(int rayon, int x, int y, java.awt.color couleur) { super(rayon); this.x = x; this.y = y; this.couleur = couleur; public void dessiner(java.awt.graphics g) { if (rayon < DIM_MAX) { g.setcolor(couleur); g.drawoval(x - rayon, y - rayon, 2*rayon, 2*rayon); cours d algo. et prog. par Y.Q. Song Informatique 1 255

256 Un exemple Commentaires java.awt.color: contient ce qui est nécessaire pour disposer de couleurs g.setcolor(couleur): On donne à l objet Graphics g la couleur souhaitée pour le tracé du cercle g.drawoval(x - rayon, y - rayon, 2*rayon, 2*rayon): cette instruction provoque le tracé du cercle (cas particulier d un oval) dans le composant graphique correspondant à g. Les arguments sont l abscisse et l ordonnée du coin supérieur gauche du rectangle circonscrit à l oval, la largeur et la hauteur de cet oval cours d algo. et prog. par Y.Q. Song Informatique 1 256

257 Un exemple class Carre { int cote; Carre(int cote) { this.cote = cote; int surface() { return cote * cote; cours d algo. et prog. par Y.Q. Song Informatique 1 257

258 import java.awt.*; Un exemple class CarreGraphique extends Carre implements Tracable { int x, y; //coordonnees du centre Color couleur = Color.black; // couleur par défaut du carre CarreGraphique(int cote, int x, int y) { super(cote); this.x = x; this.y = y; CarreGraphique(int cote, int x, int y, Color couleur) { this(cote, x, y); this.couleur = couleur; public void dessiner(graphics g) { if (cote < DIM_MAX) { g.setcolor(couleur); g.drawrect(x - cote/2, y - cote/2, cote, cote); cours d algo. et prog. par Y.Q. Song Informatique 1 258

259 Un exemple: EssaiTracable.java import java.awt.graphics; import java.awt.color; import java.awt.dimension; import javax.swing.jpanel; import javax.swing.jframe; class EssaiTracable extends JPanel { Tracable[] desformes = new Tracable[5]; EssaiTracable() { setpreferredsize(new Dimension(200, 200)); desformes[0] = new CercleGraphique(75, 100, 100, Color.black); desformes[1] = new CercleGraphique(10, 65, 75, Color.blue); desformes[2] = new CercleGraphique(10, 135, 75, Color.blue); desformes[3] = new CarreGraphique(10, 100, 110, Color.magenta); desformes[4] = new CarreGraphique(15, 100, 150, Color.red); //à suivre cours d algo. et prog. par Y.Q. Song Informatique 1 259

260 Un exemple: EssaiTracable.java // suite et fin protected void paintcomponent(graphics g) { super.paintcomponent(g); for (int i = 0;i < desformes.length;i++) desformes[i].dessiner(g); public static void main(string[] arg) { JFrame mondessin = new JFrame(); mondessin.setcontentpane(new EssaiTracable()) ; mondessin.pack(); mondessin.setvisible(true); cours d algo. et prog. par Y.Q. Song Informatique 1 260

261 Un exemple: EssaiTracable.java Commentaires: JPanel: la classe javax.swing.jpanel fournit un composant graphique servant à contenir d autres composants et de lieu pour effectuer des tracés. JFrame: la classe javax.swing.jframe modélise une fenêtre principale d application paintcomponent(graphics g): méthode invoquée automatiquement quand le composant apparaît et chaque fois qu il a besoin d être redessiné mondessin.setcontentpane(new EssaiTracable()): on demande que l intérieur de la fenêtre mondessin soit une instance de la classe EssaiTracable mondessin.pack(): dimensionner la fenêtre en fonction de ce qu elle contient mondessin.setvisible(true): indispensable pour que la fenêtre soit visible cours d algo. et prog. par Y.Q. Song Informatique 1 261

262 Packages, classes, unité de compilation Un «package» est un nom pour un groupe de classes relatives à un sujet (eg. Java.util.*, java.io.*) Analogues à une bibliothèque; ils organisent des ensembles de classes. De plus ils offrent un niveau supplémentaire de visibilité pour les classes, méthodes et variables qu ils contiennent. Unités de compilation Le code source d une classe Java est une unité de compilation. Une unité de compilation contient normalement une seule définition de classe. /ex la définition d une class nommée MyClass devrait apparaître dans un fichier nommé MyClass.java cours d algo. et prog. par Y.Q. Song Informatique 1 262

263 Accès aux Packages, Classes, et Class Members Le compilateur s appuie sur les noms de fichiers et compile les classes dépendantes une classe est réputée appartenir à un package particulier avec l instruction package. Celle -ci doit être la première instruction d une unité de compilation et elle s applique à tout le fichier. Un package est accessible si les fichiers et répertoires appropriés le sont (e.g., si les fichiers locaux ont les droits de lecture Ok ou s ils peuvent être téléchargés du réseau.) Toutes les classes et interfaces d un package sont accessibles à toutes les autres classes du même package. Il n est pas possible en Java de définir des classes visibles seulement depuis un seul fichier. Une classe déclarée public dans un package est accessible aux autres packages, mais une classe non déclarée public dans un package n est accessible aux autres packages. cours d algo. et prog. par Y.Q. Song Informatique 1 263

264 Membres des classes Les membres (attributs et méthodes) d une classe sont accessibles depuis une classe différente du même package, s ils ne sont pas déclarés private. Les membres private sont accessibles seulement depuis leur propre classe Un membre d une classe A est accessible depuis une classe B d un package différent, si A est public et le membre est public, ou si A est public, le membre est protected, et B est une sous-classe de A. Tous les membres d une classe sont toujours accessibles depuis cette classe. cours d algo. et prog. par Y.Q. Song Informatique 1 264

265 Directive «import» Les classes public de l environnement étant accessibles, on peut écrire: java.net.socket s = new java.net.socket(); Package java.net Objet s Classe Socket La directive «import» fournit une alternative pour préfixer le nom des classes et interfaces définies dans un package particulier avec le nom de ce package. Une directive «import» rends les définitions d un autre package utilisables par leur simple noms: import java.net ; Socket s =.. cours d algo. et prog. par Y.Q. Song Informatique 1 265

266 Directive «import» «import» permet d utiliser une classe d un autre package par un nom abrégé. Les classes publiques sont toujours visibles dans la classe courante, pourvu que les droits d accès ne l empêchent pas. import package.class ; import package.* ; Ex: dans toute classe java, une classe de io, awt, lang etc.. ( tout package visible) peut être utilisée sous la forme : java.lang.system.out.println Java.io.BufferedInputStream... avec import java.io*, java.lang.system; Toutes les classes de ces packages sont alors utilisables simplement par leur nom : Out.println ou BufferedInputStream cours d algo. et prog. par Y.Q. Song Informatique 1 266

267 Conflits de noms Si deux paquetages importés contiennent des classes avec le même nom (local), ce serait une erreur d utiliser ce nom sans passer par le nom complet Package a class nom Package b class nom Public static void Class { a.nom est correct nom seul provoque une erreur cours d algo. et prog. par Y.Q. Song Informatique 1 267

268 Les principaux packages de Java cours d algo. et prog. par Y.Q. Song Informatique 1 268

269 Visibilité de classes Par défaut, une classe est accessible seulement par les autres classes de son package. Ex : la classe TextComponent est accessible seulement par les autres classes de mytools.text package. Pour être visible ailleurs, une classe doit être déclarée public: package mytools.text; class TextComponent {... public class TextEditor {... La classe TextEditor peut alors être référencée n importe où. Il ne peut y avoir qu une seule classe public dans une unité de compilation; Le fichier contenant la classe doit avoir le même nom. Les classes public fournissent une interface claire du package en cachant les détails d implantation. cours d algo. et prog. par Y.Q. Song Informatique 1 269

270 Compilation simple Compiler une classe avec une méthode main, sans importation Source Sqsfqhgf Qsgqhsgqjhgsq qgshqgshqgsj Java compiler Sqsfqhgf Qsgqhsgqjhgsq qgshqgshqgsj Programme source Données Langage intermédiaire Résultats Machine virtuelle Java Run Interprète le code en partant de main cours d algo. et prog. par Y.Q. Song Informatique 1 270

271 Construction de programme Import a, b Source Sqsfqhgf Qsgqhsgqjhgsq qgshqgshqgsj Source Sqsfqhgf Qsgqhsgqjhgsq qgshqgshqgsj Package a Regroupe les classes accessibles Programme source Java compiler Source Sqsfqhgf Qsgqhsgqjhgsq qgshqgshqgsj Source Sqsfqhgf Qsgqhsgqjhgsq qgshqgshqgsj Package b Résultats Données Machine virtuelle Java Interprète Langage intermédiaire Run cours d algo. et prog. par Y.Q. Song Informatique 1 271

272 Compléments sur la compilation et exécution: Bien distinguer Fichier et classe public class Point { private int x, y; public Point(int x1, int y1) { // un constructeur x = x1; y = y1; public double distance(point p) { // une méthode return Math.sqrt((x-p.x)*(x-p.x) + (y-p.y)*(y-p.y)); public static void main(string[] args) { Point p1 = new Point(1, 2); Point p2 = new Point(5, 1); System.out.println("Distance : " + p1.distance(p2)); cours d algo. et prog. par Y.Q. Song Informatique 1 272

273 Deux classes dans un fichier Point.java public class Point { //une seule classe public par fichier! private int x, y; public Point(int x1, int y1) { // un constructeur x = x1; y = y1; public double distance(point p) { // une méthode return Math.sqrt((x-p.x)*(x-p.x) + (y-p.y)*(y-p.y)); class TestPoint {//n est par une classe public! public static void main(string[] args) { Point p1 = new Point(1, 2); Point p2 = new Point(5, 1); System.out.println("Distance : " + p1.distance(p2)); Nom de fichier doit correspondre à la classe public NB. Classes emboîtées autorisées mais non conseillées! cours d algo. et prog. par Y.Q. Song Informatique 1 273

274 Compilation et exécution (extrait de P. Itey) La compilation : javac Point.java fournit 2 fichiers.class : Point.class et TestPoint.class L exécution : java TestPoint sur la classe TestPoint (celle qui possède la méthode main()) cours d algo. et prog. par Y.Q. Song Informatique 1 274

275 2 classes dans 2 fichiers (extrait de P. Itey) public class Point { Fichier Point.java private int x, y; public Point(int x1, int y1) { // un constructeur x = x1; y = y1; public double distance(point p) { // une méthode int valeur; return Math.sqrt((x-p.x)*(x-p.x) + (y-p.y)*(y-p.y)); Fichier TestPoint.java public class TestPoint { public static void main(string[] args) { Point p1 = new Point(1, 2); Point p2 = new Point(5, 1); System.out.println("Distance : " + p1.distance(p2)); cours d algo. et prog. par Y.Q. Song Informatique 1 275

276 Compilation et exécution (extrait de P. Itey) La compilation : javac Point.java javac TestPoint.java OU BIEN javac TestPoint.java tout simplement car le compilateur cherchera le fichier Point.java automatiquement fournit 2 fichiers.class : Point.class et TestPoint.class L exécution : java TestPoint sur la classe TestPoint (celle qui possède la méthode main()) cours d algo. et prog. par Y.Q. Song Informatique 1 276

277 Architecture d un programme source Java (extrait de P. Itey) Programme source = ensemble de fichiers ".java " Chaque fichier ".java" contient une ou plusieurs définitions de classes (ou d interfaces) mais une seule est public par fichier ".java" avec nom du fichier = nom de la classe publique cours d algo. et prog. par Y.Q. Song Informatique 1 277

278 Séance 11: Les exceptions try catch throw try finally cours d algo. et prog. par Y.Q. Song Informatique 1 278

279 Exceptions Des erreurs d un programme La plupart des erreurs syntaxiques sont interceptées lors de la compilation Il reste souvent des erreurs «inattendues», qui se produisent de façon «exceptionnelle» pendant l exécution du programme, qui sont signalées par un message d erreur et provoquent l arrêt brutal de l exécution Dans certains cas, il serait souhaitable que le programme reprenne le contrôle afin de poursuivre son exécution mécanisme d exceptions Traitement des erreurs par un mécanisme d exceptions Surveiller les instructions susceptibles de provoquer une exception dans un bloc d essai (le bloc try) Une erreur survenue est lancée dans un bloc de traitement (le bloc catch) sous forme d un objet appelé Exception [Schéma extrait de cours d algo. et prog. par Y.Q. Song Informatique 1 279

280 Transmission d une exception En général, deux façons de traiter une exception Exécuter à nouveau l action en changeant les conditions initiales de son exécution (données ou même l algorithme) Une exception est soit traitée par l action, soit transmise à l environnement d exécution de l action (e.g. méthode qui appelle l action). Si une exception n est pas traitée au dernier niveau, arrêt de l exécution par le support d exécution (e.g. JVM) E1 Support d exécution E2 E3 E4 Exception cours d algo. et prog. par Y.Q. Song Informatique 1 280

281 Syntaxe en Java Exceptions class Nom_de_la_classe { public static void main(string[] args) { // Instructions inoffensives (affectations,...); try { // Instructions susceptibles de provoquer des erreurs; catch (TypeException e) { // Instructions de traitement de l'erreur; // Instructions si aucune erreur est apparue; Aucune instruction ne doit se trouver entre le bloc try{ et le bloc catch{ Les blocs try{ et catch{ peuvent chacun contenir plusieurs instructions Il peut y avoir plusieurs blocs catch{ correspondants aux différentes exceptions cours d algo. et prog. par Y.Q. Song Informatique 1 281

282 Un exemple d Exceptions class sans_exception { static int moyenne(string[] liste) { int somme = 0, entier, nbentiers = 0; for (int i = 0; i < liste.length; i++) { entier = Integer.parseInt(liste[i]); somme += entier; nbentiers++; return somme/nbentiers; public static void main(string[] arg) { System.out. println("la moyenne est " + moyenne(arg)); Lancer java sans_exception cours d algo. et prog. par Y.Q. Song Informatique 1 282

283 Un exemple d Exceptions En exécutant java sans_exception 14 douze On a le message d exception suivant: E:\users\cours_ensem_1A>java sans_exeption 14 douze Exception in thread "main" java.lang.numberformatexception: For input string: "douze" at java.lang.numberformatexception.forinputstring(unknown Source) at java.lang.integer.parseint(unknown Source) at java.lang.integer.parseint(unknown Source) at sans_exeption.moyenne(sans_exeption.java:5) at sans_exeption.main(sans_exeption.java:12) cours d algo. et prog. par Y.Q. Song Informatique 1 283

284 Une partie des classes de java.lang pour les exceptions Object... Throwable... Error Exception... InterruptedException RuntimeException... ArithmeticException ClassCastException... IllegalArgumentException IndexOutOfBoundsException... NumberFormatException IllegalThreadStateException... cours d algo. et prog. par Y.Q. Song Informatique 1 284

285 Exemple d attraper une exception class Attrape { static int moyenne(string[] liste) { int somme = 0, entier, nbentiers = 0; for (int i = 0; i < liste.length; i++) { try { entier = Integer.parseInt(liste[i]); somme += entier; nbentiers++; catch (NumberFormatException e) { System.out.println("La "+ (i + 1) + " eme chaine n'est pas entiere"); return somme/nbentiers; public static void main(string[] arg) { System.out. println("la moyenne est " + moyenne(arg)); cours d algo. et prog. par Y.Q. Song Informatique Lancer java Attrape

286 Exemple d attraper une exception En exécutant java Attrape 14,3 douze On a le message d exception suivant: E:\users\cours_ensem_1A>java Attrape 14,3 douze La 1 eme chaine n'est pas entiere La 2 eme chaine n'est pas entiere Exception in thread "main" java.lang.arithmeticexception: / by zero at Attrape.moyenne(Attrape.java:16) at Attrape.main(Attrape.java:20) cours d algo. et prog. par Y.Q. Song Informatique 1 286

287 Définir sa propre exception Définir sa propre exception pour traiter un événement d un type non prévu par l API (Java.lang) Il faut étendre la classe Exception ou une de ses sousclasses class ExceptionRien extends Exception { int nbchaines; ExceptionRien(int nombre) { nbchaines = nombre ; public String tostring() { return "ExceptionRien : aucune des " + nbchaines + " chaines n'est valide"; cours d algo. et prog. par Y.Q. Song Informatique 1 287

288 Lancer une exception (throw) Si on désire que l exception d une méthode soit traitée par le niveau supérieur (c.à.d. la classe ou méthode appelante) Dans la méthode, lancer une exception si la condition est vraie par l instruction «throw» Utilisation de la clause «throws» dans l en-tête de la méthode pour indiquer que cette méthode est susceptible de lancer une exception sans l attraper (sauf si l exception dérive de la classe «runtimeexception») Le niveau supérieur peut décider de la traiter (par try-catch) ou la propager encore vers le niveau supérieur (clause throws) cours d algo. et prog. par Y.Q. Song Informatique 1 288

289 Exemple de lancer une exception public class Lance { static int moyenne(string[] liste) throws ExceptionRien { int somme = 0, entier, nbentiers = 0; int i; for (i = 0; i < liste.length; i++) { try { entier = Integer.parseInt(liste[i]); somme += entier; nbentiers++; catch (NumberFormatException e) { System.out.println("La "+(i+1) + " eme chaine n'est pas entiere"); if (nbentiers == 0) throw new ExceptionRien(liste.length); return somme/nbentiers; // à suivre cours d algo. et prog. par Y.Q. Song Informatique 1 289

290 Exemple de lancer une exception //Suite et fin de classe «Lance» public static void main(string[] arg) { try { System.out.println("La moyenne est " + moyenne(arg)); catch (ExceptionRien e) { System.out.println("exception traitee dans main(): "+e); Lancer java Lance cours d algo. et prog. par Y.Q. Song Informatique 1 290

291 Exemple de lancer une exception En exécutant java Lance 14,3 douze On a le message d exception suivant: E:\users\cours_ensem_1A>java Lance 14,3 douze La 1 eme chaine n'est pas entiere La 2 eme chaine n'est pas entiere exception traitee dans main(): ExceptionRien : aucune des 2 chaines n'est valide cours d algo. et prog. par Y.Q. Song Informatique 1 291

292 Résumé: comment gérer les exceptions Les exceptions peuvent aussi être gérées «normalement» par l insertion de codes appropriés (if-else) Mais l utilisation de try-catch et throw a l avantage d être plus lisible. cours d algo. et prog. par Y.Q. Song Informatique 1 292

293 (Extrait de P. Itey) cours d algo. et prog. par Y.Q. Song Informatique 1 293

294 (Extrait de P. Itey) cours d algo. et prog. par Y.Q. Song Informatique 1 294

295 Les blocs try finally Un bloc finally{ est en général utilisé pour effectuer des nettoyages (fermer des fichiers, libérer des ressources ) Remarque: l usage des blocs finally ne se limite pas à un traitement lors de lancement d exceptions Syntaxe: try{ suivi de finally{ try{ suivi d un où plusieurs catch{ suivi d un finally{ cours d algo. et prog. par Y.Q. Song Informatique 1 295

296 Les blocs try finally Dans les deux cas, quelle que soit la façon dont on est sorti du bloc try (par break, ou continue, ou return, ou une propagation d exceptions, ou bien normalement), les instructions contenues dans le bloc finally sont exécutées Si un bloc catch situé entre le bloc try et le bloc finally attrape une exception, les instructions du bloc catch sont exécutées avant celles du bloc finally Après l exécution du bloc finally, le déroulement du programme reprend au même endroit comme si ce bloc n existait pas cours d algo. et prog. par Y.Q. Song Informatique 1 296

297 Un exemple d utilisation de finally class Except extends Exception{ public class Finally { public static void f(int n){ try {if (n = = 2) throw new Except(); catch (Except e){ System.out.println("catch dans f - n = "+n); return; finally {System.out.println("dans finally - n = "+n); System.out.println("===dans f - n = "+n+ "==="); public static void main(string [] arg) { f(1); f(2); f(3); dans finally - n = 1 ===dans f - n = 1=== catch dans f - n = 2 dans finally - n = 2 dans finally - n = 3 ===dans f - n = 3=== Lancer java Finally cours d algo. et prog. par Y.Q. Song Informatique 1 297

298 S12: Interface graphique et programmation événementielle Introduction aux interfaces graphiques de Java (GUI: Graphical User Interface) exécuter tutorat14et15.jpx AWT et Swing Apparence Interaction par événements Utilisation du VE (visual editor) dans Eclipse cours d algo. et prog. par Y.Q. Song Informatique 1 298

299 Interface Graphique du Java AWT (Abstract Window Toolkit) Java.awt.*: un package du JDK 1.0 et 1.1 qui contient un ensemble d outils de création d applications graphiques (boutons, menus, fenêtres, ) Utilise fenêtre native des plate-formes (Windows, Unix, Mac, ). Nécessite plus de mémoire, appelés composants lourds Swing Javax.swing.*, un package du JDK 1.2 et plus, contient des composants indépendants de la plate-forme, composants légers cours d algo. et prog. par Y.Q. Song Informatique 1 299

300 Principe de l interface graphique Deux aspects Apparence: comment composer une interface graphique, y placer des composants, y écrire, y dessiner, Dialogue: interaction par événements: clic de souris, choix d un item dans une liste, afficher texte donné par un programme, cours d algo. et prog. par Y.Q. Song Informatique 1 300

301 Les Fenêtres L affichage d un composant (menu, bouton, ) est toujours réalisé dans une fenêtre: Frame in AWT et JFrame in Swing Barre de titre Boutons Conteneur cours d algo. et prog. par Y.Q. Song Informatique 1 301

302 import java.awt.*; class Fenetre { public final static int HT = 300; public final static int LG = 300; public static void main(string [] arg) { Frame F = new Frame(); F.setTitle("Une fenetre!"); // met le titre F.setSize(HT, LG); F.setBackground(Color.gray); F.show(); // taille de la fenetre // affiche la fenetre cours d algo. et prog. par Y.Q. Song Informatique 1 302

303 import javax.swing.*; class FenetreSwing { public final static int HT = 300; public final static int LG = 300; public static void main(string [] arg) { JFrame F = new JFrame("Une fenêtre Swing"); F.setSize(HT, LG); // taille de la fenetre F.setVisible(true); // affiche la fenetre cours d algo. et prog. par Y.Q. Song Informatique 1 303

304 Placer un dessin Avec AWT, l affichage d un dessin se réalise par l intermédiaire d un objet de type Canvas import java.awt.*; public class Dessin extends Canvas { private Color couleur = Color.green; public final static Color couleurfond = Color.white; private Arbre A; public Dessin() { setbackground(couleurfond); setforeground(couleur); setcursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); A = new Arbre(8, Color.yellow); public void paint (Graphics g) { A.dessine(g); cours d algo. et prog. par Y.Q. Song Informatique 1 304

305 import java.awt.*; class Fenetre { public final static int HT = 300; public final static int LG = 300; public static void main(string [] arg) { Frame F = new Frame(); F.setTitle("Une fenetre! "); F.setSize(HT, LG); F.setBackground(Color.gray); F.add(new Dessin(), "Center"); F.show(); exécuter cours d algo. et prog. par Y.Q. Song Informatique 1 305

306 import java.awt.*; class Arbre { int [][] sapin ; private Color décoration; public Arbre(int nl, Color c) { int nc = 2*nl-1; décoration = c; sapin = new int[nl][nc]; int milieu = sapin[0].length/2; for ( int j = 0 ; j < nl ; j++) { for ( int i = -j; i <= j; i++) { sapin[j][milieu+i] = (int ) (5*Math.random()+1); // à suivre cours d algo. et prog. par Y.Q. Song Informatique 1 306

307 public void dessine(graphics g) { Color Vert = Color.green; for (int i = 0; i < sapin.length; i++) { for (int j = 0; j < sapin[0].length; j++) { switch(sapin[i][j]) { case 1 : new Triangle(i, j, g, décoration); break; case 2 : Vert = Vert.brighter(); new Triangle(i, j, g, Vert); break; case 3 : Vert = Vert.darker(); new Triangle(i, j, g, Vert); break; case 4 : Vert = Vert.brighter(); new Triangle(i, j, g, Vert); break; case 5 : Vert = Vert.darker(); new Triangle(i, j, g, Vert); break; case 6 : Vert = Vert.brighter(); new Triangle(i, j, g, Vert); break; //fin classe Arbre cours d algo. et prog. par Y.Q. Song Informatique 1 307

308 import java.awt.*; public class Triangle { private int px = Fenetre.LG/2-50; private int py = Fenetre.HT/2-50; private int [] xpoints = {0, 10, -10; private int [] ypoints = {-10, 10, 10; private int npoints = 3; public Triangle(int col, int lig, Graphics g, Color c) { for (int i = 0; i < npoints; i++) { xpoints[i] = xpoints[i]+(5*lig)+px; ypoints[i] = ypoints[i]+(15*col)+py; g.setcolor(c); g.fillpolygon(xpoints, ypoints, npoints); cours d algo. et prog. par Y.Q. Song Informatique 1 308

309 Les boutons import java.awt.*; class Fenetre { public final static int HT = 300; public final static int LG = 300; public static void main(string [] arg) { Frame F = new Frame(); F.setTitle("Une fenetre! "); F.setSize(HT, LG); F.setBackground(Color.gray); F.add(new Dessin(), "Center"); F.add(new Button("Nouveau")); F.add(new Button("Quitter")); F.show(); exécuter Problème: les composants se superposent! cours d algo. et prog. par Y.Q. Song Informatique 1 309

310 Les conteneurs Un conteneur permet de ranger les différents composants dans une fenêtre, sinon les composants se superposent Est une classe Panel (ou JPanel dans Swing) JFrame JContent Pane Menu Bar Jbutton JTextField cours d algo. et prog. par Y.Q. Song Informatique 1 310

311 import java.awt.*; import java.awt.event.*; public class DesBoutons extends Panel { public DesBoutons() { setbackground(color.lightgray); // Les boutons Button bnouveau = new Button ("Nouveau"); this.add(bnouveau); Button bquitter = new Button ("Quitter"); this.add(bquitter); cours d algo. et prog. par Y.Q. Song Informatique 1 311

312 import java.awt.*; class Fenetre { public final static int HT = 300; public final static int LG = 300; public static void main(string [] arg) { Frame F = new Frame(); F.setTitle("Une fenetre! "); F.setSize(HT, LG); F.setBackground(Color.gray); F.add(new Dessin(), "Center"); F.add(new DesBoutons(),"South"); F.show(); Pb: Les boutons ne sont que des composants graphiques. Ils ne sont pas encore associés aux actions cours d algo. et prog. par Y.Q. Song Informatique 1 312

313 Événements (Events), écouteurs (Listeners) et adaptateurs (adapters) La gestion des évènements est réalisée par des écouteurs (listener) attachés à un composant graphique (e.g., un bouton) Exemple: écoute d un clic de souris (i.e. un événement) sur un bouton jbutton jbutton.addactionlistener(new actionperformed()) Le traitement d un événement est réalisé par l écouteur d événement (Eventlistener) et non pas par le composant lui-même: modèle par délégation (delegation model). Par exemple: actionperformed(actionevent e){ //actions à entreprendre suite à l événement cours d algo. et prog. par Y.Q. Song Informatique 1 313

314 Exemple: associer un bouton à une action Exemple: afficher un sapin de 5 étages lors d un clic du bouton «Nouveau» import java.awt.*; import java.awt.event.*; public class DesBoutons extends Panel { public DesBoutons(Dessin d) { setbackground(color.lightgray); // Les boutons Button bnouveau = new Button ("Nouveau"); bnouveau.addactionlistener(new GestionAction(1,d)); this.add(bnouveau); Button bquitter = new Button ("Quitter"); bquitter.addactionlistener(new GestionAction(2,d)); this.add(bquitter); cours d algo. et prog. par Y.Q. Song Informatique 1 314

315 import java.awt.*; import java.awt.event.*; public class GestionAction implements ActionListener { private int n; private Dessin d; public GestionAction( int n, Dessin d) { this.n = n; this.d = d; public void actionperformed(actionevent e) { switch (n) { case 2 : System.exit(0); break; case 1 : d.nouveau(); break; cours d algo. et prog. par Y.Q. Song Informatique 1 315

316 import java.awt.*; public class Dessin extends Canvas { private Color couleur = Color.green; public final static Color couleurfond = Color.white; private Arbre A; public Dessin() { setbackground(couleurfond); setforeground(couleur); setcursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); A = new Arbre(8, Color.yellow); public void paint (Graphics g) { A.dessine(g); public void nouveau () { A = new Arbre(6, Color.red); repaint(); cours d algo. et prog. par Y.Q. Song Informatique 1 316

317 import java.awt.*; class Fenetre { public final static int HT = 300; public final static int LG = 300; public static void main(string [] arg) { Frame F = new Frame(); F.setTitle("Une fenetre! "); F.setSize(HT, LG); F.setBackground(Color.gray); Dessin page = new Dessin(); F.add(page, "Center"); F.add(new DesBoutons(page),"South"); F.show(); cours d algo. et prog. par Y.Q. Song Informatique 1 317

318 Les types d événements Chaque composant graphique émet un événement de types différents (e.g. un bouton n émet pas les mêmes types d événements qu une liste déroulante) En Java Événements de bas niveau (créés à partir de la souris, du clavier, d une fenêtre, ) du type MouseEvent, WindowEvent, Événements de haute niveau du type actionevent qui ne sont plus liés aux comportements d un composant graphique particulier, mais à ses actions possibles (e.g. un clic de souris sur un bouton ne génère plus un événement spécifique du bouton mais un comportement défini par le programmeur cours d algo. et prog. par Y.Q. Song Informatique 1 318

319 Exemples d événements de bas niveau MouseListener Ecoute les événements liés à la souris MouseMotionListener Ecoute les événements liés à la souris lorsqu elle se déplace mousepressed(mouseevent) MouseReleased(MouseEvent) mouseexited(mouseevent) mouseentered(mouseevent) mouseclicked(mouseevent) mousedragged(mouseevent) mousemoved(mouseevent) Appelé lors d une pression sur un bouton de la souris Appelé lors d un bouton de la souris est relâché Appelé lorsque la souris sort de la fenêtre Appelé lorsque la souris entre dans la fenêtre Appelé lors d un simple clic de souris Appelé lorsque la souris est déplacée, bouton enfoncé Appelé lorsque la souris est déplacée, bouton relâché cours d algo. et prog. par Y.Q. Song Informatique 1 319

320 Exemples d événements de bas niveau WindowListener Ecoute les événements liés à la fenêtre windowclosing(windowevent) windowclosed(windowevent) windowopened(windowevent) windowiconified(windowevent) windowdeiconified(windowevent) windowactived(windowevent) windowdeactived(windowevent) Appelé lorsque la fenêtre est en train de se fermer Appelé lorsque la fenêtre est fermée Appelé lors de l ouverture la fenêtre Appelé lorsque la fenêtre est mise sous forme d icône Appelé lorsque l icône est agrandie à la taille de la fenêtre Appelé lorsque la fenêtre est activée et reçoit les événements du clavier Appelé lorsque la fenêtre est désactivée et perd les événements du clavier cours d algo. et prog. par Y.Q. Song Informatique 1 320

321 Evénements de haut niveau ActionListener Ecoute les événements d action actionperformed(actionevent) Appelé lorsqu une action est émise cours d algo. et prog. par Y.Q. Song Informatique 1 321

322 Exemple d utilisation des événements de bas niveau: WindowListener import java.awt.*; import java.awt.event.*; import javax.swing.*; class ActionsFenetre1 implements WindowListener { JLabel etiquette; ActionsFenetre1 (JLabel etiquette) { this.etiquette = etiquette; public void windowclosing(windowevent e) { System.exit(0); public void windowactivated(windowevent e) { etiquette.settext("bonjour"); public void windowdeactivated(windowevent e) { etiquette.settext(""); public void windowopened(windowevent e) { public void windowiconified(windowevent e) { public void windowdeiconified(windowevent e) { public void windowclosed(windowevent e) { cours d algo. et prog. par Y.Q. Song Informatique 1 322

323 Exemple d utilisation des événements de bas niveau: WindowListener class FenetreActive1 extends JFrame { FenetreActive1() { setsize(100, 120); JLabel etiquette = new JLabel("bonjour", SwingConstants.CENTER); getcontentpane().add(etiquette, BorderLayout.CENTER); ActionsFenetre1 actions = new ActionsFenetre1(etiquette); addwindowlistener(actions); class EssaiFenetreActive1 { public static void main(string[] arg) { JFrame fenetre = new FenetreActive1(); fenetre.setdefaultcloseoperation(jframe.exit_on_close); fenetre.setlocation(100, 100); fenetre.setvisible(true); cours d algo. et prog. par Y.Q. Song Informatique 1 323

324 Exemple d utilisation des événements de bas niveau: WindowAdapter import java.awt.*; import java.awt.event.*; import javax.swing.*; class ActionsFenetre2 extends WindowAdapter { JLabel etiquette; ActionsFenetre2(JLabel etiquette) { this.etiquette = etiquette; public void windowactivated(windowevent e) { etiquette.settext("bonjour"); public void windowdeactivated(windowevent e) { etiquette.settext(""); cours d algo. et prog. par Y.Q. Song Informatique 1 324

325 Exemple d utilisation de WindowAdapter class FenetreActive2 extends JFrame{ FenetreActive2 () { setsize(100, 120); JLabel etiquette = new JLabel("bonjour", SwingConstants.CENTER); getcontentpane().add(etiquette, BorderLayout.CENTER); ActionsFenetre2 actions = new ActionsFenetre2(etiquette); addwindowlistener(actions); class EssaiFenetreActive2 { public static void main(string[] arg) { JFrame fenetre = new FenetreActive2(); fenetre.setdefaultcloseoperation(jframe.exit_on_close); fenetre.setlocation(100, 100); fenetre.setvisible(true); cours d algo. et prog. par Y.Q. Song Informatique 1 325

326 Exemple d utilisation de WindowAdapter et d une classe interne import java.awt.*; import java.awt.event.*; import javax.swing.*; class FenetreActive3 extends JFrame { FenetreActive3() { setsize(100, 120); final JLabel etiquette = new JLabel("bonjour", SwingConstants.CENTER); getcontentpane().add(etiquette, BorderLayout.CENTER); WindowAdapter adaptateur = new WindowAdapter() { public void windowactivated(windowevent e) {etiquette.settext("bonjour"); public void windowdeactivated(windowevent e) {etiquette.settext(""); ; addwindowlistener(adaptateur); class EssaiFenetreActive3 { public static void main(string[] arg) { JFrame fenetre = new FenetreActive3(); fenetre.setdefaultcloseoperation(jframe.exit_on_close); fenetre.setlocation(100, 100); fenetre.setvisible(true); cours d algo. et prog. par Y.Q. Song Informatique 1 326

327 Adaptateurs (adapters) WindowListner étant une interface, son implémentation (implements) exige l implémentation de toutes ses méthodes même si certaines ne sont pas utiles La classe WindowAdapter implémente l interface WindowListner et définit ses 7 méthodes avec pour chacune un corps vide. Une classe de gestion des événements qui étend (extends) la classe WindowAdapter hérite toutes ses méthodes. Pour un programmeur qui n utilise qu une partie de ces méthodes, il est alors plus simple de modifier les méthodes concernées par surdéfinition. Dans la pratique et en général, on préfère étendre (extends) la classe XxxAdapter à implémenter (implements) XxxListner cours d algo. et prog. par Y.Q. Song Informatique 1 327

328 Résumé des étapes pour la gestion des événements Déterminer le composant qui émet l événement et lui associer un écouteur par addxxxlistener (xxx pourrait être Window, mouse, ) Créer une classe gestionevenement qui implémente (implements) l interface xxxlistener ou étend (extends) la classe xxxadapter selon qu on souhaite traiter tout ou partie des méthodes proposées par l écouteur Développer les méthodes souhaitées pour traiter les événements cours d algo. et prog. par Y.Q. Song Informatique 1 328

329 Conception en utilisant VE d Eclipse Créer un nouveau projet Puis fichier nouveau autres Visual class On choisit Swing - JFrame car souhaite travailler en java Cochez public static void main() si on construit une application, sinon on peut tester en java beans cours d algo. et prog. par Y.Q. Song Informatique 1 329

330 Conception en VE Au début, un seul composant se trouve dans la fenêtre Frame (ou JFrame): contentpane (ou JContentPane). Une vue de propriétés s affiche, ainsi qu une de java beans (hiérarchie des composants en java beans) La disposition (ou mise en page, «layout») par défaut est borderlayout qui nous permet de disposer des composants par rapport aux bordures: north, south, east, west et center. Si on veut disposer librement des composants, il faut utiliser layout null cours d algo. et prog. par Y.Q. Song Informatique 1 330

331 cours d algo. et prog. par Y.Q. Song Informatique 1 331

332 Conception en VE Attachement d événements à un composant Choisir le composant auquel nous voulons attacher un événement (e.g. un bouton) Clic droit, puis sélectionner «Events», une liste d événements s affiche. Choisir actionperformed(), puis accéder au code java Ajouter l action qu on veux mener (e.g. afficher un texte sur le bouton) public void jbutton1_actionperformed(actionevent e) { jbutton1.settext("on m'a appuyé!"); cours d algo. et prog. par Y.Q. Song Informatique 1 332

333 cours d algo. et prog. par Y.Q. Song Informatique 1 333

334 Conception en VE Enregistrer le projet, puis l exécuter. Méthodes gettext() et settext( ) permettent d obtenir et afficher respectivement un «String» cours d algo. et prog. par Y.Q. Song Informatique 1 334

335 Pour aller plus loin Livre de I. Charon, «Le langage Java: concepts et pratique», Hermes-Lavoisier, Liens de la communauté de développeurs en java (recherchez sur google) cours d algo. et prog. par Y.Q. Song Informatique 1 335

336 Annexe1: Flux de données et utilisation de fichiers Généralités Lire ou écrire des caractères dans un fichier de type texte Lire et écrire des lignes de caractères dans un fichier de type texte Lire et écrire des objets java dans un fichier Sérialisation et désérialisation Utiliser la classe «File» cours d algo. et prog. par Y.Q. Song Informatique 1 336

337 Généralités Entrée/Sortie: échanges d'informations entre un programme et une source externe : fichier, disque, réseau, mémoire, autre programme, E/S basée sur la notion de flux de données («Stream»): une suite d octets Le paquetage java.io est en trait avec les E/S Classes abstraites pour flux d octets: java.io.inputstream java.io.outputstream Classes abstraites pour flux de caractères: java.io.reader java.io.writer cours d algo. et prog. par Y.Q. Song Informatique 1 337

338 Généralités: Flux de données Moniteur Flux sortant Mémoire vive Flux entrant Clavier Flux sortant Mémoire vive des fichiers Flux entrant Disque cours d algo. et prog. par Y.Q. Song Informatique 1 338

339 Généralités Un flux (stream) est un chemin de communication entre la source d'une information et sa destination Un processus consommateur n'a pas besoin de connaître la source de son information; un processus producteur n'a pas besoin de connaître la destination Une interprétation de haut niveau peut s'ajouter indépendamment des mécanismes de transmission des octets Java propose : et :. des flux d'entrées (création, utilisation, détection de fin). des flux de sorties. des classes d'e/s de caractères (readers, filtered readers, writers) Toutes les méthodes peuvent générer une IOException cours d algo. et prog. par Y.Q. Song Informatique 1 339

340 Généralités Les fichiers sont stockés sur une mémoire secondaire (disque dur, CD, DVD, Clé USB, ) Le système de stockage stocke les fichiers dans des répertoires selon une arborescence Chemin («path»): Sous Windows: x:\repertoire1\repertoire2\ Sous Unix/Linux: /repertoire1/repertoire2/ Le chemin du fichier en lecture ou écriture doit être indiqué dans le programme Chemin relatif par rapport au répertoire à partir duquel le programme est lancé (et non pas par rapport à l emplacement du fichier.class) cours d algo. et prog. par Y.Q. Song Informatique 1 340

341 Généralités: la classe File La classe java.io.file public class File extends Object implements Serializable, Comparable Représentation abstraite d un fichier et son chemin (répertoires), indépendamment du système (unix, windows, ) Voir aide en-ligne du Java pour plus de détails Lancer Jbuilder cours d algo. et prog. par Y.Q. Song Informatique 1 341

342 Fichier texte: Lire et écrire des caractères La classe FileReader/FileWriter permet de lire/écrire des caractères dans un fichier de texte Un exemple: import java.io.*; import utilensemjava.*; class LireEcrireTexte { public static void main(string[] arg) throws IOException { String fichierlecture = Lecture.lireChaine("Saisir le nom du fichier: "); FileReader entree = new FileReader(fichierLecture); FileWriter sortie = new FileWriter("copie" + fichierlecture); int c; sortie.write("copie de " + fichierlecture + '\n'); while((c = entree.read())!= -1) sortie.write(c); entree.close(); sortie.close(); Lancer LireEcrireTexte cours d algo. et prog. par Y.Q. Song Informatique 1 342

343 Fichier texte: Lire et écrire des caractères Commentaires sur l exemple Sortie.write ("copie de " + fichierlecture + '\n') : cette méthode, héritée de la classe Writer, permet d écrire un chaîne de caractères (c = entree.read())!= -1) : cette méthode read retourne un seul caractère sous forme d un int et retourne 1 si la fin du flux est atteinte sortie.write(c): cette méthode héritée de la classe OutputStreamWriter, permet d écrire un caractère dans le flux concerné; ce caractère est considéré comme étant un int cours d algo. et prog. par Y.Q. Song Informatique 1 343

344 Lire et écrire des lignes de caractères dans un fichier de type texte BufferedReader/BufferedWriter permet de lire/écrire ligne par ligne dans un fichier texte Un exemple: une classe pour lire/écrire dans un fichier texte import java.io.*; public class Fichier { private BufferedWriter fw; private BufferedReader fr; private char mode; //à suivre cours d algo. et prog. par Y.Q. Song Informatique 1 344

345 Lire et écrire des lignes de caractères dans un fichier de type texte //suite de classe Fichier public void ouvrir(string nomdufichier, String s) throws IOException{ mode = (s.touppercase()).charat(0); File f = new File(nomDuFichier); if (mode = = 'R' mode = = 'L') fr = new BufferedReader(new FileReader(f)); else if (mode = = 'W' mode = = 'E') fw = new BufferedWriter(new FileWriter(f)); public void fermer() throws IOException { //à suivre if (mode = = 'R' mode = = 'L') fr.close(); else if (mode = = 'W' mode = = 'E') fw.close(); cours d algo. et prog. par Y.Q. Song Informatique 1 345

346 Lire et écrire des lignes de caractères dans un fichier de type texte //suite et fin public String lire() throws IOException { String chaine = fr.readline(); return chaine; public void ecrire(int tmp) throws IOException { String chaine = ""; chaine = chaine.valueof(tmp); if (chaine!= null) { fw.write(chaine,0,chaine.length()); fw.newline(); cours d algo. et prog. par Y.Q. Song Informatique 1 346

347 Lire et écrire des lignes de caractères import java.io.*; import utilensemjava.* public class GestionFichier { public static void main (String [] arg) throws IOException { Fichier f = new Fichier(); String nomfichier = Lecture.lireChaine("nom du fichier: "); f.ouvrir(nomfichier, "Ecriture"); for (int i = 0; i < 5; i++) f.ecrire(i); f.fermer(); f.ouvrir(nomfichier,"lecture"); String chaine =""; do { chaine = f.lire(); if (chaine!= null) System.out.println(chaine); while (chaine!= null); f.fermer(); cours d algo. et prog. par Y.Q. Song Informatique 1 347

348 Lire et écrire des objets dans un fichier Un objet est sérialisé afin de pouvoir être transporté sur un flux de fichier, entrant ou sortant. Grâce à cette technique de «sérialisation», un objet peut être stocké dans un fichier (écriture) ou reconstruit à l identique en mémoire vive par lecture du fichier Les mécanismes de sérialisation-désérialisation sont fournis par l intermédiaire des classes ObjectOutputStream et ObjectInputStream, grâce aux méthodes writeobject() (sérialisation) et readobject() (désérialisation) Pour un objet défini par le programmeur, il faut autoriser la sérialisation: Public class Exemple implements Serializable { cours d algo. et prog. par Y.Q. Song Informatique 1 348

349 Lire et écrire des objets dans un fichier Reprenons l exemple de la gestion des étudiants (stockés dans un «vector») public class Etudiant implements Serializable { //voir la classe «Etudiant» déjà présentée public class Classe implements Serializable { //voir la classe «Classe» déjà présentée cours d algo. et prog. par Y.Q. Song Informatique 1 349

350 public class Etudiant implements Serializable{ // Les données caractéristiques private String nom, prénom; private double [] notes, moyenne; // Les comportements public Etudiant() { nom = Lecture.LireChaine("Entrer le nom de l'etudiant : "); prénom = Lecture.LireChaine("Entrer le prénom : "); int nombre = Lecture.LireEntier("Combien de notes pour l'etudiant "); notes = new double [nombre]; for (int i = 0; i < notes.length; i ++) { System.out.print("Entrer la note n "+ (i+1)+ " : "); notes[i] = Lecture.FlottantDouble("ici"); moyenne = calculmoyenne(); // à suivre à la page suivante Protégées par private Constructeur de la classe «Etudiant» permettant d initier les données par saisie et de calculer la moyenne cours d algo. et prog. par Y.Q. Song Informatique 1 350

351 // suite et fin public void afficheunetudiant() { System.out.print(" Les notes de "+prénom+" "+nom+ " sont : "); for (int i = 0; i < notes.length; i ++) System.out.print(" "+notes[i]); System.out.println(); System.out.println("Sa moyenne vaut "+ moyenne); private double calculmoyenne() { double somme = 0.0; for(int i = 0; i < notes.length; i++) somme = somme + notes[i]; return somme/notes.length; public double quellemoyenne() { return moyenne; Comme calculmoyenne() est privée pour la sécurité de cette donnée, la méthode quellemoyenne() permet sa consulation depuis une autre classe cours d algo. et prog. par Y.Q. Song Informatique 1 351

352 import java.util.*; Pour trouver la classe Vector public class Classe implements Serializable{ private Vector liste; public Classe() { liste = new Vector(); public void ajouteunetudiant() { liste.addelement(new Etudiant()); public void affichelesetudiants() { int nbetudiants = liste.size(); if (nbetudiants > 0) { Etudiant tmp; for (int i = 0; i < nbetudiants; i ++) { tmp = (Etudiant)liste.elementAt(i); cast tmp.afficheunetudiant(); else System.out.println("Il n'y a pas d'etudiant dans cette liste"); cours d algo. et prog. par Y.Q. Song Informatique 1 352

353 import java.io.*; public class FichierEtudiant { private ObjectOutputStream fwo; private ObjectInputStream fro; private char mode; private String nomdufichier = "Classe.dat"; public void ouvrir(string s) throws IOException { mode = (s.touppercase()).charat(0); if (mode = = 'R' mode = = 'L') else fro = new ObjectInputStream(new FileInputStream(nomDuFichier)); if (mode = = 'W' mode = = 'E') fwo = new ObjectOutputStream(new FileOutputStream(nomDuFichier)); public void fermer() throws IOException { if (mode = = 'R' mode = = 'L') fro.close(); else if (mode = = 'W' mode = = 'E') fwo.close(); public Classe lire() throws IOException, ClassNotFoundException { Classe tmp = (Classe) fro.readobject(); return tmp; public void ecrire(classe tmp) throws IOException { if (tmp!= null) fwo.writeobject(tmp); cours d algo. et prog. par Y.Q. Song Informatique 1 353

354 Lire et écrire des objets dans un fichier import java.io.*; import utilensemjava.*; public class GestionClasse { public static void main (String [] argument) throws IOException, ClassNotFoundException { int choix = 0 ; Classe C = new Classe(); FichierEtudiant F = new FichierEtudiant(); F.ouvrir("Lecture"); C = F.lire(); F.fermer(); String prénom, nom; //à suivre cours d algo. et prog. par Y.Q. Song Informatique 1 354

355 do { choix = menuprincipal(); switch (choix) { case 1 : C.ajouteUnEtudiant(); break; case 2 : prénom = Lecture.lireChaine("Entrer le prenom de l'étudiant a supprimer "); nom = Lecture.lireChaine("Entrer le nom de l'étudiant a supprimer "); C.supprimeUnEtudiant(prénom, nom); break; case 3 : C.afficheLesEtudiants(); break; case 4 : prénom = Lecture.lireChaine("Entrer le prenom de l'étudiant recherche "); nom = Lecture.lireChaine("Entrer le nom de l'étudiant recherche "); C.rechercheUnEtudiant(prénom, nom); break; case 5 : //option 5, le programme termine son exécution System.out.println("Sauvegarde des données dans Classe.dat"); F.ouvrir("Ecriture"); F.ecrire(C); F.fermer(); sortir(); break; default : System.out.println("Cette option n'existe pas "); cours d algo. et prog. par Y.Q. Song Informatique while (choix!= 5);

356 // suite et fin public static int menuprincipal() { int tmp; System.out.println("1. Ajoute un etudiant"); System.out.println("2. Supprime un etudiant"); System.out.println("3. Affiche la classe"); System.out.println("4. Affiche un etudiant"); System.out.println("5. Sortir"); System.out.println(); tmp = Lecture.lireEntier("Votre choix : "); return tmp; public static void sortir( ) { System.out.println("Au revoir et à bientôt"); System.exit(0) ; cours d algo. et prog. par Y.Q. Song Informatique 1 356

357 StreamTokenizer Le problème est de traiter une «String» afin d analyser une expression (e.g. 2+3=?): séparation en mots, juger si un mot est un nombre ou un caractère, The StreamTokenizer class takes an input stream and parses it into "tokens", allowing the tokens to be read one at a time. The stream tokenizer can recognize identifiers, numbers, quoted strings, and various comment styles. StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))); st.nexttoken() st.ttype st.nval = System.in clavier Enfin, penser à lever les exceptions : throws Exception cours d algo. et prog. par Y.Q. Song Informatique 1 357

358 Annexe2: Java et Internet D après le livres d Anne Tasso et d Irène Charon cours d algo. et prog. par Y.Q. Song Informatique 1 358

359 Plan Internet et le modèle client-serveur Le protocole HTTP Une application côté client: l applet HTML Construire une applet avec Jbuilder Une application côté serveur: la servlet cours d algo. et prog. par Y.Q. Song Informatique 1 359

360 Java et Internet Les applications développées jusqu à présent sont des programmes exécutés directement sur le système d exploitation de la macine, par l interpréteur java: applications autonomes Java offre aussi la possibilité de créer des applications exécutables par l intermédiaire d un navigateur web (netscape, IE, ): applet sur l ordinateur de l internaute, servlet sur l ordinateur qui héberge le site web sur lequel est connecté l utilisateur cours d algo. et prog. par Y.Q. Song Informatique 1 360

361 Internet et le modèle client-serveur Pour visiter un site Internet, on utilise une application cliente et une application serveur En tapant l URL on émet une requête au serveur, via le navigateur Le serveur traite la requête et répond en affichant le site demandé sur l écran de l ordinateur client Requête Réponse cours d algo. et prog. par Y.Q. Song Informatique 1 361

362 Internet et le modèle client-serveur Un serveur est un programme en exécution permanente, prêt à répondre à une requête d une application cliente Une interaction client-serveur est toujours déclenchée par le client Plusieurs applications serveur peuvent exister sur une même machine (e.g. Serveur de , de web, telnet, ). Afin de distinguer ces applications, on utilise la notion de port (e.g. 80 pour web, 25 pour , 23 pour Telnet, ) cours d algo. et prog. par Y.Q. Song Informatique 1 362

363 Le protocole HTTP Une communication s établie entre un poste client et un poste serveur, en suivant un certain nombre de règles que l on appelle «protocoles de communication» (e.g. protocoles IP, TCP, HTTP, ) HTTP (HyperText Transfer Protocol) définit les règles de communication entre un client (navigateur) et un serveur web. cours d algo. et prog. par Y.Q. Song Informatique 1 363

364 Le protocole HTTP Fonctionnement du protocole HTTP 1: Réception et interprétation des données par navigateur 2: connexion établie sur le port 80 3: envoi de la requête (GET/POST) 5: Connexion fermée Recherche des éléments à afficher 4 cours d algo. et prog. par Y.Q. Song Informatique 1 364

365 Applet Applet: Application et Internet Applet est chargée dans la mémoire de l ordinateur client via Internet Applet est exécutée dans un navigateur web Une applet est insérée dans une page HTML pour être lue et exécutée Pour la question de sécurité, une applet ne peut pas: * écrire des informations sur le disque dur de l'utilisateur, * lire des informations à partir du disque dur sans la permission de l'utilisateur, * effacer des fichiers, * lire ou écrire des informations dans la mémoire (tous les accès mémoire sont strictement contrôlés), * établir une connexion réseau vers une machine autre que celle à partir de laquelle elle a été chargée, * faire des appels à l'api native, * introduire un virus ou un cheval de Troie dans le système, * faire planter le système. cours d algo. et prog. par Y.Q. Song Informatique 1 365

366 Applet Voici trois définitions d'une applet: * un petit programme, * un programme sécurisé qui s'exécute dans un browser, * une sous-classe de java.applet.applet. La classe Applet fournit une interface standard entre les applets et leur environnement.» La classe Applet hérite de la classe Panel selon la hiérarchie suivante: java.lang.object +----java.awt.component +----java.awt.container +----java.awt.panel +----java.applet.applet cours d algo. et prog. par Y.Q. Song Informatique 1 366

367 HTML (HyperText Markup Language) <html> <head> <title> Page de test HTML </title> </head> <body> applets.appletessai1 apparaîtra ci-dessous dans un navigateur Java.<br> <applet codebase = "." code = "applets.appletessai1.class" name = "AppletTest" width = "400" height = "300" hspace = "0" vspace = "0" align = "middle" > </applet> </body> </html> cours d algo. et prog. par Y.Q. Song prog. objet avancée 367

368 Le tag (ou balise) APPLET <APPLET> et </APPLET>. Le tag <APPLET> référence un fichier source qui ne fait pas partie de la page HTML dont il est issu. Une applet fait référence à ce fichier grâce à l'attribut CODE qui signale au browser l'endroit où il faut chercher la classe compilée. Le chemin est relatif au document HTML source. Si la classe ne se trouve pas au même endroit que le document source, vous pouvez indiquer le répertoire dans lequel se trouve l'applet grâce à l'attribut CODEBASE qui est un URL pointant sur le répertoire concerné. Par exemple, si vous avez créé un répertoire classes pour toutes vos classes Java, vous indiquerez: <applet code="appletessai1.class" CODEBASE="classes" width=400 height=300> </applet> Width et height sont les dimensions ( en pixels) souhaitées pour le rectangle qui représentera l Applet dans la page HTML affichée En résumé, le programme permettant de visualiser l'applet essaiera de retrouver l'applet en utilisant l'url donné par la formule suivante: codebase + "/" + code. cours d algo. et prog. par Y.Q. Song Informatique 1 368

369 Le tag Applet name Cet attribut facultatif est le nom de l'applet. hspace/vspace Ces attributs facultatifs déterminent l'ajout d'espace horizontal (marges de gauche et de droite) et l'ajout d'espace vertical (marges en haut et en bas) autour de l'applet, en pixels. align Cet attribut facultatif détermine l'alignement de l'applet sur la page HTML. Important : Les valeurs de codebase, code, archive et name doivent être entre guillemets et distinguent les majuscules des minuscules. cours d algo. et prog. par Y.Q. Song Informatique 1 369

370 Construire une applet Une applet diffère d une application autonome: Méthode init() à la place de main() La classe où se situe init() hérite de la classe Applet Le support d affichage des composants graphiques n est plus une Frame. Le navigateur se charge d affichage des composants. SetTitle() est également inutile; le titre de la fenêtre est géré par la page HTML et s affiche dans la barre de titre du navigateur cours d algo. et prog. par Y.Q. Song Informatique 1 370

371 import java.awt.*; import java.awt.event.*; import java.applet.*; import javax.swing.jbutton; public class AppletEssai1 extends Applet { boolean isstandalone = false; BorderLayout borderlayout1 = new BorderLayout(); JButton jbutton1 = new JButton(); // Obtenir une valeur de paramètre public String getparameter(string key, String def) { return isstandalone? System.getProperty(key, def) : (getparameter(key)!= null? getparameter(key) : def); // Construire l'applet public AppletEssai1() { cours d algo. et prog. par Y.Q. Song prog. objet avancée 371

372 // Initialiser l'applet public void init() { try { jbinit(); catch (Exception e) { e.printstacktrace(); // Initialiser le composant private void jbinit() throws Exception { this.setlayout(null); jbutton1.setbounds(new Rectangle(84, 75, 205, 53)); jbutton1.settext("appuyer ici"); jbutton1.addactionlistener(new AppletEssai1_jButton1_actionAdapter(this)); this.add(jbutton1); cours d algo. et prog. par Y.Q. Song Informatique 1 372

373 // Obtenir les informations d'applet public String getappletinfo() {return "Information d'applet"; // Obtenir les informations de paramètre public String[][] getparameterinfo() { return null; public void jbutton1_actionperformed(actionevent e) { jbutton1.settext("on m'a appuyé!"); class AppletEssai1_jButton1_actionAdapter implements ActionListener { private AppletEssai1 adaptee; AppletEssai1_jButton1_actionAdapter(AppletEssai1 adaptee) { this.adaptee = adaptee; public void actionperformed(actionevent e) { adaptee.jbutton1_actionperformed(e); cours d algo. et prog. par Y.Q. Song prog. objet avancée 373

374 Construire une applet Le résultat est : cours d algo. et prog. par Y.Q. Song Informatique 1 374

375 Applet En JBuilder Créer un nouveau projet Puis fichier ==> nouveau ==> choisir web ++> Applet cours d algo. et prog. par Y.Q. Song prog. objet avancée 375

376 cours d algo. et prog. par Y.Q. Song prog. objet avancée 376

377 cours d algo. et prog. par Y.Q. Song prog. objet avancée 377

378 Servlet Une servlet (Serveur et Applet) est un programme qui utilise la syntaxe java. Elle s exécute sur un serveur (Apache, Tomcat, ). Par rapport à une applet, une servlet permet d utiliser les resources du serveur pour l exécution, puis envoyer le résultat au client. Servlet est indispensable pour développer des sites dynamiques Pour simplifier son écriture, des outils existent: JSP, JavaBeans cours d algo. et prog. par Y.Q. Song Informatique 1 378

379 Un premier exemple On appelle le programme CalculPerimetre.class pour calculer le périmètre d un cercle sur le serveur Appel d une servlet est saisi dans la barre d adresse du navigateur client cours d algo. et prog. par Y.Q. Song Informatique 1 379

380 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class CalculPerimetre extends HttpServlet { public void doget( HttpServletRequest req, HttpServletResponse rep) throws IOException, ServletException { rep.setcontenttype("text/html"); PrintWriter pw = rep.getwriter(); pw.println("<html>"); pw.println("<head>"); pw.println("<title> Une toute première servlet </title>"); pw.println("</head>"); pw.println("<body bgcolor='white'>"); if (req.getparameter("rayon") == null) { pw.print("<font size=+1> "); pw.println("j'ai besoin de connaitre la valeur du rayon!</font>"); else { int tmp=integer.parseint(req.getparameter("rayon")); Cercle C = new Cercle(0, 0, tmp); double p = C.périmètre(); pw.println("le cercle de rayon "+tmp+" a pour périmètre "+ p); pw.println("</body>"); pw.println("</html>"); cours d algo. et prog. par Y.Q. Song prog. objet avancée 380

381 Annexe3: Threads D après le livres d Irène Charon cours d algo. et prog. par Y.Q. Song Informatique 1 381

382 Plan Notion de threads Création de threads en java Par extension de la classe Thread Par concrétisation de l interface Runnable Synchronisation cours d algo. et prog. par Y.Q. Song Informatique 1 382

383 Notion de Threads cours d algo. et prog. par Y.Q. Song Informatique 1 383

384 Exemples d applications multi-threads Copie de fichiers : un seul processus, mais Un thread pour la copie de fichier Un thread pour afficher la barre de progression Navigateur web : Un ou plusieurs threads pour le transfert des pages Un thread pour la barre de progression Un thread pour gérer l interface : menus JVM a plusieurs threads (demons): Un ramasse-miettes (garbage collector) Un thread pour gérer les événements clavier et souris cours d algo. et prog. par Y.Q. Song Informatique 1 384

385 Notion de Threads en java En java, il est possible de concevoir un programme où plusieurs tâches se déroulent «simultanément». Chaque tâche est appelée un thread (un processus léger) «Simultanément» Effectif si sur multi-processeurs Si mono-processeur, partage du processeur par priorité Principe: la méthode main est un premier thread, qui peut lancer à son tour d autres threads, et ainsi de suite Java offre aussi des mécanismes pour coordonner un ensemble de threads: s attendre, s alterner, être interrompus définitivement ou provisoirement et alors éventuellement repris, etc. cours d algo. et prog. par Y.Q. Song Informatique 1 385

386 Création de threads en java Java fournit des mécanismes pour définir et exécuter des threads : La classe Thread qui implante l interface Runnable Thread générique ne faisant rien (méthode run vide) start : pour lancer l exécution en appelant run L interface Runnable qui définit la méthode run : ce que fait le thread 2 possibilités : Sous-classer Thread si possible, sinon Implémenter l interface Runnable cours d algo. et prog. par Y.Q. Song Informatique 1 386

387 Création de threads en java Classe java.lang.thread (qui implante l interface runnable) Attributs: MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY Constructeurs: Thread(), Thread(runnable var), Méthodes: void run() void start() static Thread currentthread() int getpriority() void join() void sleep(long ms) void destroy()... cours d algo. et prog. par Y.Q. Song Informatique 1 387

388 Création de threads en java Interface java.lang.runnable doit être implémentée par toute classe dont une instance est sensée être exécutée par un thread. Runnable ne spécifie qu un prototype de méthode: run() La classe en question doit définir la méthode run() Remaque: la classe Threads définit une méthode run() qui ne fait rien cours d algo. et prog. par Y.Q. Song Informatique 1 388

389 Création de threads en java Runnable Définir run() de Thread Thread Notre thread Sous classe de Tread Définir run() de Runnable Notre thread Implémentation de Runnable Remarque : Si votre classe dérive d'une autre classe que Thread, par exemple, Applet, vous devez utiliser l'interface Runnable pour créer des threads. Car une classe ne peut hériter de plus d une classe. cours d algo. et prog. par Y.Q. Song Informatique 1 389

390 Sous classer Thread On illustre au travers d un exemple comment définir et démarrer un thread Exemple: un programme lance un thread principal, puis trois threads qui affichent chacun deux fois un même mot. Après chaque thread a affiché la première fois le mot, le programme baisse la priorité du thread au MIN_PRIORITY Pour créer des threads, on étend la classe Thread et définit la méthode run() Pour démarrer un thread, on utilise la méthode start() qui lancer un nouveau thread à qui elle confie la tâche d effectuer la méthode run() de l instance concernée. La méthode start() se termine sans attendre la fin de run(). cours d algo. et prog. par Y.Q. Song Informatique 1 390

391 class Repetiteur extends Thread { String chaine; Repetiteur(String chaine) { this.chaine = chaine; public void run() { for (int i = 0; i<2; i++){ System.out.println(chaine); setpriority(thread.min_priority); cours d algo. et prog. par Y.Q. Song Informatique 1 391

392 class Ecrivain { public static void main(string[] arg) { System.out.println("priorite actuelle de main: " + Thread.currentThread().getPriority()); System.out.println("priorite minimum : " + Thread.MIN_PRIORITY); System.out.println("priorite normale : " + Thread.NORM_PRIORITY); System.out.println("priorite maximum : " + Thread.MAX_PRIORITY); Repetiteur r1 = new Repetiteur("soleil"); r1.start(); Repetiteur r2 = new Repetiteur("mer"); r2.start(); Repetiteur r3 = new Repetiteur("plage"); r3.start(); System.out.println("Nombre de threads: " + Thread.activeCount()); System.out.println("En vacances"); cours d algo. et prog. par Y.Q. Song Informatique 1 392

393 priorite actuelle de main: 5 priorite minimum : 1 priorite normale : 5 priorite maximum : 10 Nombre de threads : 4 En vacances soleil mer plage plage mer soleil cours d algo. et prog. par Y.Q. Song Informatique 1 393

394 Implémenter l interface Runnable La classe Thread possède un constructeur qui prend en paramètre une instance de l interface java.lang.runnable; L interface Runnable déclare la méthode run() Supposons qu un objet r soit de type Runnable Si Thread thread = new Thread(r); Alors on peut le démarrer par: thread.start(); Le thread créé appelle la méthode run() de la classe Thread qui appelle alors la méthode run() de r cours d algo. et prog. par Y.Q. Song Informatique 1 394

395 class RepetiteurR implements Runnable { String chaine; RepetiteurR(String chaine) { this.chaine = chaine; public void run() { for (int i = 0; i<2; i++){ System.out.print(chaine); Thread.currentThread().setPriority(Thread.MIN_PRIORITY); class EcrivainR { public static void main(string[] arg) { Runnable repetiteur = new RepetiteurR("soleil"); Thread thread = new Thread(repetiteur); thread.start(); new Thread(new RepetiteurR("mer")).start(); new Thread(new RepetiteurR("plage")).start(); System.out.println("En vacances"); En vacances soleil mer plage plage mer soleil cours d algo. et prog. par Y.Q. Song prog. objet avancée 395

396 Synchroniser les threads: join() On reprend la classe Ecrivan, mais on veut que l instruction: System.out.println("En vacances"); ne s effectue qu après que les trois threads lancés par le thread principal sont achevés. Soit r1 est de type Thread: r1.joint(); La méthode join() de la classe Thread permet une mise en attente du thread en cours d exécution jusqu à ce que le thread r1 soit terminé, signalée par une exception du type InterruptedExecution. Le thread r1 bloque le thread en cours d exécution et la fin de r1 débloquera ce thread. cours d algo. et prog. par Y.Q. Song Informatique 1 396

397 class EcrivainJ { public static void main(string[] arg) { Repetiteur r1,r2,r3; soleil mer plage plage mer soleil En vacances r1 = new Repetiteur("soleil"); r2 = new Repetiteur("mer"); r3 = new Repetiteur("plage"); r1.start(); r2.start(); r3.start(); try { r1.join(); r2.join(); r3.join(); catch(interruptedexception exc) { System.out.println("En vacances"); cours d algo. et prog. par Y.Q. Song Informatique 1 397

398 Synchroniser les threads: utilisation de verrous Synchronisation pour Conserver la cohérence sur des données Coordination des actions des différents threads Tout objet ou tableau est muni d un verrou qui peut être ouvert ou fermé Un thread peut fermer le verrou d un objet, et il est alors le seul à pouvoir rouvrir le verrou Deux ou plusieurs threads peuvent se synchroniser sur une méthode, on déclare alors une méthode synchronisée Synchronized methode() { Pour synchroniser un bloc d instructions sur un objet obj, on procède par: Synchronized (obj) { cours d algo. et prog. par Y.Q. Song Informatique 1 398

399 Un exemple de défaut de synchronisation Une classe Compte qui contient un attribut capital initialisé à 0 et une méthode credite permettant d ajouter une somme au capital Une classe Banquier qui définit un thread et une méthode run. Il contient une instance de Compte. Lors que run est lancée, le banquier ajoute 1 au capital du compte Une méthode main (dans la classe Banque) qui fait travailler deux banquiers sur un même compte: on pourrait s attendre à ce le le capital passe de 0 à 2. cours d algo. et prog. par Y.Q. Song Informatique 1 399

400 class Compte { private int capital = 0; void credite(banquier banquier) { int montant; System.out.println(banquier.nom + " commence son travail"); montant = capital; Thread.yield(); System.out.println(banquier.nom + " continue son travail"); capital = montant + 1; int getcapital() { return capital; class Banquier extends Thread { Compte compte; String nom; Banquier(Compte compte, String nom) { this.compte = compte; this.nom = nom; public void run() { System.out.println(nom + " est embauche"); compte.credite(this); cours d algo. et prog. par Y.Q. Song prog. objet avancée 400

401 class Banque { public static void main(string[] arg) { Compte compte = new Compte(); Banquier Jean, Jacques; (Jean = new Banquier(compte, "Jean")).start(); (Jacques = new Banquier(compte, "Jacques")).start(); try { Jean.join(); Jacques.join(); catch(interruptedexception e){ System.out.println("Votre capital est de " + compte.getcapital()); Jean est embauche Jean commence son travail Jacques est embauche Jacques commence son travail Jean continue son travail Jacques continue son travail Votre capital est de 1 cours d algo. et prog. par Y.Q. Song prog. objet avancée 401

402 Un exemple de défaut de synchronisation lebanquier.yield(): la méthode yield de la classe Thread conduit lebanquier à faire une pause en laissant un autre thread s exécuter (si même priorité) Le capital est 1 au lieu de 2. Il y a un défaut de synchronisation Un banquier a regardé le montant du capital (alors nul), puis laisse s exécuter l autre L autre banquier constant que capital=0 Le 1er banquier fait capital=capital+1 = 1 Le 2èmer banquier fait capital=capital+1 = 1 cours d algo. et prog. par Y.Q. Song Informatique 1 402

403 Un exemple d utilisation de verrous On reprend le même exemple de banquiers Pour éviter les opérations mal synchronisées de plusieurs banquiers sur un même compte, on définit la méthode credite comme une méthode synchronisée Le 1er banquier verrouille le compte, entame la méthode credite, laisse son tour au 2 nd banquier par yield Le 2ème banquier, après avoir écrit son annonce d embauche, tente d exécuter la méthode credite mais se heurte au verrou; il se met en attente du déverrouillage du compte Le 1er banquier termine son travail, puis déverrouille le compte; le 2ème fait alors son travail. cours d algo. et prog. par Y.Q. Song Informatique 1 403

404 class CompteSynchro { private int capital = 0; synchronized void credite(banquierbis banquier) { int montant; System.out.println(banquier.nom + " commence son travail"); montant = capital; Thread.yield(); System.out.println(banquier.nom + " continue son travail"); capital = montant + 1; class BanquierBis extends Thread { CompteSynchro compte; String nom; BanquierBis(CompteSynchro compte, String nom) { this.compte = compte; this.nom = nom; public void run() { System.out.println(nom + " est embauche"); compte.credite(this); cours d algo. et prog. par Y.Q. Song Informatique 1 404

405 class BanqueBis { public static void main(string[] arg) { CompteSynchro compte = new CompteSynchro(); BanquierBis Jean, Jacques; (Jean = new BanquierBis(compte, "Jean")).start(); (Jacques = new BanquierBis(compte, "Jacques")).start(); try { Jean.join(); Jacques.join(); catch(interruptedexception e){ System.out.println("Votre capital est de " + compte.getcapital()); Jean est embauche Jean commence son travail Jacques est embauche Jean continue son travail Jacques commence son travail Jacques continue son travail cours d algo. et prog. par Y.Q. Song Votre prog. objet capital avancée est de 2 405

406 Un exemple d utilisation de verrous On pourrait aussi utiliser un verrou sur un objet (par exemple, si la méthode credite ne peut pas être modifiée) class BanquierTer extends Banquier { BanquierTer(Compte compte, String nom) { super(compte, nom); public void run() { System.out.println(nom + " est embauche"); synchronized(compte) { compte.credite(this); cours d algo. et prog. par Y.Q. Song Informatique 1 406

407 Un exemple d utilisation de verrous class BanqueTer { public static void main(string[] arg) { Compte compte = new Compte(); BanquierTer Jean, Jacques; (Jean = new BanquierTer(compte, "Jean")).start(); (Jacques = new BanquierTer(compte, "Jacques")).start(); try { Jean.join(); Jacques.join(); catch(interruptedexception e){ System.out.println("Votre capital est de " + compte.getcapital()); cours d algo. et prog. par Y.Q. Song Informatique 1 407

408 Synchronisation avec wait et notify Les méthodes wait, notify et notifyall de la classe Object servent à coordonner des threads. wait (wait(), wait(long maxmilli) et wait (long maxmilli, int maxnano) met en attente le trhead en cours d exécution notify et notifyall servent à interrompre cette attente La méthode wait doit être invoquée à l intérieur d une méthode ou d un bloc d instructions synchronisé sur l objet concerné cours d algo. et prog. par Y.Q. Song Informatique 1 408

409 Un exemple: suspendre, reprendre et stopper un thread cours d algo. et prog. par Y.Q. Song Informatique 1 409

410 import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; class ThreadDisque extends Thread { public ThreadDisque() { try {jbinit(); catch (Exception ex) {ex.printstacktrace(); int r = 10; int debut; JComponent ardoise; boolean suspendu; boolean fini; ThreadDisque(JComponent ardoise) { debut = (int)system.currenttimemillis(); this.ardoise = ardoise; cours d algo. et prog. par Y.Q. Song prog. objet avancée 410

411 synchronized void suspendre() { suspendu = true; synchronized void reprendre() { suspendu = false; notify(); synchronized void stopper() { fini = true; notify(); cours d algo. et prog. par Y.Q. Song Informatique 1 411

412 public void run() { Graphics g = ardoise.getgraphics(); int increment = 5 + (5 << 8) + (5 << 16); suspendu = false; fini = false ; int l = ardoise.getwidth(); int h = ardoise.getheight(); ardoise.repaint(); for (int i = 0; i < 60; i++) { try { sleep(200); synchronized(this) {while (suspendu &&!fini) wait(); catch(interruptedexception exc) { if (fini) break; g.setcolor(new Color(debut + increment*i)); g.drawoval(l/2 - r, h/2 - r, 2*r, 2*r); r += 1; g.dispose(); cours d algo. et prog. par Y.Q. Song prog. objet avancée 412

413 private void jbinit() throws Exception { class Disque extends JFrame implements ActionListener { ThreadDisque thread; JButton tracer = new JButton("tracer"); JButton suspendre = new JButton("suspendre"); JButton stopper = new JButton("stopper"); JPanel ardoise = new JPanel(); Disque() { JPanel boutons = new JPanel(); boutons.add(tracer); boutons.add(suspendre); boutons.add(stopper); getcontentpane().add(boutons, BorderLayout.NORTH); ardoise.setpreferredsize(new Dimension(150, 150)); ardoise.setbackground(color.white); getcontentpane().add(ardoise, BorderLayout.CENTER); tracer.addactionlistener(this); suspendre.addactionlistener(this); stopper.addactionlistener(this); pack(); cours d algo. et prog. par Y.Q. Song prog. objet avancée 413

414 public void actionperformed(actionevent evt) { Object source = evt.getsource(); if (source == tracer) { if ((thread == null) (!thread.isalive())) { thread = new ThreadDisque(ardoise); thread.start(); else thread.reprendre(); else if ((source == suspendre) && (thread!= null)) thread.suspendre(); else if (source == stopper) { if (thread!= null) thread.stopper(); thread = null; public static void main(string[] arg) { JFrame fenetre = new Disque(); fenetre.setdefaultcloseoperation(jframe.exit_on_close); fenetre.setlocation(100, 100);; fenetre.setvisible(true); cours d algo. et prog. par Y.Q. Song prog. objet avancée 414

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique

Plus en détail

Eléments de syntaxe du langage Java

Eléments de syntaxe du langage Java c jan. 2014, v3.0 Java Eléments de syntaxe du langage Java Sébastien Jean Le but de ce document est de présenter es éléments de syntaxe du langage Java : les types primitifs, les opérateurs arithmétiques

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf Introduction à Java Matthieu Herrb CNRS-LAAS http://homepages.laas.fr/matthieu/cours/java/java.pdf Mars 2014 Plan 1 Concepts 2 Éléments du langage 3 Classes et objets 4 Packages 2/28 Histoire et motivations

Plus en détail

Java. Java. Le livrede. Avec 80 exercices corrigés. Avec 80 exercices corrigés. Le livre. Anne Tasso. 5 e édition. Un best-seller qui a déjà conquis

Java. Java. Le livrede. Avec 80 exercices corrigés. Avec 80 exercices corrigés. Le livre. Anne Tasso. 5 e édition. Un best-seller qui a déjà conquis Anne Tasso Un best-seller qui a déjà conquis des milliers d'étudiants! Java Le livre Java Le livrede de premier premier langage langage Avec 80 exercices corrigés Avec 80 exercices corrigés 5 e édition

Plus en détail

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2 Anne Tasso Java Le livre de premier langage 10 e édition Avec 109 exercices corrigés Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2 Table des matières Avant-propos Organisation de l ouvrage..............................

Plus en détail

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Structure d un programme et Compilation Notions de classe et d objet Syntaxe Cours1 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction sur les types

Plus en détail

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7 Université Lumière Lyon 2 Faculté de Sciences Economiques et Gestion KHARKIV National University of Economic Introduction au Langage Java Master Informatique 1 ère année Julien Velcin http://mediamining.univ-lyon2.fr/velcin

Plus en détail

QUELQUES CONCEPTS INTRODUCTIFS

QUELQUES CONCEPTS INTRODUCTIFS ESIEE Unité d'informatique IN101 Albin Morelle (et Denis Bureau) QUELQUES CONCEPTS INTRODUCTIFS 1- ARCHITECTURE ET FONCTIONNEMENT D UN ORDINATEUR Processeur Mémoire centrale Clavier Unité d échange BUS

Plus en détail

L informatique en BCPST

L informatique en BCPST L informatique en BCPST Présentation générale Sylvain Pelletier Septembre 2014 Sylvain Pelletier L informatique en BCPST Septembre 2014 1 / 20 Informatique, algorithmique, programmation Utiliser la rapidité

Plus en détail

Programmation C. Apprendre à développer des programmes simples dans le langage C

Programmation C. Apprendre à développer des programmes simples dans le langage C Programmation C Apprendre à développer des programmes simples dans le langage C Notes de cours sont disponibles sur http://astro.u-strasbg.fr/scyon/stusm (attention les majuscules sont importantes) Modalités

Plus en détail

S. Laporte C# mode console DAIGL TS1

S. Laporte C# mode console DAIGL TS1 Bases du langage C# I. C# en mode console (mode texte) Avantages par rapport au mode graphique (Application Windows): - C'est un mode plus proche de l'approche algorithmique (pas de notions de composants,

Plus en détail

Introduction à l algorithmique et à la programmation 2013-2014. Cyril Nicaud Cyril.Nicaud@univ-mlv.fr. Cours 1 / 5

Introduction à l algorithmique et à la programmation 2013-2014. Cyril Nicaud Cyril.Nicaud@univ-mlv.fr. Cours 1 / 5 Introduction à l algorithmique et à la programmation IUT 1ère année 2013-2014 Cyril Nicaud Cyril.Nicaud@univ-mlv.fr Cours 1 / 5 Déroulement du cours Organisation : 5 séances de 2h de cours 10 séances de

Plus en détail

Objectif du cours. Bases de la programmation. Plan de cette partie

Objectif du cours. Bases de la programmation. Plan de cette partie Objectif du cours Bases de la programmation Université de Nice - Sophia Antipolis Richard Grin Version 1.2.5 24/9/11 http://deptinfo.unice.fr/~grin Introduction à la programmation orientée objet pour pouvoir

Plus en détail

Java Licence Professionnelle CISII, 2009-2010

Java Licence Professionnelle CISII, 2009-2010 Licence Professionnelle CISII, 2009-2010 Cours 1 : Introduction à Java A. Belaïd abelaid@loria.fr Cours disponible sur le site : http://www.loria.fr/~abelaid puis Teaching 1 Fonctionnement 12 séances :

Plus en détail

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application Université de Provence Licence Math-Info Première Année V. Phan Luong Algorithmique et Programmation en Python Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application 1 Ordinateur Un

Plus en détail

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr)

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Programmer en JAVA par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes

Plus en détail

Cours1 +Cours 2. Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1

Cours1 +Cours 2. Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Cours1 +Cours 2 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction

Plus en détail

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Structure d un programme et Compilation Notions de classe et d objet Syntaxe Cours1 +Cours 2 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction

Plus en détail

Cours 6 : Principes de la représentation des nombres en

Cours 6 : Principes de la représentation des nombres en Cours 6 : Principes de la représentation des nombres en mémoire 2013/2014 Introduction Représentation des données en mémoire naturels signés Nous décrivons les principes de la représentation des nombres

Plus en détail

Tableaux (introduction) et types de base

Tableaux (introduction) et types de base Tableaux (introduction) et types de base A. Motivation..................................................... 4 B. Les tableaux.................................................... 5 C. Construction des tableaux.......................................

Plus en détail

PRESENTATION DE JAVA. Qu est-ce que java? Les caractéristiques du langage java Les outils Les API Références. Software Associates International

PRESENTATION DE JAVA. Qu est-ce que java? Les caractéristiques du langage java Les outils Les API Références. Software Associates International PRESENTATION DE JAVA Qu est-ce que java? Les caractéristiques du langage java Les outils Les API Références 1 Qu est-ce que java? Un langage de programmation orienté objets Une architecture de Virtual

Plus en détail

Chap. III : Le système d exploitation

Chap. III : Le système d exploitation UMR 7030 - Université Paris 13 - Institut Galilée Cours Architecture et Système Le système d exploitation (ou O.S. de l anglais Operating System ) d un ordinateur est le programme qui permet d accéder

Plus en détail

Programmation Orientée Objet avec JAVA

Programmation Orientée Objet avec JAVA Programmation Orientée Objet avec JAVA Présenté par Abdoul Aziz Ciss Docteur en Cryptologie, Consultant ITSec Dept GIT EPT Email: aaciss@ept.sn Web : www.alekciss.com Tel: 77 451 92 95 Plan 1. Introduction

Plus en détail

Introduction à l informatique en BCPST

Introduction à l informatique en BCPST Introduction à l informatique en BCPST Alexandre Benoit BCPST L informatique en BCPST «L enseignement de l informatique en classes préparatoires de la filière BCPST a pour objectif d introduire puis de

Plus en détail

PROB Introduction au langage JAVA

PROB Introduction au langage JAVA PROB Introduction au langage JAVA EPFC ULB 1 BACHELIER en INFORMATIQUE de Gestion PRMT(1) 120p. LAPR(2) 120p. PR(1) PROB(10) 120p. PR(1) PRDV(4) 40p. PR(2 ou 9) COFI(20) 60p. GBDR(5) 120p. LAOG(9) 120p.

Plus en détail

C.P.G.E - Meknès Langage Python 3 Haouati Abdelali

C.P.G.E - Meknès Langage Python 3 Haouati Abdelali 3. Langage Python 3 2 a. Introduction Présentation du langage Python : Python est un langage portable, dynamique, extensible, gratuit, qui permet (sans l imposer) une approche modulaire et orientée objet

Plus en détail

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java Langages objets Introduction M2 Pro CCI, Informatique Emmanuel Waller, LRI, Orsay présentation du module logistique 12 blocs de 4h + 1 bloc 2h = 50h 1h15 cours, 45mn exercices table, 2h TD machine page

Plus en détail

CCI - Initiation à Java. E.Coquery emmanuel.coquery@liris.cnrs.fr

CCI - Initiation à Java. E.Coquery emmanuel.coquery@liris.cnrs.fr CCI - Initiation à Java E.Coquery emmanuel.coquery@liris.cnrs.fr Présentation du langage Outline 1 Présentation du langage 2 Types de données primitifs 3 Objets Présentation du langage Un langage orienté

Plus en détail

Cours 1. Contenu du cours : " Premières applications. " Compilation, Exécution, Chemin. " Affichage et saisie. " Types de données. " Flux de contrôle

Cours 1. Contenu du cours :  Premières applications.  Compilation, Exécution, Chemin.  Affichage et saisie.  Types de données.  Flux de contrôle Cours 1 1 Contenu du cours : " Premières applications " Compilation, Exécution, Chemin " Affichage et saisie " Types de données " Flux de contrôle " Applets " Arrays " OO de base Edition Le fichier texte

Plus en détail

Chapitre I Notions de base et outils de travail

Chapitre I Notions de base et outils de travail Chapitre I Notions de base et outils de travail Objectifs Connaître les principes fondateurs et l historique du langage Java S informer des principales caractéristiques du langage Java Connaître l environnement

Plus en détail

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique Institut Supérieure Aux Etudes Technologiques De Nabeul Département Informatique Support de Programmation Java Préparé par Mlle Imene Sghaier 2006-2007 Chapitre 1 Introduction au langage de programmation

Plus en détail

Licence Sciences et Technologies Examen janvier 2010

Licence Sciences et Technologies Examen janvier 2010 Université de Provence Introduction à l Informatique Licence Sciences et Technologies Examen janvier 2010 Année 2009-10 Aucun document n est autorisé Les exercices peuvent être traités dans le désordre.

Plus en détail

Introduction au Java Development Kit Et quelques instructions en Java. 1 Création des répertoires d accueil des programmes Java

Introduction au Java Development Kit Et quelques instructions en Java. 1 Création des répertoires d accueil des programmes Java HLIN406 - Janvier 2015 Le Java Development Kit offre un ensemble d outils de développement d applications Java. Pour utiliser ces outils, JDK ne propose pas d interface utilisateur, on doit donc écrire

Plus en détail

Introduction à UNIX et Windows

Introduction à UNIX et Windows 1/39 à UNIX et Windows Thierry Hamon Bureau H202 - Institut Galilée Tél. : 33 1.48.38.35.53 Bureau 150 LIM&BIO EA 3969 Université Paris 13 - UFR Léonard de Vinci 74, rue Marcel Cachin, F-93017 Bobigny

Plus en détail

III - PROGRAMMATION EN ASSEMBLEUR

III - PROGRAMMATION EN ASSEMBLEUR III - PROGRAMMATION EN ASSEMBLEUR 3.1 Introduction à la programmation en assembleur Pour programmer un ordinateur on utilise généralement des langages dits évolués ou de haut niveau : C, C++, Java, Basic,

Plus en détail

as Architecture des Systèmes d Information

as Architecture des Systèmes d Information Plan Plan Programmation - Introduction - Nicolas Malandain March 14, 2005 Introduction à Java 1 Introduction Présentation Caractéristiques Le langage Java 2 Types et Variables Types simples Types complexes

Plus en détail

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C IN 102 - Cours 1 Qu on le veuille ou non, les systèmes informatisés sont désormais omniprésents. Même si ne vous destinez pas à l informatique, vous avez de très grandes chances d y être confrontés en

Plus en détail

Algorithmique Partie 1

Algorithmique Partie 1 Algorithmique Partie 1 IUT Informatique de Lens, 1ère Année Université d Artois Frédéric Koriche koriche@cril.fr 2011 - Semestre 1 Modalités Sommaire 1 Modalités 2 Programmation 3 Données 4 Opérateurs

Plus en détail

Généralités Composants élémentaires d'un programme Instructions simples. JL Damoiseaux - Dpt R&T

Généralités Composants élémentaires d'un programme Instructions simples. JL Damoiseaux - Dpt R&T JAVA - I Généralités Composants élémentaires d'un programme Instructions simples 2 JAVA? Un langage de programmation (orienté objets) Une architecture basée sur une Machine Virtuelle Un ensemble très important

Plus en détail

Cours Informatique 1. Monsieur SADOUNI Salheddine

Cours Informatique 1. Monsieur SADOUNI Salheddine Cours Informatique 1 Chapitre 2 les Systèmes Informatique Monsieur SADOUNI Salheddine Un Système Informatique lesystème Informatique est composé de deux parties : -le Matériel : constitué de l unité centrale

Plus en détail

De l ordinateur au processus : rôle d un système

De l ordinateur au processus : rôle d un système De l ordinateur au processus : rôle d un système Introduction aux systèmes d exploitation Gaël Thomas Présentation du cours Contexte du cours : Introduire notre objet d étude : les systèmes d exploitation

Plus en détail

Introduction au langage C

Introduction au langage C Introduction au langage C Cours 1: Opérations de base et premier programme Alexis Lechervy Alexis Lechervy (UNICAEN) Introduction au langage C 1 / 23 Les premiers pas Sommaire 1 Les premiers pas 2 Les

Plus en détail

Université Mohammed Premier Année universitaire 2011-2012. Correction de l examen écrit de la session ordinaire 18 Février 2012

Université Mohammed Premier Année universitaire 2011-2012. Correction de l examen écrit de la session ordinaire 18 Février 2012 Université Mohammed Premier Année universitaire 2011-2012 Faculté des Sciences Filière SMI Département de Mathématiques Module : POO Java et d Informatique Semestre : S5 Correction de l examen écrit de

Plus en détail

Le langage C. Séance n 4

Le langage C. Séance n 4 Université Paris-Sud 11 Institut de Formation des Ingénieurs Remise à niveau INFORMATIQUE Année 2007-2008 Travaux pratiques d informatique Le langage C Séance n 4 But : Vous devez maîtriser à la fin de

Plus en détail

Éléments de programmation et introduction à Java

Éléments de programmation et introduction à Java Éléments de programmation et introduction à Java Jean-Baptiste Vioix (jean-baptiste.vioix@iut-dijon.u-bourgogne.fr) IUT de Dijon-Auxerre - LE2I http://jb.vioix.free.fr 1-20 Les différents langages informatiques

Plus en détail

Annexe : La Programmation Informatique

Annexe : La Programmation Informatique GLOSSAIRE Table des matières La Programmation...2 Les langages de programmation...2 Java...2 La programmation orientée objet...2 Classe et Objet...3 API et Bibliothèque Logicielle...3 Environnement de

Plus en détail

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Cours d introduction à l informatique Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Qu est-ce qu un Une recette de cuisine algorithme? Protocole expérimental

Plus en détail

Mise à niveau en Java

Mise à niveau en Java Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 1 Aujourd hui Eléments de base Variables, opérateurs, type d une expression

Plus en détail

Epidémiologie, l urne de Pólya, partie II

Epidémiologie, l urne de Pólya, partie II Epidémiologie, l urne de Pólya, partie II Se mettre par groupe de deux. Traiter la fiche dans l ordre. Un compte de rendu de TP devra être rendu avec les réponses écrites aux questions, les recherches

Plus en détail

JAVA Première approche

JAVA Première approche Année 2008-2009 JAVA Première approche Nicolas Baudru mél : nicolas.baudru@esil.univmed.fr page web : nicolas.baudru.perso.esil.univmed.fr 1 Qu'est ce que Java? C'est le nom d'une technologie mise au point

Plus en détail

Évaluation et implémentation des langages

Évaluation et implémentation des langages Évaluation et implémentation des langages Les langages de programmation et le processus de programmation Critères de conception et d évaluation des langages de programmation Les fondations de l implémentation

Plus en détail

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr . Cours intensif Java 1er cours: de C à Java Septembre 2009 Enrica DUCHI LIAFA, Paris 7 Enrica.Duchi@liafa.jussieu.fr LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le

Plus en détail

Informatique. Programmation en Python.

Informatique. Programmation en Python. BCPST 1 B 13 septembre 2015 Informatique. Programmation en Python. Ce document est un support de cours, il vous permet d avoir sa structure et ses éléments les plus importants. Au cours des séances en

Plus en détail

Introduction à l informatique, à Python, et représentation des nombres en machine

Introduction à l informatique, à Python, et représentation des nombres en machine Introduction à l informatique, à Python, et représentation des nombres en machine Table des matières Qu est-ce-que l informatique? Qu est-ce-qu un ordinateur? 2 Principaux composants...............................................

Plus en détail

Programmation Java. Madalina Croitoru

Programmation Java. Madalina Croitoru Programmation Java Madalina Croitoru Madalina Croitoru 2002 2006 Univ. Aberdeen 2006 2008 Univ. Southampton Depuis 2008 Univ. Montpellier II Contact: Page web: www.lirmm.fr/~croitoru/teaching.html Email:

Plus en détail

Logiciel de Base. I. Représentation des nombres

Logiciel de Base. I. Représentation des nombres Logiciel de Base (A1-06/07) Léon Mugwaneza ESIL/Dépt. Informatique (bureau A118) mugwaneza@univmed.fr I. Représentation des nombres Codage et représentation de l'information Information externe formats

Plus en détail

Windows 2008 server -Introduction-

Windows 2008 server -Introduction- Windows 2008 server -Introduction- Rappel sur les systèmes d exploitation Un système d exploitation (Operating System) est un ensemble de programmes responsables de la liaison entre les ressources matérielles

Plus en détail

Avant de programmer en Java DOS Set Path=C:\JDK\bin Path=C:\JDK\bin C:\JDK\bin Set Path=%Path%;C:\JDK\bin C:\JDK\bin C:\JDK\

Avant de programmer en Java DOS Set Path=C:\JDK\bin Path=C:\JDK\bin C:\JDK\bin Set Path=%Path%;C:\JDK\bin C:\JDK\bin C:\JDK\ Exercices corrigés de programmation OO Java Préparés par : Mlle Imene Sghaier Année Académique : 2006-2007 Premiers Pas I. Avant de programmer en Java Le JDK de Sun (Java Development Kit) est l outil essentiel

Plus en détail

Types et langages de programmation. Algorithmique et Programmation Unisciel/K.Zampieri

Types et langages de programmation. Algorithmique et Programmation Unisciel/K.Zampieri Types et langages de programmation Algorithmique et Programmation Unisciel/K.Zampieri 1 Généalogie partielle des langages de programmation FORTRAN BASIC PL/1 PROLOG ALGOL60 COBOL C PASCAL ADA MODULA-2

Plus en détail

} 7 Variables (composantes)

} 7 Variables (composantes) Chapitre 4 Tableaux Jusqu ici, nous avons employé les variables pour stocker les valeurs individuelles de types primitifs : une variable de type int pour stocker un entier, une variable de type boolean

Plus en détail

Cours architectures des ordinateurs

Cours architectures des ordinateurs Université KASDI MERBAH Ouargla Faculté des Nouvelles Technologies de l Information et de la Communication Département d Informatique et Technologie de l information Cours architectures des ordinateurs

Plus en détail

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux. UEO11 COURS/TD 1 Contenu du semestre Cours et TDs sont intégrés L objectif de ce cours équivalent a 6h de cours, 10h de TD et 8h de TP est le suivant : - initiation à l algorithmique - notions de bases

Plus en détail

Introduction au langage C - types et variables

Introduction au langage C - types et variables Chapitre 2 Introduction au langage C - types et variables 1 Le Langage C Le langage C est un langage de bas niveau dans le sens où il permet l accès à des données que manipulent les ordinateurs (bits,

Plus en détail

Introduction à l Informatique

Introduction à l Informatique Introduction à l Informatique. Généralités : Etymologiquement, le mot informatique veut dire «traitement d information». Ceci signifie que l ordinateur n est capable de fonctionner que s il y a apport

Plus en détail

Introduction à JAVA. Philippe Roose (IUT Bayonne) Olivier Dedieu (INRIA)

Introduction à JAVA. Philippe Roose (IUT Bayonne) Olivier Dedieu (INRIA) Introduction à JAVA Philippe Roose (IUT Bayonne) Olivier Dedieu (INRIA) Mais JAVA c est quoi? Langage OO Exécuté dans une Machine Virtuelle Possède un ensemble complet d API (réseau, graphique, sécurité,

Plus en détail

Introduction à la Programmation Objet : Premiers pas en programmation

Introduction à la Programmation Objet : Premiers pas en programmation Introduction à la Programmation Objet : Premiers pas en programmation Laboratoire d Intelligence Artificielle Faculté I&C IPO Cours 2 : Premiers pas en programmation 1 / 67 Objectifs du cours d aujourd

Plus en détail

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/2012. 1 - Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/2012. 1 - Vue générale 2 - Mon premier programme 3 - Types de Programme Java 1 - Vue générale 2 - Mon premier programme 3 - Types de Programme 1 2 c est quoi? Technologie développée par SUN Microsystems lancée en 1995 Dans un des premiers papiers* sur le langage JAVA, SUN le décrit

Plus en détail

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par

Plus en détail

LIF1 : ALGORITHMIQUE ET PROGRAMMATION IMPÉRATIVE, INITIATION

LIF1 : ALGORITHMIQUE ET PROGRAMMATION IMPÉRATIVE, INITIATION Licence STS Université Claude Bernard Lyon I LIF1 : ALGORITHMIQUE ET PROGRAMMATION IMPÉRATIVE, INITIATION 1 COURS 7 : Structures et Fichiers OBJECTIFS DE LA SÉANCE Deux notions abordées dans ce cours Celle

Plus en détail

IPT : Cours 2. La représentation informatique des nombres

IPT : Cours 2. La représentation informatique des nombres IPT : Cours 2 La représentation informatique des nombres (3 ou 4 heures) MPSI-Schwarz : Prytanée National Militaire Pascal Delahaye 28 septembre 2015 1 Codage en base 2 Définition 1 : Tout nombre décimal

Plus en détail

Licence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter

Plus en détail

Algorithmique et. Plan CHAPITRE 2: NOTIONS D'ALGORITHMIQUE CONCEPTS DE BASE DU LANGAGE C CHAPITRE 3: LES TABLEAUX LES POINTEURS CHAPITRE 4

Algorithmique et. Plan CHAPITRE 2: NOTIONS D'ALGORITHMIQUE CONCEPTS DE BASE DU LANGAGE C CHAPITRE 3: LES TABLEAUX LES POINTEURS CHAPITRE 4 Université Mohammed V Agdal Ecole Mohammadia d'ingénieurs Département Génie Informatique Rabat CHAPITRE 1: Plan NOTIONS D'ALGORITHMIQUE CHAPITRE 2: Algorithmique et Programmation en Langage C CONCEPTS

Plus en détail

L informatique. UEF 1 : Informatique & Programmation. Bibliographie sur le langage Java. Page Internet de secours ce cours

L informatique. UEF 1 : Informatique & Programmation. Bibliographie sur le langage Java. Page Internet de secours ce cours UEF 1 : Informatique & Programmation Faculté des Sciences de Nice DEUG 2000-2001 Bibliographie sur le langage Java «Le livre de Java premier langage» [A. Tasso, Eyrolles] «Java in a Nutshell» [D. Flanagan,

Plus en détail

Programmation en Python - Cours 2 : Premiers programmes

Programmation en Python - Cours 2 : Premiers programmes Programmation en Python - Cours 2 : Premiers programmes 2013/2014 Diverses utilisations de python Utilisation en mode interactif Ecriture d un programme python Saisie de données par l utilisateur : input(),

Plus en détail

Introduction aux exercices en Java

Introduction aux exercices en Java Introduction aux exercices en Java Avant de commencer les séries proprement dites, nous allons voir quelques informations utiles concernant le langage de programmation principal de ce cours d'informatique

Plus en détail

Informatique? Numérique? L informatique est la science du traitement de l information.

Informatique? Numérique? L informatique est la science du traitement de l information. Informatique? Numérique? L informatique est la science du traitement de l information. L information est traitée par un ordinateur sous forme numérique : ce sont des valeurs discrètes. Cela signifie que,

Plus en détail

Avant-propos. 1. Introduction

Avant-propos. 1. Introduction Avant-propos Les sections ou sous-sections marquées d un astérisque (*) ne font pas partie de la matière du cours IFT1969. Elles sont destinées à définir complètement le langage C (ANSI-C99) et à en préciser

Plus en détail

Ordinateur, système d exploitation

Ordinateur, système d exploitation Ordinateur, système d exploitation 2014-09-02 1 Système d exploitation Machine de von Neumann : seul un programme s exécute. Besoins utilisateurs : plein de programmes. Système d exploitation (Operating

Plus en détail

Familiarisation avec Eclipse / Netbeans

Familiarisation avec Eclipse / Netbeans Institut Galilée LEE Année 011-01 Master T.P. 0 Familiarisation avec Eclipse / Netbeans Lien important contenant le pdf du cours et du TP, et ensuite des sources : http://www-lipn.univ-paris13.fr/~fouquere/mpls

Plus en détail

2- Téléchargement et installation version actuelle 6.1

2- Téléchargement et installation version actuelle 6.1 1- EDI NetBeans (Environnement : Microsoft Windows Linux Ubuntu) EDI, Environnement de Développement Intégré Anglais : IDE, Integrated Development Environment Programme regroupant : Un éditeur de texte

Plus en détail

Formation Unix/Linux (6) Le Shell: programmation et écriture de scripts

Formation Unix/Linux (6) Le Shell: programmation et écriture de scripts Formation Unix/Linux (6) Le Shell: programmation et écriture de scripts Olivier BOEBION Mars 2004 1 Les expressions conditionnelles et les structures de contrôle 1.1 La commande test La commande interne

Plus en détail

Cours Visual Basic URCA

Cours Visual Basic URCA Cours Visual Basic URCA Sommaire Introduction à la programmation VBA et VB Syntaxe de base, variables Opérateurs de base, boucles Introduction à la programmation Qu est-ce que la programmation? Séquences

Plus en détail

Héritage en java : Calculatrice SDC

Héritage en java : Calculatrice SDC Programmation orientée objet L3 MIAGE Héritage en java : Calculatrice SDC Travail à rendre : le code complet du projet SDC sous forme d une archive tar.gz. L archive comportera trois répertoires : un répertoire

Plus en détail

Python langage de programmation

Python langage de programmation Initiation à la programmation avec Python langage de programmation Valérie Bellynck (2009), d après un diaporama d Alain Bozzi (2008), lui-même venant de celui de Bob Cordeau (2008) 1 Langage de Programmation

Plus en détail

Informatique UE 102. Jean-Yves Antoine. Architecture des ordinateurs et Algorithmique de base. UFR Sciences et Techniques Licence S&T 1ère année

Informatique UE 102. Jean-Yves Antoine. Architecture des ordinateurs et Algorithmique de base. UFR Sciences et Techniques Licence S&T 1ère année UFR Sciences et Techniques Licence S&T 1ère année Informatique UE 102 Architecture des ordinateurs et Algorithmique de base Jean-Yves Antoine http://www.info.univ-tours.fr/~antoine/ UFR Sciences et Techniques

Plus en détail

Support de Cours Christophe Dony Université Montpellier-II

Support de Cours Christophe Dony Université Montpellier-II Cours de base d Ingéniérie des applications objet. Généralités sur le langage Java - Modèle d exécution - Syntaxe Support de Cours Christophe Dony Université Montpellier-II 1 Le langage Java 1.1 Langage

Plus en détail

2 bits... 2^2 = 4 combinaisons 8 bits... 2^8 = 256 combinaisons

2 bits... 2^2 = 4 combinaisons 8 bits... 2^8 = 256 combinaisons Chapitre II DÉFINITION DES SYSTÈMES LOGIQUES 2.1 LES NOMBRES DANS LES SYSTÈMES LOGIQUES Les humains comptent en DÉCIMAL 2.1.1 DÉCIMAL: o Base 10 o 10 chiffres: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 o M C D U o

Plus en détail

TP 1. Prise en main du langage Python

TP 1. Prise en main du langage Python TP. Prise en main du langage Python Cette année nous travaillerons avec le langage Python version 3. ; nous utiliserons l environnement de développement IDLE. Étape 0. Dans votre espace personnel, créer

Plus en détail

Introduction à l informatique. INF0326 - Outils bureautiques, logiciels et Internet

Introduction à l informatique. INF0326 - Outils bureautiques, logiciels et Internet Introduction à l informatique INF0326 - Outils bureautiques, logiciels et Internet Informatique L'informatique est la science qui regroupe l ensemble des théories et techniques permettant de traiter de

Plus en détail

Introduction au langage Java

Introduction au langage Java Introduction au langage Java 1 / 24 1 Vue générale La technologie Java Le langage Java La machine virtuelle Java Résumé Plan 2 Hello World Prérequis Premier programme : 3 étapes Résumé 3 HelloWorld en

Plus en détail

Université Mohammed Premier Année universitaire 2011-2012. Complément d exercices avec correction

Université Mohammed Premier Année universitaire 2011-2012. Complément d exercices avec correction Université Mohammed Premier Année universitaire 2011-2012 Faculté des Sciences Filière SMI Département de Mathématiques et d Informatique Module : POO Java Semestre : S5 Complément d exercices avec correction

Plus en détail

Programmer avec Xcas : version 0.8.6 et 0.9

Programmer avec Xcas : version 0.8.6 et 0.9 Programmer avec Xcas : version 0.8.6 et 0.9 I. L environnement de travail de Xcas Xcas permet d écrire des programmes, comme n importe quel langage de programmation. C est un langage fonctionnel. L argument

Plus en détail

Cours 1 : Introduction Générale + Objet I

Cours 1 : Introduction Générale + Objet I Organisation du cours Équipe pédagogique DUT Informatique S3 - Programmation Java Jean-Claude MARTIN MARTIN@LIMSI.FR Cours 1 : Introduction Générale + Objet I Jean-Claude MARTIN (Responsable, Cours, TD

Plus en détail

Traitement de données

Traitement de données Traitement de données Présentation du module TINI Présentation du module : Le module Tini se décline en plusieurs versions, il est constitué d une carte d application et d un module processeur : Les modules

Plus en détail

Algorithmique Chapitre N o I : Introduction à Python

Algorithmique Chapitre N o I : Introduction à Python POIRET Aurélien Algorithmique MPSI Algorithmique Chapitre N o I : Introduction à Python Un algorithme est une suite nie d'opérations élémentaires constituant un schéma de calcul ou de résolution de problème.

Plus en détail

Installation des outils du CD-Rom

Installation des outils du CD-Rom Installation des outils du CD-Rom Installer le JDK Pour installer Java2 SDK, exécutez le programme d'installation en double-cliquant sur l icône j2sdk-1_4_0-win.exe située dans le répertoire Java2 du CD-Rom.

Plus en détail

Systèmes d exploitation

Systèmes d exploitation Systèmes d exploitation Un système d exploitation (SE, en anglais Operating System ou OS) est un ensemble de programmes responsables de la liaison entre les ressources matérielles d un ordinateur et les

Plus en détail

Machines composées de (depuis 1940 env.) : http://cui.unige.ch/isi/cours/std/

Machines composées de (depuis 1940 env.) : http://cui.unige.ch/isi/cours/std/ données pr ogramme 11111101 11001101 01000101 b us disque ma gnétique processeur écran Structures de données et algorithmes Ordinateurs Gilles Falquet, printemps-été 2002 Machines composées de (depuis

Plus en détail

1 Valeur d une expression

1 Valeur d une expression PCSI Informatique: Cours2 1 VALEUR D UNE EXPRESSION Expressions et variables en informatique 1 Valeur d une expression Expression : suite de caractères qui a un sens pour la machine Valeur d une expression

Plus en détail