LIFI-Java 2004 Séance du Jeudi 16 sept. Cours 2. Programmation Objet Qu’est ce que c’est? –une “facilité” de programmation? –une nouvelle façon de penser?

Slides:



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

C++ 6ème cours Patrick Reuter maître de conférences
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Introduction à la programmation objet Langage Java
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.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
Leçon 3 : Héritage IUP 2 Génie Informatique
Introduction à la POO: Les classes vs les objets
Principes de programmation (suite)
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.
IFT1025, Programmation 2 Jian-Yun Nie
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
C++ : classes Introduction aux Langages Orientés Objets
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.
POO : Objets et classes (Rappels)
Langage Oriente Objet Cours 2.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Structures de données IFT-2000
Structures de données IFT-10541
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 objet Langage Java
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
Introduction au paradigme orienté-objet (suite)
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.
Design Pattern: Decorator
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.
Types de données abstrait et mécanismes d'encapsulation
Cours 4 Héritage (suite).
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é.
4 Introduction des objets. Les chaînes et tableaux
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
La notion de type revisitée en POO
Cours 61 6 La sécurité, Portée, Visibilité Programmer avec sécurité.
11/04/ L'héritage Cours 7 Cours 7.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
Tutorat en bio-informatique Le 14 novembre Au programme… Les objets –Propriétés (attributs) –Constructeurs –Méthodes.
C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE.
Réaliser par: Sadok Amel Cheboui hassiba
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.
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)
Les classes Introduction aux Langages Orientés Objets
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Chapitre VII Techniques plus avancées à travers le concept de classe.
Introduction à la programmation objet avec java
LIFI-Java 2004 Séance du Mercredi 29 sept. Cours 4.
Héritage Conception par Objet et programmation Java
IUT du limousin L.U.P Michel Vergnaud Programmation Objet - Java.
22 Concepts de base du langage Java. 2-2 Objectifs A la fin de ce cours, vous serez capables de : Identifier les éléments essentiels de Java Identifier.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Correction du TD Chapitre 2.
BlueJ_VII 1 Java, les objets : tout de suite ! Conception de classes (1) Notes de cours associées au chapitre 7 tutorial BlueJ
LES CLASSES ET LES OBJETS
Pas de variable globale
Les notions de classe et d'objet
Transcription de la présentation:

LIFI-Java 2004 Séance du Jeudi 16 sept. Cours 2

Programmation Objet Qu’est ce que c’est? –une “facilité” de programmation? –une nouvelle façon de penser? But du cours –Découvrir les concepts classes, instances interface vs. implémentation héritage, polymorphisme –Les appliquer en Java

Pourquoi des objets? (1/3) On peut tout faire avec des variables! Oui, mais...un exemple: –modéliser une course de voitures des variables pour décrire les voitures –vitesse v –position x des instructions pour faire évoluer ces variables –déplacer une voiture x=x+v –accélérer v=v+1 –afficher une voiture drawCarAt(x)

Pourquoi des objets? (2/3) Le code est “lourd”: –plusieurs voitures -> plusieurs variables voiture 1 v1,x1 voiture 2 v2,x2 etc... –les variables “internes” sont exposées exemple: -vitesse max vmax1 - puissance puis1 - accélérer v1 = max(v1+puis1,vmax1)

Pourquoi des objets? (3/3) Le code est difficile à réutiliser –notion d’API et de librairie un client veut une fonction il ne veut pas connaître les détails vous ne voulez pas non plus! –conflits de noms de variables pas de solution simple! –toutes les variables sont “globales” problème de contrôle d’accès et de cohérence

Le(s) problème(s) Comment “grouper” des données? –rattachées à un même “objet” Comment “cacher” des données/actions? –variables internes à un calcul –fonctions intermédiaires Comment contrôler l’accès/la modification –ex: interdire d’augmenter la puissance

Solution: les objets (1/2) Encapsule (variables+comportements) –classe et instances –membres public, private Abstrait les données –interface vs. implémentation Et plus encore! –héritage –polymorphisme prochain cours

