Java éléments de programmation. Les API essentielles java.lang : Types de bases, Threads, ClassLoader, Exception, Math,... java.util : Hashtable, Vector,

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

A RECUPERER EN ENTRANT Le polycopié de Caml Partie 1
Spécialisation/généralisation Héritage Polymorphisme.
Spécialisation/généralisation Héritage Polymorphisme
Le mécanisme des exceptions
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
(Classes prédéfinies – API Java)
C.
Programmer en JAVA par Tama
Stéphane Frénot - - Dpt Télécommunications IJA20 JAVA Le cœur du langage.
Packages et résolution de noms
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
IJA - TD 2 Bases du langage
1 Le mécanisme des exceptions Qu'est-ce qu'une exception? Comment définir et signaler des exceptions? Comment récupérer des exceptions?
Leçon 3 : Héritage IUP 2 Génie Informatique
Programmation par Objets et Java
Programmation orientée objet
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Langage Oriente Objet Cours 4.
33 Types de données et opérateurs. 3-2 Objectifs A la fin de ce cours, vous serez capables de : Décrire les types de données primitives Déclarer et initialiser.
Principes de programmation (suite)
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Java Héritage, interfaces.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Langage Oriente Objet Cours 3.
Langage Oriente Objet Cours 2.
Structures de données IFT-2000
Le langage JAVA Année scolaire
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
Introduction au paradigme orienté-objet (suite)
Principes de programmation
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
POO-L3 H. Fauconnier1 Supplément gratuit…. POO-L3 H. Fauconnier2 Entrée-sortie public static void main(String[] args) { // sortie avec printf ou double.
Package IFT1025 Jian-Yun Nie.
IFT 6800 Atelier en Technologies d’information
1 Les paquetages («packages»). 2 L'objectif avec les paquetages («packages») est de rendre accessibles aux utilisateurs des classes définies par d'autres.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
Les Opérateurs Ils régissent toutes les opérations ou transformations sur les valeurs des variables. Opérateur d'affectation Opérateurs arithmétiques Opérateurs.
Les méthodes en java • Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. • Une méthode pour être utilisée.
2.1 - Historique Chapitre 2 : Introduction au langage C++
4 Introduction des objets. Les chaînes et tableaux
Cours n°3 rappels. POO-L3 H. Fauconnier2 Entrée-sortie public static void main(String[] args) { // sortie avec printf ou double a = 5.6d ; double b =
La notion de type revisitée en POO
Cours 9 Exceptions (fin) Généricité. POO-L3 H. Fauconnier2 Chaînage d'exceptions  Une exception peut être causée par une autre.  il peut être utile.
11/04/ L'héritage Cours 7 Cours 7.
Variables et accès en Java. Déclaration des variables final transient static private Printer hp; transient => ne doivent pas être sérialisées volatile.
Cours 7 Classes locales Clonage Divers: tableaux.
Créer des packages.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Tutorat en bio-informatique
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
C# de plus près.  Ce sont globalement les mêmes que Java : ◦ Int(int16, int32), float, double, bool,…  Les classe « communes » sont également les mêmes.
Cours du 5 novembre.
IUT du Limousin L.U.P Michel Vergnaud Programmation Objet - Java.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Introduction à la programmation objet avec java
Introduction à la programmation objet avec java
Héritage Conception par Objet et programmation Java
Classes abstraites, interface Classe interne Classes enveloppes
pour les programmeurs en C++ Java 2 Part 1 3 Histoire de Java Projet de connexion des machines: 1991 Le nom Java a été introduit dans un café Développé.
Transcription de la présentation:

Java éléments de programmation

Les API essentielles java.lang : Types de bases, Threads, ClassLoader, Exception, Math,... java.util : Hashtable, Vector, Stack, Date,... java.applet : Gestion des Applets java.awt : Interface graphique portable java.io : accès aux i/o par flux, wrapping, filtrage java.net : Socket (UDP, TCP, multicast), URL,...

Les API essentielles depuis le 1.1 java.lang.reflect : introspection sur les classes et les objets java.beans : composants logiciels java.sql et javax.sql (JDBC) : accès homogène aux bases de données java.security : signature, cryptographie, authentification java.serialisation : sérialisation d'objets java.rmi : Remote Method Invocation java.idl : interopérabilité avec CORBA

1. Structure du langage

Types de donnés Les variables en Java peuvent être de "trois" sortes de types : les types primitifs ; les référence à un objet ; les référence à un tableau. Toute variable locale doit être initialisée explicitement avant de pouvoir utiliser sa valeur (vérification statique par le compilateur). Les variables peuvent être déclarées n'importe où dans un bloc ({...}). Deux variables « locales » (locales et paramètres) de deux blocs imbriqués l'un dans l'autre ne peuvent pas avoir le même nom. Il n'existe pas de pointeur en Java.

Structures de contrôle et expressions (1) Essentiellement les mêmes qu'en C if, switch, for, while, do while plus opérateurs Plus les blocs labelisés UN: while(...) { DEUX: for(...) { TROIS: while(...) { if (...) continue UN;// Reprend sur la première boucle while if (...) break DEUX; // Quitte la boucle for continue; // Reprend sur la deuxieme boucle while }

Structures de contrôle et expressions (2) OpérateurTypeFonction ++, -- ArithmétiqueIncrémente ou décrémente +, - ArithmétiquePlus ou moins unaire ~ NumériqueComplémentaire à un ! BooléenNégation logique (type) TousTranstypage ou conversion (cast) * ArithmétiqueMultiplication / ArithmétiqueDivision % ArithmétiqueModulo +, - ArithmétiqueAddition, Soustraction + StringConcaténation << NumériqueDécalage à gauche >> NumériqueDécalage à droite avec conservation du signe >>> NumériqueDécalage à droite sans conservation du signe = > ArithmétiqueComparaison arithmétique et numérique instanceof référenceComparaison de type dynamique

Structures de contrôle et expressions (3) OpérateurTypeFonction ==, != Primitif Egalité et inégalité par valeur ==, != Référence Egalité et inégalité par référence & NumériqueEt binaire & BooléenEt Booléen ^ NumériqueOU exclusif binaire ^ BooléenOU exclusif booléen | NumériqueOU binaire | BooléenOU booléen && BooléenET Conditionnel || BooléenOU Conditionnel ?: ?Opérateur de comparaison ternaire =, *=, /=, %=, +=, -=, |=, >=, >>>=, &=, ^= TOUSAffectation avec l’opérateur associé

Les types primitifs TypeContenuTailleValeur Min. / Max. boolean true ou false1 bitInexistant char caractère Unicode2 octets\u0000 et \uFFFF byte entier signé1 octets-127 / 128 short entier signé2 octets / int entier signé4 octets / long entier signé8 octets / float IEEE 754 à virgule flottante 4 octets  3.4 E+38 /  1.4 E-45 double IEEE 754 à virgule flottante 8 octets  E+308 /  E-324 Tous les types numériques (byte inclus) sont signés ; Il n'existe pas de transtypage (cast) implicite avec perte d'information pour les types primitifs, afin d’éviter des bugs, le compilateur génère une erreur à la compilation.

Les tableaux Déclaration int[] arrayOfInt; // équivalent à : int arrayOfInt[]; Color rgbCube[][][]; Création et initialisation arrayOfInt = new int[42]; rgbCube = new Color[256][256][256]; int[] primes = {1, 2, 3, 5, 7, 7+4}; arrayOfInt[0] = 3 Utilisation int l = arrayOfInt.length; // l = 42 int e = arrayOfInt[50]; // Lève une ArrayIndexOutOfBoundsException

Les exceptions (1) Elles permettent de séparer un bloc d'instructions de la gestion des erreurs pouvant survenir dans ce bloc. try { // Code pouvant lever des IOException ou des SecurityException } catch (IOException e) { // Gestion des IOException et des sous-classes de IOException } catch (Exception e) { // Gestion de toutes les autres exceptions }

Les exceptions (2) Ce sont des instances de classes dérivant de java.lang.Exception La levée d'une exception provoque une remontée dans l'appel des méthodes jusqu'à ce qu'un bloc catch acceptant cette exception soit trouvé. Si aucun bloc catch n'est trouvé, l'exception est capturée par l'interpréteur et le programme s'arrête. L'appel à une méthode pouvant lever une exception doit : soit être contenu dans un bloc try/catch soit être situé dans une méthode propageant ( throws ) cette classe d'exception ou une classe mère de celle-ci Un bloc (optionnel) finally peut-être posé à la suite des catch. Son contenu est exécuté après un catch ou après un break, un continue ou un return dans le bloc try

Les exceptions (3) Object getContent() { try { openConnection(); } catch(IOException e) {... } finaly {... }... } void openConnection() throws IOException { openSocket(); sendRequest(); receiveResponse(); } void sendRequest() throws IOException { write(header); write(body); // ERROR }

Les unités de compilation Le code source d'une classe est appelé unité de compilation. Il est recommandé (mais pas imposé) de ne mettre qu'une classe par unité de compilation. L'unité de compilation (le fichier) doit avoir le même nom que la classe publique qu'elle contient.

Les packages (1) A package is a set of classes shares a same namespace. Les noms des packages suivent le schéma : name.subname... Une classe Watch appartenant au package time.clock doit se trouver dans le fichier time/clock/Watch.class Les packages permettent au compilateur et à la JVM de localiser les fichier contenant les classes à charger. L'instruction package indique à quel package appartient la ou les classe(s) de l'unité de compilation (le fichier).

Les packages (2) Les répertoires contenant les packages doivent être présents dans la variable d'environnement CLASSPATH En dehors du package, les noms des classes sont : packageName.className L'instruction import packageName permet d'utiliser des classes sans les préfixer par leur nom de package. Les API sont organisées en package ( java.lang, java.io,... )

Les packages (3) ~/classes/graph/2D/Circle.java package graph.2D; public class Circle() {... } ~/classes/graph/3D/Sphere.java package graph.3D; public class Sphere() {... } ~/classes/paintShop/MainClass.java__________________________________ package paintShop; import graph.2D.*; public class MainClass() { public static void main(String[] args) { graph.2D.Circle c1 = new graph.2D.Circle(50) Circle c2 = new Circle(70); graph.3D.Sphere s1 = new graph.3D.Sphere(100); Sphere s2 = new Sphere(40); // error: class paintShop.Sphere not found } export CLASSPATH=$JAVA_HOME/jre/lib/rt.jar;$HOME/classes

CLASSPATH Java Virtual Machine searches for classes in the following order: Bootstrap classes: Java platform classes (rt.jar) Extension classes: extension directory of the Virtual Machine. User classes

2. Classes et objets

Exemple de programme class Circle(){// le nom de mon objet commence par une majuscule public double x, y;// Coordonnée du centre private double r;// rayon du cercle public Circle(double r) { this.r = r; } public double area() { return * r * r; } public class MonPremierProgramme() { public static void main(String[] args) { Circle c; // c est une référence sur un objet Circle, pas un objet c = new Circle(5.0); // c référence maintenant un objet alloué en mémoire c.x = c.y = 10; System.out.println("Aire de c :" + c.area()); }

Création d'un objet (1) Pour manipuler un objet, on déclare une référence sur la classe de cet objet : Circle c; Pour créer un objet, on instancie une classe en appliquant l'opérateur new sur un de ses constructeurs. Une nouvelle instance de cette classe est alors allouée en mémoire : c = new Circle(5); Toute classe possède un constructeur par défaut, implicite. Il peut être redéfini. Une classe peut avoir plusieurs constructeurs qui diffèrent par le nombre et la nature de leurs paramètres.

Création d'un objet (2) class Circle() { double x, y, r; public Circle(double x, double y, double r) { this.x = x; this.y = y; this.r = r; } public Circle(Circle c) { x = c.x; y=c.y; r=c.r; } public Circle() { this(0.0, 0.0, 0.0); }

Destruction d'un objet (1) La destruction des objets est prise en charge par le garbage collector (GC). Le GC détruit les objets pour lesquels il n'existe plus de référence. Les destructions sont asynchrones (le GC est géré dans une thread de basse priorité). Aucune garantie n'est apportée quant à la destruction d'un objet. Si l'objet possède la méthode finalize, celle-ci est appelée lorsque l'objet est détruit.

Destruction d'un objet (2) public class Circle {... void finalize() { System.out.println("Je suis garbage collecte"); } }... Circle c1; if (condition) { Circle c2 = new Circle(); // c2 référence une nouvelle instance c1 = c2; } // La référence c2 n'est plus valide mais il reste une référence,c1, // sur l'instance c1=null; // L'instance ne possède plus de référence. Elle n'est plus // accessible. A tout moment le gc peut detruire l'objet.

La structure des classes (1) Une classe est un agrégat d'attributs et de méthodes : les membres Les membres sont accessibles via une instance de la classe ou via la classe (pour les membres statiques) c.r = 3; // On accède à l'attribut 'r' de l'instance 'c' a = c.area(); // On invoque la méthode 'area' de l'instance 'c' pi = Math.PI; // On accède à l'attribut statique 'PI' de la classe 'Math' b = Math.sqrt(2.0);// On invoque la méthode statique 'sqrt' de la classe 'Math' L'accessibilité des membres est pondérée par des critères de visibilité (public, private,...) Les méthodes sont définies directement au sein de la classe.

La structure des classes (2) 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 par copie pour les types primitifs public class C { void methode1(int i, StringBuffer s) { i++; s.append("d");} void methode2() { int i = 0; StringBuffer s = new StringBuffer("abc"); methode1(i, s); System.out.println(i=" + i + ", s=" + s); // i=0, s=abcd }

La structure des classes (3) Les variables static sont communes à toutes les instances de la classe. Il n'est pas nécessaire d'instancier une classe pour accéder à un de ses membres statiques. Les méthodes statiques ne peuvent pas accéder à this.

La structure des classes (4) public class Circle { public static int count = 0; public static final double PI = 3.14; // final pour éviter Circle.PI = 4; public double x, y, r; public Circle(double r) { this.r = r; count++;) public Circle bigger(Circle c) { if (c.r > r) return c; else return this; } public static Circle bigger(Circle c1, Circle c2) { if (c1.r > c2.r) return c1; else return c2; } Circle c1 = new Circle(10); Circle c2 = new Circle(20); n = Circle.count; // n = 2; Circle c3 = c1.bigger(c2); // c3 = c2; Circle c4 = Circle.bigger(c1, c2); // c4 = c2

L'héritage (1) Une classe ne peut hériter ( extends ) que d'une seule classe. Les classes dérivent, par défaut, de java.lang.Object. Une référence d'une classe C peut contenir des instances de C ou des classes dérivées de C. L'opérateur instanceOf permet de déterminer la classe d'une instance. Les classes final ne peuvent pas être redéfinies dans les sous- classes.

L'héritage (2) public class Ellipse { public double r1, r2; public Ellipse(double r1, double r2) { this.r1 = r1; this.r2 = r2;) public double area{...} } final class Circle extends Ellipse { public Circle(double r) {super(r, r);} public double getRadius() {return r1;} } Ellipse e = new Ellipse(2.0, 4.0); Circle c = new Circle(2.0); System.out.println("Aire de e:" + e.area() + ", Aire de c:" + c.area()); System.out.println((e instanceOf Circle)); // false System.out.println((e instanceOf Ellipse)); // true System.out.println((c instanceOf Circle)); // true System.out.println((c instanceOf Ellipse)); // true (car Circle dérive de Ellispe) e = c; System.out.println((e instanceOf Circle)); // true System.out.println((e instanceOf Ellipse)); // true int r = e.getRadius(); // Error: method getRadius not found in class Ellipse. c = e; // Error: Incompatible type for =. Explicit cast needed.

Le masquage des variables (1) Une classe peut définir des variables portant le même nom que celles de ses classes ancêtres. Une classe peut accéder aux attributs redéfinis de sa classe mère en utilisant super ou par cast. Une classe peut accéder aux méthodes redéfinies de sa classe mère en utilisant super.

Le masquage des variables (2) class A { int x; void m() {...} } class B extends A{ int x; void m() {...} } class C extends B { int x, a; void m() {...} void test() { a = super.x; // a reçoit la valeur de la variable x de la classe B a = super.super.x; // Syntax error a = ((B)this).x; // a reçoit la valeur de la variable x de la classe B a = ((A)this).x; // a reçoit la valeur de la variable x de la classe A super.m(); // Appel à la méthode m de la classe B super.super.m(); // Syntax error ((B)this).m(); // Appel à la méthode m de la classe C (et non B) }

L'encapsulation des membres class c1 { public int A; protected int B; int C; private int D; } class c3 {... } class c5 {... } ABCD Accessible par c2ooo- Accessible par c3ooo- Accessible par c4oo-- Accessible par c5o--- Package P1Package P2 class c4 extends c1 {... } class c2 extends c1 {... }

Les classes abstraites (1) Une classe abstraite est une classe ayant au moins une méthode abstraite. Une méthode abstraite ne possède pas de définition. Une classe abstraite ne peut pas être instanciée ( new ). Une classe dérivée d'une classe abstraite ne redéfinissant pas toutes les méthodes abstraites est elle-même abstraite.

Les classes abstraites (2) class abstract Shape { public abstract double perimeter(); } class Circle extends Shape {... public double perimeter() { return 2 * Math.PI * r ; } } class Rectangle extends Shape {... public double perimeter() { return 2 * (height + width); } }... Shape[] shapes = {new Circle(2), new Rectangle(2,3), new Circle(5)}; double sum_of_perimeters = 0; for(int i=0; i<shapes.length; i++) sum_of_perimeters += shapes[i].perimeter();

Les interfaces (1) Une interface correspond à une classe où toutes les méthodes sont abstraites. Une classe peut implémenter ( implements ) une ou plusieurs interfaces tout en héritant ( extends ) d'une classe. Une interface peut hériter ( extends ) de plusieurs interfaces.

Les interfaces (2) abstract class Shape { public abstract double perimeter(); } interface Drawable { public void draw(); } class Circle extends Shape implements Drawable, Serializable { public double perimeter() { return 2 * Math.PI * r ; } public void draw() {...} } class Rectangle extends Shape implements Drawable, Serializable {... public double perimeter() { return 2 * (height + width); } public void draw() {...} }... Drawable[] drawables = {new Circle(2), new Rectangle(2,3), new Circle(5)}; for(int i=0; i<drawables.length; i++) drawables[i].draw();

Les inner classes (1) Introduites avec java 1.1 Elles permettent de Déclarer une classe dans un bloc (inner class) Instancier une classes anonymes (anonymous class) Elles affinent la localisation des classes Elles simplifient le developpement Elles offrent une (autre) réponse pour les pointeurs de fonctions Elles sont une caractéristique du compilateur et non de la JVM Attention : elles peuvent réduire la lisibilité des sources.

Les inner classes (2) Exemple : public class FixedStack { Object array[]; int top = 0; public void push(Object item) {... } public Object pop() {...} public isEmpty() {...} public java.util.Enumeration element() { return new Enumerator(); } class Enumerator implements java.util.Enumeration { int count = top; public boolean hasMoreElements() { return count > 0; } public Object nextElement() { if (count == 0) throw NoSuchElementExceptio("FixedStack"); return array[--count]; }

Les inner classes (3) Ce qui est produit pas le compilateur : public class FixedStack {... public java.util.Enumeration element() {return new FixedStack$Enumerator(this);} } class FixedStack$Enumerator implements java.util.Enumeration { private FixedStack this$0; FixedStack$Enumerator(FixedStack this$0) { this.this$0 = this$0; this.count = this$0.top; } int count; public boolean hasMoreElements() { return count > 0; } public Object nextElement() { if (count == 0) throw NoSuchElementExceptio("FixedStack"); return this$0.array[--count]; }

Les inner classes (4) Exemple de classe locale :... Enumeration myEnumeration(final Object array[]) { class E implements java.util.Enumeration { int count = top; public boolean hasMoreElements() { return count > 0; } public Object nextElement() { if (count == 0) throw NoSuchElementExceptio("FixedStack"); return array[--count]; } return new E(); }

Les inner classes (5) Exemple de classe anonyme :... Enumeration myEnumeration(final Object array[]) { return new java.util.Enumeration() { int count = 0; public boolean hasMoreElements() { return count < array.length; } public Object nextElement() { return array[count++]; }

Les inner classes (6) Ce qui est produit pas le compilateur : Enumeration myEnumeration(final Object array[]) { return new MyOuterClass$19(array); }... class MyOuterClass$19 implements java.util.Enumeration { private Object val$array; int count; MyOuterClass$19(Object val$array) { this.val$array = val$array; count = 0; } public boolean hasMoreElements() { return count < val$array.length; } public Object nextElement() { return val$array[count++]; }

L’affichage des Objets Chaque Objet comporte une méthode toString() celle-ci est appelée par la méthode print.