JAVA TD0. Prise en main du langage Environnement de base JAVA 1



Documents pareils
Cours 1: Java et les objets

Programmation par les Objets en Java

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

TP1. Outils Java Eléments de correction

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

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

TP1 : Initiation à Java et Eclipse

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Premiers Pas en Programmation Objet : les Classes et les Objets

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Initiation à JAVA et à la programmation objet.

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Java c est quoi? Java pourquoi?

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Chapitre 2. Classes et objets

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Généralités sur le Langage Java et éléments syntaxiques.

Héritage presque multiple en Java (1/2)

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

TP, première séquence d exercices.

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

Java Licence Professionnelle CISII,

Tp 1 correction. Structures de données (IF2)

TP1 : Initiation à Java et Eclipse

Programmer en JAVA. par Tama

Une introduction à Java

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

JAVA. Introduction à la programmation objet avec java 1/4. Nadir BOUSSOUKAIA

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

as Architecture des Systèmes d Information

RMI le langage Java XII-1 JMF

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Package Java.util Classe générique

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

PROGRAMMATION PAR OBJETS

Programmation en Java IUT GEII (MC-II1) 1

Corrigé des exercices sur les références

ACTIVITÉ DE PROGRAMMATION

Plan du cours. Historique du langage Nouveautés de Java 7

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Langage Java. Classe de première SI

TD/TP PAC - Programmation n 3

INITIATION AU LANGAGE JAVA

La JVM. La machine virtuelle Java. La JVM. La JVM

Java Licence professionnelle CISII,

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

Corrigés des premiers exercices sur les classes

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

TD3: tableaux avancées, première classe et chaînes

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

Traduction des Langages : Le Compilateur Micro Java

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Utilisation d objets : String et ArrayList

I. Introduction aux fonctions : les fonctions standards

Java 1.5 : principales nouveautés

Utiliser Java sans BlueJ

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Java Licence Professionnelle CISII,

Programmation Objet Java Correction

Remote Method Invocation (RMI)

Objets et Programmation. origine des langages orientés-objet

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

TD/TP PAC - Programmation n 3

1 Définition d une classe en Java

Apprendre Java en 154 minutes

Remote Method Invocation Les classes implémentant Serializable

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN :

Programmation Orientée Objet

Programmation Objet I

Programmation Orientée Objet

Traitement de données

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

Support de cours et TD Programmation Orientée Objet

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Diagramme de classes

Programmation Orientée Objet application au langage Java Version Novembre 2007

Bases Java - Eclipse / Netbeans

Chapitre VI- La validation de la composition.


Chapitre 10. Les interfaces Comparable et Comparator 1

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Auto-évaluation Programmation en Java

Eclipse atelier Java

Gestion distribuée (par sockets) de banque en Java

Java DataBaseConnectivity

Algorithmique et Programmation, IMA

Environnements de développement (intégrés)

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Exercices sur les interfaces

TP 1. Prise en main du langage Python

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Chapitre I Notions de base et outils de travail

Cours d initiation à la programmation en C++ Johann Cuenin

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Transcription:

JAVA TD0 Prise en main du langage Environnement de base JAVA 1

