Java : Objets et Classes

Slides:



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

Erratum C Surcharge For(int x=0; … 2.
1 Quelques précisions sur l'héritage. 2 Signification de super.f() appel à la méthode f() masquée super : désigne l'objet appelant comme s'il était de.
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)
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
C.
Algorithme et structure de données
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Programmation Orientée Objet (POO)
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Jérôme CUTRONA PHP objet Jérôme CUTRONA 01:08:01 Programmation Web
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
Introduction à la POO: Les classes vs les objets
Principes de programmation (suite)
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
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.
Principes de programmation (suite)
Chapitre VII Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Méthodes génériques 4. Types paramètres.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
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.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
Structures de données IFT-2000
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 au paradigme orienté-objet (suite)
Présentation Structures de Données et TDA
Programmation concurrente
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 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Types de données abstrait et mécanismes d'encapsulation
COURS DE PROGRAMMATION ORIENTEE OBJET :
CSI1502 Principes fondamentaux en conception des logiciels
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.
Héritage Licence Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier.
Structures des données
JavaScript Nécessaire Web.
4 Introduction des objets. Les chaînes et tableaux
LES PILES ET FILES.
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
Programmation en Java Tableaux NGUYEN Thi Minh Tuyen
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
Classe et Objet Equipe java Conception par Objet et programmation Java
Cours 61 6 La sécurité, Portée, Visibilité Programmer avec sécurité.
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.
7ième Classe (Mardi, 24 novembre) CSI2572. Devoir 3 ?
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.
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
Strings et Tableaux en Java
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
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.
Cours du 5 novembre.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Introduction à la programmation objet avec java
Héritage Conception par Objet et programmation Java
Langage de Programmation Orientée Objet : C++
Conception de Programmes - IUT de Paris - 1ère année Les classes Introduction Déclaration d’une classe Utilisation d’une classe Définition des.
Transcription de la présentation:

Java : Objets et Classes J200 (JOC) Java : Objets et Classes juin 2007 ~ Brigitte Groléas~

Classes vs Objets Objet = entité de l'environnement d'une application. = élément particulier d'une classe. = instance (occurrence) d'une classe. Classe = un genre, une catégorie d'entités semblables. = une famille d'objets de même format. = caractéristiques + propriétés = description + savoir faire = format des données + méthodes d'actions = est comme-ci et comme-ca + sait faire ceci et cela juin 2007 ~ Brigitte Groléas~

Avantage et mise en oeuvre L'encapsulation : Créer des objets pour déléguer et protéger. L'héritage : Dériver pour organiser et hiérarchiser les concepts Le Polymorphisme : Unifier. Un même point de vue sur différentes choses. juin 2007 ~ Brigitte Groléas~

Java dispose d'un catalogue de classes un catalogue - les classes java un regroupement par genre dans un catalogue - package mettre les objets d'un package à disposition - import utilisation une classe disponible dans le catalogue - faire un new , instancier une classe juin 2007 ~ Brigitte Groléas~

Le tas point d'entrée instance de la classeY réf3 instance de réf1 la classeX réf3 réf3 réf1 réf2 instance de la classeY instance de la classeX juin 2007 ~ Brigitte Groléas~

Les références Variable permettant de stocker la référence à un objet. Date naissance; Date m = naissance; ne fait pas une copie de l'objet : naissance et m sont 2 références sur le même objet. juin 2007 ~ Brigitte Groléas~

Définition d'une classe class Date { int jour; int mois; int année;   public void init( int j, int m, int a ) { jour = j; mois = m; année = a; } public void affiche() { System.out.println(jour + "/" + mois + "/" + année); - Attributs - Variables d'instances - Propriétés Méthodes d'instance juin 2007 ~ Brigitte Groléas~

Instanciation d’objets Créer un Objet de type Date grâce à l’opérateur new Date d = new Date(); Date d; d = new Date(); Création d'un jour d.jour d'un mois d.mois d'une années d.année d'une méthode init() d.init() d'une méthode affiche() d.affiche() juin 2007 ~ Brigitte Groléas~

Accès aux composantes d1.jour = 10; d1.mois = 12; d1.année = 1998; d2.init( 31, 12, 1999 ); d1.affiche(); d2.affiche(); juin 2007 ~ Brigitte Groléas~

this : référence un attribut Le mot clé : this Objet receveur et donnée membre léver l'ambiguité lors d'une variable locale du même nom this : référence un attribut this.jour this.affiche() juin 2007 ~ Brigitte Groléas~

Espace de nommage ~Polymorphisme des fonctions locales à des classes Fonctions membres : invocation à travers un objet Toute variable appartient à un objet (le jour de la Date d) -> 2 variables (ou méthodes) peuvent porter le même nom si elles n'appartiennent pas au même objet -> 2 méthodes peuvent porter le même nom dans la même classe si elles sont identifiables par leur paramètre Transmission par passage de messages Notion de contexte d'objet receveur juin 2007 ~ Brigitte Groléas~

Protection : spécificateurs de portée Définir l'accessibilité des données Encapsulation des données private aucun protected public Les accesseurs, pour accéder aux composantes cachées INCONVENIANTS : la lourdeur du code généré juin 2007 ~ Brigitte Groléas~

