Télécharger la présentation
Publié parMathieu Desmarais Modifié depuis plus de 9 années
1
Classes abstraites, interface Classe interne Classes enveloppes
13 Conception par objets Classes abstraites, interface Classe interne Classes enveloppes Cours 13 Cours 13
2
Plan Classe abstraite Interface Classe interne Classes enveloppes
Classe Double Cours 13 Cours 13
3
Classe abstraite Dans une classe abstraite certaines méthodes sont seulement déclarées : leur corps n’est pas précisé. Ces méthodes là doivent alors être déclarées abstract et leur définition doit être effectuée dans les classes dérivées. Toute classe contenant des méthodes abstraites doit, elle aussi, être déclarée abstract. Une classe abstraite ne peut être instanciée. Cours 13 Cours 13
4
Objectifs Constituer un « réservoir d’héritage » : méthodes et variables communes. Imposer à l’utilisateur de définir le corps des méthodes abstraites (donc imposer un mode d’emploi). Conséquence : Instancier une classe abstraite n’a pas de sens, d’où l’interdiction. Cours 13 Cours 13
5
On impose à l’utilisateur de redéfinir afficher()
import java.awt.Color; Exemple abstract class Figures { int x, y; // Coin supérieur gauche du rectangle circonscrit int width, height; // Largeur, hauteur du rectangle circonscrit boolean visible; Color couleurTracé; Color couleurFond; static int nbDeFigures = 0; Figures(int x, int y, int largeur, int hauteur) { this.x = x; this.y = y; this.width = largeur; this.height = hauteur; couleurTracé = Color.black; couleurFond = Color.pink; visible = false; nbDeFigures++; } abstract void afficher(); } On impose à l’utilisateur de redéfinir afficher() Cours 13 Cours 13
6
Interface Sorte de classe qui ne contient que des méthodes abstraites et des variables static et final. Se déclare comme une classe en remplaçant le mot class par interface. Peut être incorporée dans une classe grâce au mot clé implements. La classe doit alors définir toutes les méthodes déclarées dans l'interface sinon, la classe est considérée comme abstraite. Toutes les méthodes redéfinies doivent être déclarées public explicitement car les méthodes d'une interface sont toujours publiques. final = constante Cours 13 Cours 13
7
Une classe peut implémenter plusieurs interfaces.
Une interface peut être étendue grâce à extends, on crée une nouvelle interface. On peut dire qu'une classe qui implémente une interface se comporte comme l'interface. Imposer l’implémentation d’une interface dans une classe, c’est définir « le mode d’emploi » de la classe. C'est contraindre son utilisateur à obéir à un certain protocole. Cours 13 Cours 13
8
class A implements Inter { int x ; A() {} A(int x) {this.x = x; }
interface Inter { static final double PI = 3.14; void lire(); void afficher(); } // class A implements Inter { int x ; A() {} A(int x) {this.x = x; } public void lire() { } // public obligatoire public void afficher( ) {System.out.println("Bonjour, x vaut "+x);} } Cours 13 Cours 13
9
Classe interne Une classe interne est définie à l'intérieur d'une autre classe. Un objet d'une classe interne peut accéder à l'implémentation de l'objet qui l'a créé y compris aux données privées. Les classes internes peuvent être cachées aux autres classes du même package. Les classes internes anonymes sont utiles pour définir des appels de méthodes pour la gestion d’événements à la volée. Les classes internes sont traduites par le compilateur en fichiers portant le nom de la classe mère suivi d'un $ et du nom de la classe interne. Exemple : MaFen$Ecouteur.class. Cours 13 Cours 13
10
Classes enveloppes Une variable d’un type primitif int, … n’est pas un objet. Les classes enveloppes sont destinées à encapsuler ces variables là dans des objets. C’est pourquoi, c’est là que l’on trouve les méthodes de conversion. Classes Byte, Short, Integer, Long, Float, Double, Boolean, Void, BigInteger, BigDecimal. Cours 13 Cours 13
11
La classe Double Double(double valeur) Double(String s) Constructeurs
Construit un objet de classe Double. Attention au grand « D » Cours 13 Cours 13
12
Comparaisons boolean isInfinite() static boolean isInfinite(double d)
int compareTo(Double unAutreDouble) Renvoie : 0 si égal, négatif si int < unAutreDouble, positif sinon boolean isInfinite() static boolean isInfinite(double d) boolean isNaN() static boolean isNaN(double d) NaN = not a Number Cours 13 Cours 13
13
Cast de de la valeur d’un objet de classe Double en …
Conversions : cast Cast de de la valeur d’un objet de classe Double en … byte byteValue() double doubleValue() float floatValue() int intValue() long longValue() short shortValue() static longBitsToDouble(long bits) (binaire) Cours 13 Cours 13
14
Conversion en String, Double ou double
String toString() static String toString(double d) Conversion en chaîne d’un objet Conversion en chaîne d’un nb static Double valueOf(String s) throws NumberFormatException Génère un objet Double ayant la valeur de la chaîne Diffuse éventuellement une exception vers le bloc appelant static double parseDouble(String s) parse = analyse Génère un nombre double Cours 13 Cours 13
15
Champs static final double
Constantes Champs static final double MAX_VALUE MIN_VALUE NEGATIVE_INFINITY POSITIVE_INFINITY NaN (Not a Number) Exemple : Double. MAX_VALUE Cours 13 Cours 13
16
Exemple : conversion d’une chaîne en type primitif double
double z1, z2; // Ici on ne gère pas l'exception, elle est éventuellement diffusée z1 = Double.parseDouble("12345"); // Là, on récupère l'exception try { z2 = Double.parseDouble("12A345"); } catch(NumberFormatException e) { System.out.println("La chaîne n'est pas un double"); Cours 13 Cours 13
17
Exemple : conversion d’une chaîne en objet Double
Double d1, d2; // Ici on ne gère pas l'exception, elle est éventuellement diffusée d1 = Double.valueOf("123.45"); // Là, on récupère l'exception try { d2 = Double.valueOf("12A345"); } catch(NumberFormatException e) { System.out.println("La chaîne n'est pas un double"); Cours 13 Cours 13
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.