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.

Slides:



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

Spécialisation/généralisation Héritage Polymorphisme.
Spécialisation/généralisation Héritage Polymorphisme
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Introduction à la programmation objet Langage Java
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.
Approfondissement du langage
(Classes prédéfinies – API Java)
C.
Stéphane Frénot - - Dpt Télécommunications IJA20 JAVA Le cœur du langage.
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
Programmation par Objets et Java
Chapitre III Héritage (début)
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.
Écouteurs de click d'une fenêtre
Langage Oriente Objet Cours 4.
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.
Classes abstraites et Interfaces
Langage Oriente Objet Cours 2.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
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)
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.
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.
Formation Développeur Java Programmation objet avec JAVA Partie 2
Chapitre III Héritage. POO-L3 H. Fauconnier2 Chapitre III: Héritage A) Extensions généralités Affectation et transtypage B) Méthodes Surcharge et signature.
Cours 4 Héritage (suite).
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
CSI1502 Principes fondamentaux en conception des logiciels
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.
Objectifs À la fin de ce cours, vous serez capables de :
4 Introduction des objets. Les chaînes et tableaux
1 Fichers Binaires, Accès Direct et Objets. 2 Données binaires. Il s'agit ici de lire et écrire des données binaires par opposition à du texte. Pour ce.
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
La notion de type revisitée en POO
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.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Tutorat en bio-informatique
Les classes et les objets en Java L. Nerima Université de Genève.
Réaliser par: Sadok Amel Cheboui hassiba
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 3 – Classes et objets en Java Master 1 SIGLIS1 Java Lecteur - Chapitre 3 Classes et objets en Java.
Strings et Tableaux en Java
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Les surcharges d'opérateurs
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
Héritage Conception par Objet et programmation Java
IUT du limousin L.U.P Michel Vergnaud Programmation Objet - Java.
Classes abstraites, interface Classe interne Classes enveloppes
Philippe Gandy - 22 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
BlueJ_III 1 Java, les objets : tout de suite ! Interaction entre objets Notes de cours associées au chapitre 3 tutorial BlueJ
LES CLASSES ET LES OBJETS
Transcription de la présentation:

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 A (int nn) {n= nn; } // la valeur de n est définie par le constructeur private final int n; } Remarque : un champ déclaré final doit être initialisé au plus tard par un constructeur

