Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen cohen@inria.sophia.fr Igor Litovsky lito@polytech.unice.fr Christophe Papazian papazian@polytech.unice.fr Anne-Marie Pinna Dery pinna@polytech.unice.fr http://courswiki.polytech.unice.fr/SI3/IPA
Instances et une classe Circle circle1=new Circle(50,80,30); Allocation mémoire pour toutes les variables d’instances et affectation des valeurs
Constructeurs Surcharge des Constructeurs : signatures différentes On peut aussi surcharger des méthodes Les constructeurs par défaut sont conseillés Appel des constructeurs en cascade public Circle() { this(0,0 ,”red”,12); } public Circle(int x,int y) this(x,y,”red”,12); public Circle(int x,int y,String c,int diameter) xPosition = x; yPosition = y; this.diameter=diameter; color=c; isVisible=true; 3
Usage du mot-clé this dans une classe this désigne l’instance sur laquelle s’exécute le code public Circle(int x,int y,String c,int diameter) { xPosition = x; yPosition = y; this.diameter=diameter; color=c; isVisible=true; } xPosition raccourci d’écriture de this.xPosition getXposition() raccourci d’écriture de this.getXPosition() this pour appeler un autre constructeur : appels en cascade public Circle() this(0,0 ,”red”,12); 4
2 types de méthode Méthodes qui sont des fonctions : Déclaration : public int getXPosition() {…} Appel : Point p = new Point(); int x = p.getXPosition(); int x = p.getXPosition() + distance; System.out.println(p.getXPosition()); p.getXPosition(); ERREUR getXPosition(p); ERREUR
2 types de méthode Méthodes qui sont des procédures Déclaration : public void showCoord() {….} public void setX(int x) {…..} Appel : p.showCoord(); p.setX(12); int x = p.setX(12); ERREUR System.out.println(p.setX(12)); ERREUR 6
Attributs (fields), variables d’instances paramètres – variables locales Déclaration : private int abscisse; private int abscisse = 10; abscisse est de type entier Utilisation dans toute la classe this.abscisse; ou abscisse; Affectation des valeurs initiales dans le constructeur : this.abscisse = 10; this.abscisse = abscisse;
Attributs (fields), variables d’instances – paramètres – variables locales Déclaration : public void setX(int p) {…….} p est le paramètre formel de setX p est de type entier et est visible dans le corps de la méthode Utilisation : abscisse=p; p=12: INUTILE ECRASE Appel : Point pt = new Point(12,34); pt.setX(25); 25 est le paramètre effectif pt.setX(25.5); ERREUR
Attributs (fields), variables d’instances – paramètres – variables locales Déclaration : int y; int y = 0; Utilisation : y = 0; y++; ++y; y=y*10; y=12,5 ERREUR y = x; si x n’est pas int ERREUR y est visible dans le bloc (bloc {…}) dans lequel il est défini (déclaré)
Types int x = 0; entier double y = 12,5; réel float z = 12,5; réel ... String s = “Coucou”; String s= new String(“Coucou”); Classe prédéfinie chaîne de caractères boolean b = true; true et false On peut affecter un entier dans un double, un float dans un double pas le contraire. x=y; y=x; z=x; x=z; z=y; y=z; ?????? Si nécessaire on peut faire des cast explicites y=(double)x; x=(int) y; ????? Toutes les classes API Java : java.lang java.util Il existe les classes Integer, Boolean, Double, Float
Opérateurs et Comparateurs Un opérateur particulier : . Opérateurs sur les entiers, double, float : +, -, *, Opérateurs sur les String : + Opérateurs logiques : &, &&, !, |, || Attention au = instruction d’affectation Comparateurs : ==, >=, <=, >, < Pour les chaines de caractères : .equals() 11
API Java : à quoi ça vous sert ? http://java.sun.com/javase/7/docs/api/index.html: Javadoc de l'API. Rechercher des informations et Comprendre un code existant
API Java : Rechercher des informations sur les types de données que l’on manipule ou que l’on souhaite manipuler ? ArrayList : Peut on ajouter un élément à une position donnée ? Peut on enlever à une position donnée ? Qu’existe-t-il comme autre type de données du même style ? Comment construit on une ArrayList ? Avec un tableau est ce possible ?
API Java : Comprendre un code existant String input = reader.getInput(); if(input.startsWith("bye")) { finished = true; } Que fait startsWith("bye") ? Comment peut on trouver l’information ? Que fait getInput()?
Comment chercher dans l’API ? Organisation par packages Quels sont les packages que vous connaissez ? java.util java.lang Où pouvez vous trouver la classe String ? La classe ArrayList ? Quels sont les packages qui pourront vous servir ?
particularité de toString public String toString() { return " x : " + xPosition + " y: " + yPosition + " diamètre: " + diameter + " couleur: " + color; } …. Fonction ou procédure ? System.out.println(circle1); System.out.println(circle1.toString()); Comportement par défaut – Héritage de Object Toutes les classes héritent de Object 16
Erreurs à la compilation et à l’exécution Vérification de la syntaxe Vérification du typage Exécution : probléme d’algorithme des objets null des dépassements de bornes 17
Utilisation d’une classe par une autre Exemple : la classe de test utilise la classe testée De la classe Cercle utilise la classe Point javac ClasseAtester.java -> erreurs ou création du fichier ClasseAtester.class javac TestDEClasseAtester.java -> erreurs ou création du fichier TestDeClasseAtester.class java TestDeClasseAtester -> erreurs et/ou exécution du code ATTENTION A L’ORDRE DE COMPILATION Et à la visibilité