[PDF] [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



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] Le JAVA pour les nuls - IUT de Clermont-Ferrand

[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 Java

Etienne 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 ligne

System.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 ligne

System.out.println("Bonjour

à vous les IR1!"); }

javac HelloWorld.java

Fichier 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;)V

8:return

}java HelloWorld

Compilation

(une seule fois)Interpr étation / exécution (write once, run everywhere)Linux

Java 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'accueil

Etienne 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 0

0@ class Pixel

@ class Pixel

Chaque 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; }boxb

6#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

éférencé➢Par d

éfaut, cette référence vaut une valeur particulière, null. ➢Il est interdit de tenter d'y acc éder, de la déréférencer➢Le compilateur v érifie ce qu'il peut➢On peut " forcer » pour que ça compile => lève une exceptionpublic static void main(String[] args) {

Box b;

System.out.println(b.field); // Variable b might not have been initialized public static void main(String[] args) {

Box b = null;

System.out.println(b.field); // lève NullPointerException Etienne DURIS © ESIPEMLV Université ParisEst MarnelaVallée30Allocation mquotesdbs_dbs10.pdfusesText_16