Mon premier programme public class HelloWorld { public static void main(string [] arg){ System.out.println("Hello, World!"); main(string [] arg) HelloWorld HelloWorld.java Compilateur javac HelloWorld.java HelloWorld HelloWorld.class Machine Virtuelle java HelloWorld JAVA 2

L'environnement de travail 3 fenêtres Un éditeur de texte pour écrire les sources java un shell pour compiler un shell pour exécuter les 3 fenêtres positionnées dans le même répertoire (on fera mieux dans les séances suivantes) 1 répertoire par projet /exo 1 fichier source par classe nom fichier = NomClasse.java par conséquent, 1 fichier compilé par classe Exo 1-1 : faire HelloWorld, compiler (debugger of course!), lancer JAVA 3

Objet Morceau de programme UNIFIE ayant des attributs Représentés par des valeurs données à l'objet Représentent un état de l'objet des méthodes qui permettent de manipuler ces attributs fonctions que l'objet sait faire Représentent le comportement de l'objet getnom() listecours() 180 m 80 kg "Durand" objetetudiant premièrelettreenminusculepuispremiereenmajuscule Exo 1-2 : Définir sur papier plusieurs objets cercle et différentes manières de les exprimer JAVA 4

Classe Lieu de description d'objets similaires Permet de définir le comportement des objets de cette classe signature et code des méthodes la structure de l état des objets de cette classe liste et type des attributs (mais pas leurs valeurs) PremièreLettreEnMajusculePourChaqueMot JAVA 5

Création d'un objet = instanciation Pour pouvoir manipuler un objet, on déclare une référence de type la classe de cet objet Circle c; //c est une référence qui va me permettre de manipuler un objet de la classe Circle Pour créer un objet, on instancie une classe en appliquant l'opérateur new. Une nouvelle instance de cette classe est alors allouée en mémoire : c = new Circle(); //je fabrique un objet Circle et je le référence par c Circle() est une méthode particulière appelée constructeur ; elle a exactement le même nom que la classe JAVA 6

Constructeur Tout objet doit avoir ses valeurs positionnées. Un constructeur peut permettre de fixer ces valeurs à la création de l'objet (attention les structures de données sont de toutes façons reservées en mémoire) Un constructeur est une méthode qui possède le même nom que la classe, mais qui ne renvoie rien Si le programmeur n écrit pas de constructeur, le compilateur crée un constructeur par défaut, implicite (sans paramètre et avec corps vide). Une classe peut avoir plusieurs constructeurs qui diffèrent par le nombre et la nature de leurs paramètres. JAVA 7

Classe - exemple et exo public class Circle { private double x, y, r; public void affiche(){ System.out.println("x=" + this.x + "y=" + this.y + "r=" + this.r); public double getperimeter(){ return ( Math.PI * 2 * this.r ); public double getarea(){ return ( Math.PI * this.r * this.r ); public void Circle(double x1, double y1, double r1){ this.x = x1; this.y = y1; this.r = r1; Exo 1-3 : Ecrire, compiler la classe Circle complétée comme ci-dessus. Utilisez une classe TestCircle pour les tests. Exo 1.4 : Définir plusieurs constructeurs dans Circle, compiler, tester. JAVA 8

Standard de nommage et de représentation graphique (UML) Classe PremièreLettreEnMajusculePourChaqueMot rectangle Attribut et méthode NomClasse -attun -attdeux -methun() +methdeux() premièrelettreenminusculepuispremiereenmajusculepourchaque Mot rectangles accrochés sous la classe (facultatifs) + pour public / - pour private (il existe aussi protected, mais est-ce vraiment utile?...) Objet premièrelettreenminusculepuispremiereenmajusculepourchaque Mot rectangle, référence soulignée Exo 1-8 : Représenter les classes Circle et HelloWorld en UML. referenceobjet:objet JAVA 9

Hello World version 2 La première version ne possède pas de constructeur Définir un constructeur dans la classe HelloWorld qui se charge d écrire la phrase ("Hello, World!"); Modifier la méthode écrite en version 1 pour qu elle instancie un objet de la classe HelloWorld Compiler (et deboguer of course!), lancer JAVA 10

Mon second programme Ecrire le code d une classe DivisionO comportant des méthodes permettant de diviser deux double entre eux (2 façons de faire lequelles?) Compiler (et deboguer of course!) Ecrire le code d'une classe Client, utilisant une classe DivisionO Compiler (et deboguer of course!) Lancer le programme NB : faites les 2 façons!! JAVA 11

Classe Circle V1- sans constructeur Reprendre le code de la classe Circle, MAIS RETIRER tous les constructeurs, compiler (et deboguer of course!) Ecrire une classe TestCircle qui contient une méthode public static void main(string[] arg). Cette méthode crée un objet Circle et affiche les caractéristiques de l objet créé. Compiler (et deboguer of course!), lancer Pourquoi TestCircle réussit-il à créer un objet Circle alors qu il n y a pas de constructeur? Quelles sont les valeurs des attributs x, y, r de l objet créé? JAVA 12

Classe Circle suite V2 Modifier la classe Circle en lui ajoutant les 2 constructeurs public Circle(double lx, double ly, double lr) et public Circle(Circle c). Ne pas modifier la classe de test. Compiler, tester, conclusion? V3 Ajouter le troisième constructeur de la classe Circle, compiler, tester. Modifier la classe TestCircle pour qu elle crée 3 cercles différents (un par constructeur, donner des valeurs à x, y et r différentes de 0) et affiche leurs caractéristiques. Compiler, lancer JAVA 13

JAVA 14

Machine Virtuelle : Emulateur Byte-Code/P-Code/J-Code opcode : 1 octet pour l'instruction 0,n opérandes MicroProcesseur logiciel Jeu d'instructions Registres (pc, optop, frame, vars) Pile, Heap Ramasse-miettes Espace de stockage des méthodes Tas de constantes ==> Compilé ou Interprété MV Source.java Compilateur javac Byte-Code.class Interpréteur SE Matériel JAVA 15

Compilation, exécution & cie l Ecrire une classe Test1 représentant des objets ayant un attribut interne de type entier (int) appelé val. l Compiler cette classe (le compilateur s appelle javac) l Quels sont les fichiers générés? l Lancer la commande javap -c sur la classe Test1. Que voit-on? l Exécuter cette classe dans la machine virtuelle. Que se passe-t il et pourquoi JAVA 16

Une classe cliente Ecrire une classe Test2 cliente de la première (qui utilise des référence sur des objets de la première) qui possède deux attributs (att1, att2) de type Test1. l Compiler cette classe l Exécuter cette classe. Que se passe t il? l Lancer la commande javap -p sur la classe Test2. Que voit-on? JAVA 17

Le Main l Ajouter dans Test2 une méthode main(string[])ayant la signature suivante : public static void main(string [] arg) l A quoi sert le paramètre arg de cette méthode? l Compiler cette classe l Exécuter cette classe : que se passe-t-il? JAVA 18

Objets impossibles Dans la méthode main(string[]) de Test2, déclarez une variable t1 de classe Test1 mais instanciez un objet de type Test2 Test1 t1=new Test2() ; l Compiler. Que se passe-t il? Dans la méthode main(string []) déclarez une variable de type Toto, instanciez le. Toto x ; Compiler. Que se passe t il? JAVA 19

La classe vue comme un objet Toutes les classes instanciées sont connues de la machine virtuelle. Elles pourraient donc être également utilisées comme des objets. Hello new h2 coucou... Hello h2 = new Hello(); Res r = h2.coucou();... class Hello{ public void coucou(){ Comment écrire une méthode coucou dans la classe hello, mais dont le destinataire ne soit pas une des instances, mais la classe? JAVA 20

Le mot clé static On ajoute un mot-clé à la signature des méthodes public static coucou1(){... /*Cette méthode est connue de la classe */ public void coucou2(){... /*Cette méthode est connue des instances-objets*/ Comment l'objet h2 fait-il pour invoquer une méthode statique sur la classe Hello? On adapte le destinataire du message : Hello.coucou() ==> Indique que coucou() est relatif à la classe et non pas à une de ses instances Hello +static coucou1() +coucou2() public class Hello{ public void static coucou1(){... public void coucou2(){...... Hello h2=new Hello(); h2.coucou2(); Hello.coucou1();... JAVA 21

Exercice Ecrire le code d'une classe Client, utilisant une classe DivisionO réalisée en utilisant des méthodes d'objets Compiler Ecrire une classe DivisionO en objet Compiler, tester Modifier le code de la classe Client pour utiliser une classe DivisionS qui présente des méthodes statiques Compiler Ecrire une classe DivisionS en statique Compiler JAVA 22

Conséquences directes La classe est également vue comme un objet Les attributs et les méthodes statiques sont associés à la classe et non à chaque objet Toutes les instances de la classe peuvent être vues comme partageant la valeur des attributs "static" Il n'est pas nécessaire d'instancier une classe pour accéder à ses éléments statiques La notion de static peut être perçue comme représentant les valeurs communes à toutes les instances d'une même classe JAVA 23

Exemple du mot clé static public class Circle { public static int count = 0; public static double PI = 3.14; protected double x, y, r; public Circle(double r){ this.r = r; count++; bigger(circle, Circle) count 2 public static Circle bigger(circle c1, Circle c2){ if (c1.r > c2.r) return c1; else return c2; 4 5 1000 public class UneClasseExemple{ public UneClasseExemple(){ Circle c1 = new Circle(10); Circle c2 = new Circle(20); int n = Circle.count; // n = 2 Circle c4 = Circle.bigger(c1, c2); // c4 = c2 getx() getx() gety() getarea() getr() 2 3 10 gety() getr() getperimeter() getarea() getperimeter() JAVA 24

Pourquoi le main est-il static? public class HelloWorld { public static void main(string [] arg){ System.out.println("Hello, World!"); Static main(string [] arg) HelloWorld HelloWorld.java Compilateur javac HelloWorld.java HelloWorld HelloWorld.class Machine Virtuelle java HelloWorld JAVA 25

Exercice Décrire en terme d'objets et de messages la commande d'affichage System.out.println("coucou"); Lancer le programme de gestion des divisions. Quelles sont les différences entre approche statique et l'autre? A quoi ressemble l'approche statique? JAVA 26

Pourquoi? Pourquoi ne pas tout faire en statique? Parce qu'en programmation objet on manipule des objets qui sont beaucoup plus faciles à réorganiser Qu'est ce qui est statique? Le main (on n'a pas le choix, il n'y a pas encore d'objet) Les constantes : public static final int ETAT_STABLE = 1; toto.setstate(uneclasse.etat_stable); Les fonctions communes de service Dans ce cas on essaie de les regrouper dans une classe de service cf. classe Maths JAVA 27

JAVA 28

Les tableaux Déclaration int[] array_of_int; // équivalent à : int array_of_int[]; Color rgb_cube[][][]; Création et initialisation array_of_int = new int[42]; rgb_cube = new Color[256][256][256]; int[] primes = {1, 2, 3, 5, 7, 7 + 4; array_of_int[0] = 3; Utilisation int l = array_of_int.length;// l = 42 int e = array_of_int[40]; NB : on verra les Collections dans un autre TD JAVA 29

Bibliothèques : d'où viennent les objets, les classes? Les objets n'apparaissent que s'ils sont fabriqués par quelque chose... et si l'on a obtenu une référence dessus (appel de méthode par exemple) Les classes Soit on les écrit nous-même Soit on nous les fournit (bibliothèque) Java fournit plus de 10 000 classes dans le kit de base (bibliothèque standard) La difficulté est de connaître leur existence JAVA 30

Composition Une classe est un agrégat d'attributs et de méthodes : les membres COMPOSITION : quand un objet contient un attribut qui est objet d une autre classe ListePatients void affichenoms() lespatients * Diagramme de classes Patient String getnom() Diagramme d objets exemple :String nom prenom :String String maliste:listepatients lespatients[0]:patient lespatients[1]:patient :String :String :String Durand lespatients[2]:patient nom :String prénom Paul JAVA 31

Communication entre objets Message = appel de fonction d'un objet sur un autre on dit «Invoquer une méthode» ==> Unique manière de communiquer entre objets Syntaxe : référenceobjet.nommethode(parametres); lespatients[0].getnom() lespatients[0]:patient lalistepatients:listepatients 0x234 nom prenom String getnom() 0x234 String Durand String Paul JAVA 32

Référence et this Pour pouvoir accéder à un objet, il faut avoir une référence sur cet objet (attribut ou variable) La référence est le nom qu'on lui donne localement Si on veut se parler à soi-même, on utilise «this» //suite class Circle public void affichetoi() { System.out.println( "Je suis un cercle de surface" + this.getarea(); NB : les méthodes statiques peuvent-elles accéder à this? JAVA 33

Synthèse communication Aucune instruction en dehors d une classe Toute la communication se fait par échange de messages entre les objets public class MaClasse{ int i = 12; String toto = "Bonjour"; public static void main(string [] arg){ MaClasse unrepresentant = new MaClasse(); System.out.println("Je dis : "); System.out.println(unRepresentant.toString()); public String tostring(){ return toto; JAVA 34

Découverte de la méthode tostring() Ecrire une classe Patient avec des attributs String nom et prénom Ecrire une classe Client avec une méthode main avec une variable unpatient (Paul Durand) que donne la ligne System.out.println(unPatient); lancer, conclusion? Voir la documentation sur println! Ajouter une méthode dans la classe Patient public String tostring() qui retourne une chaine comportant nom et prénom. Relancer le client. Conclusion? Important! JAVA 35

Exo tableaux, composition, messages Créer une classe TableauCircles qui a un attribut tableau de 10 objets Circle des méthodes addcircle, deletecircle et AfficheCircles compiler, deboguer, mais ne pas encore tester... Faire une classe MonProgTableauCircle avec une méthode main qui: remplit le tableau avec 5 cercles prenez des x/y/r en dur demande l affichage de l ensemble des cercles Compiler, deboguer, lancer JAVA 36

Encapsulation Ne rendre visibles de l'extérieur que certaines parties de l'objet L'utilisateur d'un objet n'accède qu'à sa partie publique. L'autre partie est dite privée. Intérêts une classe fournit un ensemble de services. C est son problème de choisir comment elle fait : les clients n ont pas besoin de connaître les détails => lisibilité du code Modification de la partie privée, tout en gardant la même définition publique D'une manière générale Tous les attributs d'une classe sont "private" Certaines méthodes sont "public", d'autres "private" (il existe aussi protected et default mais on n'en parle pas maintenant) Partie publique Partie privée JAVA 37

Exemple encapsulation public class ClientWeb { private void connect(string unserver){ /* ouvrir une connexion reseau */ private String getdocument(){ /* Demander au serveur la page */ public String getpageweb(string server){ this.connect(server); String tmp = this.getdocument(); return tmp; ClientWeb - void connect(string) - String getdocument() + String getpageweb(string) JAVA 38

Exo encapsulation Reprendre la classe TableauCircles ajouter un attribut private qui compte le nombre d éléments dans le tableau et passez l attribut tableau public (c est interdit mais c est pour la bonne cause) modifier les fonctions addcircle, deletecircle et AfficheCircles en conséquence Reprendre la classe MonProgTableauCircle modifier son main pour qu'elle ajoute ellemême un objet Circle dans le tableau de TableauCircle tester, expliquer les dangers et pb... JAVA 39

Surcharge de méthode La surcharge (overloading) permet à plusieurs méthodes ou constructeurs de partager le même nom. Pour que deux méthodes soient en surcharge il faut qu'elles aient le même nom, mais une signature différente (paramètres de la méthode) Cela utilise le principe de polymorphisme : plusieurs formes possibles pour la même méthode JAVA 40

Surcharge exemple class Point { private double x,y; public Point (){ this.x = 0.0; this.y = 0.0; public Point (double x, double y){this.x = x; this.y = y ; //Calcule la distance entre moi et un autre point public double distance(point autre){ double dx = this.x - autre.getx(); double dy = this.y - autre.gety(); return Math.sqrt( dx * dx + dy * dy ); //Calcule la distance entre moi et une autre coordonnée public double distance(double x, double y){ double dx = this.x - x; double dy = this.y - y; return Math.sqrt( dx * dx + dy * dy); //Calcule la distance entre moi et une autre coordonnée public double distance(int x, int y){ double dx= this.x - (double)x; double dy= this.y - (double)y; return Math.sqrt( dx * dx + dy * dy ); //Calcule la distance entre moi et l'origine public double distance(){return Math.sqrt( x * x + y * y); JAVA 41

Surcharge exemple Appel Quand une méthode est appelée, le nombre et le type des arguments permettent de définir la signature de la méthode qui sera invoquée. Point p1 = new Point(); Point p2 = new Point(20.0, 30.0); p2.distance(p1); p2.distance(50.0, 60.0); p2.distance(50, 60); p2.distance(); JAVA 42

Passage de paramètres dans les méthodes Le mode de passage des paramètres dans les méthodes dépend de la nature des paramètres : par référence pour les objets les modifications faites par la méthode sont faites sur l objet et sont donc persistantes par copie pour les types primitifs les modifications faites par la méthode sont faites sur la copie et ne sont donc pas visibles par l appelante public class Exemple {//à taper, tester, valider!! public void methode1(int i, StringBuffer s) { i++; s.append("d"); public void methode2() { int i = 0; StringBuffer s = new StringBuffer("abc"); methode1(i, s); System.out.println("i=" + i + ", s=" + s); // i=0, s=abcd JAVA 43