Solution: les objets (2/2) Un exemple: Vehicule v = new Vehicule[2]; v[0] = new Car(); v[1] = new Moto(); while (true) { for (int i=0;i<v.size();++i) { if (joystick(i).button().isPressed()) { v[i].accelerate(); } v[i].advance(); v[i].draw(); }

Classe vs. Instance Classe = description d’un modèle –variables –fonctions Instance = un exemplaire du modèle 1 seule classe, plusieurs instances membres

Ex: définition d’une classe public class Point { public double x; public double y; Point(double ax,double ay) { x = ax; y = ay; } public String toString() { return "("+x"+","+y+")"; } CLASSE

Ex: création d’instances Point p = new Point(1,2); System.out.println(p.x); System.out.println(p.y); p.x = 3; System.println(p.toString()); Point q = new Point(0,0); double dx = q.x-p.x; double dy = q.y-p.y; double l = Math.sqrtf(dx*dx+dy*dy); INSTANCES

Classe Variables Méthodes Constructeurs... Destructeurs... public class Point { public double x; public double y; public String toString() { return "("+x"+","+y+")"; } Point(double ax,double ay) { x = ax; y = ay; } protected void finalize() { } CLASSE

Constructeurs (1/5) Rappel: toute variable doit être initialisée Question: comment initialiser les variables d’une instance? Réponse: le (ou les) constructeurs! public class Point { public double x; public double y; Point(double ax,double ay) { x = ax; y = ay; } Point p = new Point(1,2); CLASSE INSTANCES

Constructeurs (2/5) Plusieurs constructeurs sont possibles public class Point { //... Point(double ax,double ay) { x = ax; y = ay; } Point() { x = 0; y = 0; } Point p = new Point(1,2); ` Point q = new Point(); CLASSE INSTANCES

Constructeurs (3/5) Constructeurs par défaut public class Point { public double x; public double y; } Point p = new Point(); Point q = new Point(1,2); public class Point { public double x; public double y; Point(double ax,double ay) { x = ax; y = ay; } Point p = new Point(); Point q = new Point(1,2); CLASSE INSTANCES refusé à la compilation

Constructeurs (4/5) Le mot clé this pour: –lever les ambiguités –réutiliser un constructeur public class Point { //... Point(double x,double y) { x = x; y = y; } Point() { x = 0; y = 0; } ambiguité! redondance public class Point { //... void Point(double x,double y) { this.x = x; this.y = y; } void Point() { this(0,0); } CLASSE

Constructeurs (5/5) Constructeurs par copie public class Point { public double x; public double y; Point(double ax,double ay) { x = ax; y = ay; } Point(Point p) { this(p.x,p.y); } Point p = new Point(1,2); Point q = new Point(p); CLASSE INSTANCES

Destructeurs Lors de l’instanciation –la place nécessaire en mémoire est reservée –un compteur de référence est mis en place Quand une instance n’est plus référencée –elle est détruite (garbage collect) –la méthode finalize() est appellée Pas de gestion de la mémoire comme en C!

Instances Création par new Point() Destruction automatique –appel de finalize()... La subtilité des références... Le problème de l’accès... Information sur une classe... on vient de le voir

Instances (1/3) La subtilité des références Point p = new Point(1,2); Point q = p; q.x = 3; q.y = 4; System.out.println(p.toString()); Point p = new Point(1,2); Point q = new Point(p); q.x = 3; q.y = 4; System.out.println(p.toString()); affiche (3,4) !!!affiche (1,2) Importance du constructeur par copie! INSTANCES

Instances (2/3) Le problème de l’accès public class Point { public double x,y; public double r,th; Point(double ax,double ay) { x = ax; y = ay; r = Math.sqrtf(x*x+y*y); th = Math.atan(y/x); } Point p = new Point(3,4); p.x = 0;` System.out.println(p.r); CLASSE INSTANCES affiche 5: r n’a pas été remis à jour en fonction du nouveau x !!!

Instances (3/3) Information sur une classe –toute classe a une méthode getClass() –getClass() renvoie une instance de java.lang.Class des Class sont comparables entre eux par == Class a une méthode getName() qui renvoie un String Point p = new Point(1,2); Point q = new Point(3,4); String s = new String(“salut”); System.out.println(p.getClass() == q.getClass()); // affiche true System.out.println(p.getClass() == s.getClass()); // affiche false System.out.println(p.getClass().getName()); // affiche Point System.out.println(s.getClass().getName()); // affiche String System.out.println(s.getClass().getClass().getName()); // affiche java.lang.Class

Contrôle d’accès (1/4) Chaque variable/fonction/constructeur est: –public : peut être accédé de partout ou –private : peut être accédé de la classe ou –protected : on verra plus tard... public class Point { private double x,y; private double r,th; //... } Point p = new Point(3,4); p.x = 0;` CLASSE INSTANCES refusé à la compilation

Contrôle d’accès (2/4) Règles de “bon design” –les variables sont private –on fournit des accesseurs public class Point { //... public double getX() { return x; } public double getY() { return y; } public void setX(double x) { this.x = x; r = Math.sqrtf(x*x+y*y); th = Math.atan(y/x); } public void setY(double y) { this.y = y; r = Math.sqrtf(x*x+y*y); th = Math.atan(y/x); } CLASSE

Contrôle d’accès (3/4) Règles de “bon design” –les fonctions “intermédiaires” sont private public class Point { //... public double getX() { return x; } public double getY() { return y; } public void setX(double x) { this.x = x; update(); } public void setY(double y) { this.y = y; update(); } private void update() { r = Math.sqrtf(x*x+y*y); th = Math.atan(y/x); } CLASSE public class Point { //... public double getX() { return x; } public double getY() { return y; } public void setX(double x) { this.x = x; r = Math.sqrtf(x*x+y*y); th = Math.atan(y/x); } public void setY(double y) { this.y = y; r = Math.sqrtf(x*x+y*y); th = Math.atan(y/x); } CLASSE redondance

Contrôle d’accès (4/4) Remarques diverses –Si le contrôle d’accès n’est pas précisé: par défaut, il est private Il vaut mieux le préciser –Le destructeur finalize() doit être protected

Un exemple: StringBuffer La classe String n’est pas modifiable –partage automatique d’instance par Java –subtilité avec les tests == La classe StringBuffer est modifiable! –append() –subtilité avec les tests : equals()

Conclusion Pas de fonctions, que des objets! –ex: la fonction main(String args[]) ! Difficulté de bien “penser objet” –comment encapsuler? –quels sont les objets de base à définir? –quelles fonctions ces objets doivent proposer?

Exercice Définir la classe Vehicle du début –fichier Vehicle.java : définir la classe Vehicle –fichier Course.java : définir une classe Course avec une méthode main(String args[]) –qui instancie 3 voitures avec des vitesses différentes –les fait avancer aléatoirement –arrête quand l’une a parcouru 10km –tester le tout

Peut-on aller plus loin? Définir des “sous-classes” de Vehicle : –voitures, camions, motos,... Comment manipuler un ensemble d’instances hétérogène de Vehicle Prochain cours! –Héritage –Polymorphisme –Interface vs. implémentation