Interface fonctionnelle contre la lourdeur du code : développement en ligne public final void setJour(int jour) { this.jour = jour; } public final int getJour() { return jour; CONSTANTES variables final méthodes final classes final juin 2007 ~ Brigitte Groléas~

Complétez cet exemple à vous class Date { private ... jour, mois, année;   public void init( int jour, int mois, int année ) { ... } public void affiche() { System.out.println( ...+"/"+...+"/"+... ); public final int getJour() { ... } public final int getMois() { ... } public final int getAnnée() { ... } juin 2007 ~ Brigitte Groléas~

vrai ou faux ? à vous Une variable final n'est accessible que par les méthodes de la classe dans laquelle elle est déclarée Tous les attributs d'une classe peuvent être privés Toute classe doit comporter au moins 1 attribut Plusieurs classes peuvent avoir les mêmes méthodes (i.e. même nom, mêmes paramètres, même valeur de retour) juin 2007 ~ Brigitte Groléas~

Constructeurs Méthodes sans type de retour qui porte le même nom que la classe) Méthodes appelées lors de la construction de la classe L'opérateur new est appliqué sur un des constructeurs de la classe .Une nouvelle instance de la classe (objet) est allouée en mémoire et initialisée via le constructeur. Appel au constructeur Date d1 = new Date(); juin 2007 ~ Brigitte Groléas~

Valeurs par défaut et constructeurs class Date { private int jour = 1, mois = 1, année = 1900; public Date( int j, int m, int a ) { jour = j; mois = m; année = a; } public void affiche() { ... juin 2007 ~ Brigitte Groléas~

Constructeur par défaut Par défaut, toute classe possède un constructeur vide sans argument qui ne fait rien. Ce constructeur n’est implicitement défini par le langage que si aucun constructeur n’est défini explicitement par le programmeur. juin 2007 ~ Brigitte Groléas~

Surcharge des constructeurs Mécanisme très couramment utilisé: Plusieurs constructeurs peuvent coexister en ayant des paramètres différents Ce qui permet de construire des objets de façon très différentes paragraphe 'Constructor Summary' dans la documentation de sun juin 2007 ~ Brigitte Groléas~

Exemple class Date { private int jour, mois, année; public Date() { java.util.Date now = new java.util.Date(); jour = now.getDay(); mois = now.getMonth(); année = now.getYear(); } public Date( int j ) { java.util.Date now = new java.util.Date();   jour = j; public Date( int j, int m ) { java.util.Date now = new java.util.Date(); jour = j; mois = m; Exemple juin 2007 ~ Brigitte Groléas~

Invocation explicite d’un constructeur class Date { private int jour, mois, année; public Date() { java.util.Date now = new java.util.Date();   jour = now.getDay(); mois = now.getMonth(); année = now.getYear(); } public Date( int j ) { this(); jour = j; public Date( int j, int m ) { this(); jour = j; mois = m; .... this() permet d’invoquer un constructeur depuis un autre constructeur de la même classe juin 2007 ~ Brigitte Groléas~

Destructeur implicite: le garbage collector La destruction physique des objets est à la charge du système. Forcer la récupération d’un objet avant la sortie du scope : Il est possible d’anticiper l’action du garbage collector en supprimant explicitement la référence à un objet avant que la variable référence ne disparaisse d’elle même en sortant du bloc dans lequel elle est déclarée : void methode() { int tab[] = new int[10000]; // code utilsant tab tab = null; // on a plus besoin de tab //.code encore long } juin 2007 ~ Brigitte Groléas~

Destructeur explicite : finalize(). Mais si l’objet utilise d’autres types de ressources ( socket réseau, descripteur de fichier, ... ), le programmeur doit pouvoir les libérer lui-même . « finalize() » qui est appelée avant la libération de l’objet. Quelques détails sur le fonctionnement de « finalize() » : doit toujours invoquer la méthode « finalize() » de la super classe. est invoquée avant la disparition effective de l’objet. L’interprète Java peut s’arrêter sans avoir libéré tous les objets. Il n’y a pas certitude que la méthode « finalize() » soit appelée. ¨    juin 2007 ~ Brigitte Groléas~

finalize() Si la méthode « finalize() » génère une exception, elle est ignorée par le système. Aucune garantie sur le moment et l’ordre dans lequel les objets seront libérés .L’objet n’est pas détruit immédiatement après l’invocation de la méthode « finalize() » car celle-ci peut éventuellement ressusciter l’objet et rétablissant une référence dessus. L’objet ne sera récupéré qu’au prochain passage du garbage collector. juin 2007 ~ Brigitte Groléas~

Variable statiques : variables de classe Membre statique Une composante statique est une composante définie au niveau d’une classe et partagée par toutes les instances (objets) de cette classe. variables globales encapsulées dans une classe. Il n'est pas nécessaire d'instancier la classe pour accéder à un membre statique class Truc { static int var; } Variable statiques : variables de classe juin 2007 ~ Brigitte Groléas~

Accès aux membres statiques class Truc { public static int var = 0;   public int foo() { return var; } class Programme { public static void main( String args[] ) { Truc.var++; // var passe à 1 Les méthodes statiques ne peuvent pas accéder à this. L'acces se fait par le Nom de la classe il n'y a pas d'objet receveur juin 2007 ~ Brigitte Groléas~

Initialisation des variables statiques Les variables statiques non explicitement initialisées ont une valeur par défaut qui dépend de leur type (false, u0000, 0, ou null). on peut utiliser un bloc d’initialisation static qui sera exécuté une seule fois lors du chargement de la classe class Truc { static int var; // valeur par défaut 0 static int var2 = 12; // initialisation t static private int tab[] = new int[100]; static { // code d’initialisation for( int i = 0; i < tab.length; ++i ) tab[i] = i * 2; } juin 2007 ~ Brigitte Groléas~

Méthodes statiques : méthodes de classe correspondent à des globales définies au niveau de la classe. class Truc { public static void foo() { // code de foo } void bar(){ foo(); class Programme { public static void main( String args[] ) { Truc.foo(); // lance foo() juin 2007 ~ Brigitte Groléas~

Pas d'objet receveur Une méthode de classe ne peut pas accéder aux composantes d’instance car elle n’a pas de référence this sur l’objet courant. class Truc { static int var; int var2; void foo() {...} static void bar() {...} static void foobar() { var++; // OK var2++ // ERREUR !!!!! foo(); // ERREUR !!!!! bar(); // OK this // ERREUR !!!! } juin 2007 ~ Brigitte Groléas~

Import static de Tiger import static java.lang.Math.*; public class TestStaticImport { public static void main(String[] args) { System.out.println(PI); System.out.println(sin(0)); } juin 2007 ~ Brigitte Groléas~

Constantes nommées : final et statique Les variables déclarées avec le modificateur « static final » sont en fait des constantes. L’accès aux constantes nommées se fait de façon transparente Si une constante est publique, elle peut être accédée depuis l’extérieur de la classe par la syntaxe « NomDeClasse.constante » class Truc { static final int CONST = 15; static final int CONST2 = CONST >> 2; } juin 2007 ~ Brigitte Groléas~

Dans System.out.println("coucou"); À vous … Vrai ou Faux Dans System.out.println("coucou"); La classe System contient une méthode appelée out La classe System contient une méthode appelée println out est le nom d'une classe, définie par class out { …} out est le nom d'une instance de classe juin 2007 ~ Brigitte Groléas~

À vous … Vrai ou Faux Soit la classe Date définie comme suit : class Date { private int jour, mois, année; public void init( int j, int m, int a ) { … } public void affiche() { … } public int inferieurA(Date d1) { … } } juin 2007 ~ Brigitte Groléas~

À vous … Vrai ou Faux Identifier les écritures valides Date d1; Date d1 = new Date(); Date d1 = new Date("12/12/2000"); L'instance d1 de la classe Date étant créée, identifier les affirmations exactes d1.init( 1, 2, 2000); d1.affiche(); affiche(d1); i = d1.inferieurA(d2); i = inferieurA(d1, d2); juin 2007 ~ Brigitte Groléas~

String vs StringBuffer Une String est de taille fixe en mémoire, pour obtenir une chaîne susceptible de croître, utilisez un StringBuffer. StringBuffer st = new StringBuffer("coucou"); st.append("ca va"); System.out.println(st); --> « coucou ca va » juin 2007 ~ Brigitte Groléas~

L'opérateur instanceof Peut être utilisé pour déterminer la classe d'un objet dynamiquement. boolean test; String str = "toto"; test = (str instanceof String); juin 2007 ~ Brigitte Groléas~

Exemple récapitulatif public class Element { private String name; // nom de l’élément private int ident; // numéro d’identification géré automatiquement private static int nextIdent = 0; // valeur du prochain n° à attribuer public static final int FIRST_ID = 0;// constante Element( String s ) { // constructeur name = s; ident = nextIdent++; } public String getName() {...} // méthode d’instance public int getIdent() {...} // méthode d’instance public static int nbre_item() { // méthode de classe return nextIdent; juin 2007 ~ Brigitte Groléas~

À vous … Calculatrice en polonaise inverse La formule sera indiquée sous 3 2 + 5 * Les opérandes seront des nombres décimaux, écrits si nécessaire avec . les opérateurs appartiendront à l'ensemble {+, -, *, /} Les différents opérateurs et opérandes seront obligatoirement séparés par un espace ; aucun autre séparateur ne sera utilisé La formule devra tenir sur une seule ligne, la fin de la formule ne sera pas signalée par un caractère particulier (sauf le caractère de fin de ligne) juin 2007 ~ Brigitte Groléas~

À vous … Pile - int [ ] p - int sp La classe Pile est une structure de données LIFO ( Last In First Out ) Pile -  int   [   ]   p -  int   sp +  Pile ( int   taille ) +  Pile (   ) +  boolean  estVide (   ) +  boolean  estPleine (   ) +  void  empiler ( int   val ) +  int  depiler (   ) juin 2007 ~ Brigitte Groléas~