Les classes et les objets La notion de clone class Point { public Point (int abs, int ord) { x = abs; y = ord; } public Point copie () // renvoie une référence à un Point { Point p = new Point (x,y); p.x = x; p.y = y; return p; } private int x,y; } … Point a = new Point (1,2); Point b = a.copie (); // b est une copie conforme de a Remarques : - copie superficielle != copie profonde - a==b indique vrai si a et b possède la même référence

Les classes et les objets Les objets membres (1) class Point { private int x,y; public Point (int x, int y) { this.x; this.y=y; } public void affiche () {System.out.println (" Je suis un point de coordonnees " + x + " " +y); } public int getX() { return x;} public int getY() {return y;} public void setX (int x) { this.x = x;} public void setY (int y) { this.y = y;} }

Les classes et les objets Les objets membres (2) class Cercle { private Point c; // centre du cercle private float r ; // rayon du cercle public Cercle (int x, int y, float r) { c=new Point (x,y); this.r = r; } public void affiche () {System.out.println (" Je suis un cercle de rayon "+ r); System.out.println(" et de centre de coordonnees " + c.getX() + " " + c.getY()); } public void deplace( int dx, int dy) { c.setX( c.getX() + dx); c.setY(c.getY() + dy);} }

Les classes et les objets Les objets membres (3) public class TstCerc { public static void main (String args[]) { Point p = new Point (3,5); p. affiche(); Cercle c = new Cercle (1,2,5.5); c.affiche();} } Je suis un point de coordonnees 3 5 Je suis un cercle de rayon 5.5 et de centre de coordonnees 1 2

Les classes et les objets Les classes internes  Une classe peut être définie à l’intérieure d’une autre classe ; on parle alors de classe interne.  Un objet d’une classe interne est toujours associé, au moment de son instanciation, à un objet d’une classe externe dont on dit qu’il lui a donné naissance.  Un objet d’une classe interne a toujours accès aux champs et méthodes (même privés) de l’objet externe lui ayant donné naissance;  Un objet de classe externe a toujours accès aux champs et méthodes (même privés) d’un objet d’une classe interne auquel il a donné naissance.

Exemple Class Cercle { class Centre // définition interne à Cercle { private int x, y; public Centre (int x, int y) { this.x = x; this.y = y; } } private Centre c; private double r; public Cercle (int x, int y, double r) { c = new Centre (x, y); this.r = r; } public void deplace (int dx, int dy) { c.x += dx; // ici, on a bien accès à x et y c.y += dy; }

La classe String Généralités  La classe String permet de manipuler des chaînes de caractères. String ch1 = new String(); // ch1 contient la référence à une chaîne vide String ch2 = new String (" hello "); // ch2 contient la référence à une chaîne contenant // la suite " hello " String ch3 = new String (ch2); // ch3 contient la référence à une chaîne copie de ch2, //donc contenant « hello ». String ch4 = "bonjour "; // ch4 contient la référence à la chaîne « bonjour »  Un objet de type String n ’est pas modifiable.

La classe String Opérations (1)  Accès aux caractères d ’une chaîne : charAt String ch = " bonjour " ; ch.charAt(0) correspond au caracère ‘ b ’  Concaténation de chaînes String ch1 = " Le langage "; String ch2 = " java "; String ch = ch1 + ch2;  Conversions des opérandes de l ’opérateur + int n = 26; String titre = " resultat " ; String resul = titre + 26;  L ’opérateur += String ch = " bonjour " ; ch += " monsieur " ; ch désigne la chaîne " bonjour monsieur " La chaîne " bonjour " devient candidate au ramasse-miettes.

La classe String Opérations (2)  La méthode compareTo : comparaison lexicographiques chaîne1.compareTo(chaîne2) Elle fournit : - un entier négatif si chaîne1 arrive avant chaîne2, - un entier nul si chaîne1 et chaîne2 sont égales - un entier positif si chaîne1 arrive après chaîne2.  Remplacement de caractères String ch = " bonjour "; String ch1 = ch.replace(‘ o ’, ’a ’); ch n ’est pas modifiée. Ch1 contient " banjaur ".

La classe String Opérations (3)  Extraction de sous-chaines Tous les caractères depuis une position donnée String ch = « anticonstitutionnellement »; String ch1 = ch.substring (4); // ch n ’est pas modifiée // ch1 contient " onstitutionnellement " Tous les caractères compris entre deux positions données String ch =" anticonstitutionnellement "; String ch1 = ch.substring (4,12); // ch n ’est pas modifiée // ch1 contient "constitution "  Passage en majuscules ou en minuscules String ch " LanGaGE_3 "; String ch1 = ch.tolowerCase(); // ch est inchangée ; c1 contient " langage_3 " String ch2 = ch.toUpperCase(); // ch2 contient " LANGAGE_3"

Conversions entre chaînes et types primitifs  Conversion d ’un type primitif en une chaîne Int n = 427; String ch = String.valueOf(n); ch = " " + n;  Conversions d ’une chaîne en un type primitif String ch = " 3587 "; int n = Integer.parseInt(ch);  Il existe les méthodes suivantes : Byte.parseByte, Short.parseShort, Interger.parseInt, Long.parseLong,Float.parseFloat, Double.parseDouble

Conversions entre chaînes et tableaux de caractères  On peut construire une chaîne à partir d ’un tableau de caractères : char mot [] = { ‘ b ’, ‘ o ’, ‘ n ’, ‘ j ’, ‘ o ’, ‘ u ’, ‘ r ’}; String ch = new String (mot); String ch1 = new String (mot, 2, 4); ch est construite à partir du tableau mot et contient maintenant la chaîne " bonjour " ch1 est construite en prélevant 4 caractères du tableau mot, à partir de celui de rang 2; Ch1 contient la chaîne " onjo ".  Transformation d ’un objet chaîne en un tableau de caractères String ch = " bonjour "; char mot []; mot = ch.toCharArray (); mot référence maintenant un tableau de 7 éléments (les 7 caractères de bonjour).

La super-classe Object (1) Toute classe dérive implicitement de la classe Object class Point { …. } class Point extends Object {… } Une variable de type Object peut donc être utilisée pour référencer un objet de type quelconque. Point p = new Point (…); Pointcol pc = new Pointcol (…); Fleur f = new Fleur (…); Object o; o = p; o = pc ; o = f;

La super-classe Object (2) Point p = new Point (…); Object o; … o = p; o.deplace (); // erreur de compilation ((Point) o).deplace();// OK en compilation (attention aux parenthèses) Point p1 = (Point) o;// OK : idem ci-dessus, avec création d’une référence p1.deplace();// intermédiaire dans p1

La méthode equals de Object (1) La méthode equals définie dans le classe Objects se contente de comparer les adresses Des deux objets concernés. Object o1 = new Point (1,2); Object o2 = new Point (1,2); o1.equals(o2) = false On peut redéfinir la méthode equals : class Point { … boolean equals (Point p) {return ((p.x==x) && (p.y==y));} }

La méthode equals de Object (2) Point a = new Point (1,2); Point b = new Point (1,2); a.equals(b) = true Point o1 = new Point (1,2); Point o2 = new Point (1,2); o1.equals(o2) = false

Les classes abstraites  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 méthode abstraite doit obligatoirement être déclarée public.  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.  Une classe dérivée d’une classe non abstraite peut être déclarée abstraite et/ou contenir des méthode abstraites.

Les classes abstraites Exemple (1) abstract class 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 classes abstraites Exemple (2) Soit la classe : abstract class X { public abstract void f ( ); public void t ( ) { ….} … } Nous pouvons écrire une méthode d’une classe quelconque de la manière suivante : void algo (X x) { … x.f ( ); // appel correct ; accepté en compilation. On est sûr que tout objet // d’une classe dérivée de X disposera bien d’une méthode f … }

Les interfaces  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.  On peut utiliser des variables de type interface. On pourra ainsi manipuler des objets de classes quelconques, non nécessairement liées par héritage, pour peu que ces classes implémentent la même interface  Une interface peut aussi renfermer des constantes symboliques qui seront alors accessibles à toutes les classes implémentant l’interface.

Les interfaces Exemple abstract class Shape { public abstract double perimeter(); } interface Drawable { public void draw(); } class Circle extends Shape implements Drawable { public double perimeter() { return 2 * Math.PI * r ; } public void draw() {...} } class Rectangle extends Shape implements Drawable {... 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();

Variables de type interface Bien que la vocation d’une interface soit d’être implémentée par une classe, on peut définir des variables de type interface : public interface I { …. } … I i; // i est une référence à un objet d’une classe implémentant l’interface I. Bien entendu, on ne pourra pas affecter à i une référence à quelque chose de type I Puisqu’on ne peut pas instancier une interface. En revanche, on pourra affecter à i N’importe quelle référence à un objet d’une classe implémentant l’interface I : class A implements I { … } … I i = new A ( … ) ; De plus, à travers i, on pourra manipuler des objets de classes quelconques, non Nécessairement liées par héritage, pour peu que ces classes implémentent l’inteface I.

Dérivation d’une interface interface I1 { void f (int n); static final int MAXI = 100; } interface I2 extends I1 { void g(); static final int MINI = 20; } interface I2 extends I1 { void g(); void f (int n); static final int MAXI = 100; static final int MINI = 20; } La dérivation des interfaces revient simplement à concatener des déclarations.

Conflit de noms (1) interface I1 { void f(int n); void g(); } interface I2 { void f(float x); void g(); } class A implements I1, I2 { // A doit définir deux méthodes f : void f (int) et void f(float) // mais une seule méthode g : void g () … } Il n’y a pas de conflits entre les deux interfaces I1 et I2 car elles définissent la même entête pour la méthode g.

Conflit de noms (2) interface I1 {void f (int n); void g(); } interface I2 { void f (float x); int g(); } class A implements I1, I2 { // pour satisfaire à I1 et I2, A devrait contenir à la fois une méthode void g() et // une méthode int g(), ce qui n’est pas possible d’après des règles de rédéfinition. … }

Les classes anonymes class A { public void affiche () { System.out.println (" je suis un A "); } } public class B {public static void main (String[] args) { A a; a = new A( ) { public void affiche () { System.out.println (" Je suis un anonyme derive de A "); }}; a.affiche(); }}  Je suis un anonyme dérive de A Remarques : - une classe anonyme ne peut pas introduire de nouvelles méthodes. - une classe anonyme ne peut dérivée que d’une classe ou d’une interface