Programmation Orientée Objet - Licence TIS CM2/9



Documents pareils
Cours 1: Java et les objets

Programmation Orientée Objet

Programmation par les Objets en Java

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Programmer en JAVA. par Tama

as Architecture des Systèmes d Information

Programmation en Java IUT GEII (MC-II1) 1

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

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

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

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

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

Java Licence Professionnelle CISII,

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

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

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

Package Java.util Classe générique

Java c est quoi? Java pourquoi?

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

Une introduction à Java

Premiers Pas en Programmation Objet : les Classes et les Objets

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

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

TP, première séquence d exercices.

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

Initiation à JAVA et à la programmation objet.

Exercices sur les interfaces

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Java Licence Professionnelle CISII,

PROGRAMMATION PAR OBJETS

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

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

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

TP1 : Initiation à Java et Eclipse

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

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

1 Définition d une classe en Java

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

TD/TP PAC - Programmation n 3

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

Chapitre VI- La validation de la composition.

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Utilisation d objets : String et ArrayList

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Auto-évaluation Programmation en Java

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

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

Java DataBaseConnectivity

Chapitre 10. Les interfaces Comparable et Comparator 1

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

INF 321 : mémento de la syntaxe de Java

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

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

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

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Programmation avec des objets : Cours 7. Menu du jour

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

Apprendre Java en 154 minutes

Threads. Threads. USTL routier 1

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

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

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

Langage Java. Classe de première SI

Programmation Objet Java Correction

Corrigés des premiers exercices sur les classes

Un ordonnanceur stupide

OpenPaaS Le réseau social d'entreprise

Synchro et Threads Java TM

TD/TP PAC - Programmation n 3

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

Support de cours et TD Programmation Orientée Objet

INITIATION AU LANGAGE JAVA

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

Classe Interne, Anonyme & Enumération

Corrigé des exercices sur les références

Présentation du langage et premières fonctions

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

Traduction des Langages : Le Compilateur Micro Java

2. Comprendre les définitions de classes

Programmation Par Objets

Chapitre 2. Classes et objets

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

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

Programmation Objet I

Java Licence professionnelle CISII,

Création d objet imbriqué sous PowerShell.

Étude de l interopérabilité de deux langages de programmation basée sur la machine virtuelle de Java

Projet de programmation (IK3) : TP n 1 Correction

Introduction au langage Java

Anne Tasso. Java. Le livre de. premier langage. 6 e édition. Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, ISBN :

Meta Object Facility. Plan

Remote Method Invocation (RMI)

Dis papa, c est quoi un bus logiciel réparti?

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

4. Groupement d objets

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Java - la plateforme

Introduction à JDBC. Accès aux bases de données en Java

Programmation par composants (1/3) Programmation par composants (2/3)

Transcription:

Programmation Orientée Objet - Licence TIS CM2/9 Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.fr Poitiers, le 13/01/2006 1 2 3 4 5

