The Java Virtual Machine Specification, Second Ed: Dans un fichier de nom HelloWorld java ➢ Règle: toute classe Le code source d'une classe contenue dans un fichier est compilé min(2); // reference to min is ambiguous, both method 154 Entrées/sorties par byte InputStream OutputStream FileInputStream
Previous PDF | Next PDF |
[PDF] Apprendre Java en 154 minutes - Fichier-PDFfr
Apprendre Java en 154 minutes Tutorial Java 1 6 - HESB-TI Stéphanie Calderara José R Beuret Quentin Cosendey Mai 2008
[PDF] Les bases de la programmation orientée objet avec Java - IGM
The Java Virtual Machine Specification, Second Ed: Dans un fichier de nom HelloWorld java ➢ Règle: toute classe Le code source d'une classe contenue dans un fichier est compilé min(2); // reference to min is ambiguous, both method 154 Entrées/sorties par byte InputStream OutputStream FileInputStream
[PDF] Apprendre à programmer avec Python 3 - INFOREF
Python gère ses ressources (mémoire, descripteurs de fichiers Python intègre, comme Java ou les versions récentes de C++, un système d'exceptions, qui
[PDF] Programmer en Java - LIRMM
Java va CLAUDE DELANNOY E Y R O L L E S 5e édition Java 5 et 6 C DELA Apprendre le C++ 1 3 2 Plusieurs classes dans un même fichier source 154 Par exemple, si Point disposait des méthodes d'accès getX et getY et des
[PDF] Exercices en Java: 175 exercices corrigés - Couvre Java 8 (Noire
clavier (8 exercices) • Les applets Java (6 exercices) • Les fichiers (5 deux sens) entre nombre sexagésimaux (durée exprimée en heures, minutes, revanche, malgré l'affectation a=c, ceux de la forme a f( ) sont traités en ne 154
[PDF] PDF Python - Cours de Python - Université de Paris
22 mar 2018 · 7 6 Du respect des formats de données et de fichiers Python propose les fonctions min() et max() qui renvoient respectivement le minimum
[PDF] Cours PHP Accéléré - Univ-Orléans
6 oct 2020 · lit un fichier source php puis génère un flux de sortie avec les règles suivantes : — toute ligne Introduction comme en Java d'interfaces et de classes abstraites — emploi
[PDF] Développons en Java avec Eclipse - Laboratoire des signaux et
Il est possible de vouloir tenir compte de la casse en cochant la case "Respect maj/min" Il est aussi possible de restreindre la recherche à certains fichiers en
[PDF] GNU Image Manipulation Program Guide Utilisateur - GIMP
26 juil 2007 · En fonction du but, tous les types de fichier ne sont pas équivalents Cette partie de la documentation devrait vous aider à comprendre les
[PDF] Méthode Fahr mit - circonscription d 'Andolsheim
[PDF] Les bases appliquées de l 'allemand - Passerelles: Communication
[PDF] ebook ASTRO Cadeau - Psycho Astrologie
[PDF] Initiation ? l 'algorithmique - Enib
[PDF] Méthode d 'apprentissage des caractères chinois - Decitre
[PDF] etudier l 'anglais en irlande - cloudfrontnet
[PDF] Vocabulaire de la gestion des ressources humaines Human
[PDF] ebook ASTRO Cadeau - Psycho Astrologie
[PDF] la prise de notes et les abréviations - Etudoc
[PDF] Apprendre l Electronique en Partant de Zero - Zenk - Security
[PDF] Apprendre l Electronique en Partant de Zero - Zenk - Security
[PDF] COURS NIVEAU 3
[PDF] Apprendre l Electronique en Partant de Zero - Zenk - Security
[PDF] Apprendre l Electronique en Partant de Zero - Zenk - Security
Les bases de la
programmation orientée objet avec JavaEtienne Duris
Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée2Bibliographie et sources ➢Les cours de Rémi Foraxhttp://igm.univmlv.fr/~forax/
➢Le cours de MariePierre Béalhttp://igm.univmlv.fr/~beal/
➢Java et Internet G. Roussel, E. Duris, N. Bedon et R. Forax. Vuibert 2002. ➢Documentations Java Oracle http://docs.oracle.com/javase/ ➢The Java Language Specification, Third Edition: http://java.sun.com/docs/books/jls/ ➢The Java Virtual Machine Specification, Second Ed: http://java.sun.docs/books/jvms Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée3Il existe diff érents styles de programmation➢Style applicatif ➢Fondé sur l'évaluation d'expressions qui ne dépendent que de la valeur des arguments, et non de l'
état de la mémoire ➢On parle aussi de programmation fonctionnelle ➢Proche des notations math ématiques, utilise beaucoup la récursivité➢Accepte des arguments, produit un r ésultat (pas d'" effet de bord »)➢Ex: Lisp, Caml, ML, Haskel ➢Style impératif➢Fond
é sur l'exécution d'instructions qui modifient l'état de la mémoire➢Utilise beaucoup les it
érations et autres structures de contrôle➢Les structures de donn ées sont fondamentales➢Ex: Fortran, C, Pascal Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée4Le style objet ➢C'est un style de programmation o ù l'on considère que des composants autonomes (les objets) disposent de ressources et de moyens d'interactions entreeux. ➢Ces objets repr ésentent des données qui sont modélisées par des classes qui d éfinissent des types ➢un peu comme typedef struct en C ➢En plus de la mani ère dont sont structurés leurs objets, les classes d éfinissent les actions qu'ils peuvent prendre en charge et la mani ère dont ces actions affectent leur état➢ce sont des " messages » ou des " méthodes ».
➢Java n'est pas le seul langage objet ➢Simula, Smalltalk, C++, OCaml...Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée5Les avantages de la programmation objet
➢Les caract éristiques de bases précédemment décrites peuvent ê tre mises en oeuvre dans un style impératif, mais des fonctionnalit és propres au style objet favorisent:➢la programmation modulaire ➢l'abstraction ➢la sp écialisation➢L'objectif est de produire du code ➢facile à développer, à maintenir, à faire évoluer, ➢r éutilisable, tout ou en partie, sans avoir besoin de le dupliquer➢g énérique, et dont les spécialisations sont transparentes Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée6Programmation modulaire ➢La conception par classes, repr ésentant à la fois les données, les actions et les responsabilités des objets de cette classe,
permet de bien distinguer et séparer les concepts➢Le fait de d
éfinir des " interfaces »,
au sens " moyens et modalitésde communication avec l'ext
érieur »permet de cacher les d
étails d'impl
émentation et d'éviterles d
épendances trop fortes➢Tout
ça favorise la réutilisabilité etla composition / délégation:
l'assemblage des composants en respectant leurs responsabilit és Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée7L'abstraction et la spécialisation➢L'abstraction demande
à séparer la définition (d'un type,
d'une classe, d'une m éthode) de l'implémentation➢Permet d'identifier un mod èle commun à plusieurs composants➢Ce modèle commun pourra être partagé via le m
écanisme d'héritage➢La sp
écialisation traite
des cas particuliers, mais elle doit autant que possible rester transparente: ➢C'est possible grâce à
la dérivation? Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée8Le langage Java: ➢est n é en 1995 chez Sun Microsystems ➢Version actuelle Java 8, actuellement Oracle ➢est orienté objet➢est fortement typ
é➢Toute variable doit
être déclarée avec un type➢Le compilateur vérifie que les utilisations des variables sont compatibles avec leur type (notamment via un soustypage correct)
➢Les types sont d'une part fournis par le langage, maiségalement par la d
éfinition des classes➢est compil
é➢En bytecode, i.e., code interm
édiaire indépendant de la machine➢est interprété ➢Le bytecode est interp
été par une machine virtuelle Java
Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée9Premier exemple ➢Dans un fichier de nom HelloWorld.java ➢R ègle: toute classe publique doit être dans un fichier qui a le même nom que la classe➢R
ègle: tout code doit être à l'intérieur d'une classe➢Ç a définit une classe, qui est une unité de compilation➢Comme il y a une m éthode main, cette classe est " exécutable »public class HelloWorld { /* Un style de commentaire sur plusieurs lignes. */ public static void main(String[] args) { // Un commentaire sur une seule ligneSystem.out.println("Bonjour à vous les IR1!");
Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée10Compilation, bytecode et JVM ➢Compilation du langage source > exécution du bytecodeFichier HelloWorld.java
public class HelloWorld { /* Un style de commentaire sur plusieurs lignes. */ public static void main(String[] args) { // Un commentaire sur une seule ligneSystem.out.println("Bonjour
à vous les IR1!"); }
javac HelloWorld.javaFichier HelloWorld.class
Compiled from "HelloWorld.java"
public class HelloWorld extends java.lang.Object{ public HelloWorld(); Code:0:aload_0
1:invokespecial#1; //Method java/lang/Object."":()V
4:return
public static void main(java.lang.String[]); Code:0:getstatic#2; //Field java/lang/System.out:Ljava/io/PrintStream;
3:ldc#3; //String Bonjour
à vous les IR1! 5:invokevirtual#4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V8:return
}java HelloWorldCompilation
(une seule fois)Interpr étation / exécution (write once, run everywhere)LinuxJava Virtual MachinePileTasBonjour
à vous les IR1!Windows
Java Virtual MachinePileTasBonjour
à vous les IR1!java HelloWorld
Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée11Le bytecode ➢Le langage source Java est défini par la JLS (Java Language
Specification)
éditée par SunOracle➢Dans sa syntaxe et sa s émantique➢Le code source d'une classe contenue dans un fichier est compilé avec la commande javac
➢Cela produit un code interm édiaire, appelé bytecode, qui est le " langage machine » de la machine virtuelle Java ➢Le bytecode d'une classe est destiné à être chargé par une
machine virtuelle qui doit l'exécuter avec la comande java
➢Soit par interpr étation, soit par compilation " juste à temps » (justintime ou JIT) ➢L'argument est le nom de la classe (sans l'extension .class) Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée12La machine virtuelle (JVM) ➢Son r ôle est d'abstraire le comportement d'une machine ➢Pour le rendre le + possible ind épendant de la plateforme➢Son comportement est d éfini par la JVM Spec édité par SunOracle ➢Une JVM est une implémentation de cette spec➢Qui peut
être adaptée à une plateforme d'accueil (Windows, Linux, Mac...) ➢Qui peutêtre développée par Sun (HotSpot: open source GPL depuis 2006) ou par d'autres: IBM, Jikes, etc.
➢Une JVM traduit le bytecode dans le langage machine de la plateforme d'accueilEtienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée13Java: un langage et une plateforme
➢Dans la technologie Java, on a donc besoin ➢Du langage de programmation et du compilateur ➢Et plein de commandes bien utiles: jar, javap, javadoc, etc ➢De la JVM et des APIs (Application Programming Interfaces) regroup ées dans une " plateforme »:➢Java SE (Java Platform, Standard Edition): Java SE 6 pour applications classiques, desktop ➢Java EE (Java Platform, Enterprise Edition): Java EE 6 pour développer et déployer des applications serveur, Web services, etc.➢Java ME (Java Platform, Micro Edition): J2ME pour les applications
embarqu ées, PDA, téléphones, etc.➢Si on veut juste exécuter, il suffit du JRE (Java Runtime
Execution) par opposition au JDK (Java Developpement Kit)Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée14Java SE 7 Plateform at a Glance (http://docs.oracle.com/javase/7/docs/)
Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée15Le langage Java ➢Les variables, les op érateurs, les expressions, instructions, blocs, contr ôle de flot sont très proches de ceux du C➢Les exceptions sont une nouveaut é➢Les types primitifs ont une taille et une représentation normée➢S'y ajoutent des sp
écificités syntaxiques liées à la programmation objet, aux classes, à l'héritage...➢Un style de nommage (tr ès fortement) conseillé➢Style " chameau » (CamelCase) pour les indentificateurs ➢Premi ère majuscule pour les classes (class HelloWorld) ➢Premi ère minuscule pour les variables/champs et les fonctions/méthodes (radius, getRadius())
➢Tout en majuscule pour les constantes (MAX_SIZE) Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée16Classes et objets ➢Une classe Toto représente plusieurs choses:➢Une unit
é de compilation➢La compilation d'un programme qui contient une classe Toto produira un fichier Toto.class ➢La définition du type Toto
➢Il peut servirà déclarer des variables comme Toto t;
➢Un moule pour la création d'objets de type Toto
➢Cela n écessite en général la définition d'un ensemble de champs (fields) d écrivant l'état d'un objet de ce type et d'un ensemble de méthodes définissant son comportement ou ses focntionnalités➢Chaque objet de la classe Toto
➢Dispose de son propreétat (la valeur de ses champs)
➢R épond au même comportement (via les méthodes de la classe) Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée17Structure d'une classe ➢Une classe est d éfinie par son nom et son package d'appartenance (ex: java.lang.String) ➢En l'absence de directive, les classes sont dans un package dit " par d éfaut » (i.e., pas de packge).➢Une classe peut contenir trois sortes de membres ➢Des champs (fields) ou attributs ➢Des méthodes (methods) et constructeurs
➢Des classes internes ➢Les membres statiques (static) sont dits membres de classe ➢Ils sont définis sur la classe et non sur les objets➢Les membres non statiques (ou d'instance) ne peuvent exister
sans un objet Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée18Exemplepublic class Pixel { public final static int ORIGIN = 0; private int x; private int y; public Pixel(int x, int y) { this.x = x; this.y = y; public void reset() { x = ORIGIN; y = ORIGIN; public void printOnScreen() {System.out.println("("+x+","+y+")");
public static boolean same(Pixel p1, Pixel p2) { return (p1.x==p2.x) && (p1.y==p2.y); public static void main(String[] args) {Pixel p0 = new Pixel(0,0);
Pixel p1 = new Pixel(1,3);
p1.printOnScreen(); // (1,3)System.out.println(same(p0,p1)); // false
p1.reset();System.out.println(same(p0,p1)); // true
}Constructeur Méthodesd'instancesChampsConstante
Méthodede classe
Variables locales
la méthode main et objets de la classe Pixel Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée19Les objets sont manipulés via des r
éférences (sortes d'adresses mémoire) public void reset() { #1.x = #s; #1.y = #s; }public void reset() { x = ORIGIN; y = ORIGIN; }p1.reset();Lorsque la méthodeest appel
ée, le code de la m
éthode défini dans la classe comme
est exécuté sur la pile avec les r
éférences #1 à la place de p1 et #s
à la place de ORIGINCe qui a pour effet de
mettre p1.x et p1.yà 0y = 0Classe Pixel
constructeur méthodesmain
x = 0Pixel p1 y = 3x = 1Pixel p2#1 #2ORIGIN = 0#s 00@ class Pixel
@ class PixelChaque objet connait sa classe#1
#2 Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée20La nature des variables en Java ➢Les variables locales comme les champs des classes et des objets ne peuvent être que de deux natures➢De type " primitif » ➢Dans ce cas, la d éclaration de la variable réserve la place m émoire pour stocker sa valeur (qui dépend de son type)➢De type " objet », ou référence➢Dans ce cas, la d
éclaration de la variable ne fait que réserver la place d'une r éférence (une sorte de pointeur) qui permettra d'acc éder à l'endroit en mémoire où est effectivement stocké l'objet en luim ême (vaut null si référence inconnue)Pixel p1; y = 3x = 1#1int entier;long entierLong; @ class Pixel p1=new Pixel(1,3);#1 référenceobjet
Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée21Les types primitifs ➢Types entiers sign és (représentation en complément à 2)➢byte (octet) sur 8 bits: [128 .. 127] ➢short sur 16 bits [32768 .. 32767] ➢int sur 32 bits [2147483648 .. 2147483647] (d éfaut pour entiers)➢long sur 64 bits [9223372036854775808 .. 9223372036854775807] ➢Type caract ère non signé (unités de code UTF16)➢char sur 16 bits ['\u0000' .. '\uffff'] ➢Types à virgule flottante (représentation IEEE 754)➢float sur 32 bits ➢double sur 64 bits (défaut pour flottants)➢Type bool
éen: boolean (true ou false)
Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée22Promotion enti ère et flottants spéciaux➢Pour la plupart des op érations, les valeurs entières sont transform és en des " int » (promotion entière):➢short s = 4; s = s+s; // Type mismatch: cannot convert int to short s = (short) (s+s); // cast nécessaire➢Les d
ébordements ou cas d'erreurs sont prévus pour les flottants (Infinity et NotaNumber): ➢double d = 1e308;System.out.println(d*10); // affiche: Infinity
➢d = 0.0/0.0;System.out.println(d); // affiche: NaN
Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée23Attention aux nombres à virgule flottante➢Ils ne sont que des approximation des valeurs ➢Leur égalité au sens de l'opérateur == n'a aucun sens ➢Il faut tester leur " proximit é » modulo un epsilon donnédouble d = 0.0; int nb = 0; double expected = 1.0; while (d != 1.0 /* && nb < 10 */) { // boucle infinie!!! d += 0.1; nb++;System.out.println("nb: " + nb + " d: " + d);
// Si on décommente, affiche nb: 10 d: 0.9999999999999999 static final double EPSILON = 0.00001; double d = 0.0; double expected = 1.0; while ( Math.abs(expected - d) > EPSILON ) d += 0.1;System.out.println(d); // 0.9999999999999999
Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée24Tous les autres types sont " objets » et
sont manipul és via des références➢soit des types d éfinis dans les APIs➢java.lang.Object, java.lang.String,java.util.Scanner, etc. ➢String chaine = "toto"; ➢Diff érent du C!➢En plus, les String sont constantes ➢soit des types " cach és » ➢Tableau de types primitifs ou d'autres types " objets » ➢int[] tab = {3, 5, 7, 9}; ➢String[] args; ➢Pixel[] array = new Pixel[2]; ➢soit des types d éfinis par l'utilisateur➢Pixel p = new Pixel(0,0);to#2#1@class String#1 to\n#2 length = 4#1@class int[] #1 3 5 7 9... length = 2#2@class Pixel[] #2 null nullnull Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée25Types Java et passage de paramètre➢Lors des appels de m
éthode, les arguments sont toujours
pass és par valeur➢Dans le cas des types primitifs, c'est la valeur de l'argument qui est recopi ée dans le paramètre de la méthode➢Les modifications sur le param ètre de la méthode sont sans effet sur l'argument ➢Dans le cas des types " objet », c'est la valeur de la variable, (la r éférence à l'objet) qui est transmise à la méthode➢Les modifications effectuées en suivant cette référence (e.g.
modification d'un champ de l'objet) sont répercutés dans la m
émoire et sont donc visibles sur l'argument
➢En revanche, la modification de la r éférence ellemême est sans effet sur l'argument (c'en est une copie) Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée26Passage de param ètre: type primitifpublic static void m1(int i) { i++; public static void main(String[] args) { int entier = 5; m1(entier);System.out.println(entier); // 5
}5entier5i6➢Dans le cas des types primitifs, c'est la valeur de l'argument qui est recopi ée dans le paramètre de la méthode➢Les modifications sur le param ètre de la méthode sont sans effet sur l'argument Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée27Passage de param ètre: type référencepublic static void m2(Box b) { b.field++; public static void main(String[] args) {Box box = new Box();
box.field = 5; m2(box);System.out.println(box.field); // 6
}class Box { int field; }boxb6#1@class Box
#1field = 5#1➢Dans le cas des types " objet », c'est la valeur de la variable, (la r éférence à l'objet) qui est transmise à la méthode➢Les modifications effectuées en suivant cette référence (e.g.
modification d'un champ de l'objet) sont répercutés dans la m
émoire et sont donc visibles sur l'argument
Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée28Passage de param ètre: type référencepublic static void m3(Box b) {Box tmp = new Box();
tmp.field = b.field+1; b = tmp; public static void main(String[] args) {Box box = new Box();
box.field = 5; m3(box);System.out.println(box.field); // 5
}class Box { int field; }boxb#1@class Box #1field = 5#1 ➢Dans le cas des types " objet », c'est la valeur de la variable, (la référence à l'objet) qui est transmise à la méthode➢En revanche, la modification de la r
éférence ellemême est sans effet sur l'argument (c'en est une copie) #2@class Box field = 6tmp#2 #2 Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée29Type référence et valeur null➢Lorsqu'on d
éclare une variable de type objet, seule la place de la référence est réservée sur la pile d'exécution (registre)➢4 octets, 32 bits, et ce quelque soit le type de l'objet r