Rappel sur la séance précédente La fois précédente, nous avons vu : 1 une introduction générale à la POO 2 une présentation du langage Java 3 les notions de classe, d aggrégation et d encapsulation Aujourd hui, nous voyons en détail : la structure des classes les constructeurs et les destructeurs les différents aspects de l encapsulation Une classe minimale Une classe minimale Invocation d une méthode Mot-clé static Mot-clé final Classes enveloppantes de types primitifs Diagramme de la classe point en UML nom de la classe champs méthodes point x y get x() get y() set x() set y() Version Java minimale (point.java) 1 class point{ 2 int x,y; // abscisse et ordonnee entieres 3 4 // accesseurs: 5 int get x(){return x;} 6 int get y(){return y;} 7 8 // mutateurs: 9 void set x(int x){this.x=x;} // this pour lever l ambiguite sur x 10 void set y(int y){this.y=y;} // this pour lever l ambiguite sur y 11 }

Invocation d une méthode Une classe minimale Invocation d une méthode Mot-clé static Mot-clé final Classes enveloppantes de types primitifs Syntaxe Soit C une classe. Pour invoquer une méthode f de C sur une instance M, la syntaxe est : M.f (liste des arguments). Exemple sur une instance p de point 1 int a = p.get x(); // a est l abscisse de x 2 p.set y(12); // positionne l ordonnee de p a 12 3 System.out.println(a); // Affichage de a NB Typage statique des champs et des méthodes. Polymorphisme = choix retardé du corps de méthode. Mot-clé static Une classe minimale Invocation d une méthode Mot-clé static Mot-clé final Classes enveloppantes de types primitifs static : 1 champ : ne dépend pas d une instance de la classe (attaché à la classe elle-même) ; 2 méthode : ne fait appel qu à des champ statiques. 1 class votant{ 2 static int nombre votants; 3 static int getnombrevotants(){return nombre votants;} 4 boolean a vote = false; 5 void vote(){if(!a vote){nombre votants++;} a vote = true;} 6 } 7... 8 votant A; 9 votant B; 10 votant.getnombrevotants() // 0 11 A.vote(); 12 B.vote(); 13 votant.getnombrevotants() // 2

Mot-clé final Une classe minimale Invocation d une méthode Mot-clé static Mot-clé final Classes enveloppantes de types primitifs final : 1 champ : constant (tentative de modification erreur de compilation) 2 méthode : non redéfinissable dans une classe héritière 3 classe : qu elle ne pourra pas avoir d héritière 1 final int x = 1; // constante entiere 2 x = 2; // erreur a la compilation Une classe minimale Invocation d une méthode Mot-clé static Mot-clé final Classes enveloppantes de types primitifs Classes enveloppantes de types primitifs int Integer float Float... vue des types primitifs comme des objets constantes statiques associées e.g. : Float.NaN, Float.POSITIVE_INFINITY (IEEE754) Long.MAX_VALUE (le plus grand entier long) méthodes associées e.g. Integer.parseInt(s) qui renvoie un int issu de la String s

Questions? Une classe minimale Invocation d une méthode Mot-clé static Mot-clé final Classes enveloppantes de types primitifs Définition des constructeurs de la classe point de la classe point Utilisation des constructeurs de point dans Main.java Définition des constructeurs de la classe point Définition Un constructeur est une méthode qui porte le nom de la classe et n a pas de type de retour (même pas void!). Les constructeurs servent à fabriquer les instances de la classe. NB Contrainte technique due à l héritage (expliquée plus tard) : toutes les méthodes utilisées dans les constructeurs (typiquement accesseurs et mutateurs) doivent être final.

Définition des constructeurs de la classe point de la classe point Utilisation des constructeurs de point dans Main.java Définition des constructeurs de la classe point de point dans point.java 1 class point{ 2 int x,y; 3... 4 // constructeurs: 5 point(int x, int y){set x(x); set y(y);} 6 point(){this(0,0);} // this designe un autre constructeur 7 point(point p){this(p.get x(),p.get y())} // constructeur de copie 8...} Définition des constructeurs de la classe point de la classe point Utilisation des constructeurs de point dans Main.java Utilisation des constructeurs de point dans Main.java Le fichier point.java 1 class point{ 2 int x,y; 3... 4 // constructeurs 5 point(int x, int y){set x(x); set y(y);} 6 point(){this(0,0);} // this designe un autre constructeur 7 point(point p){this(p.get x(),p.get y());} // constructeur de copie 8...} Le fichier Main.java (dans le même répertoire que point.java) 1 class Main{ 2 public static void main(string[] args){ 3 point p = new point(3,4); // un nouveau point p, x=3, y=4 4 point O = new point(); // l origine (appel du constructeur precedent) 5 point q = new point(p); // une copie q de p 6 System.out.println(p.get x()); // Affichage de l abscisse de p 7 } 8 }

Questions? Définition des constructeurs de la classe point de la classe point Utilisation des constructeurs de point dans Main.java Principe de l encapsulation Principe de l encapsulation de point Modes d encapsulation en Java Utilisation des accesseurs et mutateurs Pas d accès direct à l état de l objet message. sûreté : modification = invocation explicite des mutateurs respecte la structure interne de l objet masquage de l implémenation

Exemple Principe de l encapsulation de point Modes d encapsulation en Java Utilisation des accesseurs et mutateurs voiture moteur M; vitesse V; +Démarrer(); +Accelérer(); moteur bougie[ ] b; radiateur r; Allumer_bougie(i); +Accelérer(); dans une voiture, il n y a pas d interrupteur pour allumer/éteindre à la demande chaque bougie (!) on modifie indirectement l état des bougies en passant des messages au moteur ( accélère à telle vitesse, etc) de point Principe de l encapsulation de point Modes d encapsulation en Java Utilisation des accesseurs et mutateurs Diagramme de la classe point en UML (version 2) nom de la classe champs méthodes Version Java (point.java) point - x - y + get x() + set x(). 1 class point{ 2 private int x,y; // abscisse et ordonnee entieres 3 4 public int get x(){return x;} 5 public void set x(int x){this.x=x;} 6... 7 public point(int x, int y){set x(x); set y(y);} 8 public point(){this(0,0);} 9...}

Modes d encapsulation Principe de l encapsulation de point Modes d encapsulation en Java Utilisation des accesseurs et mutateurs 1 private : depuis la classe uniquement champ : préférentiellement (encapsulation de l état de l objet) méthode : choix retenu pour les méthodes internes à l objet 2 package : depuis le package uniquement (défaut) champ : pratique et parfois raisonnable si le package est petit méthode : idem 3 protected : package + classes héritières champ : peut être plus efficace mais attention à l encapsulation méthode : minimal pour être accessibles par héritage 4 public : depuis partout champ : rare car les données ne sont plus encapsulées méthode : nécessaire pour interagir avec l objet classe : pour la rendre utilisable en dehors du paquetage Utilisation des accesseurs et mutateurs Principe de l encapsulation de point Modes d encapsulation en Java Utilisation des accesseurs et mutateurs Fichier point.java 1 class point{ 2 private int x,y; // abscisse et ordonnee entieres 3 4 public int get x(){return x;} 5 public void set x(int x){this.x=x;} 6...} Fichier Main.java 1 point p; 2... 3 int a,b; 4 a = p.x; // provoque une erreur a la compilation 5 a = p.get x(); // recuperation sans risque de l abscisse de p 6 p.set x(3); // modification explicite de l abscisse de p

Principe de l encapsulation de point Modes d encapsulation en Java Utilisation des accesseurs et mutateurs une fois définis les mutateurs/accesseurs, la structure interne des données peut être masquée. par exemple, pour représenter un complexe z = x + iy : 1 class complex{ 2 private double x,y; 3 4 public double get partie relle(){return x;} 5 public double get partie imaginaire(){return y;} 6 public double get module(){return Math.Sqrt(x x + y y);} 7 public double get argument(){return Math.Atan(y/x);} 8 } Principe de l encapsulation de point Modes d encapsulation en Java Utilisation des accesseurs et mutateurs précédemment représentation de z par re(z) et im(z) autre représentation par ρ = z et θ = arg(z) (z = ρe iθ ) : 1 class complex{ 2 private double rho,theta; 3 4 public double get partie relle(){return rho Math.Cos(theta);} 5 public double get partie imaginaire(){return rho Math.Sin(theta);} 6 public double get module(){return rho;} 7 public double get argument(){return theta;} 8 } dans les deux cas les accesseurs et mutateurs ont même signature (mais pas même implémentation)

Questions? Principe de l encapsulation de point Modes d encapsulation en Java Utilisation des accesseurs et mutateurs Conversion d un objet en String Conversion d un objet en String Note sur la sémantique de l égalité System.out.println(p) appelle automatiquement tostring() : Fichier point.java 1 class point{... 2 public String tostring(){return ("(" + x + "," + y + ")");} // concatenation avec + 3...} Fichier Main.java : conversion en String affichage 1 point p = new point (3,4); System.out.println(p); Affichage 1 (3,4)

Note sur la sémantique de l égalité Conversion d un objet en String Note sur la sémantique de l égalité Sémantique par valeurs pour les types primitifs 1 int x = 5; 2 int y = 5; 3 boolean b = (x == y); // true car x et y ont la m{\ˆe}me valeur Sémantique par référence pour les types non-primitifs 1 point p = new point(3,4); 2 point q = new point(3,4); 3 boolean b = (p == q); // false car p et q occupent un espace different en memoire ou encore : 1 Integer X = new Integer(5); 2 Integer Y = new Integer(5); 3 boolean b = (X == Y); // false car X et Y pour la meme raison Questions? Conversion d un objet en String Note sur la sémantique de l égalité

La conception dans un langage orienté objets implique de réfléchir à un niveau d abstraction élevé et d éviter les soucis de bas niveau tels que : processeur OS gestion mémoire... À la demande du programme, l allocateur trouve un bloc mémoire B, initialement atteignable : soit le programme a une référence directe sur B («racine») ; soit il existe un bloc atteignable contenant une référence B. Les blocs non-référencés sont inutiles : identification ; libération de la mémoire.

Gestion automatique de la mémoire principe connu depuis les années 60 (Lisp, Smalltalk, ML...) avantages : fiabilité accrue (plus de seg. fault, fuites de mémoire...) gain de temps de développement inconvénients : performances parfois diminuées (pauses) configuration du comportement du GC parfois complexe Quand un objet M devient inaccessible (sortie du scope...), Java : le détruit en appelant M.finalize() récupèrant la mémoire à nouveau libérée avec le GC Java a une stratégie d optimisation des finalisations et collections pour les objets inutilisés mais on peut la contourner : System.runFinalization() force les finalize() System.gc() force le GC à récupérer les cellules mémoire

Le destructeur finalize() Certaines classes peuvent avoir besoin de redéfinir finalize(), par exemple pour : effacer des fichiers temporaires libérer des ressources matérielles modifier le comportement du programme à la mort d un objetlorsqu un objet disparaît... Exemple d utilisation de finalize() Exemple : class point{... // compteur du nombre de points crees: private static nb points = 0;... // le constructeur incremente le compteur de points a chaque creation: point(int x,int y){ set x(x.get x()); set y(y.get y()); set nb points((get nb points()+1); } // ce destructeur decremente le compteur de points: protected void finalize() throws Throwable{ set nb points((get nb points() 1); super.finalize(); // Peut lever un Throwable } }

Exemple d utilisation de finalize() (suite) Source du main() } public static void main(string[] args){ point p1 = new point(); System.out.println("1? " + point.n); for(int i=0;i<10;i++){point p = new point();} // p n est plus dans le scope: System.out.println("1? " + point.n); } Sortie 1 1? 1 2 1? 11 Exemple d utilisation de finalize() (fin) Source du main() } public static void main(string[] args){ point p1 = new point(); System.out.println("1? " + point.n); for(int i=0;i<10;i++){point p = new point();} // p n est plus dans le scope: System.gc(); // On force l appel au GC System.out.println("1? " + point.n); } Sortie 1 1? 1 2 1? 1

Définition Lorsqu une classe C 1 possède un champ de type C 2 tel que la durée de vie des instances de C 2 est celle des instances de C 1, on dit que l aggrégation correspondante est une composition. Exemple : le moteur part à la casse avec la voiture voiture moteur M; vitesse V; Démarrer(); Accelérer(); moteur bougie[ ] b; radiateur r; Allumer_bougie(i); Accelérer(); Questions?

Conclusion Aujourd hui, nous avons vu : 1 2 3 4 5 La séance prochaine, nous verrons l héritage simple.